Files
PromptX/protocol/base/resource.protocol.md

125 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DPML资源模式提示词框架
> **TL;DR:** DPML资源模式提示词框架定义了统一的资源引用提示词模板支持通过`@协议名://路径`形式在提示词中访问和操作各类资源。
### 目的与功能
DPML资源模式提示词框架用于定义特定类型的资源访问提示词使开发者能够以标准化的方式在提示词中描述如何引用和处理各种资源。通过这个框架可以明确资源提示词的引用语法、路径规则和查询参数确保资源引用在不同环境中的一致性和可靠性。此框架是PromptX中资源引用协议RP在提示词层面的具体实现方式。
主要功能包括:
- 定义资源提示词的标识和引用方式
- 规范化资源路径的提示词语法结构和解析规则
- 指定资源提示词支持的查询参数和格式
- 提供资源类提示词的标准化示例
### 默认支持的通用协议
PromptX默认支持以下通用且已有共识的协议这些协议符合`@协议名://路径`格式遵循其业界标准语法和规则无需在resource标签中重新定义
| 协议名 | 描述 | 示例 |
|-------|------|------|
| file | 文件系统资源 | `@file://path/to/file.txt` |
| http/https | HTTP/HTTPS网络资源 | `@https://example.com/api/data` |
| ftp/sftp | 文件传输协议 | `@ftp://user:pass@host/path` |
| ssh | 安全Shell协议 | `@ssh://user@host/path` |
这些通用协议的路径格式和查询参数遵循它们的标准规范。对于特定领域或自定义的协议才需要使用resource标签进行详细定义。
## 📝 语法定义
```ebnf
(* EBNF形式化定义 *)
resource_element ::= '<resource' ' protocol="' protocol_name '"' '>' content '</resource>'
protocol_name ::= [a-zA-Z][a-zA-Z0-9_-]*
content ::= (markdown_content | location_element | params_element)+
location_element ::= '<location>' markdown_content '</location>'
params_element ::= '<params>' markdown_content '</params>'
markdown_content ::= (* 任何有效的Markdown文本包括代码块、表格等 *)
```
## 🧩 语义说明
### 子标签语义
resource标签包含两个核心子标签用于定义资源协议的具体内容
- **location**定义该资源协议的路径规则。通常采用EBNF形式化语法描述路径结构并可包含示例说明。
- **params**:定义该资源协议支持的查询参数。通常采用表格形式列出参数名称、类型、描述和用法示例。
location和params子标签共同构成资源协议的完整定义前者规定了资源的定位方式后者规定了资源的访问选项。这两部分内容决定了如何解析和处理资源引用。
### `@` 引用协议
resource标签定义了一个资源协议指定了如何使用`@`符号作为统一入口,遵循以下核心语法规则:
```ebnf
resource_reference ::= '@' protocol_name ':' resource_location [query_params]
resource_location ::= uri | nested_reference
uri ::= protocol_name '://' path
nested_reference ::= ['@'] protocol_name ':' resource_location
path ::= path_segment {'/' path_segment}
query_params ::= '?' param_name '=' param_value {'&' param_name '=' param_value}
```
#### 基础资源引用
基础资源引用使用单一协议:
```
@protocol://path
```
例如:
- `@file://document.md` - 引用文件系统中的文档
- `@http://example.com/api/data.json` - 引用网络资源
- `@memory://user_preferences` - 引用内存中的数据
#### 嵌套资源引用
嵌套资源引用允许一个协议处理另一个协议的输出:
**完整形式**(内部使用@符号
```
@outer:@inner://path
```
**简写形式**(内部省略@符号
```
@outer:inner://path
```
例如:
- `@thinking:@file://method.md` - 对文件内容应用thinking协议处理
- `@execution:file://workflow.md` - 对文件内容应用execution协议处理
- `@outer:middle:inner://resource` - 多层嵌套(从内向外处理)
#### 路径通配符
路径支持以下通配符模式:
- `*` - 匹配单层中的任意文件或目录,如`@file://docs/*.md`
- `**` - 匹配多层目录和文件,如`@file://src/**/*.js`
- `*.ext` - 匹配特定扩展名的文件,如`@file://docs/*.txt`
- `*.{ext1,ext2}` - 匹配多种扩展名,如`@file://src/*.{js,ts}`
#### 查询参数
查询参数提供额外的资源处理指令:
```
@protocol://path?param1=value1&param2=value2
```
例如:
- `@file://document.md?line=5-10` - 只获取文件的第5-10行
- `@http://api.example.com/data?format=json&cache=false` - 指定返回格式并禁用缓存
### 解析规则
1. 资源引用解析从左至右进行,先识别协议名称,再解析资源位置和查询参数
2. 嵌套引用从内向外解析,内层资源引用的结果作为外层引用的输入
3. 查询参数应用于资源加载后的处理阶段,不影响资源的基本定位
4. 相对路径解析基于当前上下文的工作目录或基础路径