Skip to content

会话管理

Session 负责管理对话消息、记录上下文使用、提取长期记忆。

概览

生命周期:创建 → 交互 → 提交

通过 session_id 获取会话时,默认不会自动创建不存在的会话;如果需要自动创建,请显式使用 client.get_session(..., auto_create=True)

python
session = client.session(session_id="chat_001")
session.add_message("user", [TextPart("...")])
session.commit()

核心 API

方法说明
add_message(role, parts)添加消息
used(contexts, skill)记录使用的上下文/技能
commit()提交:归档(同步) + 摘要生成和记忆提取(异步后台)
get_task(task_id)查询后台任务状态

add_message

python
session.add_message(
    "user",
    [TextPart("How to configure embedding?")]
)

session.add_message(
    "assistant",
    [
        TextPart("Here's how..."),
        ContextPart(uri="viking://user/memories/profile.md"),
    ]
)

used

python
# 记录使用的上下文
session.used(contexts=["viking://user/memories/profile.md"])

# 记录使用的技能
session.used(skill={
    "uri": "viking://agent/skills/code-search",
    "input": "search config",
    "output": "found 3 files",
    "success": True
})

commit

python
result = session.commit()
# {
#   "status": "accepted",
#   "task_id": "uuid-xxx",
#   "archive_uri": "viking://session/.../history/archive_001",
#   "archived": True
# }

# 查询后台任务进度
task = client.get_task(result["task_id"])
# task["status"]: "pending" | "running" | "completed" | "failed"
# sum(task["result"]["memories_extracted"].values()): 3

消息结构

Message

python
@dataclass
class Message:
    id: str              # msg_{UUID}
    role: str            # "user" | "assistant"
    parts: List[Part]    # 消息部分
    created_at: datetime

Part 类型

类型说明
TextPart文本内容
ContextPart上下文引用(URI + 摘要)
ToolPart工具调用(输入 + 输出)

压缩策略

归档流程

commit() 分两阶段执行:

Phase 1(同步,立即完成)

  1. 递增 compression_index
  2. 写入消息到归档目录(messages.jsonl
  3. 清空当前消息列表
  4. 返回 task_id

Phase 2(异步后台): 5. 生成结构化摘要(LLM)→ 写入 .abstract.md.overview.md 6. 提取长期记忆 7. 更新 active_count 8. 写入 .done 完成标记

摘要格式

markdown
# 会话摘要

**一句话概述**: [主题]: [意图] | [结果] | [状态]

## Analysis
关键步骤列表

## Primary Request and Intent
用户的核心目标

## Key Concepts
关键技术概念

## Pending Tasks
未完成的任务

记忆提取

8 种分类

分类归属说明可合并
profileuser用户身份/属性
preferencesuser用户偏好
entitiesuser实体(人/项目)
eventsuser事件/决策
casesagent问题+解决方案
patternsagent可复用流程
toolsagent工具使用经验与最佳实践
skillsagent技能执行经验与工作流策略

提取流程

消息 → LLM 提取 → 候选记忆

向量预过滤 → 找相似记忆

LLM 去重决策 → candidate(skip/create/none) + item(merge/delete)

写入 AGFS → 向量化

去重决策

层级决策说明
Candidateskip候选记忆重复,直接跳过
Candidatecreate创建候选记忆;必要时先删除冲突旧记忆
Candidatenone不创建候选记忆,只处理已有记忆
Existing itemmerge将候选内容合并到指定已有记忆
Existing itemdelete删除冲突的已有记忆

存储结构

viking://session/{session_id}/
├── messages.jsonl            # 当前消息
├── .abstract.md              # 当前摘要
├── .overview.md              # 当前概览
├── history/
│   ├── archive_001/
│   │   ├── messages.jsonl    # Phase 1 写入
│   │   ├── .abstract.md      # Phase 2 写入(后台)
│   │   ├── .overview.md      # Phase 2 写入(后台)
│   │   └── .done             # Phase 2 完成标记
│   └── archive_NNN/
└── tools/
    └── {tool_id}/tool.json

viking://user/memories/
├── profile.md                # 追加式用户画像
├── preferences/
├── entities/
└── events/

viking://agent/memories/
├── cases/
├── patterns/
├── tools/
└── skills/

相关文档

Released under the Apache-2.0 License.