掘金 人工智能 9小时前
Qwen3(vllm部署) 使用 MCP
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨了如何使用Qwen3大模型调用模型上下文协议(MCP),以构建更高效、可复用的大模型应用。Qwen3作为全球首款原生支持MCP的大模型,具备优秀的工具调用能力,并兼容qwen-agent,简化了开发流程。文章详细介绍了MCP的概念、优势,以及使用Qwen3和qwen-agent调用MCP的步骤,包括环境准备、模型部署和代码示例,特别演示了如何使用sqlite的MCP。通过MCP,开发者可以更便捷地构建能够与外部工具交互的大模型应用。

💡 Qwen3是全球首款原生支持MCP的大模型,其在训练阶段就融入了工具调用对话数据,具备强大的工具调用能力,能够更好地理解和执行MCP功能。

🛠️ MCP(模型上下文协议)是一种规范,定义了大模型上下文信息的传输方式,类似于大模型的通用工具箱。它解决了Function Calling在不同场景下需要不同设定的问题,提高了代码复用率。

⚙️ 使用Qwen3调用MCP的流程包括:安装必要的依赖(如vllm、transformers、openai、qwen-agent),下载模型权重,部署模型,并使用qwen-agent进行交互。

📚 文章提供了使用sqlite的MCP的示例,演示了如何通过Qwen3和qwen-agent创建一个数据库表,并随机填充数据。这展示了MCP在实际应用中的灵活性和实用性。

为什么选择 Qwen3 来调用 MCP?因为 Qwen3 是全球首款原生支持 MCP 的大模型,能够更好地理解 MCP 的功能,并更好地规划工具调用流程,对于复杂的任务也是信手拈来,因为 Qwen3 在训练阶段(SFT)就带入了大量的工具调用对话数据进行训练,能够识别外部工具并发起对外部工具调用的请求,并且还支持支持工具的串联、并联以及自动 debug。同时 官方发布的 qwen-agent 兼容 mcp,使得开发更加容易。

MCP 全名为模型上下文协议(Model Context Protocol),它规定了大模型的上下文信息的传输方式。实际上就是一种规范,相当于是大模型的通用工具箱。以前开发者让大模型调用工具都是使用 Function Calling,但是它的缺点比较明显,不同场景下需要不同的设定和工具的开发,因此难以实现复用,而 MCP 规定了大模型上下文的传输规范,适配不同的大语言模型,能够更高效地开发应用,目前已经有不少成熟的 MCP 供开发者使用,能够大量减少重复造轮子的时间。

准备工作

1. 安装 vllm 依赖

首先去 pytorch官网 安装 cuda 版本对应的 pytorch。

随后安装 vllm 以及 transformer 用于模型推理:

pip install vllmpip install transformerspip install openai

2. 安装 qwen-agent 依赖

modelscope 用于下载模型(若已下载模型可忽略)。

pip install -U "qwen-agent[rag,code_interpreter,gui,mcp]"pip install uvpip install modelscope

括号内的内容皆为可选依赖,其中 mcp 是本文需要用到的。

> [gui] 用于提供基于 Gradio 的 GUI 支持;> [rag] 用于支持 RAG;> [code_interpreter] 用于提供代码解释器相关支持;> [mcp] 用于支持 MCP。

3. 下载模型权重

本文使用 modelscope 进行模型下载,选用模型为 8B,可根据实际情况进行选择。

from modelscope import snapshot_download model_dir = snapshot_download('Qwen/Qwen3-8B', cache_dir="./model")

调用 MCP

1. 模型部署

直接利用 vllm 进行模型部署,其中参数可以根据自身情况增加:

vllm serve ./model/Qwen3-8B

2. 模型测试

部署后可以先进行测试,确保模型能够正常运行:

from openai import OpenAIclass LLM:    def __init__(self):        openai_api_key = "EMPTY"        openai_api_base = "http://localhost:8000/v1"        self.client = OpenAI(            api_key=openai_api_key,            base_url=openai_api_base,        )        self.messages = []    def chat(self, prompt):        self.messages.append({"role": "user", "content": prompt})        response = self.client.chat.completions.create(            model="./model/Qwen3-8B",            messages=self.messages,        )        response = response.choices[0].message.content.strip()        self.messages.append({"role": "assistant", "content": response})        return responseif __name__ == "__main__":    model = LLM()    prompt = "你好!"    response = model.chat(prompt)    print(response)

3. 使用 qwen-agent

接下来借助 qwen-agent 来实现与模型的对话:

from qwen_agent.agents import Assistantfrom qwen_agent.utils.output_beautify import typewriter_printllm_cfg = {    "model": "./model/Qwen3-8B",    "model_server": "http://localhost:8000/v1",    "api_key": "EMPTY"}bot = Assistant(llm=llm_cfg,                system_message="你是一个乐于助人的人工智能助手。",                name="小千"                )messages = []while True:    query = input("\n用户请求(输入 quit 退出对话):")    if query.lower() == "quit":        break    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)

得到如下结果:

调用 MCP

这里使用 sqlite 的 MCP 进行演示,创建包含五本名著的数据表:

from qwen_agent.agents import Assistantfrom qwen_agent.utils.output_beautify import typewriter_printdef init_agent_service():    llm_cfg = {        "model": "./model/Qwen3-8B",        "model_server": "http://localhost:8000/v1",        "api_key": "EMPTY"    }    system = ("你扮演一个数据库助手,你具有查询数据库的能力。")    tools = [{        "mcpServers": {            "sqlite": {                "command": "uvx",                "args": [                    "mcp-server-sqlite",                    "--db-path",                    "test.db"                ]            }        }    }]      bot = Assistant(        llm=llm_cfg,        system_message=system,        name="数据库管理员",        description="你是一个数据库管理员,具有对本地数据库的增删改查能力。",        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 = "帮我创建一个书籍表,包含书名、作者和出版日期。随机填入五条名著数据。"    run_query(query)

运行代码后输出内容如下,模型会进行思考并进行操作:

最终生成一个 test.db 文件,内容如下:

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Qwen3 MCP 大模型 工具调用 qwen-agent
相关文章