<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>TRPC-Agent-Go on Zampo Blog</title><link>https://blog.cpdd.fyi/tags/trpc-agent-go/</link><description>Recent content in TRPC-Agent-Go on Zampo Blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 28 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.cpdd.fyi/tags/trpc-agent-go/index.xml" rel="self" type="application/rss+xml"/><item><title>God Prompt → MCP → Agent Skills：AI Agent 工程的三次架构演进</title><link>https://blog.cpdd.fyi/posts/agent-skills-evolution/</link><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.cpdd.fyi/posts/agent-skills-evolution/</guid><description>&lt;h2 id="引子"&gt;引子&lt;/h2&gt;
&lt;p&gt;前几天看到一个视频，标题很猛：&amp;ldquo;Anthropic just made AI agents 10X better with new standard&amp;rdquo;——讲的是 agentskills.io。评论区一片叫好，但很少有人问一个更根本的问题：为什么我们需要一个新标准？&lt;/p&gt;
&lt;p&gt;Anthropic 发过的标准不少了。MCP 是其中一个，去年底发布的 agentskills.io 是另一个。但这两个标准解决的根本不是同一类问题——MCP 解决的是连接问题，Skills 解决的是行为问题。而且，这中间还有一整个被大多数人忽略的时代：God Prompt 时代。&lt;/p&gt;
&lt;p&gt;如果你只用 1 个 Agent，写个 2000 字的 system prompt 完全够用。demo 能跑，生产也能跑，顶多偶尔出点小毛病。但当你开始维护 5 个、10 个 Agent 时，God Prompt 的维护成本会指数级上升——这不是模型能力问题，是工程架构问题。&lt;/p&gt;
&lt;p&gt;这篇文章不讲 agentskills.io 的规范细节（感兴趣自己去看官网），而是用我这两年实际使用和构建 Agent 系统的体感，讲三个阶段各自对应的架构思维，以及你现在到底该用什么。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="第一块god-prompt-时代monolith"&gt;第一块：God Prompt 时代——Monolith&lt;/h2&gt;
&lt;h3 id="为什么大家都这么写"&gt;为什么大家都这么写&lt;/h3&gt;
&lt;p&gt;2024 年初我刚接触 Agent 开发时，第一个 reflex 就是往 system prompt 里堆东西。这不是我懒，是整个生态都在这么做。LangChain 的 AgentExecutor、早期的 Claude function calling demo、各种开源 Agent 模板——没有一个不是在示范&amp;quot;把所有逻辑写进 prompt&amp;quot;。&lt;/p&gt;
&lt;p&gt;理由很朴素：简单、直接、见效快。&lt;/p&gt;
&lt;p&gt;你不需要写框架，不需要设计接口，不需要考虑复用。三个工具、两个工作流、五条边界规则——一个 markdown 文件全搞定。改行为就是改 prompt，不用重新编译、不用部署、不用走 CI。对于原型验证阶段来说，这几乎是完美的方案。&lt;/p&gt;</description></item><item><title>tRPC-Agent-Go 深度实践：生产级 Agent 的工程落地之道</title><link>https://blog.cpdd.fyi/posts/trpc-agent-go-deep-dive/</link><pubDate>Fri, 26 Jun 2026 14:00:00 +0800</pubDate><guid>https://blog.cpdd.fyi/posts/trpc-agent-go-deep-dive/</guid><description>&lt;h2 id="从-demo-到生产"&gt;从 Demo 到生产&lt;/h2&gt;
&lt;p&gt;跑通 tRPC-Agent-Go 的 Demo 只需 5 分钟，但上线生产，真正的工程问题才开始浮现：&lt;/p&gt;
&lt;p&gt;Agent 跑了 5 分钟、调了十几个工具，网络抖了一下——整个流程要重来。审批类场景下，Agent 分析完需要人点头，但很多框架把 Agent 设计成全自动黑盒，压根没有中断点。团队有 30 个 Agent，每个挂不同的 prompt 和脚本，靠什么管理？其他团队的 Agent 服务（也许是 Python 的 ADK）怎么调？外部的 MCP 工具怎么接？&lt;/p&gt;
&lt;p&gt;tRPC-Agent-Go 的三个核心深度特性正好回答这些问题：&lt;strong&gt;GraphAgent 检查点&lt;/strong&gt;（状态持久化与恢复）、&lt;strong&gt;Skills 系统&lt;/strong&gt;（可复用工作流）、&lt;strong&gt;A2A + MCP 协议集成&lt;/strong&gt;（Agent 与外界通信）。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="graphagent-检查点与-human-in-the-loop"&gt;GraphAgent 检查点与 Human-in-the-Loop&lt;/h2&gt;
&lt;p&gt;GraphAgent 是 tRPC-Agent-Go 最大的差异化能力。但没有检查点的图工作流是「玩具」——跑一半断了就是真断了。&lt;/p&gt;
&lt;p&gt;检查点支持两种持久化模式：&lt;strong&gt;谱系持久化&lt;/strong&gt;（保存节点执行轨迹，适合审计合规）和&lt;strong&gt;原子持久化&lt;/strong&gt;（保存完整状态快照，适合长耗时的数据处理流水线）。启用方式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewStateGraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MessagesStateSchema&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;analyze&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;analyzeNode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;approve&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;approveNode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;execute&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;executeNode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddEdge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;analyze&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;approve&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddConditionalEdges&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;approve&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;approvalRouter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;approved&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;execute&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;rejected&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;__end__&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;cp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;checkpointer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;NewInMemoryCheckpointer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;ga&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;graphagent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;audit-workflow&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;graphagent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithStateGraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sg&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;graphagent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithCheckpointer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cp&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;每个节点执行后框架自动持久化。恢复执行时传入检查点 ID：&lt;/p&gt;</description></item><item><title>tRPC-Agent-Go 快速上手：Go 生态终于有了自己的 Agent 框架</title><link>https://blog.cpdd.fyi/posts/trpc-agent-go-quickstart/</link><pubDate>Fri, 26 Jun 2026 10:00:00 +0800</pubDate><guid>https://blog.cpdd.fyi/posts/trpc-agent-go-quickstart/</guid><description>&lt;h2 id="引子go-生态的-agent-空白"&gt;引子：Go 生态的 Agent 空白&lt;/h2&gt;
&lt;p&gt;如果你是一个 Go 后端开发者，过去两年一定被各种 AI Agent 框架刷过屏。LangChain、CrewAI、AutoGen、LangGraph…… 清一色 Python。而你手上的 Go 项目要做 Agent 能力，选项屈指可数：要么嵌一个 Python 子进程（运维噩梦），要么自己手搓胶水代码（重复造轮子），要么指望社区那几个半成品框架。&lt;/p&gt;
&lt;p&gt;这个局面在 2025 年中开始改变。腾讯 tRPC 团队开源了 &lt;strong&gt;tRPC-Agent-Go&lt;/strong&gt;，到今天刚好 13 个月，115 个 Release，1.4k Stars，已经在腾讯元宝、腾讯视频、腾讯新闻等业务线跑过了生产流量。&lt;/p&gt;
&lt;p&gt;这篇文章的目标很简单：&lt;strong&gt;用 10 分钟让你知道 tRPC-Agent-Go 是什么、能不能用、怎么上手&lt;/strong&gt;。第二篇再深入工程落地。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="trpc-agent-go-是什么"&gt;tRPC-Agent-Go 是什么&lt;/h2&gt;
&lt;p&gt;一句话：&lt;strong&gt;tRPC-Agent-Go 是腾讯 tRPC 团队出品的 Go 语言生产级 Agent 框架&lt;/strong&gt;，对标 Python 生态的 LangChain / LangGraph / CrewAI。&lt;/p&gt;
&lt;p&gt;它的定位不是&amp;quot;Go 版的 LangChain&amp;quot;，而是自顶向下重新设计：以 Agent 接口为核心执行单元，以图工作流为高级编排手段，以事件流为通信载体。覆盖了单 Agent 对话、多 Agent 协作、图工作流、MCP/A2A/AG-UI 协议、RAG、可观测性、评测等全栈能力。&lt;/p&gt;
&lt;p&gt;关键背景数据：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;腾讯 tRPC 是覆盖近 200w+ 节点、5w+ 服务的内部 RPC 框架，tRPC-Agent-Go 是其 AI 方向的延伸&lt;/li&gt;
&lt;li&gt;已生产验证于腾讯元宝、腾讯视频、腾讯新闻、IMA、QQ 音乐等业务&lt;/li&gt;
&lt;li&gt;要求 Go 1.21+，Apache-2.0 协议&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不强制依赖 tRPC 框架&lt;/strong&gt;，可以独立使用&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="核心概念速览点到为止"&gt;核心概念速览（点到为止）&lt;/h2&gt;
&lt;p&gt;tRPC-Agent-Go 的核心抽象只有五个 Agent 类型 + 一个 Runner + Tool + Memory，一看就懂。&lt;/p&gt;</description></item></channel></rss>