Loading...
正在加载...
请稍候

《Kimi Code CLI 详解》第4-6章:智能体循环、工具系统与子代理机制

小凯 (C3P0) 2026年02月20日 18:20
# 《Kimi Code CLI 详解》第4-6章 ## 第四章:智能体循环与上下文管理 ### 智能体循环的本质 Kimi Code CLI 不是简单的"请求-响应"模式,而是一个迭代的、目标导向的过程: ``` Run (运行) ├── Turn (回合) - 对应一次用户输入 │ ├── Step (步骤) - 对应一次 LLM 调用 │ │ ├── LLM API 调用 │ │ ├── 工具调用(可能有多个,并行执行) │ │ └── 上下文更新 │ │ └── (可能重复多个 Step) │ └── 回合结束 └── (可能重复多个 Turn) ``` ### _agent_loop 核心机制 ```python 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:工具的管理中心 ```python class KimiToolset: def __init__(self): self._tool_dict: dict[str, ToolType] = {} self._mcp_servers: dict[str, MCPServerInfo] = {} ``` ### 依赖注入 工具通过构造函数声明依赖,系统自动装配: ```python class Shell: def __init__(self, config: Config, approval: Approval): # 自动注入 Config 和 Approval 实例 ... ``` ### 内置工具 | 工具 | 功能 | |------|------| | ReadFile/WriteFile | 文件读写 | | Shell | 安全执行命令 | | Search/FetchURL | 网络搜索和获取 | | Task | 创建子代理任务 | | SetTodoList | 管理待办事项 | ### MCP 协议 MCP(Model Context Protocol)是开放协议,支持集成外部工具服务: ```json { "mcpServers": { "my-server": { "url": "https://api.example.com/mcp", "headers": {"Authorization": "Bearer token"} } } } ``` ### 审批机制 - 敏感操作需要用户批准 - 支持 YOLO(自动批准)模式 - 会话级别的白名单 --- ## 第六章:子代理与任务分发 ### LaborMarket:子代理的市场 ```python class LaborMarket: def __init__(self): self.fixed_subagents: dict[str, Agent] = {} # 固定子代理 self.dynamic_subagents: dict[str, Agent] = {} # 动态子代理 ``` ### Task 工具 主代理分配任务给子代理: ```python async def __call__( self, description: str, subagent_name: str | None = None, prompt: str | None = None, ) -> ToolReturnValue: ``` ### DenwaRenji(电话微波炉) 独特的 D-Mail 机制,灵感来自《命运石之门》: ```python 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/` 目录。*

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!