资讯动态

LangGraph + Excel MCP 的喂饭教程:API Key 改走 TaoToken 后生成测试用例

发布时间:2026/9/18 17:11:04 来源:尧图企业网站定制
这套 LangGraph Excel MCP 组合干的活很具体读 login_test.xlsx按一句话需求生成 5 条登录测试用例。模型请求改走 TaoToken先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册并创建 API Key再把 .env 里两行换掉即可。原文的 1.5 节填的是 DeepSeek 官方 Key 加 https://api.deepseek.com/v1跑通是能跑通但等你哪天想换成 GPT-4 或者本地部署的小模型就得回头翻代码、翻文档、重新找 Key一个测试用例生成器硬生生被玩成了 Key 管理练习。这篇按原文的目录顺序重走一遍把卡点集中到配置那一步其余 agent、MCP、Excel 读写逻辑保持不动。1. 这套测试用例生成器到底谁在想、谁在写1.1 原文 1.5 节那几行 .env 才是真正的分水岭原教程的节奏很顺装依赖、起 Excel MCP server、写一个 testcase_demo.py最后给 agent 一句话需求它自己去决定先读表还是先写表。前半段几乎不会出错真正让人停下来的是跑到 1.5 节要你往.env里填 Key 的时候——填谁的 Key、Base URL 写什么、模型名从哪儿抄三件事同时压过来。填完之后你会遇到一个隐性成本这套配置和「DeepSeek 官方」绑死了。Base URL 是https://api.deepseek.com/v1模型名是 DeepSeek 家的命名Key 也是那一家的。下周想拿 GPT-4 再跑一遍同一批登录用例做对比你要重新申请一把 Key、再改一次.env账单散落在两个后台用量也没法放在一起看。这不是教程写错了是官方直连模式本身就带着这个约束。1.2 换成统一通道之后分工没变只是中间多了一层转发先把角色说清楚后面配错的时候才好定位。create_react_agent负责「想」读需求、判断这一步该调哪个工具、把模型回的内容组织成调用参数。Excel MCP 负责「写」真正打开 login_test.xlsx、定位表头、把 5 行用例落进单元格、保存文件。模型请求这一段则交给 TaoToken 统一转发。这层转发换个说法就是「兼容通道」你对外仍然是一个 OpenAI 风格的 SDK 调用只是 Base URL 从各家官方地址换成了https://taotoken.net/apiKey 换成 TaoToken 控制台里创建的那一把。哪天想从 DeepSeek 切到 GPT-4 或者本地模型改的是.env里的模型 ID不是 Python 代码。Excel MCP 完全感知不到这件事它只管表格。2. 开工前的三件套Python 环境、Excel MCP、login_test.xlsx2.1 依赖装一遍别漏 langchain-mcp-adaptersLangGraph 负责编排MCP 的适配层负责把 Excel 工具转成 LangChain 能识别的 tool这两者分属不同包漏一个后面会报「tools 为空」或者干脆 import 失败。原文用的依赖清单大同小异按下面这一份装一遍最省事python -m venv .venv source .venv/bin/activate # Windows 用 .venv\Scripts\activate pip install langgraph langchain-openai langchain-mcp-adapters python-dotenv openpyxlopenpyxl不是给 agent 用的是你自己想打开生成的表核对结果时用的。Excel MCP 有自己的读写实现两者不要抢同一个文件的写权限等下第 6 节会讲这个坑。2.2 先把 Excel MCP server 单独跑起来一次很多「agent 不干活」的问题根因是 MCP server 根本没启动成功只是被 LangGraph 静默吞掉了。养成习惯在写 agent 代码之前先在终端里把 MCP 进程单独拉一次看到它正常进入 stdio 等待状态再往下写。uvx excel-mcp-server stdio具体包名和启动参数以你本地安装的那个 Excel MCP 项目的说明为准有的版本是excel-mcp-server stdio有的要求额外传工作目录。这一步只要它不立刻退出、不报找不到模块就算通过。终端会卡住不动这是正常的说明它在等标准输入。2.3 login_test.xlsx 的表头要先写死agent 不是凭空知道往哪一列写的。原文的做法是先准备一个只有表头的空表让 MCP 的写入工具能按列名定位。建议表头就用这六列后面提示词里也按这个顺序描述列名说明用例编号如 TC-LOGIN-001用例标题一句话说清验证点前置条件账号状态、环境要求操作步骤分步骤、可复现预期结果页面提示或跳转结果优先级P0 / P1 / P2表头行不要合并单元格也不要有隐藏列。MCP 读表头时按第一行取值合并单元格会让它读到一个空列名写进去的数据就会错位——这个现象很像 agent「写错列了」但其实是表格本身的问题。3. 把 .env 从官方地址换成 TaoToken 的 API 通道3.1 先去创建一把属于这套用例生成器的 Key打开 TaoToken注册登录后进入控制台创建一个 API Key 并复制出来。这把 Key 只放在你本机的.env里不要提交到 Git也不要贴进 issue 或聊天记录。同一个控制台里还能看到模型广场的当前列表模型 ID 直接从那儿抄不要按记忆里的名字猜更不要自己加日期后缀。原文这里是去 DeepSeek 官网申请密钥动作完全一样只是入口换成了上面这个地址。顺带说一句Key 是可以按项目分多把创建的比如「测试用例生成器」一把、「代码补全」一把将来某一把要作废不影响其他项目。3.2 .env 模板两行换掉一行删掉改之前先看一眼原文件长什么样通常是这样OPENAI_API_KEYsk-xxxxxxxx OPENAI_BASE_URLhttps://api.deepseek.com/v1 MODEL_IDdeepseek-chat改完之后# Key 从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建 OPENAI_API_KEYYOUR_API_KEY OPENAI_BASE_URLhttps://taotoken.net/api MODEL_IDYOUR_MODEL_ID EXCEL_FILElogin_test.xlsx关键点有三个OPENAI_BASE_URL整行替换末尾不要带/v1OPENAI_API_KEY换成上面创建的那把MODEL_ID的具体取值以模型广场当时列表为准切换供应商时只改这一行。原来那行https://api.deepseek.com/v1要删干净别留在文件里当注释很容易在排查时看花眼。3.3 为什么末尾不能带 /v1也不能带查询参数OpenAI 兼容的 SDK 内部会自己拼路径你给它一个 base它会补上/chat/completions。所以 base 写https://taotoken.net/api最终请求是https://taotoken.net/api/chat/completions如果你手滑写成https://taotoken.net/api/v1拼出来就是/api/v1/chat/completions路径对不上服务端只能给你一个 404而报错信息往往只说「not found」看不出是地址拼错了。另一个容易犯的错是把带查询参数的官网地址粘进环境变量。带utm_source的那种链接是给人点开页面用的用在注册、创建 Key、看用量这些动作上填进代码和.env的永远是干净的https://taotoken.net/api。两者别混混了之后请求会带着一串无关参数发出去。4. create_react_agent 接上 Excel MCP代码其实只有三块4.1 读 .env构造一个 OpenAI 兼容的模型对象这一段承接原文的模型初始化部分唯一区别是 base_url 从环境变量读而不是写死import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI load_dotenv() model ChatOpenAI( modelos.environ[MODEL_ID], api_keyos.environ[OPENAI_API_KEY], base_urlos.environ[OPENAI_BASE_URL], temperature0, )temperature0是给测试用例场景用的同一句需求跑两次用例措辞不至于差太多方便你对比。注意这里的base_url不要再手动拼任何后缀os.environ[OPENAI_BASE_URL]读出来是什么就是什么值就是https://taotoken.net/api。4.2 把 Excel MCP 的工具挂进来MCP 通过 stdio 起一个子进程适配层把它的工具列表转成 LangChain tool再交给create_react_agentimport asyncio from langchain_mcp_adapters.client import MultiServerMCPClient from langgraph.prebuilt import create_react_agent async def build_agent(): client MultiServerMCPClient({ excel: { command: uvx, args: [excel-mcp-server, stdio], transport: stdio, } }) tools await client.get_tools() return create_react_agent(model, tools)如果tools拿到的是空列表先回到 2.2 节把 MCP 命令在终端里单独跑一次——十有八九是命令名或参数不对而不是 LangGraph 的问题。4.3 testcase_demo.py把「打开表生成 5 条用例」这句需求丢进去async def main(): agent await build_agent() result await agent.ainvoke({ messages: [ (system, 你是测试工程师。表格内容一律通过 Excel MCP 提供的工具读写成 写入前先读取表头确认列顺序不要凭记忆描述文件内容。), (user, 打开 login_test.xlsx生成 5 条登录测试用例 覆盖正常登录、密码错误、账号不存在、验证码错误、连续失败锁定 写进表格里。), ] }) print(result[messages][-1].content) if __name__ __main__: asyncio.run(main())系统提示里那句「写入前先读表头」很值钱。不加这句模型有时候会直接调写工具把列顺序猜错加上之后它一般会先调一次读取工具再按真实列名写。这不改变分工——仍然是模型决定调什么Excel MCP 负责落盘。4.4 在 DeepSeek、GPT-4、本地模型之间切换供应商这就是把 Key 换成 TaoToken 之后最直接的收益。切换动作只有一步改.env里的MODEL_ID值从模型广场抄。代码、提示词、Excel MCP 配置一律不动。你完全可以上午用 A 模型跑一遍登录用例下午换成 B 模型跑同一张表把两份结果放一起比对措辞和覆盖度。顺带提醒一句如果某个模型的上下文窗口比较小而你的 login_test.xlsx 历史数据已经很厚读表这一步可能撑不住表现为 agent 中途放弃或者描述表格不全。这时候别急着怀疑配置先确认当前模型的上下文限制或者把表拆成「本次要写的空表 历史归档表」。5. 跑一遍 testcase_demo.py看表有没有真的长出来5.1 运行命令和该盯的日志python testcase_demo.py过程中重点看两件事有没有出现工具调用的记录说明 Excel MCP 真的被调到了以及最后打印出来的内容里有没有「已写入 5 条」这类确认。如果它只是兜了一大段文字、完全没提文件那说明这一轮模型没走工具回去看系统提示有没有被覆盖掉。5.2 打开 login_test.xlsx 核对内容和列位关掉终端里可能还挂着的 MCP 进程CtrlC再用 Excel 打开文件。检查三件事是不是正好 5 行六列是不是都有内容、没有错位「操作步骤」这一列是不是分步骤的而不是一句话糊在一起。错位的话问题在表头不在 Key内容空泛的话问题在提示词可以把「操作步骤至少 3 步」这类要求写进 user 消息。5.3 回控制台对一下这次调用有没有记上验证完表格顺手打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 看一眼这次运行的调用记录和用量。能看到对应时间点的请求就说明OPENAI_BASE_URL确实生效了请求走的是统一通道而不是哪个官方地址。这一步还能帮你估算生成 5 条登录用例大概消耗多少将来跑几百条的时候心里有数。6. 这套 LangGraph Excel MCP 配置最容易翻车的四个地方6.1 401 或者「模型不存在」401 基本都是 Key 的问题复制时带了首尾空格、把控制台里别的项目的 Key 粘了过来、或者切供应商的时候只改了模型 ID 没换 Key。模型不存在则是MODEL_ID抄错最常见的做法是凭印象写一个带日期后缀的名字。两个问题都可以用同一招定位在模型对话页面用同一把 Key、同一个模型 ID 发一条消息能通就说明是代码侧的问题不能通就是 Key 或模型 ID 的问题。6.2 请求根本没走统一通道旧地址没删干净表现是调用「成功」了但控制台里查不到记录。几乎可以断定.env里还留着https://api.deepseek.com/v1那一行或者load_dotenv()读的是另一个目录下的.env。排查方法很土但有效在代码里加一行print(os.environ[OPENAI_BASE_URL])看它到底读到了什么。另一种变体是地址末尾多了/v1这种会直接给你 404。6.3 Excel MCP 起不来agent 变成纯聊天症状很典型agent 回复说「我无法直接操作文件」然后给你一段伪代码。这就是工具列表为空的信号。检查uvx是否在 PATH 里、命令名和参数是否和本地安装的 Excel MCP 一致、.venv有没有把uvx隔离掉。把 MCP 命令单独在终端跑一次能复现的问题就不要在 Python 里猜。6.4 表格写不进去文件被 Excel 占着跑之前把 login_test.xlsx 关掉。Excel 在 Windows 上会独占文件句柄MCP 写入时保存失败但报错经常被 agent 概括成「写入时遇到问题」看不出真实原因。如果你确实需要在跑的时候看着表可以改成让 agent 写到另一张新表跑完再人工合并。7. 再往下走让它变成一条能换供应商的用例流水线这套东西跑通之后加功能的方向其实很清晰。一是把单次生成扩成批量读一张需求表逐行生成对应用例写到不同的 sheet 里。二是把结果交给 pytest 做数据驱动生成的用例表直接作为参数来源。三是把 Key 按环境分开——本地开发一把、CI 里一把都在控制台里创建和回收避免一把 Key 到处贴。真要动手试建议先用同一把 Key 在 模型对话 页面发一条消息确认 Base URL 和模型 ID 都填对了再回到.env里改如果你打算天天跑用例生成可以看看 Coding Plan 的额度是不是够用Key 的创建、查看和作废都在 控制台 API Keys 里完成。配完先别急着扩功能把同一句「生成 5 条登录测试用例」在两个不同模型上各跑一遍对比一下写出来的「操作步骤」谁更细这比任何选型文章都直观。

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

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

免费获取报价