前言
在金融场景下,大模型常出现计算幻觉或无法准确绘图的问题。单纯的 RAG 缺乏严谨的计算能力,而 Prompt 工程难以处理复杂长链条任务。本文基于 LangGraph + Qwen-7B,构建一套架构级的 Multi-Agent 金融系统,集成 Python 代码解释器、Cross-Encoder 重排序及 Supervisor 多智能体协作模式。
介绍基于 LangGraph 构建金融智能体的架构方案。针对大模型计算幻觉,集成 Python 代码解释器确保结果准确;通过 Cross-Encoder 重排序优化 RAG 检索精度;利用 Supervisor 模式实现多智能体分工协作。同时分享了本地小模型部署中的鲁棒性工程经验,包括上下文净化、指令遵循及 Prompt 转义处理,为垂直领域 AI 应用提供参考。
在金融场景下,大模型常出现计算幻觉或无法准确绘图的问题。单纯的 RAG 缺乏严谨的计算能力,而 Prompt 工程难以处理复杂长链条任务。本文基于 LangGraph + Qwen-7B,构建一套架构级的 Multi-Agent 金融系统,集成 Python 代码解释器、Cross-Encoder 重排序及 Supervisor 多智能体协作模式。
通用大模型在垂直领域落地存在三大硬伤:
破局之道:从 Chatbot 进化为 Agent 团队。引入 Python 代码解释器保证计算准确,利用 Rerank 机制提升检索精度,通过多智能体分工管理上下文。
LLM 擅长语义理解而非精确运算。引入 Python 代码解释器可将数学题转化为代码执行。
借助 LangChain 的 PythonREPL 工具,Agent 工作流变为:理解需求 -> 编写代码 -> 执行代码 -> 总结回复。从 Probabilistic Generation 转向 Deterministic Execution。
本地运行绘图代码时,plt.show() 会阻塞进程。需自定义工具拦截绘图流并强制保存。
import os
import matplotlib.pyplot as plt
from langchain_core.tools import tool
from langchain_experimental.utilities import PythonREPL
python_repl = PythonREPL()
python_repl.globals.update({"pd": pd, "plt": plt, "np": np})
SAVE_DIR = r"./output"
@tool
def financial_code_interpreter(code: str) -> str:
"""【金融代码解释器 / 绘图工具】用于执行 Python 代码。Agent 只需负责 plt.plot(),系统会自动处理保存。"""
print(f"\n🐍 [Agent 正在真正执行代码] ...\n{code}")
# === 核心工程 Hack:代码清洗与劫持 ===
code = code.replace("plt.show()", "")
code = code.replace("plt.close()", "")
code = code.replace("plt.savefig", "# plt.savefig")
try:
result = python_repl.run(code)
# === 核心工程 Hack:状态检测与自动保存 ===
if plt.get_fignums():
file_path = os.path.join(SAVE_DIR, 'plot.png')
try:
plt.savefig(file_path, dpi=100, bbox_inches='tight')
plt.close()
image_msg = f"\n[系统注]:图表已成功保存至:{file_path}"
except Exception as img_err:
image_msg = f"\n[系统注]:图片保存失败:{img_err}"
else:
image_msg = ""
if not result and not image_msg:
return "代码执行成功,无文本输出。"
return f"{result.strip() if result else '无文本输出'}{image_msg}"
except Exception as e:
return f"代码执行报错:{e}"
通过字符串替换和状态接管,Agent 可精准生成趋势图。
基础 RAG 依赖向量相似度检索,易受模糊语义干扰。采用两阶段检索 Pipeline。
Bi-Encoder 将文本压缩为空间点,距离近代表相似。但在金融领域,高度依赖精确匹配,对模糊语义敏感(如 A 股与 B 股)。
第一阶段 - 广撒网 (Recall):用普通向量模型粗筛前 10 篇文档。 第二阶段 - 精挑选 (Rerank):引入 Cross-Encoder 模型(如 BAAI/bge-reranker-base),将问题与文档拼接交叉打分。
# --- 第一阶段:广撒网 (Recall) ---
initial_docs = vectorstore.similarity_search(query, k=10)
# --- 第二阶段:精挑选 (Rerank) ---
pairs = [[query, doc.page_content] for doc in initial_docs]
scores = reranker_model.predict(pairs)
top_k_indices = np.argsort(scores)[::-1][:3]
final_results = [initial_docs[idx].page_content for idx in top_k_indices]
Rerank 机制有效过滤了低相关性文档,降低了模型幻觉风险。
单体模型挂载多个工具易导致认知过载。利用 LangGraph 重构为多智能体集群。
小参数模型难以同时维护搜索、知识库、Python 等工具的上下文,易产生逻辑断链。
设定三个角色:
from langgraph.graph import StateGraph, START, END, MessagesState
workflow = StateGraph(MessagesState)
workflow.add_node("Supervisor", supervisor_node)
workflow.add_node("Researcher", researcher_node)
workflow.add_node("Coder", coder_node)
workflow.add_edge("Researcher", "Supervisor")
workflow.add_edge("Coder", "Supervisor")
workflow.add_conditional_edges("Supervisor", lambda x: x["next"], {"Researcher": "Researcher", "Coder": "Coder", "FINISH": END})
workflow.add_edge(START, "Supervisor")
agent_executor = workflow.compile()
步骤一:定义 Supervisor 节点
def supervisor_node(state: MessagesState):
messages = [{"role": "system", "content": system_prompt}] + state["messages"]
response = llm.invoke(messages)
content = response.content
next_step = "FINISH"
if "Researcher" in content:
next_step = "Researcher"
elif "Coder" in content:
next_step = "Coder"
if next_step == "FINISH":
return {"next": next_step, "messages": [AIMessage(content="✅ 任务流程已结束。请检查上方是否有生成的图表和报告。")]}
return {"next": next_step}
专人做专事,即使是 7B 参数的小模型也能完成复杂的业务逻辑闭环。
本地部署 7B 小模型面临指令遵循弱、易受干扰等问题。以下是三大天坑及修复方案。
现象:Agent 输出空字符串。 原因:模型认为工具结果已清晰,跳过总结步骤。 解决:强制溯源读取 (ToolMessage Fallback)。若 AIMessage 为空,倒序遍历历史消息提取 ToolMessage。
现象:员工 Agent 模仿主管输出 JSON 指令。 原因:上下文污染。主管决策被写入全局历史。 解决:上下文净化与'主管隐身模式'。主管决策不 append 到全局 state["messages"]。
现象:LangChain 抛出 Input to ChatPromptTemplate is missing variables 异常。
原因:f-string 格式化冲突。Prompt 中的 {} 被误判为变量占位符。
解决:双大括号转义 (Jinja2 / f-string Escaping)。将 {"next": ...} 改写为 {{"next": ...}}。
回顾项目,核心突破在于架构设计升级:
在垂直领域落地 AI,系统工程的重要性往往大于单纯的模型能力。轻量级模型配合合适工具和流程,同样能成为生产力工具。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online