Files
PromptX/docs/resource-referrence-architech.md
2025-06-12 14:18:19 +08:00

475 lines
12 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.

# PromptX 统一资源协议架构设计文档
## 目录
- [1. 概述](#1-概述)
- [2. 核心设计理念](#2-核心设计理念)
- [3. DPML协议体系设计](#3-dpml协议体系设计)
- [4. 多层级资源发现架构](#4-多层级资源发现架构)
- [5. 统一注册表设计](#5-统一注册表设计)
- [6. 协议解析执行流程](#6-协议解析执行流程)
- [7. 资源生命周期管理](#7-资源生命周期管理)
- [8. 扩展性设计](#8-扩展性设计)
- [9. 错误处理与容错机制](#9-错误处理与容错机制)
- [10. 性能优化策略](#10-性能优化策略)
## 1. 概述
PromptX采用统一资源协议架构支持多层级资源发现与动态注册机制。该架构通过DPMLDomain-Specific Prompt Markup Language协议实现资源的统一标识、发现、注册和解析。
## 2. 核心设计理念
### 2.1 分层架构原则
- **协议层**: 统一的@协议标识体系
- **发现层**: 多源资源发现机制
- **注册层**: 统一的资源注册表
- **解析层**: 协议到文件系统的映射
### 2.2 职责分离原则
- **Registry**: 专注资源映射存储和查询
- **Discovery**: 专注特定来源的资源发现
- **Protocol**: 专注协议解析和路径转换
- **Manager**: 专注流程编排和生命周期管理
## 3. DPML协议体系设计
### 3.1 协议语法结构
```mermaid
graph LR
A["@[semantic][protocol]://[resource_path]"] --> B[加载语义]
A --> C[协议类型]
A --> D[资源路径]
B --> B1["@ - 默认加载"]
B --> B2["@! - 热加载"]
B --> B3["@? - 懒加载"]
C --> C1["package - NPM包资源"]
C --> C2["project - 项目本地资源"]
C --> C3["user - 用户全局资源"]
C --> C4["internet - 网络资源"]
C --> C5["file - 文件系统"]
C --> C6["thought - 思维模式"]
C --> C7["execution - 执行模式"]
C --> C8["role - AI角色"]
C --> C9["knowledge - 知识库"]
```
### 3.2 协议层级设计
```mermaid
classDiagram
class ProtocolSystem {
<<interface>>
+parseReference(ref: string)
+resolve(ref: string)
}
class BasicProtocol {
+package
+project
+user
+internet
+file
}
class LogicalProtocol {
+thought
+execution
+role
+knowledge
+memory
}
ProtocolSystem <|-- BasicProtocol
ProtocolSystem <|-- LogicalProtocol
BasicProtocol : +直接文件映射
BasicProtocol : +路径解析
LogicalProtocol : +注册表查询
LogicalProtocol : +逻辑资源映射
```
## 4. 多层级资源发现架构
### 4.1 发现层级结构
```mermaid
graph TD
A[资源发现生态系统] --> B[包级发现 PackageDiscovery]
A --> C[项目级发现 ProjectDiscovery]
A --> D[用户级发现 UserDiscovery]
A --> E[网络级发现 InternetDiscovery]
B --> B1[NPM包内置资源]
B --> B2[src/resource.registry.json]
B --> B3[prompt/ 目录结构]
C --> C1[项目本地资源]
C --> C2[.promptx/resource/]
C --> C3[动态角色发现]
D --> D1[用户全局资源]
D --> D2[~/promptx/resource/]
D --> D3[用户自定义角色]
E --> E1[远程资源库]
E --> E2[Git仓库资源]
E --> E3[在线角色市场]
```
### 4.2 发现优先级机制
```mermaid
sequenceDiagram
participant RM as ResourceManager
participant PD as PackageDiscovery
participant PRD as ProjectDiscovery
participant UD as UserDiscovery
participant ID as InternetDiscovery
participant RR as ResourceRegistry
RM->>+PD: discover() [优先级: 1]
PD->>-RM: 系统内置资源列表
RM->>+PRD: discover() [优先级: 2]
PRD->>-RM: 项目本地资源列表
RM->>+UD: discover() [优先级: 3]
UD->>-RM: 用户全局资源列表
RM->>+ID: discover() [优先级: 4]
ID->>-RM: 网络资源列表
Note over RM: 按优先级合并,后发现的覆盖先发现的
RM->>RR: 批量注册所有发现的资源
```
## 5. 统一注册表设计
### 5.1 注册表核心结构
```mermaid
classDiagram
class ResourceRegistry {
-Map~string,string~ index
-Map~string,ResourceMeta~ metadata
+register(id: string, reference: string)
+resolve(id: string): string
+merge(other: ResourceRegistry)
+has(id: string): boolean
+list(protocol?: string): string[]
}
class ResourceMeta {
+source: DiscoverySource
+priority: number
+timestamp: Date
+metadata: object
}
class DiscoverySource {
<<enumeration>>
PACKAGE
PROJECT
USER
INTERNET
}
ResourceRegistry --> ResourceMeta
ResourceMeta --> DiscoverySource
```
### 5.2 注册表合并策略
```mermaid
flowchart TD
A[多源资源发现] --> B{资源ID冲突检测}
B -->|无冲突| C[直接注册]
B -->|有冲突| D[优先级比较]
D --> E{优先级策略}
E -->|用户 > 项目 > 包 > 网络| F[高优先级覆盖]
E -->|同优先级| G[时间戳比较]
F --> H[更新注册表]
G --> H
C --> H
H --> I[生成统一资源索引]
```
## 6. 协议解析执行流程
### 6.1 完整解析序列
```mermaid
sequenceDiagram
participant U as User
participant RM as ResourceManager
participant RR as ResourceRegistry
participant PR as ProtocolResolver
participant PP as PackageProtocol
participant PRP as ProjectProtocol
participant FS as FileSystem
U->>RM: loadResource("role:xiaohongshu-copywriter")
Note over RM: 1. 资源ID解析阶段
RM->>RR: resolve("role:xiaohongshu-copywriter")
RR->>RM: "@project://.promptx/resource/domain/xiaohongshu-copywriter/xiaohongshu-copywriter.role.md"
Note over RM: 2. 协议解析阶段
RM->>PR: parseReference("@project://...")
PR->>RM: {semantic: "@", protocol: "project", path: "..."}
Note over RM: 3. 路径解析阶段
RM->>PRP: resolve(".promptx/resource/domain/...")
PRP->>FS: 定位项目根目录
FS->>PRP: "/user/project/"
PRP->>RM: "/user/project/.promptx/resource/domain/xiaohongshu-copywriter/xiaohongshu-copywriter.role.md"
Note over RM: 4. 文件加载阶段
RM->>FS: readFile(absolutePath)
FS->>RM: 文件内容
RM->>U: {success: true, content: "...", path: "..."}
```
### 6.2 嵌套引用解析
```mermaid
sequenceDiagram
participant SR as SemanticRenderer
participant RM as ResourceManager
participant RR as ResourceRegistry
Note over SR: 发现嵌套引用 @!thought://remember
SR->>RM: resolve("@!thought://remember")
Note over RM: 1. 解析加载语义 @!
RM->>RM: 识别热加载模式
Note over RM: 2. 解析逻辑协议 thought
RM->>RR: resolve("thought:remember")
RR->>RM: "@package://prompt/core/thought/remember.thought.md"
Note over RM: 3. 解析基础协议 @package
RM->>RM: 委托给PackageProtocol
Note over RM: 4. 返回解析结果
RM->>SR: 思维模式内容
Note over SR: 5. 渲染到最终输出
```
## 7. 资源生命周期管理
### 7.1 初始化流程
```mermaid
stateDiagram-v2
[*] --> Uninitialized
Uninitialized --> Discovering: initialize()
Discovering --> PackageDiscovery: 发现包资源
PackageDiscovery --> ProjectDiscovery: 发现项目资源
ProjectDiscovery --> UserDiscovery: 发现用户资源
UserDiscovery --> InternetDiscovery: 发现网络资源
InternetDiscovery --> Registering: 开始注册
Registering --> Merging: 合并资源
Merging --> Indexing: 建立索引
Indexing --> Ready: 完成初始化
Ready --> Resolving: resolve()
Resolving --> Ready: 返回结果
Ready --> Refreshing: refresh()
Refreshing --> Discovering: 重新发现
Ready --> [*]: destroy()
```
### 7.2 缓存与更新策略
```mermaid
flowchart TD
A[资源访问请求] --> B{缓存检查}
B -->|命中| C[检查加载语义]
B -->|未命中| D[触发发现流程]
C --> E{加载语义判断}
E -->|at 默认| F[返回缓存内容]
E -->|a! 热加载| G[强制重新加载]
E -->|a? 懒加载| H[延迟加载策略]
D --> I[执行Discovery]
G --> I
H --> I
I --> J[更新注册表]
J --> K[更新缓存]
K --> L[返回最新内容]
F --> M[返回给用户]
L --> M
```
## 8. 扩展性设计
### 8.1 新协议扩展机制
```mermaid
classDiagram
class ProtocolExtension {
<<interface>>
+name: string
+resolve(path: string): string
+validate(path: string): boolean
}
class DatabaseProtocol {
+name: "database"
+resolve(path): string
+validate(path): boolean
}
class GitProtocol {
+name: "git"
+resolve(path): string
+validate(path): boolean
}
class S3Protocol {
+name: "s3"
+resolve(path): string
+validate(path): boolean
}
ProtocolExtension <|-- DatabaseProtocol
ProtocolExtension <|-- GitProtocol
ProtocolExtension <|-- S3Protocol
```
### 8.2 新发现源扩展
```mermaid
classDiagram
class DiscoveryExtension {
<<interface>>
+source: DiscoverySource
+priority: number
+discover(): Promise~Resource[]~
}
class GitDiscovery {
+source: GIT
+priority: 5
+discover(): Promise~Resource[]~
}
class DatabaseDiscovery {
+source: DATABASE
+priority: 6
+discover(): Promise~Resource[]~
}
class MarketplaceDiscovery {
+source: MARKETPLACE
+priority: 7
+discover(): Promise~Resource[]~
}
DiscoveryExtension <|-- GitDiscovery
DiscoveryExtension <|-- DatabaseDiscovery
DiscoveryExtension <|-- MarketplaceDiscovery
```
## 9. 错误处理与容错机制
### 9.1 分层错误处理
```mermaid
flowchart TD
A[用户请求] --> B[ResourceManager]
B --> C{Discovery阶段}
C -->|发现失败| D[降级到缓存]
C -->|部分失败| E[记录错误,继续处理]
C -->|完全失败| F[返回空注册表]
B --> G{Registry阶段}
G -->|注册失败| H[跳过失败项]
G -->|冲突解决失败| I[使用默认策略]
B --> J{Protocol阶段}
J -->|协议不支持| K[尝试文件协议]
J -->|路径解析失败| L[返回详细错误]
B --> M{FileSystem阶段}
M -->|文件不存在| N[返回空内容标记]
M -->|权限错误| O[尝试替代路径]
D --> P[用户获得部分功能]
E --> P
H --> P
I --> P
K --> P
F --> Q[用户获得错误信息]
L --> Q
N --> Q
O --> Q
```
## 10. 性能优化策略
### 10.1 并行发现优化
| 模式 | PackageDiscovery | ProjectDiscovery | UserDiscovery | InternetDiscovery | 合并注册 |
|------|-----------------|------------------|---------------|-------------------|---------|
| 串行模式 | 0-200ms | 200-400ms | 400-600ms | 600-1000ms | - |
| 并行模式 | 0-200ms | 0-250ms | 0-180ms | 0-800ms | 800-850ms |
### 10.2 缓存分层策略
```mermaid
graph TD
A[L1: 内存缓存] --> B[L2: 文件缓存]
B --> C[L3: 远程缓存]
A --> A1[热点资源]
A --> A2[最近访问]
B --> B1[用户资源]
B --> B2[项目资源]
C --> C1[网络资源]
C --> C2[共享资源]
D[缓存失效策略] --> D1[TTL过期]
D --> D2[版本变更]
D --> D3[手动刷新]
```
## 总结
这个架构设计确保了PromptX资源系统的高度可扩展性、跨平台兼容性和优秀的性能表现同时保持了清晰的职责分离和统一的访问接口。
### 核心优势
1. **统一协议体系**: 通过DPML协议实现资源的标准化访问
2. **多层级发现**: 支持包、项目、用户、网络多个层级的资源发现
3. **智能注册表**: 自动处理资源冲突和优先级管理
4. **高性能设计**: 并行发现和多层缓存策略
5. **强容错性**: 完善的错误处理和降级机制
6. **易扩展性**: 支持新协议和新发现源的动态扩展