摘要

在金融投研这个信息爆炸的领域,分析师的每一天都像是在与海量数据进行一场没有硝烟的战争。传统的工作流不仅效率低下,更容易错失关键的Alpha信息。为了彻底改变这一现状,我们团队从0到1构建了一个由大模型驱动的投研分析智能体(Agent)。本文将毫无保留地分享该项目的核心技术路径与关键决策,从为什么我们判定传统RAG架构已到瓶颈,到自研ReAct Agent框架的设计哲学与Prompt工程细节,再到我们实现Agent智能的“核武器”——大规模Agentic数据合成的完整流程与挑战,以及最终实现生产落地所需的DPO持续对齐极致的工程优化细节。本文不仅有成功经验,更有我们踩过的坑与性能优化的具体抉择,希望能为正在探索大模型应用落地的同行者提供一份有价值的、可落地的参考。

一、 痛点与起点:为什么我们判定传统RAG已到瓶颈?

项目初期,我们的第一反应也是优化RAG。我们尝试了各种高级RAG技术:HyDE、Multi-Query、Chaining RAG……但很快发现,这些“缝缝补补”的优化,在真正的金融分析任务面前,治标不治本。

一个真实且频繁的分析任务是这样的:

“对比分析A股上市公司‘甲’和‘乙’过去三年的研发投入和毛利率,找出导致它们毛利率差异的关键驱动因素,并结合它们近期的行业新闻和券商研报,最后以SWOT分析的格式输出一份决策参考。”

这个任务对任何RAG变体都是一场噩梦:

  • 脆弱的调用链:强行用Chaining RAG(将一个RAG的输出作为下一个RAG的输入)来模拟多步,会导致错误累积。第一步检索稍有偏差,后面就会满盘皆输,整个流程缺乏鲁棒性。
  • 上下文长度限制:即使有长窗口模型,将所有可能相关的财报、新闻、研报一次性塞入上下文,不仅成本高昂,更容易导致模型“注意力分散”,抓不住重点。
  • 缺乏动态规划与结构化输出能力:RAG无法根据中间结果动态调整下一步行动,更无法保证最终能按要求(如SWOT格式)进行结构化输出。

结论:我们需要一个能主动思考、动态规划、协同多种工具的“大脑”,而不是一个被动接受信息的“翻译器”。这坚定了我们走向Agent架构的决心。

二、 架构核心:自研ReAct智能代理(Agent)框架

ReAct(Reason + Act)是我们的理论基石。但理论到实践,魔鬼全在细节里。

2.1 核心循环与状态管理

我们的Agent工作流不仅是简单的循环,还包含了丰富的状态管理和错误处理机制。

成功
失败
任务未完成
任务完成
用户输入复杂指令
1. 规划模块 Planner
2. Agent执行循环
Thought: 分析当前状态
Action: 选择并执行工具
3. 工具执行与沙箱
Observation: 成功结果
Observation: 错误信息
4. 状态更新
5. 最终答案生成
输出结构化分析报告
2.2 关键的Prompt工程

Agent的“灵魂”在于其System Prompt。我们花费了大量时间打磨它,它主要包含几个部分:

  1. 角色定义 (Persona): 你是一个资深的金融分析师,严谨、客观、基于数据说话。
  2. 核心指令 (Core Instruction): 你的任务是...你需要通过思考和使用工具来分步解决问题...
  3. 思考与行动格式 (Format Instruction): 严格规定了ThoughtAction的输出格式,我们选择用JSON格式,便于后续的解析和执行。
# 简化的Action格式定义
Action: {
  "tool_name": "python_code_executor",
  "parameters": {
    "code": "print(df_甲['营收'] - df_乙['营收'])"
  }
}
  1. 工具定义与示例 (Tool Definitions & Examples): 这是关键!我们用JSON Schema向模型清晰地描述每个工具的功能、输入参数、输出格式。一个好的工具描述,能将模型调用工具的准确率从60%提升到95%以上。
2.3 遇到的挑战:工具调用失败怎么办?

这是Agent落地必踩的坑。我们的解决方案是一个多层防御体系

  • 自动重试:对于网络波动等瞬时错误,Agent会自动重试2-3次。
  • 参数修正:如果因参数错误导致失败(如SQL语法错误),Agent的Thought环节会被引导去分析错误信息,并尝试用修正后的参数再次调用。
  • 备用工具:如果主工具(如精确的数据库查询)持续失败,Agent会尝试调用备用工具(如模糊的文档检索),并备注“此为估算数据,非精确值”。
  • 向用户求助:在极端情况下,如果所有工具都无法解决问题,Agent会停止执行,并向用户报告它遇到的困难,请求用户提供更明确的指令。

三、 Agent能力之源:大规模“工具使用”数据合成

这是我们项目的“护城河”。一个强大的Agent,90%的智能来自于训练数据的质量和广度。

3.1 数据合成的完整流水线

第一步:构建海量工具库

  • 真实工具:我们接入了公司内部的金融数据库API、Wind/Bloomberg的接口、以及公开的财经网站API等3000余个。
  • 合成工具:我们利用GPT-4,通过“工具功能描述”自动生成了超过20000个虚拟工具。例如,从一个get_revenue(company)工具,自动衍生出get_profit(company), get_quarterly_revenue(company, quarter)等,极大地丰富了工具生态。

第二步:Agentic任务与评估标准生成
我们设计了多种任务模板,让LLM自动填充,生成了海量需要多跳推理、数值计算、逆向逻辑的复杂任务,并为每个任务生成了对应的评估标准(Rubric)。

第三步:高质量轨迹(Trajectory)生成
我们使用最强大的教师模型(GPT-4-Turbo)来“解题”。

  • 遇到的挑战:如何避免生成“白痴”轨迹?
    • 我们发现,如果任务太简单,模型会倾向于生成“一步到位”的无效轨迹。
    • 解决方案:我们在任务生成阶段,强制要求任务必须包含至少N个步骤或M种不同工具的调用,并引入了“干扰信息”,迫使模型必须进行筛选和判断。

第四步:“裁判Agent”的实现细节
“裁判Agent”本身也是一个精心设计的LLM调用。

  • 输入{ "task": "...", "rubric": "...", "trajectory": [...] }
  • Prompt你是一个极其严格的逻辑导师,请根据rubric,为下面的解题轨迹打分(1-10分),并以JSON格式输出分数和详细理由。
  • 输出{ "score": 9.5, "justification": "轨迹逻辑清晰,正确使用了数据库和网络搜索工具。但在最后总结时,未能完全遵循SWOT格式要求,扣0.5分。", "is_high_quality": true }
  • 我们只保留score >= 8.5的轨迹,确保了SFT数据的“纯度”。

四、 领域知识注入:从SFT到DPO的持续对齐

4.1 更精细的偏好数据收集

我们的前端界面为分析师提供了多种反馈选项,而不仅仅是“编辑”:

  • 👍 答案正确且格式完美
  • ✍️ 编辑修正(最有价值)
  • 👎 事实性错误
  • 🤔 答案相关,但不够深入

这些细粒度的反馈,让我们能构建更多样化的偏好数据对。例如,对于“不够深入”的反馈,我们会将该答案作为rejected,并将另一个由模型生成的、包含更详尽分析的候选答案作为chosen

4.2 DPO之外:引入基于模型的奖励模型(Reward Model)

遇到的挑战:分析师反馈数据稀疏。
分析师很忙,不可能对每一个结果都进行反馈。为了解决这个问题,我们利用收集到的高质量反馈数据,单独训练了一个奖励模型。这个模型的目标是预测一个分析师会给某个回答打多少分

在DPO训练的同时,我们引入了这个奖励模型进行PPO(Proximal Policy Optimization)训练,它为我们提供了密集的、模拟的奖励信号,极大地加速了模型的对齐过程,并提升了最终性能。

五、 性能与成本:从“能用”到“好用”的工程优化

5.1 蒸馏与量化:我们为何选择AWQ?
  • 模型蒸馏:我们不仅匹配了logits,还匹配了教师模型和学生模型中间几个关键层的隐藏状态(hidden states)和注意力矩阵(attention matrix)。这能更好地将教师模型的“推理过程”而非仅仅是“结果”传递给学生模型。
  • 量化技术选型:我们详细对比了GPTQ和AWQ。
    • GPTQ:量化速度快,实现简单。
    • AWQ:它发现模型性能的瓶颈往往在于少数几个权重值不大、但对应的激活值(activation)很大的“突刺”上。AWQ通过保留这部分权重的精度,实现了更好的性能保持。
    • 我们的决策:在我们的金融模型上,AWQ量化后的模型在核心指标上比GPTQ高出约0.5-1个百分点。考虑到金融领域对精度的极致要求,我们认为这微小的性能优势值得投入稍复杂的AWQ实现。
5.2 vLLM:榨干GPU的每一滴性能

我们选择vLLM,看重的是它的两大王牌:

  1. PagedAttention:解决了KV Cache的内存碎片问题,让我们可以用同样的显存,容纳2-3倍的并发请求。
  2. Continuous Batching:这是一个“见缝插针”的技术。在一个batch的处理过程中,一旦某个请求完成了,GPU资源会立刻被分配给队列中的下一个新请求,而不是等待整个batch结束。这使得GPU的利用率在真实世界的波峰波谷请求模式下,始终维持在90%以上。

六、 总结与思考

大模型Agent的落地,是一场跨越算法、数据和工程的“铁人三项”。它不是一个单纯的模型问题,而是一个复杂的系统工程。

回顾整个项目,我们的核心感悟是:

  • Agent的智能,源于数据,而非模型尺寸:与其追求更大的模型,不如构建一套能持续产出高质量、多样化轨迹数据的流水线。
  • 领域对齐是“最后一公里”,但至关重要:通用的Agent能力是“地基”,而与领域专家(分析师)的持续对齐,才是构建高楼、产生业务价值的关键。
  • 极致的工程优化,决定了项目的生死:没有高效的推理和可控的成本,再智能的Agent也只能是实验室里的玩具。

未来展望:我们正在探索多智能体协作(Multi-Agent Collaboration)。想象一下,一个“数据搜集Agent”负责拉取所有原始数据,一个“分析Agent”负责撰写报告初稿,一个“风控Agent”负责审查报告中的风险点和合规性……这将是智能投研的下一个篇章。


感谢阅读!项目细节繁多,无法一一尽述。欢迎各位同行在评论区留言,交流你们在Agent落地中遇到的问题与思考!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐