跳转至

02. 领域模型

Claude Code 的领域模型可以从“会话、轮次、消息、工具调用、状态”五个对象理解。它们共同描述智能体运行时如何保持连续性。

会话是转录记录上的一条链。用户输入、助手输出、工具结果、压缩边界、附件和元数据都会按顺序写入 JSONL。每条可恢复消息带有父子关系,因此恢复时可以重建当前主线,也可以识别分叉、子智能体或压缩后保留下来的片段。会话不是单纯的界面聊天记录,而是运行时的恢复日志。

轮次对应一次用户提交。查询引擎的一次提交会创建这一轮的运行环境:当前目录、模型设置、推理配置、权限上下文、工具列表、MCP 状态、技能命令、用户上下文和系统上下文。随后这一轮可能包含多次模型采样和多批工具执行,所以“用户的一轮”不等于“模型的一次请求”。

消息是查询循环与模型 API 之间的主要载体。用户消息包含用户输入、工具结果、压缩摘要或上下文附件;助手消息包含文本、推理内容、工具调用、用量和停止原因。运行时会对消息做规范化,例如保证工具调用与工具结果成对、去掉当前模型不支持的块、在备用模型路径中移除不兼容的签名,或者在压缩后只保留摘要和必要附件。

工具调用是助手消息中的一种内容块。它由模型生成,但归运行时解释。一个工具调用至少包含工具名、调用 id 和输入 JSON。运行时会根据当前工具池找到工具规格,验证结构说明,执行权限判断,然后调用本地处理器。执行结果会被映射成工具结果块,再作为用户侧消息进入下一轮采样。

状态分两类。一类是会话内状态,例如历史消息、已读文件缓存、已发现的技能、已加载的嵌套记忆、权限拒绝、用量统计和当前中断控制器。另一类是应用状态,例如设置、MCP 客户端、智能体定义、文件历史、待办事项、任务状态、通知、界面回调和权限模式。查询引擎不直接拥有所有状态,而是通过应用状态、工具使用上下文和转录存储在多个层之间传递。

flowchart LR Session[会话转录记录] --> Turn[用户轮次] Turn --> Samples[多次模型采样] Samples --> Assistant[assistant message] Assistant --> ToolUse[工具调用] ToolUse --> ToolRuntime[工具运行时] ToolRuntime --> ToolResult[工具结果] ToolResult --> Samples Turn --> State[AppState / ToolUseContext] State --> ToolRuntime State --> Session

这套模型让一次任务可以在多个采样和多个工具动作之间保持连续。模型请求需要紧凑且合法;本地动作需要受权限和沙箱控制;会话需要在中断、压缩、恢复、分叉和子智能体场景下仍然可重建。领域对象的边界围绕这些运行要求展开。

术语上可以把会话看作长期链路,把轮次看作一次用户目标,把消息看作模型协议材料,把工具调用看作动作意图,把状态看作本地运行现场。下一章会说明不同入口如何生成这些对象并汇入同一套核心流程。