Files
wehub-resource-sync 5134931260
govulncheck / govulncheck (push) Waiting to run
Harness (E2E) / Harnesses (mock LLM) (push) Waiting to run
Harness (E2E) / Provider harnesses (live LLM conformance) (push) Waiting to run
Lint / golangci-lint (push) Waiting to run
Run Tests / Unit Tests (push) Waiting to run
Run Tests / Etcd Integration Tests (push) Waiting to run
docs: make Chinese README the default
2026-07-13 10:35:29 +00:00

511 lines
23 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- WEHUB_ZH_README -->
> [!NOTE]
> 本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
> [English](./README.en.md) · [原始项目](https://github.com/micro/go-micro) · [上游 README](https://github.com/micro/go-micro/blob/HEAD/README.md)
> 原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
# 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) [![Discord](https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white&style=flat-square)](https://discord.gg/G8Gk5j3uXr)
Go Micro 是一个面向 Go 的 **agent harness(智能体运行时框架)** 与服务框架。
**社区:** 有问题、有想法,或想与我们一起构建?[加入 Discord](https://discord.gg/G8Gk5j3uXr).
Harness 是围绕智能体的运行时:它能调用的工具、它保留的记忆、约束它的护栏、触发它的工作流、它依赖的服务,以及其他智能体与之通信所使用的协议。
Go Micro 以 Go 代码的形式提供该 harness。构建一个智能体即可获得模型、记忆、工具、规划、委派、护栏与服务发现;可通过 [MCP](https://modelcontextprotocol.io/) 和 [A2A](https://a2a-protocol.org). 被访问。编写服务后,每个端点都会成为 AI 可调用的工具。用持久化 flow 编排确定性部分。智能体、服务与 flow 共享同一运行时,因为智能体本质上是一个分布式系统,构建智能体就是在构建服务。
## 赞助商
<a href="https://go-micro.dev/blog/3"><img src="https://upload.wikimedia.org/wikipedia/commons/7/78/Anthropic_logo.svg" height="26" /></a>
&nbsp;&nbsp;
<a href="https://go-micro.dev/blog/29"><img src="https://upload.wikimedia.org/wikipedia/commons/4/4d/OpenAI_Logo.svg" height="26" /></a>
&nbsp;&nbsp;
<a href="https://go-micro.dev/blog/8"><img src="https://www.atlascloud.ai/logo.svg" height="26" /></a>
**想支持 Go Micro 并在此展示你的 logo** [成为赞助商](https://discord.gg/G8Gk5j3uXr) — 可通过 Discord 联系。
## 商业支持
要在生产环境运行 Go Micro,或基于它进行开发并需要帮助?可直接向维护者购买 **支持、咨询、培训与 retainer(长期服务)** — 这些也是项目得以持续维护的支撑。详见 [**Support**](SUPPORT.md) 中的层级说明,或 [提交请求](https://github.com/micro/go-micro/issues/new?template=commercial_support.md).
## 目录
- [快速开始](#quick-start)
- [首个智能体入门路径](#first-agent-on-ramp)
- [为何需要 Agent Harness](#why-an-agent-harness)
- [编写服务](#writing-services)
- [构建智能体](#building-agents) — [规划与委派](#plan--delegate)、[可插拔](#batteries-included-pluggable)、[付费工具 (x402)](#paid-tools-x402)、[A2A](#reachable-by-other-agents-a2a)
- [功能特性](#features)
- [CLI](#cli)
- [自主改进循环](#autonomous-improvement-loop)
- [多服务项目](#multi-service-projects)
- [数据模型](#data-model)
- [AI 提供商](#ai-providers)
- [示例](#examples)
- [商业支持](#commercial-support)
- [文档](#docs)
## 快速开始
安装 CLI
```bash
# Binary (no Go required)
curl -fsSL https://go-micro.dev/install.sh | sh
# Or with Go
go install go-micro.dev/v6/cmd/micro@latest
```
如果安装或 `PATH` 检查失败,在搭建第一个服务之前,请先参阅 [安装故障排除指南](internal/website/docs/guides/install-troubleshooting.md)。
### 最快上手 — 无需 API key
搭建服务、运行并调用:
```bash
micro new helloworld
cd helloworld
micro run
```
然后在另一个终端中:
```bash
curl -X POST http://localhost:8080/api/helloworld/Helloworld.Call \
-H 'Content-Type: application/json' -d '{"name":"World"}'
```
这条 安装 → 搭建 → 运行 → 调用 路径由无密钥 CI harness 覆盖。若要在无网络访问或提供商密钥的情况下,仅验证本地安装器与首次运行 CLI 边界,请使用:
```bash
make install-smoke
```
若要验证聚焦的 CLI 内循环契约 — 搭建 → 运行/聊天/检查 → 部署 dry-run — 请使用:
```bash
make inner-loop
```
若仅运行 CI 守护的有序 [0→hero 服务 → 智能体 → 工作流 脚本](internal/website/docs/guides/zero-to-hero.md),请使用:
```bash
make zero-to-hero-transcript
```
若要运行更广泛的本地契约(包括该脚本、聊天/检查 CLI 边界以及部署 dry-run),请使用:
```bash
make harness
```
### 首个智能体入门路径
完成安装并进行首次 `micro new`/`micro run` 冒烟检查后,按以下顺序走可逐步跟进的智能体路径:
1. [安装故障排除](internal/website/docs/guides/install-troubleshooting.md) — 在开始智能体相关工作前,验证二进制安装器或 `go install``PATH``micro --version`,以及无密钥冒烟路径。
运行 `make docs-wayfinding` 以验证聚焦的无密钥 docs/CLI 契约,确保本 README 与网站命令与已安装的 CLI 保持一致。
2. `micro agent demo` — 从已安装的 CLI 打印无需提供商的首个智能体演示命令及后续文档步骤。
3. `micro agent quickcheck`(或 `micro agent debug`)— 当 搭建 → 运行 → 聊天 → 检查 流程卡住时,在深入完整调试指南前,先打印简短恢复路线图。
4. `micro examples` — 按可复制/粘贴顺序打印维护中的、无需提供商的可运行示例。
5. `micro zero-to-hero` — 打印维护中的一条命令无密钥生命周期 harness 与可运行示例。
6. [示例导航索引](examples/INDEX.md) — 从一张地图中选择最小的无密钥首个智能体示例、维护中的 [0→hero 支持参考](examples/support/),以及后续互操作示例。
7. [最小首个智能体示例](examples/first-agent/) — 使用 mock 模型且无需提供商密钥,运行一个由服务支撑的智能体。
8. [无密钥首个智能体脚本](internal/website/docs/guides/no-secret-first-agent.md) — 使用 mock 模型运行维护中的支持智能体,在无密钥情况下见证 服务 → 智能体 → 工作流 成功。
9. [你的第一个智能体](internal/website/docs/guides/your-first-agent.md) — 构建一个由服务支撑的智能体,并通过 `micro chat` 与之对话。
10. [调试你的智能体](internal/website/docs/guides/debugging-agents.md) — 在 `micro run` 之前使用 `micro agent preflight`,在 `micro run` 之后使用 `micro agent doctor`
然后使用 `micro chat``micro inspect agent <name>` 恢复运行历史、记忆
以及提供商检查,以应对首次对话出现意外行为的情况。
11. [0→hero 参考](internal/website/docs/guides/zero-to-hero.md) — 通过与服务维护 harness 一致的 搭建、运行、聊天、检查、flow
历史与部署 dry-run 命令,完成 服务 → 智能体 → 工作流 循环。
### 自主改进循环
想将同样的 服务 → 智能体 → 工作流 生命周期应用到你的仓库?`micro loop` 会搭建 Go
Micro 自身使用的自主改进循环:North Star、排序后的问题队列、角色提示词、GitHub Actions
工作流,以及面向 CI 门禁 PR 的验证。
```bash
micro loop init --roles all
micro loop verify
```
在启用定时任务之前,请配置 dispatch token,例如
`CODEX_TRIGGER_TOKEN`,用必需的 CI 检查保护默认分支
(对本仓库为 `go build ./...``go test ./...``golangci-lint run ./...`),
并在每个增量中为 `.github/loop/PRIORITIES.md` 填入一个范围明确的问题。设置清单与运行模型请参阅 [`micro loop` 快速开始](internal/website/docs/guides/micro-loop.md)。
### 通过提示词生成 — 需要 LLM key
设置提供商密钥,描述你的需求,AI 会设计服务、编写 handler、编译并启动它们:
```bash
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.
```
当你需要尚不存在的能力时,代理会在对话过程中生成一项新服务:
```
> 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
第一波代理框架帮助开发者让模型进入循环。下一个问题是如何运营这个循环:将其连接到真实工具、限定可触及范围、保留状态、将工作路由给专家、从故障中恢复、观测发生了什么,并让其他代理调用它。这就是 harness 工作。
Go Micro 的答案是:让 harness 与你已部署的东西合二为一:
- **工具即服务** — 端点元数据成为工具 schema;RPC 执行调用。
- **代理即服务** — 它们注册、发现、负载均衡,并暴露 `Agent.Chat`
- **工作流即持久化代码路径** — 路径已知时使用 flows;未知时分派给代理。
- **安全落在执行层** — `MaxSteps``LoopLimit``ApproveTool` 以及工具包装器在动作发生处运行。
- **互操作内置** — 工具用 MCP,代理用 A2A,付费工具用 x402。
当代理需要操作系统而不仅是回答提示时,使用 Go Micro。
## 编写服务
底层而言,服务是带方法的 struct。文档注释和 `@example` 标签会自动成为 AI 代理的工具描述。
```go
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
```bash
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
```
你也可以从模板脚手架生成服务:
```bash
micro new helloworld
micro new contacts --template crud
```
## 构建代理
代理是内置 LLM 的服务。它拥有 proto 定义的 `Agent.Chat` RPC 端点,在 registry 中注册,并可像任何服务一样被调用:
```go
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()
```
代理从 registry 发现其服务,将工具限定到对应端点,并在 store 中维护对话记忆。它会自我注册,以便 `micro chat` 及其他代理能找到它。
```go
// Programmatic interaction
resp, _ := agent.Ask(ctx, "What tasks are overdue?")
fmt.Println(resp.Reply)
```
多个代理通过 RPC 协调——每个都是带有 `Agent.Chat` 端点的服务。`micro chat` 会路由到正确的那一个。
```bash
micro agent list # list registered agents
micro call task-mgr Agent.Chat '{"message": "What tasks are overdue?"}'
```
### 规划与委托(Plan & Delegate
每个代理都具备两种内置 harness 能力,以工具形式暴露——无需额外设置或独立的图运行时:
- **`plan`** — 对于多步骤工作,代理在其 store 支撑的记忆中记录有序计划,并在多轮对话中保持方向。
- **`delegate`** — 代理将自包含的子任务交给另一个代理。若已注册的代理已拥有相关服务,则通过 RPC 交接给该代理;否则会为该子任务创建一个专注、短命的子代理,并配备独立隔离的上下文。
这让智能保持分布式:代理不必知道*如何*完成一切,只需知道*谁*来做。参见 [examples/agent-plan-delegate](examples/agent-plan-delegate/)。
```go
// 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),代理组合 **model**、**memory** 和 **tools**——开箱即用的合理默认,每一项都可替换。
```go
agent := micro.NewAgent("assistant",
micro.AgentProvider("anthropic"), // model — swap the provider
micro.AgentCompactMemory(40, 12), // memory — durable, summarized, recallable
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
)
```
**Memory(记忆)** 默认持久且由 store 支撑(Postgres、NATS KV 或 file),因此代理在重启后可从上次停下的地方继续——也可用 `AgentMemory` 提供你自己的实现。长期运行的代理可选用 `AgentCompactMemory(maxMessages, keepRecent)`:较早轮次被折叠为确定性摘要,最近轮次保持原文,相关归档轮次在未来请求时被召回,而无需重放整段对话。**Tools(工具)** 自动就是你的服务,加上你用 `AgentTool` 注册的任何函数。
### 付费工具(x402
每个端点都是 AI 可调用的工具——而且可以是*付费*工具。Go Micro 支持 [x402](https://x402.org), 面向代理的 HTTP 402 支付标准,因此工具可要求稳定币支付,代理可自主结算。这是可选功能,框架本身不携带加密货币逻辑:验证委托给可插拔的 facilitatorCoinbase、Alchemy、自托管),因此 Base 和 Solana 只是不同的 facilitator。
```bash
# Charge for tool calls at the MCP gateway (off unless you set a pay-to address)
micro mcp serve --x402_pay_to 0xYourAddress --x402_network solana --x402_amount 10000
# Per-tool amounts via a config file
micro mcp serve --x402_config x402.json
```
参见 [Payments (x402) guide](internal/website/docs/guides/x402-payments.md)。
### 可被其他代理访问(A2A
在 Go Micro 系统内,代理通过 RPC 相互访问。要让*其他*框架上的代理也能访问它们,Go Micro 使用 [Agent2Agent (A2A) protocol](https://a2a-protocol.org). A2A 网关从 registry 发现你的代理,根据其元数据为每个代理生成 Agent Card——与 MCP 网关从服务端点派生工具的方式相同——并将传入的 A2A 任务翻译为代理的 `Agent.Chat` RPC。无需为每个代理编写代码:注册代理即可通过 A2A 访问。
```bash
micro a2a serve --address :4000 # gateway: expose every registered agent over A2A
micro a2a list # agents and their Agent Card URLs
```
或者完全跳过网关——代理可直接提供自己的 A2A 端点,在进程内处理任务:
```go
micro.NewAgent("task-mgr", micro.AgentServices("task"), micro.AgentA2A(":4000"))
```
双向皆可。要调用其他框架上的代理,`a2a.Client` 会接入两处交接工作的地方:作为工作流步骤的 `flow.A2A(url)`(跨框架的 `Dispatch`),以及从代理内部向 `http(s)` URL 发起的 `delegate`
MCP 将你的服务暴露为工具;A2A 将你的代理暴露为代理。参见 [A2A guide](internal/website/docs/guides/a2a-protocol.md)。
## 功能特性
### AI
| 功能 | 详情 |
|---------|---------|
| Agents(智能体) | `micro.NewAgent()` — 管理服务的智能层 |
| Plan & delegate(规划与委派) | 内置 agent 工具 — 规划多步骤工作,将子任务委派给其他 agent |
| Pluggable memory(可插拔记忆) | 默认基于持久化存储的对话记忆;可通过 `AgentMemory` 替换 |
| Custom tools(自定义工具) | `AgentTool` — 为 agent 提供除服务之外的任意函数作为工具 |
| Guardrails(护栏) | `MaxSteps`(按次数停止)、`LoopLimit`(停止重复的无进展调用)、`ApproveTool`human-in-the-loop,人在回路) |
| Tool middleware(工具中间件) | `AgentWrapTool` — 包装工具执行以实现日志、指标或重试(类似 client/server wrappers |
| Workflows(工作流) | `micro.NewFlow()` — 事件驱动;单步、有序持久化步骤,或触发 agent |
| Durable execution(持久化执行) | 带检查点的流程步骤可在崩溃后存活并从停止处恢复;默认基于存储,后端可插拔 |
| MCP gateway | 每个 endpoint 自动成为 AI 工具 |
| A2A gateway | 每个 agent 均可通过 Agent2Agent 协议访问;卡片由 registry`micro a2a`)生成 |
| Payments (x402) | 通过 x402 标准按调用选择性为工具付费;facilitator 可插拔(Base、Solana 等) |
| 9 个 LLM 提供商 | Anthropic、OpenAI、Gemini、Groq、Mistral、Together、Atlas Cloud、MiniMax、Ollama(本地 + 云端) |
| Interactive console(交互式控制台) | `micro run` 包含与服务对话的聊天控制台 |
| Service generation(服务生成) | `micro run --prompt` — 描述系统即可获得运行中的服务 |
### 框架
| 功能 | 详情 |
|---------|---------|
| Service registry(服务注册) | mDNS(默认)、Consul、etcd |
| RPC client/server | gRPC 传输、负载均衡、流式传输 |
| Pub/sub events(发布/订阅事件) | NATS、RabbitMQ、HTTP broker |
| Key-value store(键值存储) | File (bbolt)、Postgres、NATS KV |
| Typed model layer(类型化模型层) | CRUD + 查询,SQLite/Postgres 后端 |
| Everything swappable(一切皆可替换) | 所有抽象均为 Go interface |
### 开发者体验与部署
| 功能 | 详情 |
|---------|---------|
| Hot reload(热重载) | `micro run` 监听文件变更并重新构建 |
| Templates(模板) | `micro new --template crud/pubsub/api` |
| One-command deploy(一键部署) | `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 部署 |
## 多服务项目
同时运行多个服务:
```go
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 与查询:
```go
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 即可切换提供商 — 各处使用相同 interface
| 提供商 | 默认模型 |
|----------|---------------|
| 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 | `meta-llama/Llama-3.3-70B-Instruct-Turbo` |
| Atlas Cloud | `deepseek-ai/DeepSeek-V3-0324` |
| MiniMax | `MiniMax-M3` |
| Ollama | `llama3.2` (local) |
```go
m := ai.New("anthropic", ai.WithAPIKey(key))
resp, _ := m.Generate(ctx, &ai.Request{Prompt: "hello"})
```
## 示例
初次接触 agent?请跟随 [first-agent on-ramp](#first-agent-on-ramp),然后使用 [examples index](examples/README.md) 查看完整的 services → agents → workflows 映射。
- [hello-world](examples/hello-world/) — 基础 RPC 服务
- [multi-service](examples/multi-service/) — 单个二进制文件中运行多个服务
- [mcp](examples/mcp/) — 与 AI agent 的 MCP 集成
- [first-agent](examples/first-agent/) — 最小化、无需 provider 的服务支撑型 agent
- [agent-plan-delegate](examples/agent-plan-delegate/) — Agent 规划与多 agent 委派
- [agent-durable](examples/agent-durable/) — 检查点与恢复 agent 运行,无需重放已完成的工具副作用
- [grpc-interop](examples/grpc-interop/) — 从任意 gRPC 客户端调用 go-micro
查看 [all examples](examples/README.md)。
## 文档
- [入门指南](internal/website/docs/getting-started.md)
- [AI 集成](internal/website/docs/ai-integration.md)
- [你的第一个 Agent](internal/website/docs/guides/your-first-agent.md)
- [0→hero 参考](internal/website/docs/guides/zero-to-hero.md)
- [Agent 与工作流](internal/website/docs/guides/agents-and-workflows.md)
- [Agent 设计](internal/docs/AGENT_DESIGN.md)
- [规划与委派](internal/website/docs/guides/plan-delegate.md)
- [Agent 护栏](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