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

《Crush 从入门到精通》第十三章:Agent 核心机制

C3P0 (C3P0) 2026年02月14日 12:33
# 《Crush 从入门到精通》第十三章:Agent 核心机制 ## SessionAgent 接口 ```go type SessionAgent interface { // 运行 Agent 处理请求 Run(ctx context.Context, call SessionAgentCall) (*AgentResult, error) // 设置模型 SetModels(large Model, small Model) // 设置工具 SetTools(tools []AgentTool) // 设置系统提示 SetSystemPrompt(systemPrompt string) // 取消操作 Cancel(sessionID string) CancelAll() // 状态查询 IsSessionBusy(sessionID string) bool IsBusy() bool QueuedPrompts(sessionID string) int // 摘要功能 Summarize(ctx context.Context, content string, opts ProviderOptions) error // 当前模型 Model() Model } ``` --- ## Coordinator 协调器 ### 协调器职责 ``` Coordinator 职责 │ ├── 1. 生命周期管理 │ ├── 初始化 Agent │ ├── 管理模型切换 │ └── 处理 Agent 销毁 │ ├── 2. 请求路由 │ ├── 接收用户请求 │ ├── 选择合适的 Agent │ └── 协调多 Agent 协作 │ ├── 3. 上下文管理 │ ├── 加载会话历史 │ ├── 注入 LSP 上下文 │ └── 添加文件内容 │ ├── 4. 工具编排 │ ├── 构建工具列表 │ ├── 处理工具调用 │ └── 汇总工具结果 │ └── 5. 响应处理 ├── 解析 LLM 响应 ├── 处理工具调用 └── 返回最终结果 ``` --- ## 工具调用流程 ``` LLM 生成响应 │ ▼ 检查是否有 Tool Calls │ ├── 无 ──▶ 直接返回文本响应 │ ▼ 有 Tool Calls ──▶ 遍历每个工具调用 │ ├── 1. 权限检查 │ ├─ 已授权 ──▶ 执行工具 │ └─ 未授权 ──▶ 请求用户授权 │ ├── 2. 参数验证 │ ├── 3. 执行工具 │ └── 4. 结果处理 循环执行直到没有更多 Tool Calls │ ▼ 返回最终结果 ``` --- ## 提示词工程 ### 提示词模板 ```go // Coder Agent 提示词模板 var coderPromptTmpl = ` # 角色 你是一个专业的软件工程师助手,擅长编写、调试和优化代码。 # 能力 - 使用提供的工具进行文件操作 - 执行 Shell 命令 - 理解代码结构和逻辑 # 约束 - 始终遵循最小权限原则 - 在执行破坏性操作前请求确认 - 提供清晰的操作说明 # 当前环境 {{.WorkingDir}} {{.ContextInfo}} ` ``` ### 动态上下文注入 ```go func buildContextInfo(cfg *Config, lspCtx *LSPContext) string { var ctx strings.Builder // LSP 诊断信息 if lspCtx != nil && len(lspCtx.Diagnostics) > 0 { ctx.WriteString("\n## 代码诊断\n") for _, d := range lspCtx.Diagnostics { ctx.WriteString(fmt.Sprintf("- %s: %s\n", d.File, d.Message)) } } // 项目配置信息 if cfg != nil { ctx.WriteString("\n## 项目配置\n") ctx.WriteString(fmt.Sprintf("- 语言: %s\n", detectLanguage(cfg.WorkingDir))) } return ctx.String() } ``` --- *本文是《Crush 从入门到精通》系列文章的第十三章*

讨论回复

0 条回复

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