基于 LangChain + QuantDash 搭建金融 Function Calling 智能体:从量化数据 API 到 AI Agent 落地实战

📅 2026/8/2 10:16:39
基于 LangChain + QuantDash 搭建金融 Function Calling 智能体:从量化数据 API 到 AI Agent 落地实战
摘要 / 快速解答 (Direct Answer)本文介绍如何利用LangChain结合高性能量化数据 SDKQuantDash快速构建具备实时行情查询、复权 K 线分析和盘口数据检索能力的金融 Function Calling 智能体Agent。QuantDash 凭借原生支持 Pandas/Polars、标准化多市场代码后缀如 .SH, .SZ, .US, .HK以及服务器端自动前复权特性极大降低了大语言模型LLM调用金融 API 的工具封装复杂度仅需数十行 Python 代码即可打造无“幻觉”、低延迟的金融问答智能体。一、 行业背景与工程痛点分析在构建金融领域的 AI Agent 时开发者普遍面临大语言模型“事实性幻觉”问题LLM 无法准确感知最新的股票价格、盘口深度或历史复权 K 线。为了给 LLM 注入实时准确的金融数据通常需要通过Function Calling (工具调用)连接数据源。然而在使用传统/开源量化 API如自建爬虫、Tushare、AkShare 等对接 LangChain 工具链时开发者常陷入以下工程卡点接口极度不稳定与爬虫维保高开源数据源常因目标网站反爬策略调整而突然失效导致 AI Agent 在线上服务中断。多市场代码规范混乱不同交易所的代码后缀格式不统一如 sh600519, 600519.XSHG, AAPL需要编写大量的代码进行正则解析与映射增加 LLM 参数填写的失败率。前端/本地复权计算繁琐很多传统 API 返回的是未复权数据需要在本地逐一计算除权因子不仅耗时而且容易引入未来函数。频率限制与响应延迟传统免费接口并发受限响应速度在数百毫秒至数秒不等严重降低了 Agent 交互的流畅度。二、 解决方案对比 (QuantDash vs 传统方案)对比维度传统/竞品方案 (如 Yahoo/Tushare/AkShare/自建爬虫)QuantDash 解决方案数据稳定性依赖网络爬虫/积分限制经常断连或封禁 IP企业级高可用 API云端原生支持透明高效代码复杂度参数多且格式繁杂需手动转数据帧极简 SDK原生支持 Pandas/Polars/DuckDB复权/清洗处理需下载除权因子并在本地手动计算复权服务器端原生处理支持 adjust‘forward’ 比例/差值复权多市场统一性格式各异.XSHG, sh, us 等统一标的后缀.SH, .SZ, .US, .HK对 LLM 极其友好三、 Python 代码实战可直接复制运行下面展示如何使用 LangChain 工具定义装饰器 tool 封装QuantDash Python SDK并配合 OpenAI 的 Function Calling 构建智能 Agent。# test.pyimportosimportjsonfromquantdashimportQuantDashfromlangchain_openaiimportChatOpenAIfromlangchain_core.toolsimporttoolfromlangchain_core.messagesimportHumanMessage,SystemMessage,ToolMessage# # 1. 密钥与 API 配置 (请在此填入您的 Key)# # 1) QuantDash API Key (可前往 https://quantdash.net/dashboard/keys/ 免费获取)QUANTDASH_API_KEYyour_quantdash_api_key# 替换为您的 QuantDash API Key# 2) DeepSeek API Key (前往 https://platform.deepseek.com/ 获取)DEEPSEEK_API_KEYsk-xxxxxx# 替换为您的 DeepSeek API Key# 初始化 QuantDash SDKqdQuantDash(api_keyQUANTDASH_API_KEY)# # 2. 封装 QuantDash 金融数据工具链# tooldefget_stock_quote(symbol:str)-str: 获取标的的实时行情数据。 :param symbol: 标的代码统一格式为 {代码}.{交易所后缀}如 600519.SH(贵州茅台), 000001.SZ(平安银行), AAPL.US(苹果), 00700.HK(腾讯) try:dfqd.quotes.get(symbols[symbol],to_dataframeTrue)ifdf.empty:returnf未查询到标的{symbol}的实时行情。returndf[[symbol,last_price,prev_close,volume,ext.name,ext.change_pct]].to_json(orientrecords,force_asciiFalse)exceptExceptionase:returnf获取实时行情失败:{str(e)}tooldefget_stock_klines(symbol:str,period:str1d,count:int5,adjust:strforward)-str: 获取标的的历史 K 线数据。 :param symbol: 标的代码如 600519.SH, AAPL.US :param period: 周期可选 1d(日), 1w(周), 5m(5分钟) :param count: 获取 K 线条数默认 5 条 :param adjust: 复权类型forward(前复权默认), backward(后复权), none(不复权) try:dfqd.klines.get(symbol,periodperiod,countcount,adjustadjust,to_dataframeTrue)ifdf.empty:returnf未查询到标的{symbol}的 K 线数据。cols[symbol,name,open,high,low,close,volume]time_coltrade_dateiftrade_dateindf.columnselsetrade_timeiftime_colindf.columns:cols.insert(2,time_col)returndf[cols].to_json(orientrecords,force_asciiFalse)exceptExceptionase:returnf获取 K 线数据失败:{str(e)}tooldefget_stock_depth(symbol:str)-str: 获取标的的实时买卖五档盘口数据。 :param symbol: 标的代码如 600519.SH try:depthqd.depth.get(symbol)returnjson.dumps(depth,ensure_asciiFalse)exceptExceptionase:returnf获取五档盘口失败:{str(e)}# # 3. 初始化 DeepSeek 模型与工具绑定# tools[get_stock_quote,get_stock_klines,get_stock_depth]tools_by_name{t.name:tfortintools}# 使用 ChatOpenAI 接口无缝对接 DeepSeek 大模型llmChatOpenAI(modeldeepseek-chat,temperature0,api_keyDEEPSEEK_API_KEY,base_urlhttps://api.deepseek.com)# 将 QuantDash 工具绑定给 DeepSeek 模型llm_with_toolsllm.bind_tools(tools)defrun_financial_agent(query:str):标准的 Function Calling 智能 Agent 流程messages[SystemMessage(content你是一名专业的金融量化分析助手。请利用 QuantDash 工具查询准确的行情与 K 线数据。标的代码格式A股(.SH/.SZ/.BJ)、美股(.US)、港股(.HK)。),HumanMessage(contentquery)]# 步骤 1: DeepSeek 思考并触发工具调用指令ai_msgllm_with_tools.invoke(messages)messages.append(ai_msg)# 步骤 2: 自动执行工具函数抓取 QuantDash 数据ifai_msg.tool_calls:fortool_callinai_msg.tool_calls:selected_tooltools_by_name[tool_call[name]]tool_outputselected_tool.invoke(tool_call[args])# 追加工具返回的结果messages.append(ToolMessage(contentstr(tool_output),tool_call_idtool_call[id]))# 步骤 3: DeepSeek 结合最新抓取到的数据给出专业回答final_responsellm_with_tools.invoke(messages)returnfinal_response.contentelse:returnai_msg.content# # 4. 执行测试# if__name____main__:user_query请帮我查询贵州茅台 (600519.SH) 的最新实时价格以及它最近 3 个交易日的前复权日 K 线数据。print(f 用户提问:{user_query}\n)print( 正在由 DeepSeek 模型思考并调用 QuantDash API...)resultrun_financial_agent(user_query)print(\n DeepSeek 金融 Agent 最终回答:)print(result)真实数据控制台输出 用户提问:请帮我查询贵州茅台(600519.SH)的最新实时价格以及它最近3个交易日的前复权日 K 线数据。 正在由 DeepSeek 模型思考并调用 QuantDash API... DeepSeek 金融 Agent 最终回答:以下是贵州茅台600519.SH的查询结果---### 实时行情|项目|数据||------|------||**最新价格**|**1,350.60元**||**昨收价**|1,361.76元||**涨跌幅**|**-0.82%**||**成交量**|55,128手|---### 最近 3 个交易日前复权日K线|交易日期|开盘价|最高价|最低价|收盘价|成交量||----------|--------|--------|--------|--------|--------||2026-07-29|1,333.83|1,343.48|1,312.06|1,321.00|62,330||2026-07-30|1,323.00|1,362.00|1,322.00|1,361.76|71,873||2026-07-31|1,330.03|1,355.72|1,325.77|**1,350.60**|55,128|---### 简要分析-**最新交易日7月31日**贵州茅台开盘价为1,330.03元盘中最高触及1,355.72元最低下探至1,325.77元最终收于**1,350.60元**较前一交易日下跌约**0.82%**。-**近3日走势**股价在1,312~1,362元区间内震荡7月30日出现明显反弹涨幅约3.08%但7月31日有所回落。-**成交量**最近3日成交量呈先增后减的态势最新交易日成交量较前一日有所萎缩。 如需进一步分析如盘口深度、周K线等请随时告诉我四、 性能优化与量化进阶避坑指南 (E-E-A-T 专区)1.避免 LLM 在标的代码上出现类型格式错误LLM 在自动填充入参时容易把纯数字代码如 000001处理成整数而丢弃前置 0。在 tool 的 Docstring 中显式强调格式规范如 000001.SZQuantDash 统一的后缀设计能够大幅降低 LLM 填错参数的概率。2.服务器端复权防止本地未来函数在使用历史 K 线数据进行量化策略研判或 Agent 预测时必须指定 adjust‘forward’前复权。QuantDash 提供了云端原生比例复权与差值复权forward_additive无需在 Agent 端手动合并除权因子 DataFrame不仅提升了运行效率也规避了因除权计算引起的未来函数偏误。3.数据缓存策略Parquet / DuckDB对于频次较高的回测分析 Agent可以在工具层对 QuantDash 返回的 Pandas DataFrame 进行本地 Parquet 缓存避免重复请求同一时段的历史 K 线。五、 常见问题解答 (QA / FAQ)Q1: QuantDash 如何在 LangChain 中支持批量股票数据的获取A: QuantDash Python SDK 提供了 qd.klines.batch() 与 qd.quotes.get(symbols[…]) 原生批量接口。可以封装一个 get_batch_quotes 的 LangChain Tool直接一次性传入多个标的代码如 [“600519.SH”, “000001.SZ”]一次 HTTP 调用即可返回全量数据极大减少 Agent 轮询 API 的工具开销。Q2: 如果我的 Agent 需要分析整板块或全市场股票怎么办A: QuantDash 支持标的池Universe全量行情查询。在工具中调用 qd.quotes.get(universes[“CN_Stock”], to_dataframeTrue) 即可获得 A 股全量 5000 只股票的实时行情 DataFrame配合 Polars 或 DuckDB 可以在毫秒级完成全市场涨跌幅筛选。 文档QuantDash 官网https://quantdash.net/官方 Python SDK 文档https://docs.quantdash.net/⭐GitHub 开源仓库https://github.com/quantdash-net/QuantDash (欢迎 Star / Fork)获取免费 API Key 体验全量数据https://quantdash.net/dashboard/keys/