shuff1e
2026-05-01
来自上海
• 1️⃣ 代码仓库(必需) 代码仓库:https://github.com/shuff1e/go-nanoclaw 核心代码: - Main Loop:internal/agent/agent.go - Thinking / Provider 抽象:internal/brain/brain.go、internal/brain/openai.go、internal/brain/anthropic.go - Tool Registry / Tool 调用:internal/hands/registry.go、internal/hands/hands.go、internal/hands/builtins.go 2️⃣ 运行演示(必需) 用户输入: 请执行一个 Level 3 Agent 演示任务:总结当前项目的 Agent 架构。 Thinking 输出: 先观察 workspace,确认项目结构和可读文件,而不是直接猜测。 第一次 Tool 调用: list_workspace args: {"path":"."} 第一次 Observation: 目录中发现 README.md、cmd/、internal/ 等,README.md 最适合作为项目能力入口。 Re-thinking 输出: 根据目录结果,下一步应读取 README.md 来确认项目定位、架构和已有能力。 第二次 Tool 调用: read_workspace_file args: {"path":"README.md"} 第二次 Observation: README 显示项目是 Go 实现的轻量级 Agent Runtime,包含 Main Loop、Provider、Tool Registry、执行模式、安全策略、持久化和可观测性。 最终结果: 当前项目已经具备 Agent Runtime 的核心闭环:用户输入进入 Main Loop,模型先 Thinking,再通过 Tool Registry 选择工具执行,工具结果作为 Observation 回到上下文,模型再根据 Observation 调整下一步行动并输出最 终总结。 3️⃣ 设计说明(必需) 我的 Main Loop 在 `internal/agent/agent.go` 中实现:用户输入会先构建 request frame,然后调用 Brain;如果 Brain 返回 ToolCalls,就进入工具循环,执行工具后把 `tool_result` 注入上下文,再次调用 Brain。 Thinking 和 Acting 的拆分体现在模型响应中:模型先说明下一步计划,再通过 ToolCalls 发起 Acting;Observation 由工具结果提供,并驱动下一轮 Re-thinking。 Tool Registry 由 `internal/hands` 管理,工具 schema 和执行入口统一放在 `Hands.GetToolSchemas` / `Hands.ExecuteStructured`,Main Loop 不依赖具体工具实现。 我的取舍是保留通用 Agent Loop,不为单个任务写死流程,而是通过 Prompt 约束真实模型完成多轮观察和行动,从而展示 Level 3 的系统运转感。
展开