Qwen-Agent + MCP 快速上手

 Qwen-Agent是一个开发框架。开发者可基于本框架开发Agent应用,充分利用基于通义千问模型(Qwen)的指令遵循、工具使用、规划、记忆能力。本项目也提供了浏览器助手、代码解释器、自定义助手等示例应用。 现在,Qwen-Agent 作为 Qwen Chat 的后端运行。

更新

  • 🔥🔥🔥May 1, 2025: 新增 Qwen3 Tool-call Demo;新增 MCP cookbooks
  • Mar 18, 2025: 支持reasoning_content字段;调整默认的Function Call模版(适用于Qwen2.5系列通用模型、QwQ-32B)。如果需要使用旧版模版:请参考样例传递参数。
  • Mar 7, 2025: 新增QwQ-32B Tool-call Demo,支持并行、多步、多轮工具调用。
  • Dec 3, 2024: GUI 升级为基于 Gradio 5。注意:如果需要使用GUI,Python版本需要3.10及以上。
  • Sep 18, 2024: 新增Qwen2.5-Math Demo以展示Qwen2.5-Math基于工具的推理能力。注意:代码执行工具未进行沙箱保护,仅适用于本地测试,不可用于生产。

开始上手

安装

  • 从 PyPI 安装稳定版本:
pip install -U "qwen-agent[rag,code_interpreter,gui,mcp]"
# 或者,使用 `pip install -U qwen-agent` 来安装最小依赖。
# 可使用双括号指定如下的可选依赖:
#   [gui] 用于提供基于 Gradio 的 GUI 支持;
#   [rag] 用于支持 RAG;
#   [code_interpreter] 用于提供代码解释器相关支持;
#   [mcp] 用于支持 MCP。
  • 或者,你可以从源码安装最新的开发版本:
git clone https://github.com/QwenLM/Qwen-Agent.git
cd Qwen-Agent
pip install -e ./"[gui,rag,code_interpreter,mcp]"
# 或者,使用 `pip install -e ./` 安装最小依赖。

准备:模型服务

Qwen-Agent支持接入阿里云DashScope服务提供的Qwen模型服务,也支持通过OpenAI API方式接入开源的Qwen模型服务。

  • 如果希望接入DashScope提供的模型服务,只需配置相应的环境变量DASHSCOPE_API_KEY为您的DashScope API Key。

  • 或者,如果您希望部署并使用您自己的模型服务,请按照Qwen2的README中提供的指导进行操作,以部署一个兼容OpenAI接口协议的API服务。 具体来说,请参阅vLLM一节了解高并发的GPU部署方式,或者查看Ollama一节了解本地CPU(+GPU)部署。 注意对于QwQ和Qwen3模型,建议启动服务时加--enable-reasoning--reasoning-parser deepseek_r1两个参数,不加--enable-auto-tool-choice--tool-call-parser hermes两个参数,因为Qwen-Agent会自行解析vLLM的工具输出。

快速开发

框架提供了大模型(LLM,继承自class BaseChatModel,并提供了Function Calling功能)和工具(Tool,继承自class BaseTool)等原子组件,也提供了智能体(Agent)等高级抽象组件(继承自class Agent)。

以下示例演示了如何增加自定义工具,并快速开发一个带有设定、知识库和工具使用能力的智能体:

import pprint
import urllib.parse
import json5
from qwen_agent.agents import Assistant
from qwen_agent.tools.base import BaseTool, register_tool
from qwen_agent.utils.output_beautify import typewriter_print


# 步骤 1(可选):添加一个名为 `my_image_gen` 的自定义工具。
@register_tool('my_image_gen')
class MyImageGen(BaseTool):
    # `description` 用于告诉智能体该工具的功能。
    description = 'AI 绘画(图像生成)服务,输入文本描述,返回基于文本信息绘制的图像 URL。'
    # `parameters` 告诉智能体该工具有哪些输入参数。
    parameters = [{
        'name': 'prompt',
        'type': 'string',
        'description': '期望的图像内容的详细描述',
        'required': True
    }]

    def call(self, params: str, **kwargs) -> str:
        # `params` 是由 LLM 智能体生成的参数。
        prompt = json5.loads(params)['prompt']
        prompt = urllib.parse.quote(prompt)
        return json5.dumps(
            {'image_url': f'https://image.pollinations.ai/prompt/{prompt}'},
            ensure_ascii=False)


# 步骤 2:配置您所使用的 LLM。
llm_cfg = {
    # 使用 DashScope 提供的模型服务:
    'model': 'qwen-max-latest',
    'model_server': 'dashscope',
    # 'api_key': 'YOUR_DASHSCOPE_API_KEY',
    # 如果这里没有设置 'api_key',它将读取 `DASHSCOPE_API_KEY` 环境变量。

    # 使用与 OpenAI API 兼容的模型服务,例如 vLLM 或 Ollama:
    # 'model': 'Qwen2.5-7B-Instruct',
    # 'model_server': 'http://localhost:8000/v1',  # base_url,也称为 api_base
    # 'api_key': 'EMPTY',

    # (可选) LLM 的超参数:
    'generate_cfg': {
        'top_p': 0.8
    }
}

# 步骤 3:创建一个智能体。这里我们以 `Assistant` 智能体为例,它能够使用工具并读取文件。
system_instruction = '''在收到用户的请求后,你应该:
- 首先绘制一幅图像,得到图像的url,
- 然后运行代码`request.get`以下载该图像的url,
- 最后从给定的文档中选择一个图像操作进行图像处理。
用 `plt.show()` 展示图像。
你总是用中文回复用户。'''
tools = ['my_image_gen', 'code_interpreter']  # `code_interpreter` 是框架自带的工具,用于执行代码。
files = ['./examples/resource/doc.pdf']  # 给智能体一个 PDF 文件阅读。
bot = Assistant(llm=llm_cfg,
                system_message=system_instruction,
                function_list=tools,
                files=files)

# 步骤 4:作为聊天机器人运行智能体。
messages = []  # 这里储存聊天历史。
while True:
    # 例如,输入请求 "绘制一只狗并将其旋转 90 度"。
    query = input('\n用户请求: ')
    # 将用户请求添加到聊天历史。
    messages.append({'role': 'user', 'content': query})
    response = []
    response_plain_text = ''
    print('机器人回应:')
    for response in bot.run(messages=messages):
        # 流式输出。
        response_plain_text = typewriter_print(response, response_plain_text)
    # 将机器人的回应添加到聊天历史。
    messages.extend(response)

除了使用框架自带的智能体实现(如class Assistant),您也可以通过继承class Agent来自行开发您的智能体实现。

框架还提供了便捷的GUI接口,支持为Agent快速部署Gradio Demo。 例如上面的例子中,可以使用以下代码快速启动Gradio Demo:

from qwen_agent.gui import WebUI
WebUI(bot).run()  # bot is the agent defined in the above code, we do not repeat the definition here for saving space.

现在您可以在Web UI中和Agent对话了。更多使用示例,请参阅examples目录。

FAQ

如何使用MCP?

可以在开源的MCP Sever网站上选择需要的工具,并配置相关环境。

Qwen-Agent中MCP调用格式:

{
    "mcpServers": {
        "memory": {
            "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-memory"]
        },
        "filesystem": {
            "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/files"]
        },
        "sqlite" : {
            "command": "uvx",
            "args": [
                "mcp-server-sqlite",
                "--db-path",
                "test.db"
            ]
        }
    }
}

具体可参考MCP使用例子

运行该例子需要额外安装的依赖有:

# Node.js(访问 Node.js 官网下载并安装最新版本, https://nodejs.org/)
# uv 0.4.18 或更高版本 (使用 uv --version 检查)
# Git (git --version 检查)
# SQLite (sqlite3 --version 检查)

# 对于 macOS 用户,可以使用 Homebrew 安装这些组件:
brew install uv git sqlite3

# 对于 Windows 用户,可以使用 winget 安装这些组件:
winget install --id=astral-sh.uv -e
winget install git.git sqlite.sqlite
### 部署环境准备 为了在鲲鹏和昇腾平台上成功部署 DeepSeek-R1-Distill-Qwen-32B 模型并集成 WebUI,需先准备好相应的软件包和支持库。确保操作系统已安装 Python 3.x 版本以及 pip 工具。对于特定硬件的支持,需要安装 NPU 的驱动程序与 CANN (Compute Architecture for Neural Networks) SDK 来适配昇腾处理器[^1]。 ### 安装依赖项 通过命令行工具更新系统包管理器,并安装必要的 Python 库来支持模型加载和服务启动: ```bash pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu pip install transformers sentencepiece gradio flask ``` 上述命令会安装 PyTorch 及其扩展模块、Hugging Face Transformers 库用于处理预训练语言模型、SentencePiece 进行分词操作以及 Gradio 和 Flask 构建简易的 Web UI 接口。 ### 下载模型文件 前往 ModelScope 平台获取目标模型权重文件 `DeepSeek-R1-Distill-Qwen-32B` ,并将之放置于项目根目录下或指定路径内以便后续调用。 ### 编写服务脚本 创建一个新的 Python 文件作为入口点,在其中定义好 API 路由逻辑并与前端页面交互展示推理结果。下面是一个简单的例子说明如何实现这一功能: ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch import gradio as gr tokenizer = AutoTokenizer.from_pretrained("path/to/model") model = AutoModelForCausalLM.from_pretrained("path/to/model") def predict(text_input): inputs = tokenizer.encode_plus( text_input, add_special_tokens=True, return_tensors="pt" ) with torch.no_grad(): outputs = model.generate(**inputs) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return response iface = gr.Interface(fn=predict, inputs='text', outputs='text') if __name__ == "__main__": iface.launch() ``` 此段代码实现了基于 Transformer 结构的语言生成任务接口,利用 Gradio 提供了一个简洁易用的文字输入框让用户提交待预测文本串,并返回经过 Qwen 大规模对话理解能力加工后的回复内容。 ### 启动应用 完成以上配置之后就可以运行该应用程序了。打开终端窗口进入包含 main.py 的工作空间执行 python 命令即可开启 HTTP Server 监听来自浏览器端发起请求的服务实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值