ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Qwen-Agent 配 TaoToken:Qwen3 跑 MCP 工具时模型 Key 这样填

Qwen-Agent 配 TaoToken:Qwen3 跑 MCP 工具时模型 Key 这样填 你照着 Qwen-Agent 的示例把多轮对话跑通后下一步多半是让它驱动mcp-server-sqlite去建表插数据。可打开llm_cfg一看model_server还写着dashscopeapi_key还是百炼那串。想换成 TaoToken 统一模型通道却不确定model_server该填什么、要不要加/v1、模型 ID 写哪个。别急TaoToken 在这里替代的只是百炼 Key 的申请和配置环节Qwen-Agent 的 MCP 接入逻辑一行都不用动。先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册并创建一把 Key然后回来改llm_cfg里的两个字段就能继续跑。原文的流程是先到百炼开通模型服务、创建 API-KEY再把llm_cfg的model_server设为dashscope。换成 TaoToken 后你仍然用 Qwen3 模型仍然用Assistant组件仍然用tools数组挂mcp-server-sqlite唯一变的是模型服务地址和密钥。下面按原文的节奏走一遍从建 Key 到多轮对话再到 SQLite 助手最后排障和验证。1. llm_cfg 里换掉百炼Qwen-Agent 的 model_server 和 api_key 怎么改1.1 原来填 dashscope 的位置现在填 https://taotoken.net/api在原文的多轮对话机器人里llm_cfg是这样写的llm_cfg { model: qwen3-235b-a22b, model_server: dashscope, api_key: 你注册的api-key, generate_cfg: { top_p: 0.8 } }这里model_server是 Qwen-Agent 识别模型服务类型的入口。填dashscope时框架会走阿里云百炼的协议填一个以http开头的地址时Qwen-Agent 会按 OpenAI 兼容模式发请求。TaoToken 提供的是统一 API 通道所以你要把model_server换成model_server: https://taotoken.net/api注意末尾不要带/v1。有些 OpenAI 兼容客户端习惯写https://taotoken.net/api/v1但在 Qwen-Agent 这套配置里Base URL 就填https://taotoken.net/api框架会自己拼后续路径。多写/v1反而容易变成/api/v1/v1/chat/completions这类路径直接 404。这个地址只填在代码里不要在后面挂 UTM 参数也不要和官网落地页混用。1.2 去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建 YOUR_API_KEY原来这一步是登录阿里云百炼前往“我的 API-KEY”页面创建并复制 Key。现在改到 TaoToken打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册登录后进入控制台在 API Keys 页面创建一把新 Key。创建完先复制出来后面填进api_key字段。代码里一律用占位符YOUR_API_KEY别把真实 Key 提交到 Git。llm_cfg { model: qwen3-235b-a22b, # 以模型广场当时列表为准 model_server: https://taotoken.net/api, api_key: YOUR_API_KEY, generate_cfg: { top_p: 0.8 } }如果你之前把百炼 Key 写进了环境变量也可以继续用os.getenv(TAOTOKEN_API_KEY)这类方式读取。重点是 Key 的来源换成 TaoTokenmodel_server换成上面那个 Base URL其他字段保持原样。1.3 模型 ID 别照抄旧教程以模型广场为准原文用的模型 ID 是qwen3-235b-a22b这是一个 Qwen3 系列模型。TaoToken 的模型广场里会列出当时可用的模型 ID你填之前先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 看一眼列表。如果广场里有qwen3-235b-a22b直接沿用如果没有就换成广场里实际存在的 Qwen3 系列 ID。不要自己编造qwen3-235b-a22b-2025xxxx这种带随意日期后缀的字符串Qwen-Agent 会直接报model not found。模型 ID 是区分大小写的复制的时候别多带空格。你可以先把模型 ID 记在便签里等会儿填进llm_cfg后先用一条最简单的对话测试确认通道通了再去接 MCP 工具。这样排障范围小不会一上来就怀疑 MCP 配置。2. Qwen-Agent 多轮对话把 qwen3-235b-a22b 接到 TaoToken 通道2.1 建虚拟环境装 qwen-agent[rag,code_interpreter,gui,mcp] 和 uv原文用 conda 创建了qwen_agent虚拟环境并安装带rag,code_interpreter,gui,mcp扩展的 Qwen-Agent。这部分不用改照做即可conda create -n qwen_agent python3.12 conda activate qwen_agent pip install -U qwen-agent[rag,code_interpreter,gui,mcp] pip install uvuv是为了后面uvx启动mcp-server-sqlite用的。如果你已经装过可以跳过。装完后用python -c import qwen_agent; print(qwen_agent.__version__)确认版本避免老版本对自定义model_server支持不完整。虚拟环境的好处是后面即使 Qwen-Agent 升级了也不会影响你系统里的其他 Python 项目。2.2 可复制的 llm_cfg 与 Assistant 初始化代码下面这段多轮对话代码是从原文结构改写来的只把模型通道换成了 TaoToken。你可以直接复制把YOUR_API_KEY替换成刚才创建的 Keyfrom qwen_agent.agents import Assistant from qwen_agent.utils.output_beautify import typewriter_print llm_cfg { model: qwen3-235b-a22b, # 以模型广场当时列表为准 model_server: https://taotoken.net/api, api_key: YOUR_API_KEY, generate_cfg: { top_p: 0.8 } } bot Assistant( llmllm_cfg, system_message你是一位乐于助人的小助理, name智能助理 ) messages [] while True: query input(\n用户请求输入 quit 终止对话) if query quit: break else: messages.append({ role: user, content: query }) response [] response_plain_text print(AI 回复:) for response in bot.run(messagesmessages): response_plain_text typewriter_print(response, response_plain_text) messages.extend(response)注意model_server写的是https://taotoken.net/api没有末尾斜杠也没有/v1。api_key用占位符。如果你在 Windows 上跑input和中文路径一般没问题如果遇到编码报错把终端切到 UTF-8 再试。2.3 跑第一轮对话看 typewriter_print 有没有正常输出保存后运行脚本输入“你好介绍一下你自己”观察输出。正常情况会流式打印模型回复并且不会出现401、404或model not found。如果只输出一个空行然后回到输入提示可能是model_server填错后请求被静默拦截或者 Key 没有正确复制。这时候先把top_p去掉只保留model、model_server、api_key三个字段做最小化测试。Qwen3 支持推理模式typewriter_print会判断消息里有没有reasoning_content。如果你用的是带思考过程的 Qwen3 模型看到THOUGHT_前缀属于正常现象不是报错。多轮对话跑通之后messages会累积历史再输入第二个问题确认上下文能连上就说明 TaoToken 这把 Key 已经能稳定驱动 Qwen-Agent 了。2.4 如果 401 或 model not found先回控制台核对 Key401 通常有两个原因Key 复制不完整或者代码里读的环境变量没生效。把api_key直接写死成YOUR_API_KEY替换后的字符串测试一次如果通了说明是环境变量问题。model not found 则先回 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 看模型广场确认你填的 ID 在当前可用列表里。不要靠记忆写模型名复制广场里的 ID 最稳。还有一种情况是model_server后面多加了/v1导致请求路径变成/api/v1/chat/completions而实际网关期望的是/api/chat/completions于是返回 404。把/v1删掉只保留https://taotoken.net/api再重启脚本。3. Qwen3 驱动 mcp-server-sqlitetools 数组不动只换模型通道3.1 mcpServers 配置保持 stdio 方式sqlite 子进程由 Qwen-Agent 管理原文里 Qwen-Agent 接入 MCP 的原理是 stdio 开发模式Qwen-Agent 作为客户端启动mcp-server-sqlite子进程双方通过标准输入输出通信。这个逻辑和模型通道无关所以tools数组完全不用改。你仍然这样定义tools [{ mcpServers: { sqlite: { command: uvx, args: [ mcp-server-sqlite, --db-path, test.db ] } } }]test.db是本地 SQLite 文件Qwen-Agent 会通过 MCP 工具让模型生成建表、插入、查询等操作再由mcp-server-sqlite在本地执行。这里没有连接远程生产库也没有让模型直接连数据库所有落盘动作都在你运行脚本的目录下发生。如果你把--db-path改成其他路径确保那个目录存在且可写即可。3.2 自然语言建 students 表并插入张三完整 run_query 代码把模型通道换成 TaoToken 后init_agent_service里唯一变化的就是llm_cfg。其余Assistant初始化和function_listtools都保持原文写法from qwen_agent.agents import Assistant from qwen_agent.utils.output_beautify import typewriter_print def init_agent_service(): llm_cfg { model: qwen3-235b-a22b, # 以模型广场当时列表为准 model_server: https://taotoken.net/api, api_key: YOUR_API_KEY, generate_cfg: { top_p: 0.8 } } tools [{ mcpServers: { sqlite: { command: uvx, args: [ mcp-server-sqlite, --db-path, test.db ] } } }] bot Assistant( llmllm_cfg, name数据库管理员, description你是一位数据库管理员具有对本地数据库的增删改查能力, system_message你扮演一个数据库助手你具有查询数据库的能力, function_listtools, ) return bot def run_query(queryNone): bot init_agent_service() messages [] messages.append({role: user, content: [{text: query}]}) previous_text print(数据库管理员: , end, flushTrue) for response in bot.run(messages): previous_text typewriter_print(response, previous_text) if __name__ __main__: query 帮我创建一个学生表,表名是students,包含id, name, age, gender, score字段,然后插入一条数据,id为1,name为张三,age为20,gender为男,score为95 run_query(query)运行后uvx可能会自动安装mcp-server-sqlite的依赖红字提示安装过程属于正常。接着 Qwen3 会理解你的自然语言请求生成工具调用先创建students表再插入张三那条记录。你可以在终端看到工具调用的中间输出最后本地目录会出现test.db。3.3 本地用 sqlite3 验证 test.dbAI 只负责生成和执行工具调用跑完上面的脚本后不要直接相信模型说“已插入成功”自己验一下。原文是在同级目录新建一个 Python 文件查询test.db。这步由你在本地执行不要写成让 AI 直接连数据库。代码可以这样写import sqlite3 conn sqlite3.connect(test.db) cursor conn.cursor() cursor.execute(SELECT name FROM sqlite_master WHERE typetable;) tables cursor.fetchall() print(数据库中的表:, tables) if tables: table_name tables[0][0] cursor.execute(fSELECT * FROM {table_name}) print(f{table_name} 表中的数据:, cursor.fetchall()) else: print(数据库中没有表需要先创建表并插入数据) conn.close()执行后如果打印出students表和(1, 张三, 20, 男, 95)这样的记录说明 Qwen-Agent Qwen3 TaoToken mcp-server-sqlite这条链路已经通了。AI 在这条链路里的角色是理解自然语言并决定调用哪个 MCP 工具实际 SQL 执行和文件写入仍然发生在你的本地机器上。4. Qwen-Agent 接 TaoToken 后排障401、404、uvx 依赖与模型 ID4.1 401 / 403Key 没写对或环境变量没生效如果你看到AuthenticationError或401先检查api_key字段是不是完整的YOUR_API_KEY替换值。常见坑是复制 Key 时带了空格或者把 Key 存进.env后没有load_dotenv()。可以临时把 Key 直接写在代码里测试跑通后再改成环境变量。另外不要在一台机器上同时用多个 Key 测试Qwen-Agent 默认只读llm_cfg里的api_key不会自动切换。4.2 404Base URL 误加 /v1 或带了 UTM 参数model_server只能填https://taotoken.net/api。有些教程会让你写https://taotoken.net/api/v1但在 Qwen-Agent 里这很容易让路径重复。还有一种情况是直接从浏览器地址栏复制了带?utm_source...的落地页链接粘贴到了model_server里请求自然会失败。记住官网落地页用于注册、创建 Key、看模型广场填进代码的 Base URL 是https://taotoken.net/api两者不要混。4.3 uvx 找不到 mcp-server-sqlite先装 uv再单独跑一次 uvx如果报错uvx: command not found说明pip install uv没执行或者虚拟环境没激活。激活环境后重新执行pip install uv。如果uvx能运行但找不到mcp-server-sqlite可以手动跑一次uvx mcp-server-sqlite --help让 uv 先把包缓存下来。之后再启动 Qwen-Agent通常就不会卡在依赖安装。如果你在 Windows 上遇到uvx路径问题可以用python -m uvx代替uvx或者把command改成uvx.exe的绝对路径。4.4 model not found模型 ID 不在广场列表里Qwen3 系列有很多尺寸和版本qwen3-235b-a22b只是原文用的一个示例。如果你在模型广场没找到这个 ID就换一个列表里存在的 Qwen3 模型 ID。不要自己拼日期后缀也不要从其他平台复制模型名。改完 ID 后重启脚本先跑一条“你好”确认通道再接mcp-server-sqlite。5. 跑通之后在 TaoToken 控制台对一下这次 Qwen-Agent 调用5.1 用同一把 Key 在模型对话里发一条测试消息Qwen-Agent 跑通后你可以拿同一把 Key 去 TaoToken 模型对话 发一条消息确认模型 ID 和 Base URL 没填错。这一步相当于人工旁路验证如果模型对话能通但 Qwen-Agent 报错问题多半在 Qwen-Agent 配置或 MCP 子进程如果模型对话也报错就回 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 检查 Key 状态和余额。5.2 长期写 Agent 看 Coding PlanKey 在控制台 API Keys 管理如果你准备把 Qwen-Agent 项目长期跑起来比如每天让智能体操作 SQLite 做数据整理可以打开 Coding Plan 看套餐是否够用。Key 的管理和重新创建在 控制台 API Keys 建议给不同项目建不同的 Key方便排查用量。Claude Code 环境变量对照见 接入文档如果你还要在终端里写代码可以顺带配一下。5.3 Claude Code 接入文档只是补充如果你还要在终端里写代码本篇主线是 Qwen-Agent Qwen3 mcp-server-sqliteClaude Code 接入文档只是给你在终端里写代码时参考。不要把它当成 Qwen-Agent 的配置说明。Qwen-Agent 的模型通道只认llm_cfg里的model_server和api_key改完这两处MCP 工具调用逻辑不用动。跑完一次建表插入再去控制台看一眼这次调用有没有记上账心里就有底了。
返回列表