ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

7B本地离线跑通:Qwen-Agent部署实战拆解

7B本地离线跑通:Qwen-Agent部署实战拆解 7B本地离线跑通Qwen-Agent部署实战拆解【免费下载链接】Qwen-AgentAgent framework and applications built upon Qwen3.0, featuring Function Calling, MCP, Code Interpreter, RAG, Chrome extension, etc.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen-Agent想让一个 Agent 框架完全离线运转、数据不出局域网Qwen-Agent 本地化部署是一个 30 分钟 onboarding 就能搞定的活——真正耗时间的不是写代码而是选模型和量化方案。这篇文章按硬件条件分岔先判断你处在哪个档位再把模型接进抽象层最后装上工具、沙箱和 RAG检索增强生成能力。先看硬件本地化部署的三档分岔 ⚡决策的第一个分岔点不是用什么框架而是你有多少显存。三档对号入座硬件条件推荐模型启动方式内存/显存取舍仅 CPU 16G 内存4B int4 量化transformers / OpenVINO8~10G 内存速度慢个人测试够用一张 24G 消费级显卡7B 全精度 / 14B 4-bitvLLM8~16G 显存性价比最高支持并发80G 大卡 / 多卡32B~72BvLLM 张量并行40G 显存复杂任务、多模态关键概念是4-bit 量化4-bit 量化把每个权重从 16 位压到 4 位占用直接砍到四分之一能力损失很小——这就是 14B 模型能塞进 24G 显卡的原因。档位一只有 CPUtransformers 或 OpenVINO 进程内跑没有独显时Qwen-Agent 有进程内路线model_type设为transformers直接在 Python 进程里加载权重推理不需要额外起服务。想快一点先离线执行optimum-cli export openvino --weight-format int4把权重转成 OpenVINO 格式再用model_type: openvino加载。代价是单机串行4B int4 模型在 CPU 上大概 10 tokens/s工具调用的延迟会叠加在这之上。偶尔用一用没问题想要即时感就升档位二。档位二24G 独显vLLM 4-bit 量化vLLM 提供 OpenAI 兼容端点Ollama 同样提供但偏轻量单流场景。一条命令把服务拉起来# vLLM在 24G 独显上起 7B--max-model-len 封顶上下文防止显存被长对话吃爆 vllm serve Qwen/Qwen2.5-7B-Instruct \ --max-model-len 16384 \ --gpu-memory-utilization 0.90 # 纯 CPU 机器用 Ollama 一行起同样暴露 OpenAI 兼容端点 ollama serve跑起来后你会拿到localhost:8000/v1下的/chat/completions接口后面 Qwen-Agent 只需要知道这一个地址。0.90是建议的起点值vLLM 用剩下 10% 显存放KV Cache键值缓存设成 1.0 的话长对话会直接 OOM。档位三的 80G 大卡命令相同只是换 32B/72B 权重并加--tensor-parallel-size分卡。把抽象层指到你的模型BaseChatModel 与 model_server 怎么工作Qwen-Agent 的 LLM 层在qwen_agent/llm/base.py里。**BaseChatModelLLM 抽象层基类**像机场的登机口不管哪家航司DashScope、vLLM、Ollama、transformers来都在同一个口出示同一张登机牌配置字典重试、上下文截断、磁盘缓存这些地面服务全在基类里做好适配器不用操心。各具体适配器通过register_llm(oai)之类的方式注册进LLM_REGISTRY。get_chat_model里有一条值得记住的逻辑只要model_server字段以http开头就自动推断为oai类型直连你的端点——指到本地端口这件事零代码from qwen_agent.agents import Assistant # model_server 填本地 vLLM 端点http 开头会自动推断为 oai 类型 llm_cfg { model: Qwen2.5-7B-Instruct, model_server: http://localhost:8000/v1, api_key: EMPTY, # 本地服务不校验密钥但字段必须存在 generate_cfg: {top_p: 0.8, max_input_tokens: 20480}, } bot Assistant(llmllm_cfg, function_list[code_interpreter, doc_parser]) for rsp in bot.run([{role: user, content: 把这份 PDF 总结成 3 条要点}], files[report.pdf]): print(rsp)跑起来你会看到Assistant先调doc_parser读 PDF再流式吐回总结全程流量都在 localhost。如果注册表里都没有合适的模型类型——比如自建推理服务——继承BaseChatModel实现_chat_stream和_chat_no_stream流式/非流式各一个再register_llm注册即可重试和截断由基类兜底。模型之外的四块本地能力 注册自定义工具register_tool 就是菜单登记qwen_agent/tools/base.py里的TOOL_REGISTRY像餐厅的菜单登记处把菜名、描述和配料表JSON schema登记上去顾客模型就照着点单。登记入口是register_toolfrom qwen_agent.tools.base import BaseTool, register_tool import json register_tool(query_price) # 注册进登记表名字必须全局唯一 class QueryPrice(BaseTool): description 查询某商品的当前售价 parameters { # JSON schema模型靠它填参数 type: object, properties: {sku: {type: string, description: 商品编号}}, required: [sku], } def call(self, params, **kwargs): sku self._verify_json_format_args(params)[sku] return json.dumps({sku: sku, price: 99}, ensure_asciiFalse)把这个文件放到脚本同目录、function_list里加上query_price模型就能调它。注意模型只看description和parametersdescription 写得像菜单说明它才会点。代码解释器隔油间里的沙箱code_interpreter是执行 AI 生成代码的沙箱隔离执行环境像后厨的隔油间原料代码放进去只出成品执行结果里面着火了也不影响前厅。它默认拉起独立 Jupyter kernel配合 Docker 镜像还能在独立容器里跑镜像定义就在qwen_agent/tools/resource/里。模型要画趋势图时会自己写 pandas matplotlib 代码沙箱执行后把渲染好的图片回传进对话如果只是在开发机上解数学题、不需要隔离python_executor更轻量但 README 明确说它不是沙箱别把不可信输入喂给它。文档 RAG给模型配一间公司档案室RAG 的路线是文档先切片、建索引提问时检索出相关片段塞进上下文让模型作答。安装 rag extra 时会带上 pdfminer、jieba、rank_bm25 等依赖覆盖 PDF/Word/PPT/TXT 解析。用法一行Assistant的files传本地路径文档问答就通了。文档问答的实际效果Assistant内部会自己串doc_parser和检索工具长文档想并行精读参考 examples/parallel_doc_qa.py 里的ParallelDocQA组合。 多 Agent 组装Router 与 GroupChat单 Agent 搞定简单任务多步骤工作流这个 Agent 框架自带qwen_agent/multi_agent_hub.py、qwen_agent/agents/group_chat.py和 examples/multi_agent_router.py 里的路由 Agent路由 Agent 读题把研究、分析、写作分派给各自只挂本地模型、但function_list和system_message不同的子 Agent最后汇总。组装完别忘了装guiextra把验证成本降到最低from qwen_agent.gui import WebUI # 把上面的 bot 包进浏览器界面支持拖拽上传本地文档 WebUI(bot).run()跑起来后打开本地页面就是一个能拖 PDF 进去的聊天窗口本地模型 工具 RAG整套栈在浏览器里验收。最常踩的三个坑与修法 Qwen3 的工具调用参数陷阱。用 vLLM 服务 Qwen3/QwQ 时不要加--enable-auto-tool-choice --tool-call-parser hermesQwen-Agent 有自己的解析模板双重解析会把函数调用弄乱例外是 Qwen3-Coder它走 vLLM 原生解析并开启use_raw_api参数。上下文吃满。本地 7B 常见 32K 上下文max_input_tokens别占满给输出留 8K。超限不会报错基类会按先压缩工具返回、再删中间轮次的顺序静默截断逻辑在qwen_agent/llm/base.py的_truncate_input_messages_roughly发现回答突然变傻先查这里。重复调用白烧显存。配置里加cache_dir: ./llm_cache并pip install diskcache相同 messages 直接走磁盘缓存本地联调的重复请求不再排队等 GPU。把model_server换成你自己机器的 vLLM 端口往files里丢一份真实 PDF 再跑bot.run——第一个完全离线的 Qwen-Agent 本地部署就完成了。【免费下载链接】Qwen-AgentAgent framework and applications built upon Qwen3.0, featuring Function Calling, MCP, Code Interpreter, RAG, Chrome extension, etc.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen-Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进