模型上下文

模型实际看到了什么?

模型看到的不是整个 Agent 内存,而是一份在每个 Step 明确组装的请求。请求由调用参数、系统提示、会话消息和工具定义组成;Harness 把决定请求内容的状态写入日志,使恢复后的下一次调用仍可解释、可重建。

问题 01

一次模型请求由哪几层组成?

答案:最外层是 provider、model、温度和输出上限等调用配置;系统提示描述角色与长期规则;messages 来自会话日志投影;tools 是当前允许模型调用的结构化能力。适配器最后把这四类输入转换成供应商协议。

模型只能依据这份请求决策。文件系统、进程和插件内部状态不会自动出现,必须通过提示、消息或工具结果进入请求。

问题 02

为什么会话不是一份聊天消息数组?

答案:消息数组只能表示模型最终看见的对话,无法完整表达流式 chunk、工具调用、请求配置、轮次边界、取消原因和 UI 回放信息。DeepSeek Harness 用追加式类型事件作为事实来源,再从其中投影出模型消息。

事件日志保留完整事实;Surface 选择当前有效的模型可见节点;deriveMessages() 再把这些节点转换成 LLM 消息。非消息事件仍可服务恢复、UI 和遥测。

问题 03

为什么“模型可见”必须等于“已经记录”?

答案:如果某段信息只存在于当前进程内,在线请求可能用到它,但恢复后的进程无法知道它曾经存在。把系统提示、工具定义、调用配置和动态消息都投影到日志,才能让相同历史得到相同请求。

只存在内存

在线请求 = 历史 + 隐藏上下文。进程重启后隐藏上下文消失,下一次模型判断发生漂移。

进入会话日志

在线与恢复都从同一事件序列折叠出 request/header 和 messages,请求差异可以被检测。

可重建并不要求存储供应商的内部状态;它要求存储 Harness 交给供应商的每一项模型输入。

直接后果:增加新的模型可见输入时,不能只在 buildRequest() 临时拼进去;还需要相应的会话事件和投影规则。

问题 04

AGENTS.md、Skills 和 Persona 怎样进入模型视野?

答案:长期、稳定的身份与规则通常由插件注册为 system-prompt section,再按顺序组装;任务进行中发现的子目录指令、技能正文或文件变化,则可以通过 agent.inject() 作为带来源的 user/message 进入下一 Step。两条路径最终都必须可从日志重建。

System Prompt 适合稳定规则;注入消息适合运行中才知道的上下文。二者不要混为“神秘的 prompt 拼接”。