乐于分享
好东西不私藏

从 Pipeline 到 Loop:一个 AI 投研助手的自我进化之路

从 Pipeline 到 Loop:一个 AI 投研助手的自我进化之路
2026 年是 AI Agent 破圈之年。从 OpenAI 的 Agent SDK 到 Anthropic 的 MCP 协议,从多 Agent 协作到自主编程助手——大家都在造 Agent。但一个残酷的事实是:大多数 Agent 止步于"能跑",离"靠谱"还差一个反馈回路。

· · ·

一、Agent 的困境:跑得动,但不靠谱

今年我做了一个 AI 投研助手,核心功能是让 AI 抓取金融新闻、分析市场影响、生成投资摘要。第一版很简单——请求进来,调一次 DeepSeek,解析 JSON,返回前端。典型的 Pipeline:

获取新闻 → 调 DeepSeek → 解析 JSON → 返回前端(一次调用,好坏不论,没有回旋余地)

这版模型跑了两个月,暴露三个问题:

  1. 置信度波动大
    ——同一组新闻,模型可能对外汇/债券市场给出 confidence=2(满分5),但后端直接返回给用户,没有"这分析不太靠谱"的标记。
  2. 无质量闭环
    ——输出质量取决于 prompt 写得巧不巧,没有机制让系统自己检查自己。
  3. 单角色视角
    ——一个 prompt 兼顾分析+审核+写作,类似让一个人同时做分析师、风控和文案,短板无法补充。

这不是某个模型的错。这是 Pipeline 架构的天花板——一次调用没有回旋余地,模型一次输出就决定了最终质量。

· · ·

二、2026 年 Agent 的核心矛盾

今年 AI Agent 的进展可以归为几条主线:

方向
代表进展
本质
多 Agent 协作
OpenAI Agents SDK、CrewAI、AutoGen
多个角色分担任务
工具调用(Function Calling)
MCP 协议、Toolformer
Agent 自主使用外部工具
自主迭代
Claude Code、Codex CLI 的循环模式
Agent 自己发现错误并修正
评估框架
LangSmith、Weights & Biases Prompts
量化 Agent 输出质量

这些进展解决了一个核心矛盾:AI 的生成速度已经远超人类审核速度,但质量仍需人来兜底。

如何让 Agent 在没有人类介入的情况下,自我评估、自我改进、自我收敛?

这不是 prompt engineering 能解决的问题。它需要的是一个架构层面的反馈回路

· · ·

三、五要素 Loop:让 Agent 自己跟自己较劲

我的解决方案是 LoopEngine——一个带验证与自主优化的可复用循环引擎。核心思想是让 Agent 不满足于"输出一次",而是进入一个不断自我审视的循环:

Pipeline (旧):  输入 → 处理 → 输出              ← 输出后不管Loop (新):      Goal → 执行 → 评估 → 未达标 → refine → 再执行...                                     ↓ 达标                                   停止返回

这个 Loop 由五个要素构成:

要素 1:可验证的目标(Goal)

不是"写一篇好的分析",而是可量化的标准。对于新闻分析,我们定义四个维度评分:

维度1: 市场覆盖度   → 7个市场,至少覆盖5个 → 0-100分维度2: 置信度      → 所有市场 confidence ≥ 3 → 0-100分维度3: 重点新闻    → 至少5条,每条有理由说明 → 0-100分维度4: 摘要质量    → 至少50字 → 0-100分综合: 目标分 ≥ 85 且每个维度 ≥ 60 → 达成

每条输出的"好坏"不再是玄学,而是一个可以编程验证的函数。这是整个系统的锚点——失去了它,Loop 就没有方向。

要素 2:上下文记忆(Context)

Model 是无状态的,但 Loop 不是。每轮迭代后,当前结果的质量缺陷被记录到 Context:

迭代1 完成后, refine() 发现:  - 外汇、债券的 confidence=2(偏低)  - 重点新闻只有4条(目标≥5)Context.set("refine_focus", {  "low_confidence_markets": [外汇, 债券, 大宗商品],  "key_news_lacking": True})迭代2 的 process() 读取 refine_focus →走 _refined_analysis() 分支 → 针对性优化

Context 还会记录所有迭代的历史摘要,超过上限自动遗忘最旧的——相当于 Agent 的"短期记忆"。

要素 3:多角色工具调用(Tool Access)

这是今年 Agent 领域最活跃的方向。我们不只让一个 Agent 干活,而是给每个迭代轮次分配不同的角色:

智能体角色
温度
在 Loop 中的职责
analyzer
 分析师
0.2(低)
迭代1:严谨的数据分析,输出结构化 JSON
verifier
 审核官
0.5(中)
迭代2:专门挑毛病,找逻辑漏洞
writer
 写作者
0.3(低)
迭代2:根据审核意见重新组织和表达
critic
 评审人
0.4(中)
预留:风险评估和认知偏差检查

每个角色有自己的系统提示词和温度参数:分析师的 prompt 偏向数据准确性(低温),verifier 的 prompt 偏向质疑和挑刺(中温)。角色分离比单一 prompt 的性价比高得多——你不需要一个全能的模型,你只需要每个模型做好一件事。

要素 4:三层评估(Evaluation)

输出质量不是拍脑袋定的。Loop 内建三层验证器:

┌─────────────────────────────────────────┐│ 第一层: 完整性验证 (integrity)          ││   NotNullValidator("summary")          ││   → "摘要字段不存在" → 0分,直接判定失败│├─────────────────────────────────────────┤│ 第二层: 业务合理性验证 (business)        ││   MarketCoverageValidator              ││   → "覆盖 5/7 市场,但2个置信度<3" → 60分│├─────────────────────────────────────────┤│ 第三层: 后验验证 (posterior)            ││   UserRatingValidator                  ││   → "用户评分均值 4.2/5" → 85分        │└─────────────────────────────────────────┘

三层之间是递进关系:完整性不通过就没必要做业务验证;业务不通过就没必要做后验。这在工程上省掉了大量无用计算。

要素 5:终止条件(Termination)

Loop 不会无限跑下去。三种情况停止:

  1. 目标达成
    ——综合分 ≥ 85,自然终止
  2. 最大迭代
    ——新闻分析设上限为 3 轮,第 3 轮强制停止
  3. 严重失败
    ——连续异常且自愈失败(比如 API Key 失效)

第 2 条非常关键:再好的 Agent 也要有预算上限。我们不能让一个分析请求因为质量一直不达标就反复迭代 10 轮,消耗 10 倍的 API 费用。3 轮是一个合理的平衡点。

· · ·

四、真实运行:一次完整的 Loop 周期

以下是一次真实运行的时序,数据来自生产日志:

请求: GET /api/v1/news/ai-analysis?hours=72&max_news=10[迭代1] analyzer 分析  → 获取 4 条新闻(BTC ETF 流出、稳定币监管、半导体涨价、央行讲话)  → DeepSeek 返回 7 个市场评估 + 4 条重点新闻  → 存入 SQLite (news_ai_eval.db)  → 评分: 综合 73/100 → 未达标  → 发现问题: 3个市场置信度=2, 重点新闻不足  → refine: 设置下一轮改进方向[迭代2] verifier 审核 → writer 重写  → verifier 分析问题:"外汇/债券市场缺乏直接新闻,需要从风险偏好传导角度重新评估"  → writer 根据审核意见重新生成  → 存入 SQLite (第二次记录)  → 评分: 综合 91/100 → 达标 ✅  → 停止 Loop, 返回最终结果

从日志中可以看到:第一轮的分析其实"能用"——7 个市场都覆盖了,Key News 也有。但系统觉得它不够好,因为没有达到 85 分的质量标准。第二轮通过 verifier 的审查和 writer 的重写,把那些敷衍的市场评估重新做了。

关键点:用户拿到的是第二轮的结果,第一轮的"半成品"永远没有机会出现在用户面前。

· · ·

五、与 2026 年 Agent 生态的对照

LoopEngine 不是拍脑袋想出来的,它映射了今年 Agent 领域几项关键进展:

MCP 协议(Model Context Protocol)

Anthropic 推出的 MCP 让 Agent 可以标准化的方式使用外部工具。我们的 AiAgent 层类似——统一封装了多个模型提供者(DeepSeek、OpenAI),以相同的接口暴露给 Loop。

Agentic Loop(编程助手领域)

Claude Code 的"计划→执行→报错→修复"循环,本质上和我们一模一样。Claude Code 发现一个语法错误时会自我修正,我们的新闻分析发现置信度低时会自我改进。底层是同一个模式:输出 → 评估 → 修正 → 再输出。

评估驱动的 Agent 开发

今年 Weights & Biases 和 LangChain 都推出了 Agent 评估工具链。我们的三层验证器(integrity → business → posterior)本质上是一个轻量级的评估框架——没有 UI,但可以作为代码嵌入任何流程。

思维模型标签

一个有趣的小设计:每次分析输出末尾标注了本次 Loop 使用的思维模型。比如"🧠 底层模型:二阶思维 + 系统动力学 + 信号/噪声比"。这让抽象的评估维度有认知科学的支撑——不只看数字,还看思考方式。

· · ·

六、一个对比:Pipeline 和 Loop 到底差多少

对比维度
Pipeline(旧)
Loop(新)
执行方式
一次 run,发射后不管
迭代 loop,自动收敛到目标
目标
无,prompt 说了算
Goal(description, verify) 可编程
上下文
无状态,每次都从头
Context 可积累/压缩/遗忘
质量把关
手写 if/else 或不管
三层 Validator(integrity/business/posterior)
优化
手动调 prompt 和温度
Optimizer 自动分析历史+调参数
停止条件
跑完即止
目标达成或最大轮次
可观测
print() 或 None
完整 LoopRun + LoopResult 存 DB
异常处理
except: pass
timeout 重试 / 数据源降级 / API Key 轮换
接入成本
每套各写各的
4 个方法 + 声明式验证/优化

最直观的收益是:同样的 AI 模型,同样的数据,Loop 的输出质量方差远小于 Pipeline。第一轮可能差一点,但第三轮总能收敛到 80 分以上——因为系统自己会判断好坏,自己会改进。

· · ·

七、实际落地的几个教训

1. 迭代不是免费的

每次迭代多调一次 LLM。3 轮迭代,如果前两轮都调用 LLM,成本是原来 Pipeline 的 3 倍。我们的解法:第一轮走 analyzer(1 次调用),第二轮走 verifier + writer(2 次调用),最多 3 次。实测第二轮质量已达标,85% 的请求在 2 轮内收敛,平均只增加了 1.5 倍成本。

2. 降级方案不可少

LLM 可能崩——超时、限流、停电、模型更新后行为变化。不可能将所有流程 100% 依赖 AI。我们保留了一套基于关键词的 Fallback 方案:当 AI 调用失败时,自动用关键词匹配做基础分析,虽然精度低,但至少不挂零。

3. 单例 vs 新实例

Loop 的参数(比如阈值)会被优化器修改。如果所有请求共享同一个实例,A 请求的经验可能污染 B 请求的参数。我们的解法:API 路由每次创建新实例,后台任务(如定时复盘)用单例。

4. 验证器本身需要验证

MarketCoverageValidator 的评分规则(低置信度每个扣 15 分)是我们拍脑袋定的。上线后观察了 2 周才调整到合适的阈值。验证器不是一蹴而就的——它们是活的东西,需要根据实际数据调优。

· · ·

八、展望:从 Agent 到 Agent 生态

LoopEngine 目前只处理一个 Agent(新闻分析)的自循环。下一步的方向是:

  • 多 Loop 编排
    ——新闻分析的输出作为板块分析的输入,板块分析的输出作为复盘日报的输入,形成 Agent 流水线
  • 后验验证
    ——今天分析说"A股偏积极",3 天后实际行情如何?自动对比,把预测误差反馈回 Loop 的参数
  • 人类反馈闭环
    ——用户点赞/踩的分析,自动调整验证器的权重——用户觉得"分析不够深"的系统就加强深度维度的权重

今年的 AI Agent 进展确实快:MCP 统一了工具调用,Claude Code 展示了 Agentic Loop 的威力,多 Agent 框架降低了协作门槛。但工具链只是前提,真正让 Agent 从"能跑"到"靠谱"的,是一个严谨的质量闭环。

五要素 Lopp——Goal、Context、Tool Access、Evaluation、Termination——是目前最落地的方法。它不是理论框架,是已经在生产环境跑起来的代码。

每个维度都有明确的实现和判定标准,每条输出都有完整的可追溯记录。这比"一个聪明的 prompt"实在多了。