昌吉回族自治州网站建设_网站建设公司_支付系统_seo优化
2026/1/10 6:20:15 网站建设 项目流程

Qwen2.5-7B实战教程:结合LangChain构建智能Agent

1. 引言

1.1 学习目标

本文将带你从零开始,使用阿里云开源的Qwen2.5-7B大语言模型,结合LangChain框架,构建一个具备任务规划、工具调用和记忆能力的智能 Agent。通过本教程,你将掌握:

  • 如何部署并调用本地运行的 Qwen2.5-7B 模型
  • LangChain 的核心组件(LLM Wrapper、Tool、Agent Executor)集成方法
  • 构建支持多轮对话与外部工具调用的智能代理
  • 实现结构化输出(JSON)以提升 Agent 决策可解析性

最终,我们将实现一个能根据用户指令自动查询天气、执行计算、生成报告的 AI 助手。

1.2 前置知识

建议读者具备以下基础: - Python 编程经验 - 熟悉 RESTful API 调用 - 了解大语言模型基本概念(如 prompt、inference) - 安装过pip包管理工具

1.3 教程价值

不同于简单的“调用API+打印结果”式教程,本文聚焦于工程落地闭环:从模型部署 → 接口封装 → 工具集成 → Agent 编排 → 实战优化,提供完整可复用的技术路径,适用于企业级 AI 应用开发参考。


2. 环境准备与模型部署

2.1 部署 Qwen2.5-7B 镜像

我们假设你已通过 CSDN 星图平台或其他方式获取了 Qwen2.5-7B 的推理镜像(基于 4×NVIDIA RTX 4090D GPU 集群),以下是具体操作步骤:

# 登录算力平台后,创建实例并选择预置镜像 # 示例镜像名称:qwen2.5-7b-inference-v1 # 启动成功后,在“我的算力”页面点击“网页服务” # 默认开放端口为 8080,可通过 /docs 查看 Swagger 文档

典型响应接口如下:

{ "model": "qwen2.5-7b", "prompt": "你好,请介绍一下自己。", "max_tokens": 512, "temperature": 0.7 }

返回示例:

{ "text": "我是通义千问2.5-7B版本,由阿里云研发...", "usage": { "prompt_tokens": 12, "completion_tokens": 45, "total_tokens": 57 } }

2.2 安装本地依赖库

在本地机器安装所需 Python 包:

pip install langchain==0.1.16 langchain-community==0.0.32 requests pydantic==2.5.3

⚠️ 注意:确保 LangChain 版本 ≥ 0.1.0,以支持自定义 LLM 封装。


3. 封装 Qwen2.5-7B 为 LangChain 可用 LLM

3.1 自定义 QwenLLM 类

LangChain 支持通过继承BaseLanguageModelLLM接口来封装任意 LLM。我们创建一个QwenLLM类,对接本地部署的服务。

from langchain.llms.base import LLM from typing import Any, List import requests import json class QwenLLM(LLM): """封装 Qwen2.5-7B 为 LangChain 兼容的 LLM""" endpoint: str = "http://your-instance-ip:8080/v1/completions" temperature: float = 0.7 max_tokens: int = 8192 def _call(self, prompt: str, stop: List[str] | None = None) -> str: headers = {"Content-Type": "application/json"} data = { "prompt": prompt, "temperature": self.temperature, "max_tokens": self.max_tokens, "stop": stop } response = requests.post(self.endpoint, headers=headers, data=json.dumps(data)) if response.status_code != 200: raise Exception(f"Request failed: {response.text}") result = response.json() return result["text"].strip() @property def _llm_type(self) -> str: return "qwen2.5-7b" # 初始化模型实例 qwen_llm = QwenLLM( endpoint="http://192.168.1.100:8080/v1/completions", # 替换为实际 IP temperature=0.5, max_tokens=2048 )

3.2 测试基础问答能力

print(qwen_llm("请用 JSON 格式输出中国四大名著及其作者。"))

预期输出(部分):

{ "books": [ {"title": "红楼梦", "author": "曹雪芹"}, {"title": "西游记", "author": "吴承恩"}, {"title": "三国演义", "author": "罗贯中"}, {"title": "水浒传", "author": "施耐庵"} ] }

✅ 成功说明模型支持结构化输出,这对后续 Agent 构建至关重要。


4. 构建智能 Agent:功能设计与工具集成

4.1 Agent 设计目标

我们要构建的 Agent 具备以下能力: - 解析用户自然语言请求 - 自主判断是否需要调用外部工具 - 执行工具并整合结果生成最终回答 - 支持多轮对话记忆

为此,我们需要三类核心组件: 1.Tools:可调用的功能模块 2.Memory:对话历史存储 3.AgentExecutor:调度引擎

4.2 定义外部工具(Tools)

天气查询工具
import requests from langchain.tools import Tool def fetch_weather(location: str) -> str: """模拟天气查询(可替换为真实 API)""" # 示例使用 Open-Meteo 免费 API base_url = "https://api.open-meteo.com/v1/forecast" params = { "latitude": 39.9042, # 北京 "longitude": 116.4074, "current": "temperature_2m,weather_code", "timezone": "Asia/Shanghai" } try: resp = requests.get(base_url, params=params) data = resp.json() temp = data["current"]["temperature_2m"] wc = data["current"]["weather_code"] return f"{location}当前温度{temp}°C,天气代码{wc}(晴/雨等)" except: return "无法获取天气数据" weather_tool = Tool( name="WeatherQuery", func=fetch_weather, description="当用户询问某地天气时使用,输入参数为城市中文名,例如'北京'" )
数学计算工具
from langchain.utilities import PythonREPL python_repl = PythonREPL() math_tool = Tool( name="MathCalculator", func=python_repl.run, description="用于执行数学表达式或简单 Python 计算,输入为合法 Python 表达式字符串" )

4.3 集成 LangChain Agent

from langchain.agents import initialize_agent, AgentType from langchain.memory import ConversationBufferMemory # 初始化记忆模块 memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) # 初始化 Agent tools = [weather_tool, math_tool] agent_executor = initialize_agent( tools=tools, llm=qwen_llm, agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, verbose=True, memory=memory, handle_parsing_errors=True # 关键:处理 JSON 解析失败 )

5. 实战运行:多轮对话测试

5.1 第一轮:简单提问

query1 = "你好,你是谁?" response1 = agent_executor.invoke({"input": query1}) print("User:", query1) print("Agent:", response1["output"])

输出示例:

我是通义千问2.5-7B,一个由阿里云训练的大语言模型……

5.2 第二轮:调用工具

query2 = "北京现在天气怎么样?" response2 = agent_executor.invoke({"input": query2}) print("User:", query2) print("Agent:", response2["output"])

日志显示:

> Entering new AgentExecutor chain... Thought: 我需要查询北京的天气 Action: WeatherQuery Action Input: 北京 Observation: 北京当前温度18.2°C,天气代码3... Thought: 我现在可以作答了 Final Answer: 北京当前温度18.2°C,天气状况良好。

5.3 第三轮:复杂推理

query3 = "如果北京气温升高3.5度,会达到多少?" response3 = agent_executor.invoke({"input": query3})

Agent 自动调用MathCalculator工具完成计算。


6. 进阶技巧与优化建议

6.1 提升结构化输出稳定性

Qwen2.5-7B 支持 JSON 输出,可在 prompt 中强化格式要求:

system_prompt = """ 你是一个智能助手,请始终以 JSON 格式输出决策过程: {"thought": "...", "action": "ToolName|None", "action_input": "...", "final_answer": "..."} 仅当无需工具时 action 为 None。 """ # 在调用前拼接系统提示 enhanced_prompt = system_prompt + "\n\nUser: " + user_input

6.2 使用 Prompt Template 统一管理

from langchain.prompts import PromptTemplate template = """你是一个AI助手,可以根据需要调用工具解决问题。 可用工具: 1. WeatherQuery: 查询城市天气 2. MathCalculator: 执行数学计算 历史对话: {chat_history} 问题:{input} """ prompt = PromptTemplate.from_template(template)

6.3 错误处理与降级策略

try: result = agent_executor.invoke({"input": user_query}) except Exception as e: if "parsing" in str(e).lower(): # 降级为直接生成 fallback_prompt = f"请直接回答问题:{user_query}" result = {"output": qwen_llm(fallback_prompt)}

7. 总结

7.1 核心收获

通过本教程,我们完成了以下关键实践:

  • ✅ 成功部署并封装 Qwen2.5-7B 为 LangChain 可用 LLM
  • ✅ 构建了支持工具调用多轮记忆的智能 Agent
  • ✅ 实现了从用户意图识别到工具执行再到结果整合的完整闭环
  • ✅ 掌握了结构化输出控制、错误处理、Prompt 工程等实用技巧

7.2 最佳实践建议

  1. 优先使用结构化输出:利用 Qwen2.5 对 JSON 的强支持,提升 Agent 决策透明度;
  2. 设置合理的超时与重试机制:避免因网络波动导致任务中断;
  3. 监控 token 使用情况:长上下文虽达 128K,但仍需注意成本;
  4. 逐步扩展工具集:可接入数据库查询、邮件发送、文档生成等企业级功能。

💡获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

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

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

立即咨询