上下文类型
基于对人类认知模式的简化映射与工程化思考,OpenViking 将上下文抽象为 资源、记忆、能力三种基本类型,每种类型在 Agent 中有不同的用途。
概览
| 类型 | 用途 | 生命周期 | 主动性 |
|---|---|---|---|
| Resource | 知识和规则 | 长期,相对静态 | 用户添加 |
| Memory | Agent 的认知 | 长期,动态更新 | Agent 记录 |
| Skill | 可声明的 agent 能动性配置(AgentDefinedContextType) | 长期,静态 | 用户或系统添加 |
Resource(资源)
资源是 Agent 可以引用的外部知识。
特点
- 用户主动:由用户主动添加的资源类信息,用于补充大模型的知识,比如产品手册、代码仓库
- 静态内容:添加后内容很少发生变化,通常为用户主动修改
- 结构化存储:将按照项目或主题以目录层级组织,并提取出多层信息。
示例
- API 文档、产品手册
- FAQ 数据库、代码仓库
- 研究论文、技术规范
使用
python
# 添加资源
client.add_resource(
"https://docs.example.com/api.pdf",
reason="API 文档"
)
# 搜索资源
results = client.find(
"认证方法",
target_uri="viking://resources/"
)Memory(记忆)
记忆是 Agent 从交互和任务执行中学到的持久化知识。记忆存储在当前用户或 Peer 命名空间,不使用独立的 viking://agent/memories 目录。
特点
- **Agent 主动:**由 Agent 主动提取和记录的记忆信息
- **动态更新:**由 Agent 从交互中持续更新
- **个性化:**针对特定用户和稳定 peer 学习记录
内置记忆类型
| 类型 | 默认位置 | 说明 |
|---|---|---|
| profile | user/memories/profile.md | 用户基本信息 |
| preferences | user/memories/preferences/ | 按主题组织的用户偏好 |
| entities | user/memories/entities/ | 人物、项目、组织等实体知识 |
| events | user/memories/events/ | 决策、里程碑等事件记录 |
| identity | user/memories/identity.md | 助手的名称、形象、气质和自我介绍 |
| soul | user/memories/soul.md | 助手的核心原则、边界、风格和连续性 |
| cases | user/memories/cases/ | 用于训练和评估的任务案例 |
| trajectories | user/memories/trajectories/ | 可复用的任务执行轨迹 |
| experiences | user/memories/experiences/ | 从执行结果中提炼的可复用经验 |
| tools | user/memories/tools/ | 工具使用经验与最佳实践 |
| skills | user/memories/skills/ | 技能执行经验与工作流策略 |
表中的 user/... 是当前用户短路径,服务端会将其解析为 viking://user/{user_id}/...。当记忆策略允许 Peer 记忆时,支持 Peer 的类型会写入 viking://user/{user_id}/peers/{peer_id}/memories/...。记忆类型可通过自定义模板扩展或调整。
使用
python
# 记忆从会话中自动提取
session = client.session()
await session.add_message("user", [{"type": "text", "text": "我喜欢深色模式"}])
commit = await session.commit() # 启动后台记忆提取
task = await client.get_task(commit["task_id"]) # 轮询直到 task["status"] == "completed"
# 搜索记忆
results = await client.find(
"用户界面偏好",
target_uri="viking://user/memories/"
)Skill(技能 / AgentDefinedContextType)
技能(Skill)是 Agent 可以调用的能力,属于 AgentDefinedContextType 范畴。包括传统工作流定义、通信端点、工具配置和支付能力等。它们的共同特征是:定义了 agent 如何与外部系统交互,运行时定义相对静态,但调用经验会在 Memory 中更新。
特点
- **定义的能力:**用于完成某项工作的工具定义
- **相对静态:**运行时技能定义不变,但和工具相关的使用记忆会在记忆中更新
- **可调用:**Agent 决定何时使用哪种技能
存储位置
viking://user/skills/{skill-name}/ # 默认存储路径
├── .abstract.md # L0: 简短描述
├── SKILL.md # L1: 详细概览
└── scripts # L2: 完整定义
viking://agent/skills/{skill-name}/ # 通过 --uri 覆盖,公开共享(account 全局)
├── .abstract.md # L0: 简短描述
├── SKILL.md # L1: 详细概览
└── scripts # L2: 完整定义AgentDefinedContextType 子类型
AgentDefinedContextType 包含以下子类型,均存储于 viking://agent/ 作用域:
| 子类型 | 位置 | 说明 |
|---|---|---|
| Skill | agent/skills/ | 传统工作流定义,如搜索、代码生成 |
| Endpoint | agent/endpoints/ | 通信端点配置(a2a, anp 等)(规划中) |
| Tool | agent/tools/ | 工具配置(mcp 等)(规划中) |
| Payment | agent/payments/ | 支付能力配置(ap2 等)(规划中) |
使用
python
# 添加技能(默认写入 viking://user/skills/)
await client.add_skill({
"name": "search-web",
"description": "搜索网络获取信息",
"content": "# search-web\n..."
})
# 通过 -p 指定写入全局 agent 技能根(公开共享)
ov skills add search-web -p viking://agent/skills
# 搜索用户技能
results = await client.find(
"网络搜索",
target_uri="viking://user/skills/"
)
# 搜索全局 agent 技能
results = await client.find(
"网络搜索",
target_uri="viking://agent/skills/"
)统一检索
根据Agent的需求需求,支持对三种上下文类型统一搜索,提供全面信息:
python
# 跨所有上下文类型搜索
results = await client.find("用户认证")
for ctx in results.memories:
print(f"记忆: {ctx.uri}")
for ctx in results.resources:
print(f"资源: {ctx.uri}")
for ctx in results.skills:
print(f"技能: {ctx.uri}")相关文档
- 架构概述 - 系统整体架构
- 上下文层级 - L0/L1/L2 模型
- Viking URI - URI 规范
- 会话管理 - 记忆提取机制
