资讯动态

MCP 数据爬取 Agent 调 deepseek-chat,Base URL 填 TaoToken

发布时间:2026/9/20 21:05:40 来源:尧图企业网站定制
从写死 DeepSeek 到统一通道MCP 数据爬取 Agent 的 Base URL 改造实录如果你正在跟着 Agent-study 项目做第 10 个实战——基于 MCP 的智能数据爬取与分析 Agent大概率已经跑通了 FastMCP 暴露的get_github_trending和analyze_data两个工具也把 LangGraph 的 agent→tools 循环搭起来了。但很多人卡在最后一步ChatOpenAI里那行openai_api_basehttps://api.deepseek.com和os.getenv(DEEPSEEK_API_KEY)是写死的一旦想换模型通道、换 Key 管理方式就得回头改代码、重新配环境变量甚至重新申请一把 Key。这篇就专门解决这个接入配置问题把原文里申请 DEEPSEEK_API_KEY、填 DEEPSEEK_BASE_URL这一步替换成用 TaoToken 统一 API 通道来供 Key 和 Base URL。TaoToken 官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 它在这里只做兼容通道不参与爬虫解析、也不执行分析代码MCP Server 和 LangGraph 的逻辑一行都不用动。改完之后你依然用python stage_06_advanced/project_10_data_analysis/main.py以 stdio 拉起 MCP Serveragent 节点决策、tools 节点调用两个工具图表照旧落在output/目录并打印图表已保存至。一、原问题与场景为什么写死 Base URL 会让人难受先还原一下原文的接入方式。在main.py里模型侧是这样写的llm ChatOpenAI( modeldeepseek-chat, temperature0, openai_api_basehttps://api.deepseek.com, openai_api_keyos.getenv(DEEPSEEK_API_KEY), )这段代码本身没问题能跑通。但它的工程痛点在于通道信息和业务代码耦合在一起。openai_api_base是硬编码的字符串DEEPSEEK_API_KEY是绑定的环境变量名。这意味着第一换通道要改代码。你想把模型请求切到另一个兼容 OpenAI 协议的入口就得改openai_api_base改完还要重新测试 agent 节点是否正常返回tool_calls。第二Key 管理分散。项目里可能同时有爬虫、分析、模型调用多个环节每个环节各配一把 Key、各写一个环境变量名.env文件越堆越长团队协作时谁该拿哪把 Key 说不清楚。第三环境变量名和代码强绑定。os.getenv(DEEPSEEK_API_KEY)写死在代码里换一把 Key 就得同步改环境变量名否则读不到。这个场景的本质是模型通道和Agent 业务逻辑没有解耦。而 MCP 的设计初衷恰恰是解耦——把工具能力从 Agent 中剥离成标准化 Server。既然工具都能解耦模型通道为什么不能TaoToken 在这里扮演的角色就是把这个通道抽象出来你只需要一把 Key、一个 Base URL代码里model字段仍然保留deepseek-chat其余交给统一入口处理。二、TaoToken 前置注册、创建 Key、拿到两个值在改代码之前先把前置动作做完。打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 完成注册然后进入控制台创建一把 API Key。创建完成后你会拿到两个关键值API Key形如YOUR_API_KEY用来替换原来os.getenv(DEEPSEEK_API_KEY)读到的值。Base URLhttps://taotoken.net/api注意这里不带/v1也不加任何 UTM 参数直接就是这一串。这两个值就是 TaoToken 在这个项目里提供的全部东西。它不碰你的crawler.py不碰analysis.py也不碰server.py里 FastMCP 的工具注册。它只负责在ChatOpenAI发起模型请求时提供一个兼容 OpenAI 协议的入口。如果你习惯用命令行工具管理也可以装一下 CLInpm i -g taotoken/taotoken taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m deepseek-chat不过对于这个项目直接在 Python 代码里配置就够了CLI 只是给习惯终端操作的人多一个选择。三、可复制配置改哪几行、怎么改现在进入正题。打开stage_06_advanced/project_10_data_analysis/main.py找到ChatOpenAI那段。原文是llm ChatOpenAI( modeldeepseek-chat, temperature0, openai_api_basehttps://api.deepseek.com, openai_api_keyos.getenv(DEEPSEEK_API_KEY), )改成llm ChatOpenAI( modeldeepseek-chat, temperature0, openai_api_basehttps://taotoken.net/api, openai_api_keyos.getenv(TAOTOKEN_API_KEY), )改动只有两处openai_api_base换成 TaoToken 的地址openai_api_key读的环境变量名换成TAOTOKEN_API_KEY。model字段保持deepseek-chat不变temperature0也不动。对应的.env文件里把原来的DEEPSEEK_API_KEY你的旧Key DEEPSEEK_BASE_URLhttps://api.deepseek.com替换为TAOTOKEN_API_KEYYOUR_API_KEYBase URL 已经写进代码了不需要再单独配一个环境变量。如果你希望 Base URL 也走环境变量可以写成os.getenv(TAOTOKEN_BASE_URL, https://taotoken.net/api)但为了和原文风格一致直接写死字符串更直观。这里要强调一点server.py里的StdioServerParameters用的是envos.environ.copy()它会把当前进程的环境变量传给 MCP Server 子进程。所以只要你在启动main.py之前把TAOTOKEN_API_KEY注入环境整个链路都能读到。MCP Server 本身不调用模型它只负责执行get_github_trending和analyze_data所以 Key 的改动对它没有影响。四、验证请求与成功结果跑一遍看输出配置改完在项目根目录执行python stage_06_advanced/project_10_data_analysis/main.py正常情况下你会看到类似这样的输出启动 MCP 数据爬取与分析 Agent... 连接到 MCP Server: python [.../server.py] 用户: 请帮我分析一下 GitHub 上 Python 的热门项目画一个柱状图展示 Star 数最高的 5 个项目并保存图表。 ---- 节点: agent ---- ---- 节点: tools ---- ---- 节点: agent ---- ---- 节点: tools ---- ---- 节点: agent ---- 任务完成。请检查 stage_06_advanced/project_10_data_analysis/output 目录查看结果。这个流转过程说明agent 节点第一次决策时模型返回了tool_calls要求调用get_github_trendingtools 节点执行后把结果回传agent 节点再次决策要求调用analyze_data执行分析代码tools 节点执行完毕agent 节点最终返回无tool_calls的消息循环结束。在output/目录下你会看到生成的图表文件比如python_top5_stars.png。工具返回日志里会打印图表已保存至: .../stage_06_advanced/project_10_data_analysis/output/python_top5_stars.png如果你在 agent 节点第一次调用时就报错比如AuthenticationError或ConnectionError那说明 Key 或 Base URL 没配对往下看排查部分。五、本篇常见错排查错误一openai_api_base多写了/v1TaoToken 的 Base URL 是https://taotoken.net/api不要写成https://taotoken.net/api/v1。OpenAI 兼容客户端会自动拼接路径多写/v1会导致请求打到错误的路由。如果你之前用其他通道习惯带/v1这里要特别注意。错误二环境变量名没同步改代码里读的是TAOTOKEN_API_KEY但.env里还写着DEEPSEEK_API_KEY结果os.getenv返回None请求时就会报鉴权失败。改代码和改.env要同步做别只改一边。错误三.env没被加载main.py开头有load_dotenv()它默认从当前工作目录找.env。如果你在项目根目录执行命令.env也在根目录没问题。但如果你cd到子目录再执行load_dotenv()可能找不到文件。确认执行命令时的工作目录或者给load_dotenv()传绝对路径。错误四MCP Server 子进程读不到 Key虽然 MCP Server 不调用模型但如果你在server.py里也加了模型相关逻辑就要确认StdioServerParameters的env参数是否包含了TAOTOKEN_API_KEY。原文用的是os.environ.copy()只要父进程有子进程就有。如果你改成了自定义 env 字典记得把 Key 加进去。错误五模型名写错model字段保持deepseek-chat不要改成deepseek或deepseek-chat-v3之类的猜测名称。TaoToken 作为兼容通道会按你传入的模型名路由写错了会返回模型不存在的错误。错误六图表没生成但任务显示完成这种情况通常不是通道问题而是analyze_data工具执行代码时出错。检查execute_analysis_code返回的日志看是否有执行代码出错的 traceback。常见原因是 matplotlib 后端没设成Agg或者中文字体配置没生效。原文已经在analysis.py里做了matplotlib.use(Agg)和字体兼容处理确认你没有改动这部分。六、语义一致的 CTA接下来该做什么如果你已经按上面的步骤配通了agent 能正常调用两个 MCP 工具、图表能落到output/目录那说明接入配置这一步已经完成。接下来根据你的实际需求有几个方向可以继续想验证模型通道是否稳定可以打开模型对话页面用同一把 Key 发几条请求确认deepseek-chat在 TaoToken 通道下的响应正常。地址是 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。想把这套配置用到更多项目如果你打算在多个 Agent 项目里复用同一把 Key 和 Base URL建议去 API Keys 页面统一管理 Key并对照接入文档确认不同框架下的配置写法。API Keys 地址是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想长期跑编码类 Agent如果你不只是跑这一个数据爬取项目而是想把 Agent 用在日常编码、代码审查、长期任务上可以了解一下 Coding Plan它更适合高频、持续的模型调用场景。地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。想深入 MCP 与 Claude Code 集成如果你后续要把 MCP Server 接到 Claude Code 里配置方式会从 Python 代码转到settings.json环境变量也变成ANTHROPIC_*系列。相关说明在 https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_codeutm_campaignrewrite 。回到这个项目本身你完成的不只是一次 Base URL 替换而是把模型通道从 Agent 业务逻辑里解耦出来。MCP 解耦了工具TaoToken 解耦了通道LangGraph 负责编排决策循环——三层各司其职后续换模型、换 Key、加工具都不用再动核心代码。这才是这套架构真正值得带走的东西。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价