Skip to content

上下文类型

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

概览

类型用途生命周期主动性
Resource知识和规则长期,相对静态用户添加
MemoryAgent 的认知长期,动态更新Agent 记录
Skill可调用的能力长期,静态Agent 调用

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记忆,是 Agent 关于用户和世界的学习知识。

特点

  • **Agent 主动:**由 Agent 主动提取和记录的记忆信息
  • **动态更新:**由 Agent 从交互中持续更新
  • **个性化:**针对特定用户或 特定 Agent 学习记录

8 种分类

分类位置说明更新策略
profileuser/memories/profile.md用户基本信息✅ 合并到单文件
preferencesuser/memories/preferences/按主题的用户偏好✅ 可追加
entitiesuser/memories/entities/实体记忆(人物、项目)✅ 可追加
eventsuser/memories/events/事件记录(决策、里程碑)❌ 不更新
casesagent/memories/cases/学习的案例❌ 不更新
patternsagent/memories/patterns/学习的模式✅ 可合并
toolsagent/memories/tools/工具使用经验与最佳实践✅ 可合并
skillsagent/memories/skills/技能执行经验与工作流策略✅ 可合并

使用

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(技能)

技能是 Agent 可以调用的能力,比如目前的Skills、MCP等均属于此类。

特点

  • **定义的能力:**用于完成某项工作的工具定义
  • **相对静态:**运行时技能定义不变,但和工具相关的使用记忆会在记忆中更新
  • **可调用:**Agent 决定何时使用哪种技能

存储位置

viking://agent/skills/{skill-name}/
├── .abstract.md          # L0: 简短描述
├── SKILL.md   						# L1: 详细概览
└── scripts           		# L2: 完整定义

使用

python
# 添加技能
await client.add_skill({
    "name": "search-web",
    "description": "搜索网络获取信息",
    "content": "# search-web\n..."
})

# 搜索技能
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.