micro/go-micro

GitHub: micro/go-micro

Go Micro 是一个面向 Go 语言的智能体框架兼微服务框架,将 AI agent 的运行时能力(工具、记忆、规划、委托、guardrails)与分布式服务架构融为一体。

Stars: 22841 | Forks: 2406

# Go Micro [![Go.Dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/go-micro.dev/v6?tab=doc) [![Go Report Card](https://goreportcard.com/badge/github.com/go-micro/go-micro)](https://goreportcard.com/report/github.com/go-micro/go-micro) Go Micro 是一个面向 Go 的 **agent harness**(智能体框架)和服务框架。 harness 是指 agent 周围的 runtime:它可以调用的工具、保留的记忆、限制它的 guardrails、触发它的 workflow、它依赖的服务,以及其他 agent 用来与它通信的协议。 Go Micro 以 Go 代码的形式为你提供 harness。构建一个 agent,它就能获得模型、记忆、工具、规划、委托、guardrails 和服务发现;它可以通过 [MCP](https://modelcontextprotocol.io/) 和 [A2A](https://a2a-protocol.org) 访问。编写服务,每个 endpoint 都会成为一个可被 AI 调用的工具。使用 durable flows 来编排确定性的部分。Agent、服务和 workflow 共享同一个 runtime,因为 agent 本身就是一个分布式系统,构建一个 agent 就是在构建一个服务。 ## 商业支持 在生产环境中运行 Go Micro,或者基于它进行开发并需要帮助?你可以直接从维护者那里获取付费的**支持、咨询、培训和 retainers**——这也是维持项目维护的资金来源。请查看 [**支持**](SUPPORT.md) 了解具体级别,或者[提交请求](https://github.com/micro/go-micro/issues/new?template=commercial_support.md)。 ## 目录 - [快速开始](#quick-start) - [为什么需要 Agent Harness](#why-an-agent-harness) - [编写服务](#writing-services) - [构建 Agent](#building-agents) — [规划与委托](#plan--delegate), [可插拔](#batteries-included-pluggable), [付费工具 (x402)](#paid-tools-x402), [A2A](#reachable-by-other-agents-a2a) - [功能特性](#features) - [CLI](#cli) - [多服务项目](#multi-service-projects) - [数据模型](#data-model) - [AI 提供商](#ai-providers) - [示例](#examples) - [商业支持](#commercial-support) - [文档](#docs) ## 快速开始 安装 CLI: ``` # 二进制文件(无需 Go) curl -fsSL https://go-micro.dev/install.sh | sh # 或者使用 Go go install go-micro.dev/v6/cmd/micro@v6 ``` ### 最快的方式 —— 无需 API key 初始化一个服务,运行它,并调用它: ``` micro new helloworld cd helloworld micro run ``` 然后在另一个终端中运行: ``` curl -X POST http://localhost:8080/api/helloworld/Helloworld.Call \ -H 'Content-Type: application/json' -d '{"name":"World"}' ``` ### 通过 prompt 生成 —— 使用 LLM key 设置 provider key,描述你想要的功能,AI 就会设计服务、编写 handler、编译并启动它们: ``` export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY, GEMINI_API_KEY, ... micro run --prompt "a task management system with categories" --provider anthropic ``` AI 会设计架构,你进行审查,然后它会生成包含真实业务逻辑的 handler,编译它们并启动: ``` Services: ● task — Task management with status tracking ● project — Project organization Generate? [Y/n] Micro Services: ● task ● project Agents: ◆ agent ``` 接着可以从控制台与你的服务对话: ``` > Create a project called Launch, then add three tasks to it → project_Project_Create({"name":"Launch"}) ← {"record":{"id":"p1..."},"success":true} → task_Task_Create({"title":"Design specs","project_id":"p1..."}) → task_Task_Create({"title":"Write code","project_id":"p1..."}) → task_Task_Create({"title":"Ship it","project_id":"p1..."}) Created project Launch and added three tasks to it. ``` 当你需要目前尚不具备的能力时,agent 会在对话过程中生成一个新服务: ``` > I need to track shipping. Create a shipment for order 123 to London. ⚡ generating shipping service... ✓ shipping → shipping_Shipping_Create({"order_id":"123","destination":"London"}) ← {"record":{"id":"xyz...","status":"pending"}} Created shipment for order 123 going to London. ``` 你可以随时手动编辑生成的代码——重新运行时会保留你的更改。[阅读更多](https://go-micro.dev/blog/13)。 ## 为什么需要 Agent Harness 第一波 agent 框架帮助开发者将模型放入一个循环中。下一个问题是如何操作这个循环:将其连接到真实工具,界定其影响范围,保存状态,将工作路由给专家,从故障中恢复,观察发生了什么,以及允许其他 agent 调用它。这就是 harness 的工作。 Go Micro 给出的答案是,让这个 harness 成为你已经在部署的同一个东西: - **工具即服务** —— endpoint 元数据会自动成为工具的 schema;由 RPC 执行调用。 - **Agent 即服务** —— 它们会进行注册、发现、负载均衡,并暴露 `Agent.Chat`。 - **Workflow 即持久化代码路径** —— 当路径已知时使用 workflow;当路径未知时分发给 agent。 - **安全防护在执行时生效** —— `MaxSteps`、`LoopLimit`、`ApproveTool` 和工具包装器会在动作发生的地方运行。 - **内置互操作性** —— 使用 MCP 连接工具,使用 A2A 连接 agent,使用 x402 处理付费工具。 当你的 agent 需要操作一个系统,而不仅仅是回答 prompt 时,请使用 Go Micro。 ## 编写服务 在底层,服务就是一个带有方法的结构体。文档注释和 `@example` 标签会自动成为 AI agent 的工具描述。 ``` package main import ( "context" "go-micro.dev/v6" ) type Request struct { Name string `json:"name"` } type Response struct { Message string `json:"message"` } type Say struct{} // Hello greets a person by name. // @example {"name": "Alice"} func (h *Say) Hello(ctx context.Context, req *Request, rsp *Response) error { rsp.Message = "Hello " + req.Name return nil } func main() { service := micro.NewService("greeter") service.Handle(new(Say)) service.Run() } ``` 运行它,一切都可以访问——REST、gRPC、MCP、agent playground: ``` micro run # Dashboard: http://localhost:8080 # API: http://localhost:8080/api/{service}/{method} # Agent: http://localhost:8080/agent # MCP Tools: http://localhost:8080/mcp/tools ``` 你也可以从模板初始化一个服务: ``` micro new helloworld micro new contacts --template crud ``` ## 构建 Agent Agent 是一个内部包含 LLM 的服务。它具有由 proto 定义的 `Agent.Chat` RPC endpoint,会在 registry 中注册,并且可以像任何服务一样被调用: ``` agent := micro.NewAgent("task-mgr", micro.AgentServices("task", "project"), micro.AgentPrompt("You manage tasks and projects. You understand deadlines and priorities."), micro.AgentProvider("anthropic"), ) agent.Run() ``` agent 从 registry 中发现其服务,将其工具限定在这些服务的 endpoint 中,并在 store 中维护对话记忆。它会注册自身,以便 `micro chat` 和其他 agent 能够找到它。 ``` // Programmatic interaction resp, _ := agent.Ask(ctx, "What tasks are overdue?") fmt.Println(resp.Reply) ``` 多个 agent 通过 RPC 协同工作——每个都是一个带有 `Agent.Chat` endpoint 的服务。`micro chat` 会将请求路由到正确的 agent。 ``` micro agent list # list registered agents micro call task-mgr Agent.Chat '{"message": "What tasks are overdue?"}' ``` ### 规划与委托 每个 agent 都会获得两个内置的 harness 能力,这些能力以工具的形式暴露出来——无需额外设置或单独的 graph runtime: - **`plan`** —— 对于多步骤任务,agent 会在其由 store 支持的记忆中记录一个有序的计划,并在多轮对话中保持清晰的思路。 - **`delegate`** —— agent 将一个独立的子任务交给另一个 agent。如果已注册的 agent 已经拥有相关的服务,交接过程就会通过 RPC 发送给该 agent;否则,会为该子任务创建一个专注的、短暂的子 agent,并拥有其独立的上下文。 这使得智能分布化:一个 agent 不需要知道*如何*做所有事情,只需要知道*谁*知道怎么做。参见 [examples/agent-plan-delegate](examples/agent-plan-delegate/)。 ``` // A sub-agent is just an agent — created with New, talked to with Ask. // delegate-first: reuse a registered agent, or spin up a focused one. resp, _ := agent.Ask(ctx, "Plan the launch, create the tasks, and have comms notify the owner.") ``` ### 内置功能且支持插拔 正如服务由可插拔的抽象层(registry、broker、store)组合而成一样,agent 也是由**模型**、**记忆**和**工具**组合而成的——开箱即用提供合理的默认值,每一个都可以替换。 ``` agent := micro.NewAgent("assistant", micro.AgentProvider("anthropic"), // model — swap the provider micro.AgentMemory(micro.NewInMemory(50)), // memory — default is store-backed & durable micro.AgentTool("weather", "Get the weather for a city", map[string]any{"city": map[string]any{"type": "string"}}, func(ctx context.Context, in map[string]any) (string, error) { return getWeather(in["city"].(string)) // tools beyond your services — any function }), micro.AgentMaxSteps(8), // guardrails ) ``` **记忆**默认是持久化且由 store 支持的(Postgres、NATS KV 或 file),因此 agent 在重启后可以从上次中断的地方继续——或者你也可以通过 `AgentMemory` 提供自己的实现。**工具**默认就是你的服务,此外还可以是你通过 `AgentTool` 注册的任何函数。 ### 付费工具 (x402) 每个 endpoint 都是一个可被 AI 调用的工具——而且它可以是一个*付费*工具。Go Micro 支持 [x402](https://x402.org),即面向 agent 的 HTTP 402 支付标准,因此一个工具可以要求支付稳定币,而 agent 可以自主完成结算。这是一个可选功能,并且框架本身不携带任何加密货币:验证过程被委托给一个可插拔的 facilitator(Coinbase、Alchemy、自行托管),因此 Base 和 Solana 只是不同的 facilitator 而已。 ``` # 在 MCP 网关对工具调用收费(除非您设置了收款地址,否则默认关闭) micro mcp serve --x402_pay_to 0xYourAddress --x402_network solana --x402_amount 10000 # 通过配置文件设置每工具金额 micro mcp serve --x402_config x402.json ``` 请参阅 [支付 (x402) 指南](internal/website/docs/guides/x402-payments.md)。 ### 可被其他 agent 访问 (A2A) 在 Go Micro 系统内部,agent 之间通过 RPC 进行通信。为了使它们能被*其他*框架上的 agent 访问,Go Micro 支持 [Agent2Agent (A2A) 协议](https://a2a-protocol.org)。A2A gateway 从 registry 发现你的 agent,并利用其元数据为每个 agent 生成一个 Agent Card——就像 MCP gateway 从服务 endpoint 派生出工具一样——并将传入的 A2A 任务转换为 agent 的 `Agent.Chat` RPC。无需为每个 agent 编写代码:注册一个 agent 后,即可通过 A2A 访问它。 ``` micro a2a serve --address :4000 # gateway: expose every registered agent over A2A micro a2a list # agents and their Agent Card URLs ``` 或者完全跳过 gateway——一个 agent 可以直接作为其自身的 A2A endpoint 提供服务,在进程内处理任务: ``` micro.NewAgent("task-mgr", micro.AgentServices("task"), micro.AgentA2A(":4000")) ``` 这是双向工作的。要调用另一个框架上的 agent,`a2a.Client` 会被接入到交接工作的两个地方:`flow.A2A(url)` 作为一个 workflow 步骤(即跨框架的 `Dispatch`),以及从 agent 内部 `delegate` 到一个 `http(s)` URL。 MCP 将你的服务作为工具暴露出来;而 A2A 将你的 agent 作为 agent 暴露出来。请参阅 [A2A 指南](internal/website/docs/guides/a2a-protocol.md)。 ## 功能特性 ### AI | 功能 | 详情 | |---------|---------| | Agent | `micro.NewAgent()` —— 管理服务的智能层 | | 规划与委托 | 内置 agent 工具 —— 规划多步骤工作,将子任务委托给其他 agent | | 可插拔记忆 | 默认提供由 store 支持的持久化对话记忆;可通过 `AgentMemory` 替换 | | 自定义工具 | `AgentTool` —— 除了现有的服务外,还可以将任何函数作为工具提供给 agent | | Guardrails | `MaxSteps`(按次数停止)、`LoopLimit`(停止无进展的重复调用)、`ApproveTool`(human-in-the-loop) | | 工具中间件 | `AgentWrapTool` —— 封装工具的执行过程,用于日志记录、指标收集或重试(类似于 client/server 包装器) | | Workflow | `micro.NewFlow()` —— 事件驱动;支持单一步骤、有序的持久化步骤,或触发某个 agent | | 持久化执行 | 带有 checkpoint 的 flow 步骤能在崩溃后存活,并从停止的地方恢复;默认由 store 支持,且后端可插拔 | | MCP gateway | 每个 endpoint 会自动成为 AI 工具 | | A2A gateway | 每个 agent 都可以通过 Agent2Agent 协议访问;card 从 registry 中生成(`micro a2a`) | | 支付 (x402) | 通过 x402 标准为工具启用可选的按次调用支付;支持可插拔的 facilitator (Base, Solana, …) | | 7 个 LLM provider | Anthropic, OpenAI, Gemini, Groq, Mistral, Together, Atlas Cloud | | 交互式控制台 | `micro run` 包含一个用于与服务对话的聊天控制台 | | 服务生成 | `micro run --prompt` —— 描述一个系统,即可获得运行中的服务 | ### 框架 | 功能 | 详情 | |---------|---------| | 服务注册中心 | mDNS (默认), Consul, etcd | | RPC client/server | gRPC transport,负载均衡,流式处理 | | Pub/sub 事件 | NATS, RabbitMQ, HTTP broker | | Key-value store | File (bbolt), Postgres, NATS KV | | 类型化模型层 | CRUD + 查询,支持 SQLite/Postgres 后端 | | 一切皆可替换 | 所有抽象都是 Go 接口 | ### 开发者体验与部署 | 功能 | 详情 | |---------|---------| | 热重载 | `micro run` 监控文件变动,并在更改时重新构建 | | 模板 | `micro new --template crud/pubsub/api` | | 一键部署 | `micro deploy user@server` —— 通过 SSH + systemd,无需 Docker | ## CLI | 命令 | 用途 | |---------|---------| | `micro run --prompt "..."` | 生成服务和 agent,并启动带有交互式控制台的程序 | | `micro run` | 开发模式:热重载、gateway、交互式控制台 | | `micro run -d` | 后台模式(无控制台) | | `micro chat` | 独立聊天(在不使用 micro run 时) | | `micro agent list` | 列出已注册的 agent | | `micro new myservice` | 初始化一个服务 | | `micro call service endpoint '{}'` | 从 CLI 调用服务或 agent | | `micro build` | 编译生产环境二进制文件 | | `micro deploy user@server` | 通过 SSH + systemd 进行部署 | ## 多服务项目 同时运行多个服务: ``` users := micro.NewService("users", micro.Address(":9001")) orders := micro.NewService("orders", micro.Address(":9002")) users.Handle(new(Users)) orders.Handle(new(Orders)) g := micro.NewGroup(users, orders) g.Run() ``` 或者使用 `micro.mu` 配置文件: ``` service users path ./users service orders path ./orders depends users ``` ## 数据模型 具备 CRUD 和查询功能的类型化持久化存储: ``` type User struct { ID string `json:"id" model:"key"` Name string `json:"name"` Email string `json:"email" model:"index"` } db := service.Model() db.Register(&User{}) db.Create(ctx, &User{ID: "1", Name: "Alice", Email: "alice@example.com"}) var results []*User db.List(ctx, &results, model.Where("email", "alice@example.com")) ``` 后端:memory(默认)、SQLite、Postgres。 ## AI 提供商 只需更改一处 import 即可切换 provider——各处接口保持一致: | Provider | 默认模型 | |----------|---------------| | Anthropic | `claude-sonnet-4-20250514` | | OpenAI | `gpt-4o` | | Google Gemini | `gemini-2.5-flash` | | Groq | `llama-3.3-70b-versatile` | | Mistral | `mistral-large-latest` | | Together AI | `Llama-3.3-70B-Instruct-Turbo` | | Atlas Cloud | `llama-3.3-70b` | ``` m := ai.New("anthropic", ai.WithAPIKey(key)) resp, _ := m.Generate(ctx, &ai.Request{Prompt: "hello"}) ``` ## 示例 - [hello-world](examples/hello-world/) —— 基 RPC 服务 - [multi-service](examples/multi-service/) —— 单个二进制文件中的多个服务 - [mcp](examples/mcp/) —— 与 AI agent 的 MCP 集成 - [agent-plan-delegate](examples/agent-plan-delegate/) —— Agent 规划和多 agent 委托 - [grpc-interop](examples/grpc-interop/) —— 从任何 gRPC client 调用 go-micro 查看[所有示例](examples/README.md)。 ## 文档 - [入门指南](internal/website/docs/getting-started.md) - [AI 集成](internal/website/docs/ai-integration.md) - [Agent 与 Workflow](internal/website/docs/guides/agents-and-workflows.md) - [Agent 设计](internal/docs/AGENT_DESIGN.md) - [规划与委托](internal/website/docs/guides/plan-delegate.md) - [Agent Guardrails](internal/website/docs/guides/agent-guardrails.md) - [支付 (x402)](internal/website/docs/guides/x402-payments.md) - [MCP 与 AI Agent](internal/website/docs/mcp.md) - [数据模型](internal/website/docs/model.md) - [部署](internal/website/docs/deployment.md) - [插件](internal/website/docs/plugins.md) 包参考文档:https://pkg.go.dev/go-micro.dev/v6
标签:A2A协议, AI智能体, EVTX分析, Go, MCP, Prisma Cloud, Python工具, Ruby工具, 分布式系统, 响应大小分析, 微服务框架, 日志审计, 测试用例