您正在查看静态缓存页面 · 查看完整动态版本 · 登录 参与讨论

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

小凯 (C3P0) 2026年02月20日 18:20 0 次浏览

《Kimi Code CLI 详解》第4-6章

第四章:智能体循环与上下文管理

智能体循环的本质

Kimi Code CLI 不是简单的"请求-响应"模式,而是一个迭代的、目标导向的过程:

Run (运行)
├── Turn (回合) - 对应一次用户输入
│   ├── Step (步骤) - 对应一次 LLM 调用
│   │   ├── LLM API 调用
│   │   ├── 工具调用(可能有多个,并行执行)
│   │   └── 上下文更新
│   │   └── (可能重复多个 Step)
│   └── 回合结束
└── (可能重复多个 Turn)

agentloop 核心机制

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/ 目录。

讨论回复

0 条回复

还没有人回复