Kimi-CLI 架构深度分析
Related topics: [[kosong-package]], [[kaos-package]], [[wire-protocol]], [[agent-spec]], [[labor-market]]
概述
Kimi-CLI 是一个现代化的 AI Agent CLI 工具,采用分层架构设计,实现了 Soul(核心智能)、Wire(通信协议)和 UI(多种界面)的完全分离。其核心设计理念是 "一切皆异步、一切皆可扩展、一切皆可控"。
1. 整体架构层级
Kimi-CLI 采用清晰的五层架构:
┌─────────────────────────────────────────────────────────────────┐
│ CLI Layer │
│ (kimi_cli.cli.__main__ / cli.py) │
│ - 命令行参数解析,入口点 │
├─────────────────────────────────────────────────────────────────┤
│ App Layer │
│ (kimi_cli.app.KimiCLI) │
│ - 应用生命周期管理,配置加载,多UI模式协调 │
├─────────────────────────────────────────────────────────────────┤
│ Runtime Layer │
│ (kimi_cli.soul.agent.Runtime) │
│ - 运行时环境:技能、OAuth、审批、子代理市场、环境检测 │
├─────────────────────────────────────────────────────────────────┤
│ Agent Layer │
│ (kimi_cli.soul.agent.Agent) │
│ - Agent 配置:系统提示词、工具集、子代理定义 │
├─────────────────────────────────────────────────────────────────┤
│ Soul Layer │
│ (kimi_cli.soul.kimisoul.KimiSoul) │
│ - 核心智能循环:LLM交互、工具调用、状态管理、D-Mail机制 │
└─────────────────────────────────────────────────────────────────┘
代码示例
App 创建流程 (kimi_cli/app.py:54-168):
class KimiCLI:
@staticmethod
async def create(
session: Session,
config: Config | Path | None = None,
model_name: str | None = None,
# ... 其他参数
) -> KimiCLI:
config = load_config(config)
oauth = OAuthManager(config)
llm = create_llm(provider, model, thinking=thinking, ...)
# 1. 创建 Runtime
runtime = await Runtime.create(config, oauth, llm, session, yolo, skills_dir)
# 2. 加载 Agent
agent = await load_agent(agent_file, runtime, mcp_configs=mcp_configs or [])
# 3. 恢复/创建 Context
context = Context(session.context_file)
await context.restore()
# 4. 创建 Soul
soul = KimiSoul(agent, context=context)
return KimiCLI(soul, runtime, env_overrides)
2. Agent Spec 系统(YAML 配置、继承、工具选择)
核心设计
Agent Spec 是一个基于 YAML 的配置系统,支持继承机制和模块化工具选择。
AgentSpec 模型 (kimi_cli/agentspec.py:31-47):
class AgentSpec(BaseModel):
extend: str | None = Field(default=None, description="Agent file to extend")
name: str | Inherit = Field(default=inherit, description="Agent name")
system_prompt_path: Path | Inherit = Field(default=inherit, description="System prompt path")
system_prompt_args: dict[str, str] = Field(default_factory=dict)
tools: list[str] | None | Inherit = Field(default=inherit, description="Tools")
exclude_tools: list[str] | None | Inherit = Field(default=inherit)
subagents: dict[str, SubagentSpec] | None | Inherit = Field(default=inherit)
继承机制
继承通过特殊的 inherit 标记实现(kimi_cli/agentspec.py:24-28):
class Inherit(NamedTuple):
"""Marker class for inheritance in agent spec."""
inherit = Inherit()
继承解析逻辑 (kimi_cli/agentspec.py:123-142):
if agent_spec.extend:
base_agent_file = (agent_file.parent / agent_spec.extend).absolute()
base_agent_spec = _load_agent_spec(base_agent_file)
# 子配置覆盖父配置,未覆盖的继承父配置
if not isinstance(agent_spec.name, Inherit):
base_agent_spec.name = agent_spec.name
if not isinstance(agent_spec.system_prompt_path, Inherit):
base_agent_spec.system_prompt_path = agent_spec.system_prompt_path
# ... 其他字段同理
agent_spec = base_agent_spec
实际配置示例
父 Agent (kimi_cli/agents/default/agent.yaml):
version: 1
agent:
name: ""
system_prompt_path: ./system.md
system_prompt_args:
ROLE_ADDITIONAL: ""
tools:
- "kimi_cli.tools.multiagent:Task"
- "kimi_cli.tools.shell:Shell"
# ... 更多工具
subagents:
coder:
path: ./sub.yaml
description: "Good at general software engineering tasks."
子 Agent (kimi_cli/agents/default/sub.yaml):
version: 1
agent:
extend: ./agent.yaml # 继承父配置
system_prompt_args:
ROLE_ADDDITIONAL: |
You are now running as a subagent...
exclude_tools: # 排除特定工具
- "kimi_cli.tools.multiagent:Task"
- "kimi_cli.tools.multiagent:CreateSubagent"
subagents: {} # 空配置覆盖父配置