效果展示
上一篇文章末尾提到:功能拆分后的多Agent,遗留了这样几个问题——
最突出的一点就是:有准确数据,质量就好许多,没有数据还是会拉。
关于信息置信度的问题:在Agent 自主探索模式下,其实最担心的一个问题就是LLM自己编造数据和事实。
这里在提示词中约束了在报告中 “每个关键信息后必须标注 [原文]” ,但效果还是不太理想。
最终输出报告没有一个框架,每次格式都不一样。
这里代码只能算 demo ,操作起来就很不方便——换个问题,就需要改代码。
这里用户输入的需求比较模糊(比如,什么叫 “大事件”),导致模型在执行和输出的时候,结论也不稳定。
今天通过一个A股行情助手的案例,展示数据在AI 应用中的重要作用(也就是 1 当中的问题)。
顺便通过 LangGraph + Streamlit 解决之前遗留的问题 4 ,提升用户操作体验,并展示在LangGraph中如何高效应对“上下文污染”的问题。
这个Agent 应用的web 交互界面如下——

用户只需在对话框中提出问题,后台AI 就会完成用户需求分析、信息检索、直至最后报告产出。
例如:这里提问 “集成电路制造板块中,哪些公司有出口业务,我需要其中最值得投资的一只”
稍等片刻,页面会展示相关股票最近一年 价格行情走势图——
并分析个股的财报数据——

最终给出推荐——

哈哈,是不是有点跃跃欲试了呢?
Agent分工
我们先看下这个Agent 的内部处理"总线"。

单看框架,仍然是之前提到的简单多Agent结构——
一个Agent 负责慢思考,一个Agent负责调用工具完成任务执行。之前详细讨论过这部分内容。
简化起见,plan_node 这里只让AI 思考一轮 。
重点是:使用 LangGraph 来编排不同node 节点,维护、管理他们之间的上下文。
简单的代码演示
定义4个节点——
| 节点名 | 任务 | 共享State |
|---|---|---|
| plan_node | 生成任务计划 Plan | Y |
| llm_call | 生成符合工具调用格式的 Action参数 | Y |
| tool_node | 工具执行,输出 Observation | Y |
| should_continue | 根据 llm_call 输出内容决定去向 | Y |
Agent 主体代码
|
|
重点在两个地方——
-
不同节点间需要共享信息(例如 LLM 答复内容中的
content信息和tool_call信息)。LangGraph本身提供了这样一个类:
MessagesState,用来存放不同Agent 场景下LLM 返回的消息。不过在本案例中,只保留LLM 原始的内容还不够,需要小改造下:
一个是plan_node 中生成的总体计划内容
plan;还有一个是循环次数计数
loop_count,便于控制循环。
|
|
- 然后把不同节点像拼乐高一样,拼接起来 ——
|
|
💡 如何用它解决“上下文污染”问题?
主要通过以下方法应对:
- 共享 State 扩展:将高开销的
plan规划和大盘计数器存入自定义的 State 中进行进程全局共享,只让 LLM 在 SystemMessage 中看到结构化好的当前步骤逻辑,彻底避免在 Chat Message 历史中塞满规划废话。- 业务特征数据提前加工:工具在向 Agent 返回
Observation前,会直接通过 pandas/numpy 处理好高维的区间涨跌幅(%)、最大回撤(%)和年化波动率(%)等字典数据,裁剪掉近一年几百个 原始K线行情数据,以极小的数据空间返回给 LLM。
Web 交互页面代码
主体Agent 编排好了后,使用 streamlit 工具生成 web 操作页面(可以让openclaw 帮你生成,效果还可以)。
|
|
启动应用
最后,启动它——
|
|
展开说说数据
应用的可靠性来源,只有一个——真实的个股行情数据!
|
|
但是,仅凭以上数据还不够。
加工个股数据
上面单只股票的行情数据中并没有 区间涨跌幅(%) 最大回撤(%) 年化波动率(%) 这样的数据,而这些都是股票买入时需要考虑的波段风险。那怎么办呢?
需要在工具中提前计算得到——
|
|
这样工具执行后,交给LLM 看到的就是 对应股票最近一年的 股票代码 启始价格 结束价格 区间涨跌幅(%) 最大回撤(%) 年化波动率(%) 的字典。
对模型来说,是非常喜欢这种高质量的结构化数据的。
年报数据
此外,为了衡量公司业务发展健康情况,年报数据也是必不可少的——
|
|
以上数据都是公开的,可以从一些财经网站免费下载到。
对照组
为了对比,使用之前做好的阶段五的Agent( 具有多轮规划、反思、执行的多Agent) 处理相同的问题——
|
|
多Agent 充分发挥了它的长处——在 规划、反思过程中给出了更全面的框架。
通过对晶圆代工龙头(中芯国际、华虹公司/华虹半导体)以及垂直整合制造IDM主要玩家(闻泰科技/安世半导体、扬杰科技、华润微、士兰微)的境外营收占比、毛利特征、技术门槛、财务抗压度及抵御地缘政治脱钩力进行系统性挖掘与量化比对
但是,它报告内在逻辑是不通畅的——
一方面是数据给的不够,另一方面它的判断也比较容易受外部网页提供的结论带跑。
这两个Agent 应用各有优缺点,需要进一步整合。
结尾
这次没有太多的AI 话题含量。如果看完全篇会发现 :
AI基于真实的数据去帮助我们弥补空隙(画图、做表格、生成归纳性的总结),它不是那个生成真实数据的个体。
真实的数据从哪里来呢?从真实世界来!
金融类的 产品本身就是高度数据化、也比较容易 帮助我们做出决策。
所以在这个案例中,数据处理方面没花太多的功夫。但是在数据搜集阶段还是要费些功夫的(想想需要把5000多只股票历年的数据集中拉取下来)。
如果换一个场景,数据就未必这么拉取一下就可行了。可能还需要大量的数据标注、整理、格式化等工作。
所以,对于那些目前还没有很好的量化标准和指标的行业(例如 : 看病、装修设计),AI 依然面临高筑的信息墙壁。 无法接触到真实物理世界高质量的数据,也是这些领域短期内极难被 AI 取代与超越的根本原因。
感谢看到这里,我们下期见。
PS:
也许上星期真应该买个100股 赌一下的 ——