# 《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 条回复还没有人回复,快来发表你的看法吧!