Qwen-Agent 配 TaoToken:Qwen3 跑 MCP 工具时模型 Key 这样填
2026/9/17 11:46:50 网站建设 项目流程

你照着 Qwen-Agent 的示例把多轮对话跑通后,下一步多半是让它驱动mcp-server-sqlite去建表插数据。可打开llm_cfg一看,model_server还写着'dashscope'api_key还是百炼那串。想换成 TaoToken 统一模型通道,却不确定model_server该填什么、要不要加/v1、模型 ID 写哪个。别急,TaoToken 在这里替代的只是百炼 Key 的申请和配置环节,Qwen-Agent 的 MCP 接入逻辑一行都不用动。先去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 注册并创建一把 Key,然后回来改llm_cfg里的两个字段就能继续跑。原文的流程是先到百炼开通模型服务、创建 API-KEY,再把llm_cfgmodel_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_source=taotoken_aicg_blog_end 创建 YOUR_API_KEY

原来这一步是登录阿里云百炼,前往“我的 API-KEY”页面创建并复制 Key。现在改到 TaoToken:打开 https://taotoken.net/?utm_source=taotoken_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 的来源换成 TaoToken,model_server换成上面那个 Base URL,其他字段保持原样。

1.3 模型 ID 别照抄旧教程,以模型广场为准

原文用的模型 ID 是qwen3-235b-a22b,这是一个 Qwen3 系列模型。TaoToken 的模型广场里会列出当时可用的模型 ID,你填之前先去 https://taotoken.net/?utm_source=taotoken_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 python=3.12 conda activate qwen_agent pip install -U "qwen-agent[rag,code_interpreter,gui,mcp]" pip install uv

uv是为了后面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替换成刚才创建的 Key:

from 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( llm=llm_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(messages=messages): response_plain_text = typewriter_print(response, response_plain_text) messages.extend(response)

注意model_server写的是https://taotoken.net/api,没有末尾斜杠,也没有/v1api_key用占位符。如果你在 Windows 上跑,input和中文路径一般没问题;如果遇到编码报错,把终端切到 UTF-8 再试。

2.3 跑第一轮对话,看 typewriter_print 有没有正常输出

保存后运行脚本,输入“你好,介绍一下你自己”,观察输出。正常情况会流式打印模型回复,并且不会出现401404model not found。如果只输出一个空行然后回到输入提示,可能是model_server填错后请求被静默拦截,或者 Key 没有正确复制。这时候先把top_p去掉,只保留modelmodel_serverapi_key三个字段,做最小化测试。

Qwen3 支持推理模式,typewriter_print会判断消息里有没有reasoning_content。如果你用的是带思考过程的 Qwen3 模型,看到THOUGHT_前缀属于正常现象,不是报错。多轮对话跑通之后,messages会累积历史,再输入第二个问题,确认上下文能连上,就说明 TaoToken 这把 Key 已经能稳定驱动 Qwen-Agent 了。

2.4 如果 401 或 model not found,先回控制台核对 Key

401 通常有两个原因:Key 复制不完整,或者代码里读的环境变量没生效。把api_key直接写死成YOUR_API_KEY替换后的字符串测试一次,如果通了,说明是环境变量问题。model not found 则先回 https://taotoken.net/?utm_source=taotoken_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-sqlite:tools 数组不动,只换模型通道

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_list=tools都保持原文写法:

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( llm=llm_cfg, name='数据库管理员', description='你是一位数据库管理员,具有对本地数据库的增删改查能力', system_message='你扮演一个数据库助手,你具有查询数据库的能力', function_list=tools, ) return bot def run_query(query=None): bot = init_agent_service() messages = [] messages.append({'role': 'user', 'content': [{'text': query}]}) previous_text = "" print('数据库管理员: ', end='', flush=True) 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.db,AI 只负责生成和执行工具调用

跑完上面的脚本后,不要直接相信模型说“已插入成功”,自己验一下。原文是在同级目录新建一个 Python 文件查询test.db。这步由你在本地执行,不要写成让 AI 直接连数据库。代码可以这样写:

import sqlite3 conn = sqlite3.connect('test.db') cursor = conn.cursor() cursor.execute("SELECT name FROM sqlite_master WHERE type='table';") tables = cursor.fetchall() print("数据库中的表:", tables) if tables: table_name = tables[0][0] cursor.execute(f"SELECT * 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 依赖与模型 ID

4.1 401 / 403:Key 没写对或环境变量没生效

如果你看到AuthenticationError401,先检查api_key字段是不是完整的YOUR_API_KEY替换值。常见坑是复制 Key 时带了空格,或者把 Key 存进.env后没有load_dotenv()。可以临时把 Key 直接写在代码里测试,跑通后再改成环境变量。另外,不要在一台机器上同时用多个 Key 测试,Qwen-Agent 默认只读llm_cfg里的api_key,不会自动切换。

4.2 404:Base 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_source=taotoken_aicg_blog_end 检查 Key 状态和余额。

5.2 长期写 Agent 看 Coding Plan,Key 在控制台 API Keys 管理

如果你准备把 Qwen-Agent 项目长期跑起来,比如每天让智能体操作 SQLite 做数据整理,可以打开 Coding Plan 看套餐是否够用。Key 的管理和重新创建在 控制台 API Keys ,建议给不同项目建不同的 Key,方便排查用量。Claude Code 环境变量对照见 接入文档,如果你还要在终端里写代码,可以顺带配一下。

5.3 Claude Code 接入文档只是补充:如果你还要在终端里写代码

本篇主线是 Qwen-Agent + Qwen3 +mcp-server-sqlite,Claude Code 接入文档只是给你在终端里写代码时参考。不要把它当成 Qwen-Agent 的配置说明。Qwen-Agent 的模型通道只认llm_cfg里的model_serverapi_key,改完这两处,MCP 工具调用逻辑不用动。跑完一次建表插入,再去控制台看一眼这次调用有没有记上账,心里就有底了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询