# 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 ::= '' content '' protocol_name ::= [a-zA-Z][a-zA-Z0-9_-]* content ::= (markdown_content | location_element | params_element)+ location_element ::= '' markdown_content '' params_element ::= '' markdown_content '' 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¶m2=value2 ``` 例如: - `@file://document.md?line=5-10` - 只获取文件的第5-10行 - `@http://api.example.com/data?format=json&cache=false` - 指定返回格式并禁用缓存 ### 解析规则 1. 资源引用解析从左至右进行,先识别协议名称,再解析资源位置和查询参数 2. 嵌套引用从内向外解析,内层资源引用的结果作为外层引用的输入 3. 查询参数应用于资源加载后的处理阶段,不影响资源的基本定位 4. 相对路径解析基于当前上下文的工作目录或基础路径