ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI Agent 接股票数据源实战:从 Tushare / AkShare 到 MCP 工具层,用 TaoToken 统一 Key 打通调用链

AI Agent 接股票数据源实战:从 Tushare / AkShare 到 MCP 工具层,用 TaoToken 统一 Key 打通调用链 1. 为什么 Agent 做股票分析卡点从来不在提示词很多人第一次让 AI Agent 做股票分析都会先写一大段提示词比如「帮我复盘今天 A 股市场重点看涨停梯队、主线题材、资金方向和明日观察」。写完发现输出要么是空话要么数据对不上于是继续改提示词改到第十版还是不稳。问题不在提示词。AI Agent 接股票数据源这件事本质是让 Agent 稳定拿到结构化数据。提示词只是告诉它「要什么」真正决定输出质量的是「它能不能拿到、拿到的字段对不对、日期是不是最新的」。我试过把同一段复盘提示词分别喂给「能调数据工具」和「只能靠模型记忆」的 Agent前者能列出具体涨停家数和连板梯队后者只能给一段听起来很顺但没有日期的市场描述。所以这条链路的正确拆法是三层数据源层Tushare / AkShare 这类取数库、工具层MCP 把取数能力暴露成 Agent 可发现的工具、调用层统一 Key 与鉴权让 Agent 每次调用都有边界。本文就按这三层走一遍给出可复制的 MCP 工具定义、数据源适配配置和统一 Key 调用示例最后做一次端到端行情查询验证。适合谁看正在用量化投研 Agent、想让 Codex / Cursor / 自建 LangGraph 服务直接查 A 股行情的开发者已经会用 AkShare 写脚本、但每次都要重新解释接口的人以及想把内部取数逻辑封装成受控工具、又不想维护一整套后端的团队。先说清楚边界本文只讨论数据接入与研究不涉及任何下单执行也不承诺收益。股票数据工具应该明确写清「不执行交易、输出用于复盘、重要结论需结合原始数据核验」。2. TaoToken 前置统一 Key 与调用链的入口在把 Tushare / AkShare 封装成 MCP 工具之前先解决一个容易被忽略的问题Key 管理。自建路径下你会有 Tushare Token、可能有行情服务的 Key、再加上模型侧的 Key散落在脚本、环境变量、前端代码里。Agent 一旦长期运行Token 暴露和调用失控是迟早的事。TaoToken 在这里的角色是统一调用入口。它提供兼容主流协议的统一 Key模型对话、编码 Agent、API 调用走同一套鉴权你不需要在每个工具里各写一套 Key 逻辑。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个地址不加 UTM 参数。具体到操作你需要先拿到 Key。进入控制台创建控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite创建完 Key 之后建议先做一次最小验证确认 Key 可用再往下接数据源。验证模型调用可以直接用模型对话页模型对话https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite如果你打算长期跑编码类 Agent比如让 Agent 自己写取数脚本、改 MCP 工具定义可以看 Coding PlanCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入细节和字段说明在文档里接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite这里要强调一点TaoToken 是统一调用入口不是让你跳过数据源授权。Tushare 的 Token、AkShare 的取数逻辑仍然各自独立TaoToken 解决的是「模型侧和工具侧调用链的 Key 统一与鉴权边界」。两者不冲突是叠加关系。为什么先讲这个因为后面 MCP 工具定义里会同时出现「模型调用」和「数据源调用」两类配置。如果 Key 管理没理顺排障时你分不清是模型侧 401 还是数据源侧权限不足。先把统一 Key 跑通后面出错定位会快很多。3. 可复制配置MCP 工具定义与数据源适配这一节给可直接复制的配置。分两部分MCP 服务器配置让 Agent 发现工具和数据源适配Tushare / AkShare 的取数封装。先看 MCP 服务器配置。以支持远程 HTTP MCP 的客户端为例配置文件通常长这样注意路径和字段名要和你客户端实际要求一致{ mcpServers: { stock-data: { url: https://taotoken.net/api/mcp, headers: { Authorization: Bearer YOUR_TAOTOKEN_KEY } } } }如果你的客户端要求显式声明连接类型补上type: http或对应字段。不同客户端字段名有差异以文档为准。这里 Base URL、Key、Model ID 三件套要写全Base URL 用https://taotoken.net/apiKey 用你在 API Keys 页创建的Model ID 按你实际调用的模型填。接下来是数据源适配。MCP 工具层不直接写死 Tushare 或 AkShare而是包一层适配器把不同数据源的返回统一成结构化字段。下面是一个 AkShare 适配的 MCP 工具定义示意from mcp.server import Server from mcp.types import Tool, TextContent import akshare as ak import json app Server(stock-data) app.list_tools() async def list_tools(): return [ Tool( nameget_daily_kline, description获取A股日K线。参数symbol(6位代码), start_date, end_date, adjust(qfq/hfq/空), inputSchema{ type: object, properties: { symbol: {type: string}, start_date: {type: string}, end_date: {type: string}, adjust: {type: string, default: qfq} }, required: [symbol, start_date, end_date] } ) ] app.call_tool() async def call_tool(name: str, arguments: dict): if name get_daily_kline: df ak.stock_zh_a_hist( symbolarguments[symbol], perioddaily, start_datearguments[start_date], end_datearguments[end_date], adjustarguments.get(adjust, qfq) ) records df.tail(60).to_dict(orientrecords) return [TextContent(typetext, textjson.dumps({ symbol: arguments[symbol], rows: records, source: akshare, tradeDate: records[-1][日期] if records else None }, ensure_asciiFalse))]Tushare 适配同理只是把取数函数换成pro.daily()并在返回里带上ts_code和trade_date。关键点是每个工具返回都要带source和tradeDate字段这是后面排障和防止「拿昨天收盘价当现价」的关键。工具粒度建议按任务组织不要一次暴露几十个接口。市场复盘、个股研究、涨停复盘、题材研究分开建工具组Agent 选错工具的概率会明显下降。4. 验证请求一次端到端行情查询配置写完必须验证否则你不知道是工具没被发现还是发现了但调用失败。验证分两步先tools/list确认工具可见再tools/call实际取数。第一步让 Agent 列出工具。在支持 MCP 的客户端里发起请列出当前可用的股票数据工具并说明每个工具的参数。正常返回应该能看到get_daily_kline及其参数说明。如果这里为空说明 MCP 服务器没连上先查 URL 和 Authorization 头。第二步实际调用一次。用贵州茅台做样例调用 get_daily_klinesymbol600519start_date20240101end_date20260615adjustqfq返回最近5条。预期返回结构类似{ symbol: 600519, rows: [ {日期: 2026-06-11, 开盘: 1680.0, 收盘: 1702.5, 成交量: 32100}, {日期: 2026-06-12, 开盘: 1703.0, 收盘: 1695.2, 成交量: 29800} ], source: akshare, tradeDate: 2026-06-12 }看到tradeDate和source就说明链路通了。注意看到工具名称不等于成功取得数据参数和返回字段以当前服务为准。如果返回里rows为空先检查日期区间是否落在交易日范围内再检查symbol格式AkShare 用 6 位纯数字Tushare 用600519.SH。第三步做一次「日期一致性」检查。让 Agent 回答「600519 最新交易日收盘价是多少」然后核对返回的tradeDate是不是最近交易日。这一步能提前暴露「K 线当实时行情」的坑。如果你用的是 Claude Code 这类编码 Agent 来写和调 MCP 工具接入方式参考Claude Code 接入https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-codeutm_campaignrewrite5. 本篇常见错排查401、local proxy failed、reading choices、OAuth排障按「模型侧 → 工具侧 → 数据源侧」顺序查不要一上来就改代码。401 Unauthorized。两种可能TaoToken Key 无效或数据源 Token 无效。先确认Authorization: Bearer后面的 Key 是从 API Keys 页复制的完整串没有多余空格。如果模型调用正常但工具调用 401问题在数据源侧检查 Tushare Token 是否过期、AkShare 是否触发了频率限制。local proxy failed。通常是 MCP 客户端本地代理没起来或 URL 写错。检查配置里的url是不是https://taotoken.net/api/mcp有没有误写成带 UTM 的地址。远程 HTTP MCP 不需要本地代理如果客户端强制走本地代理确认代理进程在运行。reading choices 报错。这类错误一般出现在模型返回结构解析阶段说明返回体不是预期的 JSON。常见原因是数据源返回了 HTML 错误页比如被限流而工具层没做异常捕获。在call_tool里加 try/except把异常转成结构化错误返回而不是让原始 HTML 透传。OAuth 相关报错。部分客户端对远程 MCP 要求 OAuth 流程而你的配置用的是静态 Bearer 头。这时要么在客户端里选择「API Key / Bearer」模式要么按客户端文档补 OAuth 配置。不要混用两种鉴权方式。工具可见但调用无返回。检查inputSchema的required字段是否和实际传参一致。Agent 有时会漏传end_date导致取数函数报错但被吞掉。日期对不上。返回的tradeDate是昨天但用户问的是现价。这是工具描述没写清「本工具返回历史 K 线非实时行情」。在description里明确写「历史日线更新时间 T1」并单独建实时行情工具。排障时如果拿不准是 Key 问题还是配置问题回到接入文档对照字段接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteAPI Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite6. 按任务选路径现成服务与自建工具怎么组合走到这里你有两条路。路径 AAgent → 现成数据 MCP 服务 → 数据查询与核对适合想少维护取数代码、先验证能力的场景。路径 B数据 API / Python 库 / 内部数据库 → 自建受控工具 → Agent适合有内部指标、特殊权限规则的团队。两条路可以按任务组合不需要为了用现成服务先自建数据库。如果你希望 Agent 直接查询 A 股涨停梯队、市场宽度和题材资金做盘后复盘可以先把现成数据 MCP 服务列入候选完成配置和历史样例验收再测自己的目标日期。已有 Tushare 生态需求的评估其官方 MCP 或继续用 SDK想自己控制采集和内部指标的用 AkShare 加自建服务。选择依据是任务覆盖、数据日期、实际输出、权限和维护成本不是只看是否支持 MCP。无论哪条路都要核对实际日期、字段单位、结果截断和失败状态。定时执行、文件落盘和报告发送由 Agent 客户端或调度器负责数据工具不自动包办这些动作。最后给一个实用技巧把「工具描述」当成给 Agent 的接口文档来写参数含义、返回字段、更新频率、边界不执行下单都写进去。Agent 选错工具八成是描述没写清而不是模型不行。统一 Key 用 TaoToken 管住调用链数据源适配用适配器隔离工具粒度按任务拆这三件事做完Agent 拿结构化股票数据就稳了。
返回列表