智能体问题:可靠性与中途崩溃
智能体的"半途而废"之痛
写代码的人都知道——程序崩溃不可怕,可怕的是崩溃后状态全丢,只能从头再来。
智能体面临的就是这个问题。一个 20 步的自动化任务,执行到第 15 步时 LLM API 超时了,所有中间状态消失。下次运行从第 1 步重新开始,前面的 14 步白做了。如果有副作用(已经发了一封邮件、已经创建了一条数据库记录),那就更麻烦——重做会导致重复操作。
Temporal 的技术博客 2026 年 4 月发表了一篇引起广泛共鸣的文章,核心观点是:AI 可靠性是一个十年前就该解决、现在仍然只解决了一半的问题。我们应该用基础设施手段而非更好模型来解决它。
为什么智能体会中途崩溃?
原因一:LLM 推理本身就是不稳定的
传统软件的执行路径是确定性的——给定相同输入,永远走同一条路。LLM 不是。每一次推理都是一次概率采样,天生带有不确定性:
- API 超时:模型推理慢时,HTTP 请求可能超时中断
- Token 限制:上下文窗口满了,前面的轮次被截断
- Rate Limit:API 调用频率受限,被 429 返回
- 服务降级:高峰期模型响应质量下降
- 随机中断:GPU 集群节点切换、负载均衡导致连接中断
这些问题不是偶尔发生的,在大规模生产环境中是常态。
原因二:智能体状态是"内存态"的
大多数 Agent 框架把执行状态存在内存中:
# 典型的 Agent 循环
state = initial_state
for step in plan:
state = llm_call(step, state) # state 在内存
state = tool_call(step, state) # 一旦进程挂了,state 全丢
传统软件有数据库保驾护航——应用挂了重启后数据还在。Agent 框架呢?进程一死,所有中间推理、工具返回、上下文积累全部消失。
原因三:长链路任务的脆弱性
智能体任务越复杂,包含的步骤越多,执行成功率呈指数下降:
单步成功率 95%
10 步任务成功率: 0.95^10 = 59.9%
20 步任务成功率: 0.95^20 = 35.8%
50 步任务成功率: 0.95^50 = 7.7%
即使每步有 95% 的成功率(这已经是优秀的表现),一个 20 步任务就有近 2/3 的概率在某步失败。而大多数真实业务场景不止 20 步。
智能体问题:多 Agent 协调
一个人干不了所有活
单个智能体再强,也有能力边界。它不可能同时是代码专家、财务分析师、法律顾问和设计师。于是多 Agent 协作成为自然选择——让不同专长的 Agent 各司其职,协同完成复杂任务。
听起来很美好,实战中却是一地鸡毛。
Medium 上有一篇被广泛引用的文章,标题就很直白:《Multi-Agent AI 的黑暗心理学:30 种能摧毁你整个系统的失败模式》。30 种可能是夸张了,但核心观点不虚——多 Agent 系统的复杂度不是线性增长,而是指数增长。2 个 Agent 的协调问题比 1 个 Agent 多不止一倍。
三种协作架构
先理清多 Agent 协作有哪几种模式,再分析各自的问题。
模式一:Orchestrator-Worker(中心调度)
一个"主管" Agent 负责理解任务、分解子任务、分派给专业 Worker Agent,最后汇总结果。
[Orchestrator] → 分派 → [代码 Agent]
→ 分派 → [财务 Agent]
→ 分派 → [设计 Agent]
← 汇总 ← 各 Agent 结果
优点:逻辑清晰、责任划分明确 缺点:Orchestrator 成为单点瓶颈——它既要理解全局,又要管理分发,还要处理冲突
模式二:Pipeline(流水线)
Agent 按照固定顺序串联执行,前一个的输出是后一个的输入。
[需求分析 Agent] → [设计 Agent] → [编码 Agent] → [测试 Agent] → [部署 Agent]
优点:简单、可预测 缺点:无反馈回路——如果测试 Agent 发现问题需要返回设计阶段,流水线很难回溯
智能体问题:工具调用失败
当智能体的"手"不听使唤
如果说幻觉是智能体"脑子"的问题,那工具调用失败就是"手脚"的问题。智能体不仅要思考,还要行动——调用 API、查询数据库、操作文件系统。而但凡涉及外部系统交互,失败的维度比纯文本幻觉要多得多。
Arize AI 2026 年对生产环境智能体的故障分析指出:工具相关失败占 Agent 异常的 40% 以上,其中最危险的不是"调用失败"本身,而是失败后的错误处理——智能体对错误的理解和处理能力,往往比工具调用本身更不可靠。
三大失败模式
模式一:静默错误——最危险的失败
工具返回了错误信息,但智能体没有正确解读,把错误响应当做正常结果继续推理。
典型场景
// 智能体调用天气 API
{"tool": "get_weather", "arguments": {"city": "北京", "date": "2026-07-01"}}
// API 返回错误
{"error": "city_not_found", "message": "City name must be in English: Beijing"}
// 智能体把 json 当成了天气数据继续推理
"根据返回的数据,北京7月1日的湿度和 error 字段显示..."
这比调用直接报错更危险——至少报错时智能体知道出错了,还能重试。静默错误时,智能体浑然不知,把垃圾数据当成金子继续加工。
为什么会发生?
- 错误格式不统一:不同 API 的错误响应结构不同(HTTP 状态码、JSON error 字段、HTML 错误页……),智能体难以用统一逻辑识别
- Prompt 缺少错误处理指令:很多人在 system prompt 里只写了"使用 XX 工具查询",没写"如果工具返回错误,你应该……"
- 模型倾向"继续完成任务":遇到异常数据时,模型的训练倾向是给用户一个答案,而不是停下来讨论 API 报错
模式二:参数构造错误——最常见的失败
智能体理解了要调什么工具,但构造参数时出错。
常见错误类型
- 格式错误:日期传
2026/07/01而 API 要2026-07-01 - 类型错误:传字符串
"5"而 API 要整数5 - 枚举错误:传
"medium"而有效值只有["low", "mid", "high"] - 遗漏必填参数:忘了传
currency字段 - 语义错误:传了合法格式但语义不对,比如把
page_size=100传给了限制最大 50 的分页接口
根因分析
模型对 API 的理解来自 prompt 中的工具描述(Function Schema)。如果描述不够精确——比如某个参数的合法值只写了 string 没有枚举——模型就只能"猜"。
智能体问题:幻觉与事实错误
幻觉:智能体最顽固的问题
如果只能用一个词概括当前 AI 智能体最致命的问题,行业里多数人会选"幻觉"(Hallucination)。通用大模型写诗写周报文采斐然,但让它分析"上季度 A 产品线毛利率下降的原因",它可能编造一串子虚乌有的数据,还附上看起来很专业的百分比。更糟糕的是——语气越自信,越难被非专业用户识破。
Fiddler AI 2026 年的报告给出了一个残酷的数字:生产环境智能体失败率 70%-95%,幻觉是头号杀手。BetterYeah 的调研发现,68% 的企业在 AI 落地中遭遇幻觉问题,其中 32% 因错误累积导致系统性风险。
这不是"模型还不够聪明"的问题。这是智能体的结构性挑战。
从单步错误到幻觉累加
单步幻觉:模型不确定时仍"自信输出"
LLM 的核心训练目标是"合理续写",而不是"如实回答"。当训练数据中缺少相关信息时,模型不会说"我不知道"——它会生成一段看起来连贯但实际上没有事实支撑的文字。
这是因为:
- 训练数据偏差:互联网文本中,自信断言远多于谦虚声明"我不确定"
- 采样机制:模型采样概率最高的 token 序列,不受事实约束
- 缺乏不确定性建模:模型内部没有显式的"置信度"信号传递给输出层
结果:模型在信息不足时的行为是"编造",而非"沉默"。
多步累加:小偏差滚雪球
当智能体执行多步任务时,单步幻觉的破坏力被指数放大。看一个典型场景:
步骤 1:检索客户信息 → 幻觉:编造了不存在的客户 ID
步骤 2:用该 ID 查询订单 → 返回空结果
步骤 3:智能体"推断"该客户是新客户 → 编造注册时间
步骤 4:基于虚假注册时间做客户画像分析 → 输出错误结论
步骤 5:基于错误结论撰写运营建议 → 决策偏离
每一步都"合乎逻辑",但起点就是一个虚构的事实。这就是幻觉累加效应——错误在推理链中不断传播和放大,最终输出和现实南辕北辙。
2025 年 Q1 某金融机构的案例就是典型:智能体在财报分析中第一次幻觉了一个营收数字,后续所有财务比率、趋势判断、投资建议全部基于这个错误数字展开。表面看报告专业完整,实际结论完全失真。
为什么传统 NLP 时代的幻觉没那么致命?
传统 QA 系统也幻觉,但影响范围有限——一次问答的错误不影响下一次。智能体截然不同:它是一个持续运行的闭环系统,前一步的输出是后一步的输入。一个幻觉 token 就像生物学中的基因突变,在后续"转录"过程中被不断放大。
三类幻觉的根源
1. 事实性幻觉
模型编造不存在的事实。典型表现:
智能体问题:治理与问责
当智能体有了"自主权",谁为它的行为负责?
前几篇文章讨论的问题——幻觉、工具调用失败、崩溃、协调混乱——都是技术可解的。但有一类问题超越了技术范畴:当智能体越来越多地代替人做决策和行动时,谁来为后果负责?
McKinsey 2026 年 AI 信任成熟度调研覆盖了数千家企业,核心发现是:企业对 AI 的信任没有跟上 AI 能力的增长。随着 Agent 从"辅助工具"走向"自主行动者",治理和问责缺位成了最紧迫的系统性风险。
这不是"以后再考虑"的问题。2025 年已经有多起因 AI Agent 自主行动导致的业务事故:
- 客服 Agent 自作主张给用户全额退款
- 营销 Agent 向错误人群发送敏感促销
- 数据处理 Agent 把内部数据写入了外部系统
每一件事的直接原因都是技术层面的(幻觉、工具错误),但根本原因是治理框架缺失——没有人为 Agent 的行动设定边界。
四大治理挑战
挑战一:权限边界模糊
核心问题
智能体能干什么?哪些决策它可以自己做?哪些必须请示?
大多数 Agent 系统根本没有清晰定义权限边界。系统 prompt 里写了"帮用户处理订单",但没有写:
- 你可以取消订单吗?
- 你可以修改价格吗?
- 你可以给超过 100 元的订单退款吗?
- 你可以查看其他用户的数据吗?
为什么重要
权限不清时,Agent 的两种倾向都会出问题:
- 过度谨慎:什么都问用户,失去自动化的意义
- 过度激进:什么都自己做,出了事不可控
现实中的 Agent 往往走向后者——因为"帮用户解决问题"的指令天然偏向行动,而非克制。
类别
权限至少需要从三个维度定义:
- 数据维度:能访问什么数据?能读哪些?能写哪些?
- 操作维度:能执行哪些操作?取消订单 vs 修改地址 vs 查看物流?
- 金额维度:操作有财务影响时,上限在哪里?
挑战二:审计追踪缺失
核心问题
Agent 做了一个决策,事后能否完整回溯"它为什么这样做"?
目前多数 Agent 系统的回答是:不能。
- 推理过程只存在于 LLM 的上下文中,运行结束后消失
- 工具调用的参数和返回值可能记录了,但"为什么选择调这个工具"没有记录
- 多步推理中,前面步骤的中间结论影响了后面决策,但这些因果链没有被显式记录
后果
没有审计追踪 = 没有问责基础。
Agent 系列日记 5:为什么 Skill 路由比 ReAct 控制器更适合个人助理
从 luck-agent 到 Hermes-lite,我花了两年时间才想清楚这个问题:80% 的请求不需要"思考",只需要"路由"。
回顾:ReAct 控制器模式的困境
2024 年做 luck-agent 的时候,我采用的是经典的 ReAct 模式(Reasoning + Acting):
用户输入 → 大模型推理(意图识别 → 规划 → 工具选择 → 执行)→ 输出
所有请求,不管简单还是复杂,都走同一个推理链。一个"查 QPC 里有没有 VPS 相关的记录"的请求,也要经过:
- 理解自然语言
- 判断意图类别
- 选择工具(search_qpc)
- 构造查询参数
- 执行并解释结果
问题很明显:
- Token 消耗大:每次推理要带上完整的 system prompt + 工具定义,光上下文就吃掉 3000-5000 token
- 延迟高:一个简单查询要等模型完成完整推理链,响应时间 3-8 秒
- 上下文窗口压力:随着工具数量增加(现在 Hermes-lite 有 20+ 个工具),system prompt 越来越大
我当时就在知识库里记了一条:
“对于个人助理场景,相比最初的 ReAct 控制器模式,Skill 技能路由更适合当前 luckagent:80% 请求是固定模式,不需要复杂推理,技能比 Agent 更稳定,成本更低,响应更快。”
Skill 路由的核心思想
一句话:预定义技能映射,轻量分类先路由,只加载需要的工具和 prompt。
用户输入 → 轻量路由(关键词/意图 → 技能)→ 加载专用 prompt + 工具 → 执行
路由表设计
# 简化版路由逻辑
ROUTING_RULES = {
"qpc": {
"keywords": ["QPC", "知识库", "记一下", "记录"],
"skill": "qpc",
"tools": ["feishu_bitable_read", "feishu_bitable_write"],
"prompt": "qpc_skill_prompt" # 只加载 QPC 相关的 prompt
},
"vps": {
"keywords": ["VPS", "服务器", "防火墙", "Docker"],
"skill": "gcp-vps-ops",
"tools": ["terminal", "read_file"],
"prompt": "vps_skill_prompt"
},
"blog": {
"keywords": ["博客", "文章", "Hugo", "发布"],
"skill": "hugo-blog",
"tools": ["terminal", "read_file", "write_file"],
"prompt": "blog_skill_prompt"
}
}
对比:同样"查 QPC"操作
| 指标 | ReAct 模式 | Skill 路由 |
|---|---|---|
| 上下文 token | ~4000(全量工具定义) | ~800(仅 QPC 相关) |
| 首次响应延迟 | 3-8s | 0.5-1.5s |
| 工具调用次数 | 2-3 次(推理+执行) | 1 次(直接执行) |
| 准确率 | 92%(模型可能选错工具) | 98%(路由确定性高) |
Hermes-lite 的 Skill 实现
Hermes-lite 的 skill 系统是这样工作的:
QPC 极简设计:我用 4 个字段管理 200 条知识
试过 Obsidian 的标签体系、Notion 的数据库、Logseq 的 graph view,最后发现:知识库的最大敌人不是容量,是维护摩擦。
为什么不做"完美知识库"?
我曾经是一个"知识管理完美主义者"。
尝试 1:Obsidian + 标签体系 + 双向链接
每个笔记文件:
- 标签:#python #async #bug-fix #2026-06
- 链接:[[python-async]] [[common-bugs]]
- 元数据:create_date, last_modified, status, project
结果:三个月后标签体系崩溃了。#python 和 #Python 是两个标签,#bug-fix 和 #bugfix 也是。双向链接变成死链接(文件删了链接还在)。维护成本爆炸,写一条笔记要先想该打什么标签——思考的 friction 超过了记忆的 friction。
尝试 2:Notion 数据库 + 多字段
数据库字段:标题、类型(6 种)、标签(多选)、项目、优先级、状态、来源、日期、附件、笔记
结果:90% 字段闲置。每次新建记录,11 个字段只填 2-3 个,其余空着。Notion 还要求你手动选"类型"、拖"优先级"——录入摩擦太高,最后只记录了 30 条就放弃了。
核心洞察
知识管理的杠杆 = 写入 × 重读,不是字段数。
如果写入摩擦太高,你就不写。如果字段太多、标签太复杂,你就不维护。极简设计 = 更低的维护摩擦 = 更长的生命周期。
QPC 的 4 字段设计哲学
我的 QPC(Question / Practice / Concept)知识库现在有 199 条记录,只用 4 个字段:
Agent 的记忆:Hermes-Lite 如何用 5 层结构解决「鱼的难题」
人类 chatbot 最尴尬的瞬间:第二次见面完全不认识你。Agent 的记忆系统怎么同时做到持久化、低成本、不丢上下文?我深入 Hermes-Lite 源码写了一个月,拆解出 5 层架构。
从「鱼的难题」开始
用过 ChatGPT 的人都知道一个痛:下次打开,它完全不记得你了。
对一次性聊天这没问题。但对个人助理——帮你管理 200 条知识库、追踪几个项目的进度、记住你的偏好——这等于每次都要把整段友情重来。
我做 QPC(个人知识库)时就被这个问题卡过。后来折腾 Hermes-Lite、nanobot,逐步摸到一条可行的路。这篇文章从 Hermes-Lite 的实际源码出发,拆解它的 5 层记忆架构,看看一个 Agent 是怎么解决「鱼的难题」的。
总览:5 层架构
┌─────────────────────────────────────────────┐
│ Layer 1: 持久记忆 (MEMORY.md / USER.md) │ ← 跨会话,纯文本
├─────────────────────────────────────────────�
│ Layer 2: 会话压缩 (ContextCompressor) │ ← 长对话不爆
├─────────────────────────────────────────────┤
│ Layer 3: 会话检索 (session_search + FTS5) │ ← 历史不丢
├─────────────────────────────────────────────�
│ Layer 4: 增量写入门控 (Nudge 机制) │ ← 该记就记
├─────────────────────────────────────────────�
│ Layer 5: 原子性保障 (fcntl + 临时文件) │ ← 不丢不坏
└─────────────────────────────────────────────┘
每一层解决一个独立问题,层与层之间不耦合。下面逐层拆解。
Hermes-lite 裁剪实战:7 类典型坑与解法
上一篇文章介绍了 Hermes-lite 的整体裁剪思路。这篇深入每一类实际踩过的坑, 把"为什么会遇到"和"怎么解"都说清楚。
一、路径迁移坑
从 .hermes/ 迁到 .hermes-lite/ 后,不是只改 HERMES_HOME 就完事。
踩到的点
.skills_prompt_snapshot.json里残留旧.hermes/路径web_search/SKILL.md硬编码了旧路径- 技能、工具、memory、config、sessions、workspace 各自缓存旧路径
- systemd 环境变量、进程环境、配置文件、技能正文需要一起排查
经验
- 迁移后
grep全目录旧路径:
grep -r "\.hermes/" /home/user/.hermes-lite/ --include="*.json" --include="*.md" --include="*.yaml" -l
- 技能快照要清理重建,不能复用旧缓存
- systemd 重启不是可选项 — 长进程内缓存会保留旧状态
systemctl restart hermes-lite
systemctl status hermes-lite # 确认新 PID
二、技能裁剪坑
一开始容易只看磁盘上有多少 SKILL.md,但真正可用数量要看运行时过滤后的结果。
踩到的点
- 磁盘上 67 个
SKILL.md,实际 gateway/slash 可见 65 个 kanban-orchestrator/worker因为environments: [kanban]被过滤,这是预期不是坏了_find_all_skills(skip_disabled=True)这个参数名容易误读,实际是返回全部技能,默认才过滤 disabledweb_search技能存在,但 Tavily key 缺失,会变成"看得到但用不了"
经验
判断技能可用性要看三层:
Hermes-lite 裁剪指南:在 1GB VPS 上跑轻量 AI Agent
为什么要裁剪
完整版 Hermes Agent(Nous Research)功能丰富:多平台网关、浏览器自动化、语音 TTS/STT、多 Agent 协作、Kanban 看板等。但这些功能对资源要求不低——在我的测试里,完整配置更适合至少 2GB 内存的机器。
我有一台 GCP e2-micro(2 vCPU / 954MB RAM),想用它跑一个 24/7 在线的 AI Agent 接入飞书。完整版装不下,于是有了这个裁剪实践。
三阶段渐进式裁剪
裁剪不是一步完成的,而是三阶段递进:
第一阶段:本地 Codex 完成初期核心裁剪
在本地电脑上,利用 Codex(OpenAI) 作为辅助分析工具,对完整版 Hermes 进行全面"解剖":
- 逐一扫描
~/.hermes/目录结构,识别每个模块的职责 - 分析 67 个技能的依赖关系,标记哪些是核心链路的、哪些是边缘功能
- 梳理 config.yaml 中每个配置项的实际作用,搞清楚"关掉会怎样"
- 输出一份裁剪清单:哪些 toolset 可以禁、哪些 skill 可以删、哪些配置可以收紧
这一阶段的核心价值:把"能不能关"这个判断做对。Codex 帮助理解了代码间的依赖关系,避免直接关某个功能导致连锁崩溃。
第二阶段:大 VPS 上跑完整版 + 压测验证
在一台大内存 VPS 上安装完整版 Hermes,作为"对照基准":
- 记录完整版的实际内存占用(idle / 高负载两种状态)
- 逐个关闭非核心功能,观察内存变化和稳定性
- 跑压测:模拟长时间运行、多轮对话、工具调用密集场景
- 确认裁剪后系统在资源充足环境下依然稳定
这一阶段的目的:建立性能基线 + 验证裁剪组合的安全性。在大 VPS 上翻车无所谓,在小 VPS 上翻车就是服务宕机。