第14章 知道边界在哪,比知道怎么做更难
前13章你学会了怎么造Agent——脑子、手脚、记忆、规划、安全、部署。但还有一个比技术更重要的问题:Agent能做什么,不能做什么?做错了谁负责?这一章可能是全书"最不技术"的一章,但可能是对你影响最深远的一章。
14.1 Agent能做什么?不能做什么?
14.1.1 Agent的能力边界
不要把Agent当万能药。它有以下明确的能力边界:
能做的事:
| 能力 | 例子 |
|---|---|
| 理解模糊指令 | "帮我安排一个轻松点的周末" |
| 调用外部工具 | 查API、调数据库、发邮件 |
| 多步骤推理 | "先查天气,再推荐穿搭" |
| 处理非结构化数据 | 读PDF、解析聊天记录 |
| 模式识别 | "这些评论都在抱怨物流" |
不能(或不该)做的事:
| 限制 | 原因 |
|---|---|
| 做精确数学计算 | LLM是语言模型,不是计算器 |
| 保证100%正确 | 幻觉问题目前无解 |
| 替代人类判断 | 没有情感、没有价值观 |
| 创造性突破 | 能重组已有的知识,不能发明 |
| 处理超出训练数据的事 | 不知道今天的新闻、你公司的秘密 |
14.1.2 Go开发者的特殊思考
Go开发者在Agent设计上有一种天然的谨慎——因为Go的哲学本身就是"简单、可靠"。你在Go项目里不会用一个"看起来能跑"但内部机制不透明的库。对Agent也应该一样:
go
// ✅ Go的风格:明确的能力声明
type AgentCapabilities struct {
CanSearchWeb bool
CanAccessDB bool
CanSendEmail bool
CanDeleteData bool
MaxTokensPerReq int
}
// ❌ 不Go的风格:模糊的全能Agent
// "它能做任何事" —— 这不是Go的哲学14.2 Agent也会"胡说八道",怎么验证事实?
14.2.1 幻觉是无法根除的
LLM的"幻觉"(生成看似合理但完全错误的内容)是架构性问题,不是bug。它就是一个接话机器——它不"知道"真假,只知道"接什么话最自然"。
能做的不是消除幻觉,而是降低幻觉的影响:
- 用RAG绑定真实数据源(第7章)
- 关键数据用工具验证,不信LLM的"记忆"
- 给用户的回复加置信度标注
- 高风险场景(医疗、法律、金融)设人工审核环节
14.2.2 验证链路
go
func (a *Agent) answerWithVerification(ctx context.Context,
question string) string {
// 1. 生成回答
answer := a.generate(ctx, question)
// 2. 涉及数据 → 调工具验证
if requiresFactCheck(answer) {
facts := a.verifyFacts(ctx, answer)
if !facts.Verified {
return "抱歉,我查到的信息和我的回答不一致," +
"以下是核实后的结果:" + facts.Corrected
}
}
// 3. 返回(带标注)
if answer.Confidence < 0.7 {
return answer.Content + "\n\n⚠️ 以上回答仅供参考,建议核实。"
}
return answer.Content
}14.3 Agent做错了事,谁负责?
14.3.1 这不是技术问题,但你必须想
假设你的Agent帮用户订了一张机票。它订错了日期。用户误了会议,损失了一个大客户。
谁负责?
- Agent?它是软件,没有法律责任主体。
- LLM提供商?他们条款里写着"不保证准确性"。
- 你(开发者)?你写的Agent,你部署的。
- 用户?他确认了错误的信息。
答案是模糊的。目前法律没有明确界定。但有几条原则你可以在设计时就考虑:
- 高风险操作永远要人工确认
- 保留完整的决策日志(谁在什么时间做了什么决定)
- Agent说的话不要包装成"权威"—加免责声明
go
// 决策审计日志
type DecisionLog struct {
Timestamp time.Time
UserID string
AgentAction string
Reason string
ToolCalls []ToolCallRecord
UserConfirmed bool
}
// 每次Agent执行写操作,都记录
func (a *Agent) logDecision(ctx context.Context,
action string, result interface{}) {
db.Create(&DecisionLog{
Timestamp: time.Now(),
AgentAction: action,
Reason: extractReason(result),
ToolCalls: getToolTraces(ctx),
})
}14.4 你的下一个同事,可能是Agent
14.4.1 不是替代人,是改变工作方式
历史上每次技术变革,恐慌的论调都一样:"机器要取代人了"。
纺织机没让裁缝消失——裁缝变成了服装设计师。ATM没让银行柜员消失——柜员变成了理财顾问。
Agent也一样。它不会让程序员消失,但会让只会写CRUD的程序员越来越不值钱。会设计Agent系统、会定义工具接口、会规划工作流的开发者,会越来越贵。
14.4.2 未来已来
这不是空话。2025-2026年的趋势已经很清楚了:
- AI写代码从"玩具"变成了"效率工具"
- Agent从"概念"变成了"产品"
- 招聘JD里"AI Agent开发经验"从"加分项"变成了"优先项"
你学完这本书的时候,已经在这条路上走了15章。你不是在追赶趋势,你已经在趋势里了。
14.5 本章小结
这一章没有代码,但比有代码的章节更重要:
- Agent的能力边界:能理解模糊指令,但不能保证100%正确。Go开发者的谨慎是天生的优势。
- 幻觉无法根除:能做的是降低影响。RAG绑定数据源 + 工具验证 + 置信度标注。
- 责任归属模糊:高风险操作永远要人工确认。保留完整的决策审计日志。
- Agent是同事,不是替代者:改变的是工作方式,不是工作本身。
✅ 知识点检查
学完这一章,试试思考这几个问题:
- [ ] Agent最不适合做的三类事情是什么?
- [ ] 如何降低LLM幻觉的影响?
- [ ] 为什么高风险操作需要人工确认?
- [ ] 你觉得Agent会让你失业吗?为什么?
📚 延伸阅读
- Anthropic MCP 官方博客:https://www.anthropic.com/news/model-context-protocol
- 《The Coming Wave》— Mustafa Suleyman
- 本书配套源码:关注公众号「图解AI系列」免费领取
🎯 下一章预告
第15章,恭喜,你不只会写Agent了——
"没有'最好',只有'最合适'。你的Agent之旅才刚刚开始。"

