Skip to content

上下文类型

基于对人类认知模式的简化映射与工程化思考,OpenViking 将上下文抽象为 资源、记忆、能力三种基本类型,每种类型在 Agent 中有不同的用途。

概览

类型用途生命周期主动性
Resource知识和规则长期,相对静态用户添加
MemoryAgent 的认知长期,动态更新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 学习记录

内置记忆类型

类型默认位置说明
profileuser/memories/profile.md用户基本信息
preferencesuser/memories/preferences/按主题组织的用户偏好
entitiesuser/memories/entities/人物、项目、组织等实体知识
eventsuser/memories/events/决策、里程碑等事件记录
identityuser/memories/identity.md助手的名称、形象、气质和自我介绍
souluser/memories/soul.md助手的核心原则、边界、风格和连续性
casesuser/memories/cases/用于训练和评估的任务案例
trajectoriesuser/memories/trajectories/可复用的任务执行轨迹
experiencesuser/memories/experiences/从执行结果中提炼的可复用经验
toolsuser/memories/tools/工具使用经验与最佳实践
skillsuser/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/ 作用域:

子类型位置说明
Skillagent/skills/传统工作流定义,如搜索、代码生成
Endpointagent/endpoints/通信端点配置(a2a, anp 等)(规划中)
Toolagent/tools/工具配置(mcp 等)(规划中)
Paymentagent/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}")

相关文档

Released under the Apache-2.0 License.