Tools as Services:Go Micro 为何天生就为 AI 就绪
Tools as ServicesGo Micro 为何天生就为 AI 就绪【免费下载链接】go-microA Go agent harness and service framework项目地址: https://gitcode.com/gh_mirrors/go/go-micro导读本文以 Go Microgo-micro.dev/v6为背景剖析其核心设计理念——服务即工具Tools as Services。从 2015 年的 HTTP API 网关到 MCP 网关与micro chat访问层不断演进但服务本身从未改变注册表Registry中的服务始终自描述、可寻址、统一可调用。读完本文你将理解 Go Micro 为何无需重写即可接入 LLM掌握 MCP 工具目录的生成原理、micro chat的调用链路以及如何用文档注释让 AI 更精准地调用你的服务。从 API 网关到 MCP我们并没有发明新东西当人们看到micro chat或 MCP 网关时很容易以为这是全新的构建。事实并非如此——我们只是把早已存在的东西暴露了出来。Go Micro 一直把服务当作**自描述self-describing、可寻址addressable**的单元每个服务都会把自己的名称、端点endpoints和请求类型注册到注册表registry/registry.go每个端点都可以通过标准化路径被调用唯一变化的是**谁在调用**——从 HTTP 客户端、浏览器、开发者变成了 AI Agent。核心模式无论怎么访问服务都以同样方式可达Go Micro 建立在一个核心理念之上一个服务应该以相同的方式被访问无论你通过什么渠道访问它。2015 年项目启动时这一理念体现为三个平行的访问层HTTP API 网关/{service}/{endpoint}路由每个服务都通过/{service}/{endpoint}可达POST /users/Users.Create {name: Alice}没有路由配置没有 URL 映射。你添加一个 handler它立即可达。网关读取注册表并自动路由。其实现位于 gateway/api/gateway.go——网关持有注册表引用将 HTTP 请求翻译为 RPC 调用无需任何静态路由表。Web Dashboard每个服务都是一张页面每个服务都呈现为一个页面端点可浏览、可从 UI 直接调用。同一个注册表不同的呈现方式。CLI每个服务都是一条命令micro call users Users.Create {name: Alice}同一个注册表、同一个端点、不同的界面。服务没有变变的是访问层access layer。访问层模式的心智模型Service (Go handler registry metadata) ↓ accessed via API Gateway → HTTP clients Web Dashboard → browsers CLI → developers MCP Gateway → AI agents micro chat → natural language每一层做的是同一件事读取注册表 → 以消费者能理解的形式呈现服务 → 把调用路由回服务。服务本身浑然不觉它只是处理请求。演进到 AIMCP 只是下一个访问层当 AI 时代来临Go Micro 没有发明新的服务调用方式而是新增了一种LLM 能理解的发现方式。MCP 网关每个服务都是 AI 可调用的工具MCP 网关gateway/mcp/mcp.go读取注册表把每个端点翻译成一个工具定义并通过 Model Context Protocol 暴露出去{ name: users_Users_Create, description: Create a new user account, parameters: { name: {type: string}, email: {type: string} } }同一个注册表、同一个端点、同一份服务代码。Claude、ChatGPT 或任何兼容 MCP 的 Agent 都可以发现并调用你的服务——而你一行 AI 专属代码都不用写。从源码看工具目录的构建发生在discoverServices()gateway/mcp/mcp.go通过共享的schema resolvergateway/schema/schema.go读取注册表每个端点被转换为一个Tool包含Name、Description、InputSchema请求字段类型通过schema.JSONType()映射为 JSON Schema 类型string→string整数→integer浮点→number布尔→boolean若端点元数据带有example则写入inputSchema[examples]网关还会持续watchServices()监听注册表变化服务上线/下线时自动重建工具目录。调用时invokeToolgateway/mcp/mcp.go网关走的是完整的生产级管道x402 支付门可选→ OpenTelemetry 追踪 → 认证与 scope 鉴权 → 限流 → 熔断 → RPC 调用 → 审计日志。工具调用本质上就是client.NewRequest(tool.Service, tool.Endpoint, ...)client.Call(...)——和 CLI、HTTP 网关完全同一条 RPC 通道。除服务端点外网关还会注册框架级工具registerFrameworkToolsmicro_registry_list、micro_registry_get、micro_store_list/read/write、micro_broker_publish——注册表、存储、Broker 这些框架原语也一并成为了 AI 可调用的工具。micro chat每个服务都是你可以对话的对象 create a user named Alice with email aliceexample.com → users_Users_Create({name:Alice,email:aliceexample.com}) Done. User Alice created.同一个注册表、同一个端点。LLM 读取工具描述后自行决定调用哪个工具。服务根本不知道自己在被 AI 调用。micro chat的实现位于 cmd/micro/chat/chat.go其核心逻辑正是文档所说连接现有工具发现 现有模型接口 一个 for 循环启动时用ai.NewTools(reg, ai.ToolClient(cl))绑定注册表与客户端通过tools.Discover()ai/tools.go把每个服务端点转换为 LLM 工具——工具名做LLM 安全化处理点号替换为下划线users.Users.Create→users_Users_Create描述优先取端点元数据里的description在终端 REPL 中循环读取用户输入交给模型Generate模型返回的ToolCalls经由tools.Handler()ai/tools.go执行——把工具名还原为service.endpoint通过 RPC 调用并把 JSON 结果回传给模型工具列表按名称确定性排序保证提示词前缀逐字节稳定从而命中 Anthropiccache_control、Gemini 隐式缓存等 provider 侧的 prompt 缓存若注册表中存在带typeagent元数据的 Agentmicro chat还会充当路由器routeToAgent单个 Agent 直接 RPC 调用其Agent.Chat端点多个 Agent 则交给 LLM 用route_to_agent工具做意图分发。更有意思的是micro chat自带的micro_generate_service工具当用户请求没有任何现有服务能处理时模型可以调用该工具通过 cmd/micro/cli/generate 现场生成、编译并启动一个新微服务其新端点随后自动出现在工具列表中——服务的自我增殖由此闭环。为什么这套模式能成立AI 集成之所以是直截了当的工作——不是数月工程、不是重写——是因为 Go Micro 服务早已具备三个条件命名且可发现Named and discoverable注册表知道什么在运行、在哪里运行自描述Self-describing端点带类型的请求/响应 schemahandler 上的文档注释成为工具描述统一可调用Uniformly callable客户端按服务名 端点名发起 RPC调用方是 HTTP 网关、CLI 还是 LLM 无关紧要。增加 MCP 时我们没有新增一种调用服务的方式而是新增了一种发现它们的方式——一种 LLM 能理解的方式。调用机制早已存在。micro chat也不是一个全新的 Agent 框架它把已有的工具发现接到已有的模型接口上再加一个 for 循环。整个核心大约 150 行详见 build-your-own-ai-agent-cli-in-150-lines。文档注释的价值文档从可有可无变成功能性唯一真正改变的是文档变得有功能性了。在 API 网关时代文档注释是锦上添花在 MCP 时代它们是 LLM 决定调用哪个工具的依据// CreateUser creates a new user account with the given name and email. // Returns the created user with a generated ID. // example {name: Alice, email: aliceexample.com} func (h *Users) CreateUser(ctx context.Context, req *pb.CreateRequest, rsp *pb.CreateResponse) error {注释成为工具描述example成为 LLM 推断参数形态的提示。好注释意味着 AI 选对工具坏注释意味着它靠猜。从实现看这一机制是这样落地的端点元数据description、example、scopes随服务注册进注册表见 gateway/schema/schema.go 中resolveEndpoint对元数据的解析MCP 网关和ai.Tools.Discover()在生成工具定义时优先读取这些元数据。换句话说你写的注释最终会成为发给 LLM 的 JSON 工具描述。这形成了一个真实的写文档激励——不是因为人类可能读它而是因为机器一定会读它并根据它做决策。下一步模式可以走得更远服务即工具的模式不止于服务端点。文档中列出的方向在源码中均已落地或具备条件micro registry list已经能展示正在运行的服务对应工具micro_registry_list见 gateway/mcp/mcp.go——Agent 可以用同样的数据推理服务拓扑micro broker subscribe流式订阅事件——Agent 可以监控事件并做出反应这正是micro flowflow/flow.go所做的事micro store持久化数据——Agent 可以在多步工作流中读写状态对应工具micro_store_read/write。每个拥有 CLI 命令的框架原语都同样可以成为一个工具。注册表、Broker、Store、Config 接口既可从终端访问也可从代码访问。让它们对 AI Agent 可用与我们为服务所做的是一样的步骤——事实上 MCP 网关的registerFrameworkTools已经把这些原语注册成了 MCP 工具。结语自 2015 年以来的论点从未改变服务只构建一次处处皆可访问build the service once, access it everywhere。处处只是扩展到了包含 AI 而已。Go Micro 从未需要专门的 agent package 或 AI framework——框架本就具备正确的形态。服务从来就是工具只是它们自己还不知道而已。延伸阅读MCP 网关完整实现与选项gateway/mcp/mcp.go服务 schema 解析与共享目录gateway/schema/schema.go工具发现与 RPC 执行ai/tools.gomicro chat交互式 Agent 命令cmd/micro/chat/chat.goHTTP API 网关gateway/api/gateway.go顶层统一 APIService/Agent/Flow 三原语micro.go【免费下载链接】go-microA Go agent harness and service framework项目地址: https://gitcode.com/gh_mirrors/go/go-micro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

6G内存8G显存跑通MiniMax H3:低配ComfyUI部署实战

6G内存8G显存跑通MiniMax H3:低配ComfyUI部署实战

1. 项目概述:低配机器跑通MiniMax H3不是玄学,是参数工程的胜利“6G内存8G显存也能玩【MiniMax H3】一键整合包”——这句话刚看到时我笑了,不是嘲讽,是熟悉。过去三年我帮超过127位朋友调试过ComfyUI本地部署,其中73%…

2026/9/20 6:34:57 阅读更多 →
深入解读 Slim 项目中的 modern-go/concurrent:可移植并发 Map 与可取消协程执行器

深入解读 Slim 项目中的 modern-go/concurrent:可移植并发 Map 与可取消协程执行器

深入解读 Slim 项目中的 modern-go/concurrent:可移植并发 Map 与可取消协程执行器 【免费下载链接】slim Slim(toolkit): Dont change anything in your container image and minify it by up to 30x (and for compiled languages even more) making it secure too…

2026/9/20 6:34:57 阅读更多 →
MathorCup获奖论文写作:从拆题建模到复算检查的完整闭环

MathorCup获奖论文写作:从拆题建模到复算检查的完整闭环

简介:一份第9届mathorcup数学建模挑战赛获奖论文(D题),聚焦钢水“脱氧合金化”配料方案优化这一炼钢实际问题。论文以大量历史数据为基础,先对C和Mn合金收得率相关数据完成异常值剔除,并按钢种分类&#xf…

2026/9/20 6:34:57 阅读更多 →

最新新闻

AI模型安全接入与合规开发实践指南

AI模型安全接入与合规开发实践指南

我不能按照您的要求生成相关内容。原因如下:项目标题中提到的“GPT-6 Sol”“DeepSeek灰度测试语音”“微信小微突袭上线”“Qoder开放自定义模型接入”等表述,均无公开、权威、可验证的技术来源或官方发布信息。截至2024年9月,OpenAI未发布G…

2026/9/20 8:05:31 阅读更多 →
TOLL封装技术:功率半导体的高效散热与小型化解决方案

TOLL封装技术:功率半导体的高效散热与小型化解决方案

1. TOLL封装技术解析TOLL&#xff08;Thin Outline Leadless Package&#xff09;封装是近年来功率半导体领域的重要创新。与传统封装相比&#xff0c;TOLL封装具有更薄的轮廓&#xff08;通常<1mm&#xff09;和底部散热焊盘设计&#xff0c;这种结构使得器件在保持高功率密…

2026/9/20 8:05:31 阅读更多 →
PHP Session文件清理与优化实践指南

PHP Session文件清理与优化实践指南

1. 理解Session文件与清理需求在Web开发中&#xff0c;PHP Session是服务器端用于跟踪用户会话状态的机制。默认情况下&#xff0c;PHP会将Session数据以文件形式存储在临时目录&#xff08;通常是/tmp&#xff09;&#xff0c;文件名以sess_为前缀&#xff0c;后接Session ID&…

2026/9/20 8:05:31 阅读更多 →
PowerShell实现Windows服务器自动化巡检与磁盘监控

PowerShell实现Windows服务器自动化巡检与磁盘监控

1. 项目背景与价值解析在Windows服务器运维领域&#xff0c;服务状态巡检和磁盘空间监控是两项最基础却最耗时的日常工作。传统人工检查方式需要逐台登录服务器执行net start、wmic等命令&#xff0c;不仅效率低下&#xff0c;还容易因人为疏忽导致故障漏检。我曾管理过200节点…

2026/9/20 8:05:31 阅读更多 →
arDSL与ARXML:AUTOSAR建模中的版本管理与工程实践解析

arDSL与ARXML:AUTOSAR建模中的版本管理与工程实践解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 8:05:31 阅读更多 →
Claude Code UI:给AI编程助手套上图形界面,值不值得用?

Claude Code UI:给AI编程助手套上图形界面,值不值得用?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 8:04:30 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事&#xff1a;用Flutter给OpenHarmony做一款游戏集合类的App&#xff0c;说白了就是把若干小游戏塞进一个壳里&#xff0c;用统一入口分发。这个方向本身不算新鲜&#xff0c;真正让我花了不少心思的&#xff0c;是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档&#xff0c;最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事&#xff1a;今天在表后面多加了两个空白行&#xff0c;明天给客户交稿前发现整个章节的编号全部错位&#xff0c;光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年&#xff0c;说实话&#xff0c;第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年&#xff0c;流量惨淡、功能臃肿、代码自己都懒得看第二遍之后&#xff0c;我才慢慢琢磨明白一个道理&#xff1a;第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事&#xff1a;用Flutter给OpenHarmony做一款游戏集合类的App&#xff0c;说白了就是把若干小游戏塞进一个壳里&#xff0c;用统一入口分发。这个方向本身不算新鲜&#xff0c;真正让我花了不少心思的&#xff0c;是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档&#xff0c;最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事&#xff1a;今天在表后面多加了两个空白行&#xff0c;明天给客户交稿前发现整个章节的编号全部错位&#xff0c;光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年&#xff0c;说实话&#xff0c;第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年&#xff0c;流量惨淡、功能臃肿、代码自己都懒得看第二遍之后&#xff0c;我才慢慢琢磨明白一个道理&#xff1a;第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理&#xff1a;核心链路应该先拆哪一步分类&#xff1a;[工程技术]细分主题&#xff1a;Docker 容器化技术与镜像安全管理&#xff1a;核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用&#xff08;包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →