《Kimi Code CLI 详解》第4-6章
第四章:智能体循环与上下文管理
智能体循环的本质
Kimi Code CLI 不是简单的”请求-响应”模式,而是一个迭代的、目标导向的过程:
Run (运行)
├── Turn (回合) - 对应一次用户输入
│ ├── Step (步骤) - 对应一次 LLM 调用
│ │ ├── LLM API 调用
│ │ ├── 工具调用(可能有多个,并行执行)
│ │ └── 上下文更新
│ │ └── (可能重复多个 Step)
│ └── 回合结束
└── (可能重复多个 Turn)
_agent_loop 核心机制
async def _agent_loop(self) -> TurnOutcome:
step_no = 0
while True:
step_no += 1
if step_no > self._loop_control.max_steps_per_turn:
raise MaxStepsReached(...)
# 上下文压缩检查
if self._context.token_count + reserved >= max_context_size:
await self.compact_context()
step_outcome = await self._step()
# 处理 D-Mail 回溯
if back_to_the_future:
await self._context.revert_to(checkpoint_id)
上下文管理
– 持久化格式:JSON Lines,支持会话恢复
– Checkpoint 机制:支持时间回溯(D-Mail)
– 压缩策略:自动触发,保留关键信息
—
第五章:工具系统与 MCP 集成
KimiToolset:工具的管理中心
class KimiToolset:
def __init__(self):
self._tool_dict: dict[str, ToolType] = {}
self._mcp_servers: dict[str, MCPServerInfo] = {}
依赖注入
工具通过构造函数声明依赖,系统自动装配:
class Shell:
def __init__(self, config: Config, approval: Approval):
# 自动注入 Config 和 Approval 实例
...
内置工具
| 工具 | 功能 |
|——|——|
| ReadFile/WriteFile | 文件读写 |
| Shell | 安全执行命令 |
| Search/FetchURL | 网络搜索和获取 |
| Task | 创建子代理任务 |
| SetTodoList | 管理待办事项 |
MCP 协议
MCP(Model Context Protocol)是开放协议,支持集成外部工具服务:
{
"mcpServers": {
"my-server": {
"url": "https://api.example.com/mcp",
"headers": {"Authorization": "Bearer token"}
}
}
}
审批机制
– 敏感操作需要用户批准
– 支持 YOLO(自动批准)模式
– 会话级别的白名单
—
第六章:子代理与任务分发
LaborMarket:子代理的市场
class LaborMarket:
def __init__(self):
self.fixed_subagents: dict[str, Agent] = {} # 固定子代理
self.dynamic_subagents: dict[str, Agent] = {} # 动态子代理
Task 工具
主代理分配任务给子代理:
async def __call__(
self,
description: str,
subagent_name: str | None = None,
prompt: str | None = None,
) -> ToolReturnValue:
DenwaRenji(电话微波炉)
独特的 D-Mail 机制,灵感来自《命运石之门》:
class DenwaRenji:
def send_dmail(self, checkpoint_id: int, message: str):
"""发送 D-Mail(只能调用一次)"""
def fetch_pending_dmail(self) -> DMail | None:
"""获取待处理的 D-Mail"""
子代理可以向父代理”发送消息到过去”,触发上下文回溯。
多代理协作模式
1. 主从模式:主代理分配,子代理执行
2. 流水线模式:多个子代理按顺序处理
3. 并行模式:多个子代理同时执行
4. 层次化模式:子代理有自己的子代理
—
思考与讨论
1. D-Mail 机制的设计有什么优缺点?你会如何改进它?
2. 依赖注入在工具系统中解决了什么问题?
3. 设计一个适合多代理协作的任务场景,描述代理分工。
本系列共10章,前3章已发布。完整内容已保存至本地 book/ 目录。
