Wan2.1-umt5智能体(Agent)开发入门:构建自主任务执行系统

📅 发布时间:2026/7/9 21:27:07 👁️ 浏览次数:
Wan2.1-umt5智能体(Agent)开发入门:构建自主任务执行系统
Wan2.1-umt5智能体开发入门构建自主任务执行系统最近智能体这个概念特别火感觉身边搞技术的朋友都在聊。你可能也听说过某某大模型公司又发布了新的智能体框架或者哪个团队用智能体自动化解决了某个复杂问题。听起来很酷但你是不是也觉得有点云里雾里——智能体到底是什么它和普通的大模型调用有什么区别更重要的是我该怎么动手做一个别担心这篇文章就是为你准备的。我们不谈那些高大上的概念就从最实际的地方开始用Wan2.1-umt5这个模型作为核心手把手带你搭建一个能自己干活儿的智能体。比如让它每天早上自动帮你查天气、搜新闻然后整理成一份简洁的晨报。通过这个具体的例子你会彻底明白智能体是怎么“思考”和“行动”的。整个过程就像搭积木我们会一步步来从理解核心概念到写出能运行的代码。你会发现有了星图平台这样的基础设施把想法变成可用的智能体服务其实没有想象中那么难。1. 智能体到底是什么先打破神秘感在开始写代码之前咱们得先统一一下认识。当你听到“智能体”时可能想到的是科幻电影里那种无所不能的AI。但在我们工程师的语境里它其实是一套更务实的技术组合。你可以把一个智能体想象成一个“高级助理”。这个助理的核心能力有三样一个会思考的大脑这就是大模型比如我们用的Wan2.1-umt5。它的任务是理解你的指令分析当前情况然后决定下一步该做什么。一双能干活的手这些就是“工具”。大脑再聪明它自己也不会上网搜资料、不会查数据库、不会发邮件。所以我们需要给它提供各种工具函数比如一个搜索天气的接口、一个读写文件的函数。大脑负责指挥手负责执行。一个记事的本子这就是“记忆”。为了让智能体能处理连续的任务或记住之前的对话上下文它需要一个地方来存储历史信息。这样它才知道“我们刚才说到哪了”。所以智能体开发的核心就是把一个大模型和一系列工具、一套记忆管理机制用逻辑清晰的流程串联起来让它能自主地、按步骤完成一个目标。这和直接问大模型“今天天气怎么样”有本质区别。直接问模型只会根据它训练截止日期前的知识给你一个可能过时的、泛泛的回答。而智能体会主动调用实时天气查询工具获取最新数据然后组织语言告诉你。前者是被动回答后者是主动执行。接下来我们就用Wan2.1-umt5作为这个“大脑”开始搭建。2. 环境准备与模型部署工欲善其事必先利其器。我们先来把开发环境和模型服务准备好。2.1 本地开发环境搭建你可以在自己熟悉的Python环境中进行。我建议使用Python 3.8以上的版本并创建一个干净的虚拟环境。# 创建并激活虚拟环境以conda为例 conda create -n wan-agent python3.10 conda activate wan-agent # 安装核心依赖 pip install openai # 用于以兼容OpenAI API的方式调用Wan2.1-umt5 pip install langchain langchain-community # 使用LangChain框架简化开发可选但推荐 pip install requests # 用于构建自定义工具比如调用网络API这里解释一下openai库虽然不是调用原版OpenAI但很多国产大模型平台包括星图都提供了与其API兼容的接口这样我们就能用一套统一的代码来调用。langchain是一个流行的AI应用开发框架它把智能体、工具、记忆这些概念都封装好了能极大减少我们的重复劳动。当然如果你喜欢从零开始只用requests自己写HTTP请求和流程控制也行。2.2 在星图平台部署Wan2.1-umt5为什么强调在星图平台部署因为它省心。你自己从零部署一个模型要考虑显卡、显存、依赖、服务化一堆麻烦事。在星图镜像广场你可以找到预置的Wan2.1-umt5镜像基本上点几下就能跑起来一个拥有API接口的模型服务。访问星图镜像广场搜索“Wan2.1”或“umt5”。选择官方或社区维护的镜像查看镜像说明通常它会告诉你这个镜像已经封装好了模型和API服务。按照平台指引一键部署这个镜像。这个过程就像启动一个云服务器平台会分配计算资源并运行容器。部署成功后你会获得一个API访问地址Endpoint和一个API密钥。把它们记下来这就是我们智能体“大脑”的住址和门禁卡。假设你得到的地址是https://your-instance.cstcloud.cn/v1密钥是sk-xxxxxx。3. 连接你的模型“大脑”环境好了模型服务也跑起来了现在让我们写几行代码确保能和它正常对话。3.1 测试模型基础对话我们先不用任何框架用最直接的方式测试一下连接是否通畅。import openai # 配置客户端指向你在星图部署的模型服务 client openai.OpenAI( api_keysk-xxxxxx, # 替换为你的真实API密钥 base_urlhttps://your-instance.cstcloud.cn/v1 # 替换为你的真实API地址 ) # 发起一次简单的对话 response client.chat.completions.create( modelwan2.1-umt5, # 模型名称根据镜像说明填写 messages[ {role: user, content: 你好请介绍一下你自己。} ], streamFalse # 非流式输出一次性返回 ) print(response.choices[0].message.content)如果运行后能看到模型返回的自我介绍恭喜你第一步成功了这说明你的“大脑”已经在线并且能听能说了。3.2 使用LangChain进行封装直接用openai库没问题但用LangChain能让后续的智能体开发更模块化。我们来把它包装成一个LangChain的LLM对象。from langchain_openai import ChatOpenAI # 创建LangChain可调用的模型对象 llm ChatOpenAI( openai_api_keysk-xxxxxx, openai_api_basehttps://your-instance.cstcloud.cn/v1, model_namewan2.1-umt5, temperature0.1, # 温度参数越低输出越稳定越高越有创意 ) # 用LangChain的方式调用 from langchain_core.messages import HumanMessage messages [HumanMessage(content今天的天气怎么样)] response llm.invoke(messages) print(response.content)注意看模型可能会回答“我是一个AI模型无法获取实时天气”。这个回答非常正确也恰恰引出了我们下一步要做的给它装上获取实时信息的“手”。4. 为智能体打造“双手”定义工具现在大脑只会思考但不会行动。我们得教它使用工具。就以“获取天气”和“搜索新闻”为例。4.1 创建自定义工具函数工具本质上就是一个Python函数加上一些描述告诉模型这个函数是干什么的、怎么用。import requests import json def get_weather(city: str) - str: 获取指定城市的实时天气信息。 Args: city: 城市名称例如“北京”、“上海”。 Returns: 返回该城市的天气情况字符串。 # 这里使用一个模拟的天气API。在实际应用中你可以替换为心知天气、和风天气等真实API。 # 注意真实API通常需要申请密钥。 mock_weather_data { 北京: 晴气温15-25℃微风空气质量良。, 上海: 多云气温18-27℃东南风3-4级空气质量优。, 深圳: 阵雨气温22-30℃南风2级空气质量良。 } weather mock_weather_data.get(city, f未找到{city}的天气信息请确认城市名称。) return f{city}的天气是{weather} def search_news(keyword: str, count: int 3) - str: 根据关键词搜索最新的简讯。 Args: keyword: 搜索关键词例如“科技”、“财经”。 count: 返回的新闻条数默认为3条。 Returns: 返回搜索到的新闻摘要字符串。 # 同样这里是一个模拟函数。你可以集成百度搜索API、NewsAPI等。 mock_news_db { 科技: [ AI芯片公司发布新一代处理器能效比提升50%。, 某大厂宣布其自动驾驶出租车服务拓展至新城市。, 研究人员开发出新算法大幅提升电池管理系统精度。 ], 财经: [ 央行宣布新的货币政策工具旨在支持小微企业。, 全球主要股市昨日普遍收涨科技股领跑。, 国际原油价格小幅回落市场关注供需变化。 ] } news_list mock_news_db.get(keyword, [f暂无关于{keyword}的新闻。]) result f关于{keyword}的最新简讯\n \n.join(news_list[:count]) return result这两个函数就是最原始的工具。但我们需要用一种智能体能理解的方式“告诉”它。4.2 使用LangChain包装工具LangChain提供了标准化的方式来定义工具这样它就能被智能体框架识别和调用。from langchain.tools import tool # 使用tool装饰器LangChain会自动根据函数文档生成工具描述 tool def get_weather_tool(city: str) - str: 获取指定城市的实时天气信息。输入应为城市名。 return get_weather(city) tool def search_news_tool(keyword: str) - str: 根据关键词搜索最新的简讯。输入应为搜索关键词。 return search_news(keyword, count3) # 将工具放入一个列表方便后续提供给智能体 tools [get_weather_tool, search_news_tool] # 我们可以打印看看工具的描述这些描述会被送给模型阅读 for t in tools: print(f工具名: {t.name}) print(f描述: {t.description}) print(- * 20)现在get_weather_tool和search_news_tool就是两个被正式“武装”好的工具了。模型通过阅读它们的描述就能知道在什么情况下该调用哪个工具。5. 组装智能体让大脑指挥双手零件都齐了现在开始组装。我们将使用LangChain提供的一种简单而强大的智能体类型ReAct智能体。它的思想是让模型在“思考”和“行动”之间循环。5.1 创建智能体并赋予工具from langchain.agents import create_react_agent, AgentExecutor from langchain import hub # 从LangChain Hub拉取一个标准的ReAct提示词模板 # 这个模板会指导模型按照“思考 - 行动 - 观察”的循环来工作 prompt hub.pull(hwchase17/react) # 创建智能体 agent create_react_agent(llm, tools, prompt) # 创建智能体执行器它负责运行整个循环流程 agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, # 开启详细日志方便我们看到智能体的思考过程 handle_parsing_errorsTrue, # 优雅地处理模型输出解析错误 )5.2 运行你的第一个智能体激动人心的时刻到了让我们给智能体下达第一个复合指令。# 给智能体一个任务 result agent_executor.invoke({ input: 请先查询一下北京的天气然后搜索两条关于科技的新闻。 }) print(\n *50) print(最终回答) print(result[output])当你运行这段代码并设置verboseTrue时你会在控制台看到类似下面的精彩过程 进入新的AgentExecutor链... 思考用户需要两件事北京的天气和科技新闻。我应该按顺序执行。首先我需要调用获取天气的工具。 行动调用 get_weather_tool 工具输入 北京。 观察北京的天气是晴气温15-25℃微风空气质量良。 思考我已经得到了天气信息。现在需要获取科技新闻。 行动调用 search_news_tool 工具输入 科技。 观察关于‘科技’的最新简讯 AI芯片公司发布新一代处理器能效比提升50%。 某大厂宣布其自动驾驶出租车服务拓展至新城市。 思考我已经完成了两项任务现在可以汇总信息回答用户了。 最终回答根据查询北京今天的天气是晴气温在15到25摄氏度之间微风空气质量良好。此外为您搜索到两条科技简讯1. AI芯片公司发布了新一代处理器据悉能效比提升了50%。2. 某大型科技公司宣布其自动驾驶出租车服务已成功拓展至一个新的城市。看到了吗智能体自己学会了“拆解任务 - 选择工具 - 执行 - 汇总结果”这一整套流程这比单纯调用一次模型强大得多。6. 增加记忆能力让对话更连贯上面的智能体虽然能干但它“记性不好”每次对话都是独立的。如果我们想让它完成更复杂的多轮任务比如“对比一下北京和上海昨天的天气然后总结差异”就需要给它加上记忆。6.1 为智能体添加对话记忆LangChain提供了多种记忆后端我们使用最简单的一种——存储在内存中的对话缓存。from langchain.memory import ConversationBufferMemory # 创建记忆体 memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) # 我们需要创建一个新的提示词模板其中包含记忆的占位符 from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder prompt_with_memory ChatPromptTemplate.from_messages([ (system, 你是一个有帮助的助手可以查询天气和新闻。请根据对话历史和当前问题决定是否需要使用工具。), MessagesPlaceholder(variable_namechat_history), # 这里会注入历史对话 (human, {input}), MessagesPlaceholder(variable_nameagent_scratchpad), # 这里是智能体思考的草稿区 ]) # 用新提示词创建智能体 agent_with_memory create_react_agent(llm, tools, prompt_with_memory) agent_executor_with_memory AgentExecutor( agentagent_with_memory, toolstools, memorymemory, verboseTrue, handle_parsing_errorsTrue, )6.2 进行多轮对话测试现在让我们和这个有记性的智能体聊聊天。# 第一轮对话 print(用户今天深圳的天气如何) result1 agent_executor_with_memory.invoke({input: 今天深圳的天气如何}) print(助手, result1[output]) print(\n -*30 \n) # 第二轮对话它应该能记住之前的上下文 print(用户那北京呢另外帮我搜一下财经新闻。) result2 agent_executor_with_memory.invoke({input: 那北京呢另外帮我搜一下财经新闻。}) print(助手, result2[output])在第二轮对话中当你只问“那北京呢”智能体凭借记忆知道你在继续询问天气并且会主动调用get_weather_tool来查询北京天气。这就是记忆带来的上下文理解能力。7. 总结与下一步跟着走完上面这些步骤你已经成功搭建了一个具备基础能力的智能体。它有一个Wan2.1-umt5模型作为思考核心有两件可以查询天气和新闻的工具还有一个能记住对话历史的记忆模块。整个过程从模型部署、工具定义到智能体组装是一套完整的开发链路。用下来感觉基于星图平台部署模型确实省去了很多环境配置的麻烦让你能更专注于智能体本身的逻辑开发。而LangChain这类框架则把那些重复的流程控制、提示词工程给标准化了大大提升了开发效率。当然这只是一个起点。如果你想把这个“玩具”变成真正有用的“工具”还有很多可以深入的方向。比如把模拟的天气和新闻API换成真实的服务接口增加更多工具比如发送邮件、操作日历、查询数据库或者尝试更复杂的智能体架构让多个智能体协同工作。最实在的建议是从一个你实际工作中会遇到的小痛点开始。比如自动整理会议纪要、追踪项目进度并生成报告、或者管理你的待办事项清单。先让它跑通再慢慢迭代优化。智能体开发最有意思的地方就在于看着一段段代码逐渐拥有“自主”完成任务的能力这种成就感试过才知道。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。