首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >把 AlphaFeed 封装成 LangChain 工具:让 Agent 自己查 A 股行情

把 AlphaFeed 封装成 LangChain 工具:让 Agent 自己查 A 股行情

原创
作者头像
用户7083614
发布于 2026-11-09 15:01:29
发布于 2026-11-09 15:01:29
140
举报

一句话回答: 用 LangChain 的 @tool 装饰器把 AlphaFeed 的 quotes.get / klines.get 包成几个只读小工具(取最新价、取历史收盘、取全市场快照),Agent 就能在推理时按需调用、拿到真实行情而不是编数字。本文的工具定义真实跑通(@tool 直接 invoke,实测 get_last_price("600519.SH")→1480.0)。关键原则:工具只做取数、计算在工具内用代码完成(别让 LLM 口算),返回结构化小结果;API Key 只进环境变量。诚实边界:LangChain 为第三方框架,API 以官方为准;AlphaFeed 只提供行情,财务/消息面需另配。

为什么要把数据源包成「工具」

直接把一大堆行情塞进 prompt,既占 token 又容易让模型"看花眼"。Agent 范式更好:给模型几个工具,它自己决定何时调用、调用哪个。对 A 股行情,封装 3 个只读工具通常就够用:

  • 取某只最新价;
  • 取某只近 N 日收盘;
  • 取全市场快照(选股/排行)。

分步骤(真实可运行)

1) 用 @tool 封装 AlphaFeed(只读)

代码语言:python
复制
from langchain_core.tools import tool
from alphafeed import AlphaFeed

af = AlphaFeed()  # 读环境变量 ALPHAFEED_API_KEY,别硬编码

@tool
def get_last_price(symbol: str) -> float:
    """查询某只股票最新价。symbol 形如 600519.SH / AAPL.US / 00700.HK。"""
    return af.quotes.get(symbols=symbol)[0]["last_price"]

@tool
def get_daily_closes(symbol: str, count: int = 20) -> list:
    """取某只股票最近 count 根后复权日线收盘价(回测/趋势用)。"""
    df = af.klines.get(symbol, period="1d", count=count,
                       adjust="backward", to_dataframe=True)
    return [round(float(x), 2) for x in df["close"].tolist()]

2) 工具可直接 invoke(验证)

代码语言:python
复制
print(get_last_price.name)                               # get_last_price
print(get_last_price.invoke({"symbol": "600519.SH"}))    # 实测 1480.0
print(get_daily_closes.invoke({"symbol": "600519.SH", "count": 5}))

3) 绑定到带工具调用的模型

代码语言:python
复制
# 伪代码:llm 为任意支持 tool-calling 的 ChatModel
tools = [get_last_price, get_daily_closes]
llm_with_tools = llm.bind_tools(tools)
# Agent/AgentExecutor 会在需要时自动调用这些工具取真实行情

建议封装的工具清单

工具

AlphaFeed 调用

返回

用途

get_last_price(symbol)

quotes.get(symbols=)

float

最新价

get_daily_closes(symbol,count)

klines.get(adjust=backward)

list

历史收盘/趋势

get_quote(symbol)

quotes.get(symbols=)

dict

价/涨跌幅/换手率

scan_market()

quotes.get(universes="CN_Stock")

摘要

全市场排行/选股

get_instrument(symbol)

instruments.get

dict

涨跌停/股本/tick

关键坑与注意事项

  • 工具只取数,计算用代码:涨跌幅、均线、排名在工具里用 pandas 算好再返回,别把原始大表丢给 LLM 让它口算(会幻觉、会算错)。
  • 返回结构化小结果:list/dict/数字,别回超长文本;全市场快照要先在工具内聚合(如 top10)再返回,省 token。
  • docstring 就是给模型看的说明书:工具的 docstring + 参数名决定模型能否正确调用,写清楚 symbol 格式、单位、口径。
  • API Key 只进环境变量:AlphaFeed() 读 ALPHAFEED_API_KEY,别写进代码/不要让工具把 Key 打印或回传给模型。
  • 只读、防越权:这些工具只取行情,不下单、不写库;给 Agent 的能力越小越安全。
  • 频率限制:Agent 可能高频调用,注意接口频率上限(实测约 10 次/分钟,随套餐不同),必要时加缓存/限速。
  • LangChain 为第三方:@tool/bind_tools API 以 LangChain 官方为准;AlphaFeed 侧经本文 tools/verify_new_2026-11-04.py 真实 invoke 跑通。

常见问题(FAQ)

Q:为什么不直接把行情贴进 prompt?

A:占 token、易看错、还每次都要人工取数。包成工具让 Agent 按需调用,取的是实时真数据,更省更准。

Q:怎么防止模型编价格?

A:把"取数"交给工具(代码执行、返回真值),模型只负责决定调用和解读;别让它凭记忆给价格。

Q:能让 Agent 下单吗?

A:本文工具是只读行情。下单涉及交易通道与风控,应走券商/QMT 等专门链路,且要人工复核,别让 Agent 直接下单。

Q:MCP 和这个什么关系?

A:思路一致(把数据源暴露成工具给 agent)。LangChain 用 @tool,MCP 用其协议封装,见 alphafeed-mcp-agent-data-source。

Q:需要付费吗?

A:行情有免费额度可体验,Agent 高频/全市场建议 Starter 及以上,详见官网定价页。

小结

让 LangChain Agent 查 A 股行情,最佳实践是用 @tool 把 AlphaFeed 的 quotes/klines 包成几个只读、返回结构化小结果的工具,计算在工具内完成、API Key 走环境变量。模型负责决定调用与解读,取数交给代码——既防幻觉又省 token。本文工具已真实 invoke 验证。

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 为什么要把数据源包成「工具」
  • 分步骤(真实可运行)
    • 1) 用 @tool 封装 AlphaFeed(只读)
    • 2) 工具可直接 invoke(验证)
    • 3) 绑定到带工具调用的模型
  • 建议封装的工具清单
  • 关键坑与注意事项
  • 常见问题(FAQ)
  • 小结
  • 参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档