from_config("agent-config.yml")将 YAML 编译为可执行的 Lambda Term。 本文档覆盖完整 YAML Schema 及每个字段的语义。
# ═══ 必填字段 ═══
agentId: string # Agent 唯一标识
name: string # Agent 名称
type: enum # react | chain | simple | parallel | router
systemPrompt: string # 系统提示词 (Lambda body)
# ═══ 模型配置 ═══
model:
provider: string # 见下方「Provider 列表」
name: string # 模型名 (可省略,使用 provider 默认值)
temperature: float # 0.0 - 1.0, 默认 0.3
maxTokens: int # 单次回复最大 token, 默认 4096
timeout: int # 请求超时 (秒), 默认 600
conversation: bool # 启用 ConversationLam, 默认 true
maxHistoryTokens: int # 对话历史 token 预算, 默认 min(contextWindow/2, 80000)
contextWindow: int # 模型最大上下文窗口, 默认 200000
fallback: # 降级模型列表
- "provider/model-name"
# ═══ ReAct 配置 ═══
react:
maxSteps: int # 最大推理步数, 默认 20
observationEnabled: bool # 启用 Observation 步骤, 默认 true
toolTimeout: int # 单工具超时 (秒)
thinkTimeout: int # 思考步骤超时 (秒)
# ═══ 工具 (MCP) ═══
mcp:
localTools: # 允许使用的工具名称列表
- ToolName
policy:
mode: auto # auto | confirm | deny
# ═══ 记忆 ═══
memory:
enabled: bool
strategy: local | redis
size: int # 记忆条目上限
ttl: int # 过期时间 (秒)
# ═══ 运行时引擎 (Phase 6.5) ═══
runtime:
engine: enum # recursive | cek | adaptive, 默认 recursive
costBudget: float # CEK: 成本上限 (USD), 超过自动暂停
maxSteps: int # CEK: 最大转移步数, 默认 10000
# ═══ 安全 ═══
guard:
dangerousCommandBlock: bool
highRiskConfirmation: bool
maxOutputLength: int
retry: int
fallback: last | error
# ═══ 人设 ═══
persona:
name: string
style: string
template: string
model.provider 决定 LLM 调用方式。三类 Provider 实现:
| provider 值 | Provider 类 | 说明 | API Key |
|---|---|---|---|
claude-code |
ClaudeCodeProvider |
通过 claude -p --resume 调用, 复用 Claude Code Max Plan |
不需要 |
anthropic |
AnthropicProvider |
Anthropic Messages API | ANTHROPIC_API_KEY |
openai |
OpenAICompatProvider |
OpenAI API | OPENAI_API_KEY |
ollama |
OpenAICompatProvider |
本地 Ollama (http://localhost:11434) | 不需要 |
dashscope |
OpenAICompatProvider |
阿里云 DashScope (通义千问) | DASHSCOPE_API_KEY |
deepseek |
OpenAICompatProvider |
DeepSeek API | DEEPSEEK_API_KEY |
moonshot |
OpenAICompatProvider |
Moonshot AI (Kimi) | MOONSHOT_API_KEY |
| provider | 默认 model.name |
|---|---|
claude-code |
sonnet |
anthropic |
claude-sonnet-4-20250514 |
openai |
gpt-4o |
ollama |
qwen2.5:7b |
dashscope |
qwen-max |
deepseek |
gpt-4o (需显式指定) |
moonshot |
gpt-4o (需显式指定) |
| provider | contextWindow |
|---|---|
claude-code / anthropic / openai |
200,000 |
moonshot |
128,000 |
deepseek |
64,000 |
ollama |
32,000 |
当 model.conversation: true (默认) 时, from_config 创建 ConversationLam 而非无状态 Lam。
ConversationLam 的作用:
maxHistoryTokens 预算自动截断旧消息, 保留 system prompt编译等式:
conversation: true → ConversationLam(provider, system_prompt, max_history_tokens)
conversation: false → Lam(name, prompt, model) # 无状态, 每次调用独立
相关字段:
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model.conversation |
bool | true |
启用 ConversationLam |
model.maxHistoryTokens |
int | min(contextWindow/2, 80000) |
对话历史 token 预算 |
model.contextWindow |
int | 按 provider 自动设置 | 模型最大上下文窗口 |
runtime.engine 控制 Agent 的执行后端。两种引擎对相同输入产生相同结果,但提供不同的运行时能力。
| 引擎 | 实现 | 适用场景 | 特有能力 |
|---|---|---|---|
recursive (默认) |
Python 调用栈 (Executor.reduce) |
简单 Agent, 短管道 (≤10 步) | 低开销, 简单直接 |
cek |
Agent CEK Machine (Paper II §5) | 长循环, 高成本, 需暂停/恢复 | 逐步成本监控, 成本熔断, 循环检测, 暂停/恢复, K 栈可视化 |
adaptive |
自动选择 | 不确定复杂度 | 分析 Term 结构, 自动选最优引擎 |
| 字段 | 类型 | 默认值 | 适用引擎 | 说明 |
|---|---|---|---|---|
runtime.engine |
enum | recursive |
全部 | 执行引擎选择 |
runtime.costBudget |
float | 无限制 | cek |
成本上限 (USD), 超过自动暂停并抛出 CostBudgetExceeded |
runtime.maxSteps |
int | 10000 |
cek |
CEK 最大转移步数, 超过抛出 MaxStepsExceeded |
maxSteps ≤ 10, 无并行 → recursive (默认, 不需要配置)
maxSteps > 10 → cek (需要成本监控)
有 Pair/Par/AsyncPar → cek (需要并行安全追踪)
有 Guard + retry > 1 → cek (重试可能爆成本)
不确定 → adaptive (自动判断)
# 简单 Agent — 使用默认 recursive 引擎 (无需配置 runtime)
agentId: hello-bot
type: simple
systemPrompt: "You are a friendly bot."
# 复杂 ReAct Agent — 使用 CEK 引擎 + 成本熔断
agentId: security-scanner
type: react
react:
maxSteps: 200
runtime:
engine: cek
costBudget: 10.00 # 超过 $10 自动暂停
maxSteps: 10000
# 不确定复杂度 — 自适应选择
agentId: general-assistant
type: react
react:
maxSteps: 15
runtime:
engine: adaptive
# 通过 Runtime 类切换引擎
from lambdagent.agentruntime.runtime import Runtime
# 方式 1: YAML 配置 (读取 runtime.engine 字段)
result = Runtime.execute("agent-config.yml", "Hello")
# 方式 2: Python 参数覆盖
result = Runtime.execute("agent-config.yml", "Hello",
engine_mode="cek", cost_budget=5.0)
# 方式 3: 直接使用引擎
from lambdagent.agentruntime.cek_engine import CEKEngine
engine = CEKEngine(cost_budget=5.0)
result = engine.execute(term, "Hello", ctx)
# result.final_state → 可序列化的 CEKState (暂停/恢复)
# result.transitions → 完整小步转移记录
# result.cost → CostVector(tokens, latency, money)
agentId: my-agent
name: my-agent
type: react
model:
provider: claude-code
name: sonnet # claude CLI 内部映射
temperature: 0.3
maxTokens: 4096
systemPrompt: |
You are a helpful coding assistant.
运行: python3 agentexample/agent67/run.py --claude
model:
provider: anthropic
name: claude-sonnet-4-20250514
temperature: 0.3
maxTokens: 4096
需设置: export ANTHROPIC_API_KEY=sk-ant-...
model:
provider: openai
name: gpt-4o
temperature: 0.5
maxTokens: 4096
需设置: export OPENAI_API_KEY=sk-...
model:
provider: dashscope
name: qwen-max
temperature: 0.3
maxTokens: 4096
需设置: export DASHSCOPE_API_KEY=sk-...
model:
provider: ollama
name: qwen2.5:7b
temperature: 0.3
maxTokens: 4096
contextWindow: 32000
需先启动: ollama serve
model:
provider: deepseek
name: deepseek-chat
temperature: 0.3
maxTokens: 4096
contextWindow: 64000
需设置: export DEEPSEEK_API_KEY=sk-...
model:
provider: moonshot
name: moonshot-v1-128k
temperature: 0.3
maxTokens: 4096
contextWindow: 128000
需设置: export MOONSHOT_API_KEY=sk-...
from_config 在编译时会自动扫描 mcp.localTools 中声明的工具, 从 BUILTIN_TOOLS 注册表提取每个工具的参数签名 (类名、必填/可选参数), 生成格式化文档并注入到 system prompt 末尾。
目的: LLM 调用工具时能使用准确的参数名, 避免因参数名猜测错误导致 VALIDATION_ERROR 进而引发幻觉。
生成格式示例:
## 工具参数参考 (Tool Parameter Reference)
调用工具时请严格使用以下参数名:
- **ReadFile**: `{"action":"ReadFile","input":{"file_path": ..., "offset": 0, "limit": 2000}}`
- **Bash**: `{"action":"Bash","input":{"command": ...}}`
- **terminate**: `{"action":"terminate","input":{"summary":"结果摘要"}}`
该文档块在 _generate_tool_schema_docs() 中生成, 仅当 mcp.localTools 非空时注入。
ClaudeCodeProvider 在调用 claude -p 时自动传入:
--mcp-config '{"mcpServers":{}}' --strict-mcp-config
效果: Claude CLI 只能看到 agent YAML 中声明的工具, 宿主机上安装的 MCP Server (如 Vercel, Gmail) 完全不可见。这防止了 LLM 调用未预期的工具导致安全问题或幻觉。
model:
provider: claude-code
name: sonnet
fallback:
- anthropic/claude-sonnet-4-20250514
- dashscope/qwen-max
当主 provider 失败时, 按顺序尝试 fallback 列表中的模型。格式为 provider/model-name。