ARTICLE DETAIL

资讯详情

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

【Qwen3 + MCP】用 Ollama + Streamlit 快速搭建免费 Qwen AI 图像生成助手并接入 TaoToken

【Qwen3 + MCP】用 Ollama + Streamlit 快速搭建免费 Qwen AI 图像生成助手并接入 TaoToken 1. 为什么要在本地折腾 Qwen3 MCP 图像助手Qwen3 是通义千问团队开源的新一代大模型系列原生支持工具调用与 MCPModel Context Protocol协议这意味着它不只是聊天还能主动去调用外部工具完成具体任务。MCP 可以理解成给 AI 装了一个标准插座任何符合协议的工具服务都能插上去被模型调用图像生成、文件读写、网页抓取都能接。Ollama 负责在本地把 Qwen3 跑起来不花一分钱推理费用Streamlit 负责把命令行里的能力包装成一个能点能输入的网页界面。这套组合适合谁适合想零成本拥有一个私有 AI 绘图助手、又不想被各种云服务额度卡脖子的开发者。你本地有台能跑 8B 模型的机器16G 内存起步比较稳就能把整条链路跑通。整条链路是Streamlit 收指令 → Qwen_Agent 调度 → Qwen3 判断要不要调工具 → MCP 服务执行图像生成 → 结果回传渲染。下面我把 config.toml、settings.json 骨架、MCP 注册、启动命令和一次真实生成验证都拆开讲最后说清楚怎么用 TaoToken 统一管理 Key 和 API 通道。2. 前置准备Ollama 拉模型与 TaoToken 通道2.1 本地把 Qwen3 跑起来先装 Ollama各平台命令不一样按你的系统选# Linux curl -fsSL https://ollama.com/install.sh | sh # macOS也可直接下 dmg brew install ollama # Windows 直接去官网下 OllamaSetup.exe 安装装完拉模型。8B 版本对显存和内存友好是本地首选ollama run qwen3:8b第一次运行会下载约 5GB 权重下完会进入交互界面随便问一句能回就说明服务正常。Ollama 默认在http://localhost:11434提供 OpenAI 兼容接口路径是/v1这就是后面 Qwen_Agent 要连的地址。2.2 TaoToken 统一 Key 与 API 通道本地 Ollama 负责推理但工具调用链路里往往还要接一些云端能力比如更稳的图像生成、备用模型兜底。如果每个服务单独配 Key管理起来很乱。TaoToken 的作用就是把这些调用收敛到一个统一入口用一套 Key 走 API 通道。先去控制台建 Key控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsoleAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keysAPI 基础地址是https://taotoken.net/api这个地址不加 UTM 参数直接填进配置。拿到 Key 后先存到环境变量别硬编码进代码export TAOTOKEN_API_KEYsk-你的key注意本地 Ollama 的api_key填EMPTY就行TaoToken 的 Key 是给需要走统一通道的调用用的两者不要混。3. 可复制配置config.toml 与 settings.json 骨架3.1 config.tomlQwen_Agent 支持用配置文件管理模型和工具放在项目根目录[llm] model qwen3:8b model_server http://localhost:11434/v1 api_key EMPTY generate_cfg { top_p 0.8, temperature 0.7 } [llm.fallback] # 本地模型不可用或需要更强能力时走 TaoToken 统一通道 model qwen3-8b model_server https://taotoken.net/api/v1 api_key ${TAOTOKEN_API_KEY} [mcp.pollinations] command npx args [-y, pollinations/model-context-protocol]3.2 settings.json如果你用支持 MCP 的客户端或想让配置更通用用 JSON 骨架{ mcpServers: { pollinations: { command: npx, args: [-y, pollinations/model-context-protocol], env: {} } }, llm: { provider: ollama, base_url: http://localhost:11434/v1, model: qwen3:8b } }这两个文件的分工config.toml给 Qwen_Agent 读settings.json给通用 MCP 客户端读。你只跑 Streamlit 的话config.toml是必须的settings.json可以先留着备用。3.3 装依赖conda create -n qwen_agent python3.11 -y conda activate qwen_agent pip install -U qwen-agent[gui,rag,code_interpreter,mcp] pip install streamlitmcp这个 extra 一定要带上否则 MCP 服务注册会失败。4. MCP 服务注册与 Streamlit 应用4.1 MCP 服务注册步骤MCP 服务注册的核心是告诉 Qwen_Agent启动哪个命令、传什么参数。在代码里就是function_list里的mcpServers块。注册 Pollinations 图像生成服务tools [ { mcpServers: { pollinations: { command: npx, args: [-y, pollinations/model-context-protocol] } } }, code_interpreter, ]Qwen_Agent 会在需要时自动执行npx拉起这个 MCP 服务进程用完回收。你不需要手动npx启动注册进去就行。第一次运行会下载 npm 包稍等几秒。4.2 完整 Streamlit 应用把下面代码存成qwen_mcp_app.pyimport streamlit as st from qwen_agent.agents import Assistant llm_cfg { model: qwen3:8b, model_server: http://localhost:11434/v1, api_key: EMPTY, generate_cfg: {top_p: 0.8}, } tools [ { mcpServers: { pollinations: { command: npx, args: [-y, pollinations/model-context-protocol], } } }, code_interpreter, ] bot Assistant(llmllm_cfg, function_listtools) st.set_page_config(page_titleQwen AI 图像助手, layoutwide) st.title(Qwen3 图像生成助手Ollama MCP 驱动) st.caption(本地推理MCP 调工具零成本出图。) if messages not in st.session_state: st.session_state[messages] [] for message in st.session_state[messages]: with st.chat_message(message[role]): st.markdown(message[content]) user_input st.chat_input(输入指令例如画一只戴宇航员头盔的猫) if user_input: st.session_state[messages].append({role: user, content: user_input}) with st.chat_message(user): st.markdown(user_input) with st.chat_message(assistant): placeholder st.empty() full_response with st.spinner(思考中...): try: responses bot.run(messagesst.session_state[messages]) for chunk in responses: pass final [ m for m in chunk if m[role] assistant and m not in st.session_state[messages] ] if final: full_response \n.join( str(r[content]) for r in final if content in r ) placeholder.markdown(full_response) st.session_state[messages].extend(final) else: placeholder.markdown(暂时没有回复。) except Exception as e: st.error(f请求出错: {e}) st.session_state[messages].append( {role: assistant, content: f出错: {e}} )4.3 启动命令streamlit run qwen_mcp_app.py浏览器会自动打开http://localhost:8501看到聊天界面就说明 UI 起来了。5. 验证请求一次真实图像生成在输入框里敲一句英文指令比如Draw a cat wearing an astronaut helmet, digital art为什么建议用英文实测下来 Pollinations 对中文指令的理解不如英文稳英文出图质量明显更好。发送后你会看到界面显示思考中Qwen3 在判断这是不是需要调工具的任务模型决定调用pollinations的生成接口MCP 服务被拉起返回一个图片 URLStreamlit 渲染出来。如果返回的是图片链接而不是直接显示图可以在代码里加一层渲染if http in full_response and (.png in full_response or .jpg in full_response): st.image(full_response.strip())验证成功的标志输入指令后 10 到 30 秒内取决于本地机器和网络能看到一张生成的图。如果只返回文字描述没出图说明模型没触发工具调用检查function_list里 MCP 块是否写对。6. 本篇常见错排查报错一Connection refused连不上 11434。Ollama 服务没起。跑ollama serve或确认ollama run qwen3:8b至少成功过一次服务才会常驻。报错二MCP 服务启动失败提示npx: command not found。没装 Node.js。装个 LTS 版本npx随 Node 一起来。报错三模型不调工具只回文字。两个原因一是 Qwen3 对工具调用的触发需要指令足够明确把画一只猫改成用图像生成工具画一只猫二是function_list里 MCP 配置格式写错对照第 4.1 节检查缩进和 key 名。报错四中文指令出图效果差。这是 Pollinations 服务本身的限制不是你的配置问题。把 prompt 翻成英文再发或者让 Qwen3 先帮你把中文翻译成英文 prompt 再调工具。报错五TaoToken 通道调用 401。Key 没读到。确认TAOTOKEN_API_KEY环境变量在当前 shell 生效echo $TAOTOKEN_API_KEY能打印出来。Key 在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keys 重新生成一个也行。报错六Streamlit 端口被占。换端口streamlit run qwen_mcp_app.py --server.port 8502。7. 后续怎么用通道管理与能力扩展跑通之后日常使用就是streamlit run一条命令。如果你想让这个助手在本地模型忙不过来时自动切到云端把config.toml里的[llm.fallback]配上 TaoToken 通道即可Key 统一在控制台管理不用每个服务单独维护。想验证模型本身的能力边界可以直接用模型对话入口试模型对话https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel-chat如果你打算把这个助手往长期编码、Agent 自动化方向做比如让它接更多 MCP 工具、跑定时任务可以看 Coding PlanCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan接入细节和参数说明都在文档里接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc我自己的用法是本地 Qwen3 处理日常出图和简单对话遇到复杂 prompt 优化或需要更强模型兜底时切到 TaoToken 通道Key 一套走天下省得来回换配置。
返回列表