通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI构建智能体:基于Agent框架的自动化任务规划

想象一下,你有一个能听懂你复杂指令的“数字助理”。你告诉它:“帮我查一下北京的天气,然后根据天气推荐一下明天的穿搭,最后把结果整理成一份简洁的备忘录。” 它不会只回复一句“好的”,而是会自己思考:第一步,我需要调用天气查询工具;第二步,我需要根据天气结果(比如温度、是否下雨)来推理穿搭建议;第三步,我需要把前两步的结果整合成一段通顺的文字。

这就是智能体(Agent)的魅力。它不再是一个简单的问答机器,而是一个具备规划、推理和行动能力的“大脑”。今天,我们就来聊聊如何利用通义千问1.5-1.8B-Chat-GPTQ-Int4这个轻量级但能力不俗的模型,通过WebUI,亲手搭建一个能处理多步骤复杂任务的自动化智能体。我们将聚焦于一个非常实用的场景:天气查询与穿搭推荐,并完整拆解其背后的任务分解、工具调用与结果整合逻辑。

1. 为什么需要智能体?从“问答”到“行动”的跨越

传统的对话模型,你问什么,它答什么,答案基于其训练时学到的知识。但现实世界的问题往往是动态的、需要最新数据的。比如“北京现在天气怎么样?”,模型可能基于过时的数据回答,或者干脆说“我不知道”。

智能体框架解决了这个问题。它的核心思想是赋予模型“使用工具”的能力。模型本身作为“大脑”,负责理解你的意图、制定计划、做出决策;而各种工具(如计算器、搜索引擎API、数据库)则是它的“手和脚”,负责执行具体操作、获取实时信息。

对于通义千问1.5-1.8B-Chat-GPTQ-Int4这类模型来说,扮演“大脑”角色非常合适:

  • 轻量高效:经过GPTQ-Int4量化后,模型体积小,推理速度快,非常适合作为需要快速响应的智能体核心。
  • 指令遵循能力强:在对话格式上训练良好,能准确理解用户复杂的、多步骤的指令。
  • 具备基础推理能力:能够进行简单的逻辑链条推理,比如“如果下雨,那么需要带伞”。

我们的目标,就是为这个“大脑”配上“工具”,并设计一套机制,让它能自主地规划和使用这些工具来完成任务。

2. 智能体系统核心组件设计

要构建一个智能体,我们需要搭建几个关键部分。你可以把它们想象成一个团队:任务规划师工具管理员结果合成器

2.1 大脑:通义千问模型与提示工程

模型是我们的核心决策者。我们需要通过精心设计的“系统提示词”来赋予它智能体的身份和能力。

这个提示词需要明确告诉模型:

  1. 你是谁:你是一个智能助手,可以调用工具。
  2. 你能用什么工具:清晰列出每个工具的名称、功能描述和输入格式。
  3. 你应该怎么思考:遵循“思考 -> 行动 -> 观察”的循环。先思考需要做什么,然后选择工具并调用,最后解析工具返回的结果。
  4. 你最终要输出什么:当所有必要步骤完成后,整合所有信息,给用户一个完整、友好的最终答案。

下面是一个简化的系统提示词示例:

你是一个智能生活助手,可以调用外部工具来获取信息。请严格按照以下步骤工作:

可用工具:
- `get_weather`:查询城市天气。输入格式:`{"city": "城市名"}`。返回该城市的天气状况,如温度、天气现象。
- `get_clothing_suggestion`:根据天气条件生成穿搭建议。输入格式:`{"weather_description": "天气描述,如‘晴,25度’"}`。返回穿衣建议。

工作流程:
1. 理解用户请求。
2. 判断是否需要调用工具以及调用哪个工具。如果需要,则生成对应的工具调用JSON。
3. 等待工具返回结果。
4. 根据工具结果,决定下一步是继续调用工具,还是整合信息生成最终答案。
5. 生成最终答案时,需综合所有步骤获得的信息,回答应完整、自然。

当前对话:
{chat_history}
用户:{user_input}

2.2 工具集:赋予智能体“手脚”

工具是智能体与外界交互的接口。在我们的穿搭推荐场景中,至少需要两个工具:

  1. 天气查询工具 (get_weather):这是一个模拟工具,在实际应用中,你可以接入心知天气、和风天气等API。这里我们用一个函数模拟。

    import random
    
    def get_weather(city: str) -> str:
        """模拟天气查询API"""
        weather_options = [
            f"{city}今天晴,气温15-25度,微风。",
            f"{city}今天多云转阴,气温10-18度,东北风3-4级。",
            f"{city}今天有雨,气温8-12度,记得带伞。",
            f"{city}今天晴间多云,气温22-30度,紫外线较强。"
        ]
        return random.choice(weather_options) # 模拟API返回
    
  2. 穿搭建议工具 (get_clothing_suggestion):这个工具接收天气描述,基于简单规则生成建议。你也可以把它做成一个调用大模型生成建议的模块。

    def get_clothing_suggestion(weather_desc: str) -> str:
        """根据天气描述生成穿搭建议"""
        if "雨" in weather_desc:
            return "建议穿着:防水外套或雨衣、速干裤、防滑鞋。携带雨伞。"
        elif "高温" in weather_desc or "30度" in weather_desc:
            return "建议穿着:短袖T恤、短裤/裙子、凉鞋。注意防晒,可戴帽子和墨镜。"
        elif "低温" in weather_desc or "10度" in weather_desc:
            return "建议穿着:毛衣、厚外套、长裤、保暖鞋。注意防风。"
        else:
            return "建议穿着:长袖衬衫、薄外套、休闲裤、运动鞋。舒适为主。"
    

2.3 控制流:任务规划与执行的引擎

这是智能体的“神经系统”,负责协调大脑和工具。它的工作流程是一个循环:

  1. 解析用户输入:将用户问题和对话历史,结合系统提示词,提交给通义千问模型。
  2. 解析模型响应:模型可能会返回两种内容:
    • Action: 一个JSON,表明它想调用某个工具。例如:{"action": "get_weather", "action_input": {"city": "北京"}}
    • Final Answer: 一段文本,表明它认为任务已完成,输出最终答案。
  3. 执行工具调用:如果解析到Action,则找到对应的工具函数,传入参数并执行。
  4. 反馈观察结果:将工具执行的结果(Observation)作为新的上下文,连同历史记录,再次提交给模型。
  5. 循环判断:模型根据新的观察结果,决定下一步是继续调用工具,还是给出最终答案。重复步骤2-4,直到模型输出Final Answer

3. 基于WebUI的智能体搭建实战

我们假设你已经通过CSDN星图镜像广场部署好了通义千问1.5-1.8B-Chat-GPTQ-Int4的WebUI界面。下面是如何在其基础上集成智能体逻辑。

3.1 后端逻辑整合

你需要在WebUI的后端服务(通常是基于Gradio或Streamlit)中,添加一个处理智能体逻辑的模块。核心是一个AgentExecutor类或函数。

import json
import re

class SimpleAgent:
    def __init__(self, llm_chain, tools):
        self.llm_chain = llm_chain # 封装了与通义千问模型对话的链
        self.tools = {tool.name: tool for tool in tools} # 工具字典

    def parse_model_output(self, text: str):
        """解析模型输出,判断是调用工具还是最终回答"""
        # 尝试匹配类似 Toold的JSON字符串
        action_match = re.search(r'```json\s*(.*?)\s*```', text, re.DOTALL)
        if action_match:
            try:
                action_data = json.loads(action_match.group(1))
                if "action" in action_data and "action_input" in action_data:
                    return "action", action_data
            except json.JSONDecodeError:
                pass
        # 如果没有找到规范的JSON,或者模型直接给出了文本回答
        return "answer", text

    def run(self, user_input: str, chat_history: list):
        """执行智能体循环"""
        max_steps = 5 # 防止无限循环
        current_step = 0
        intermediate_observations = []

        while current_step < max_steps:
            # 1. 构建当前提示,包含历史、观察和用户输入
            prompt = self._build_prompt(user_input, chat_history, intermediate_observations)
            
            # 2. 调用通义千问模型
            model_response = self.llm_chain.predict(human_input=prompt)
            
            # 3. 解析响应
            response_type, content = self.parse_model_output(model_response)
            
            if response_type == "action":
                # 4. 执行工具调用
                action_name = content["action"]
                action_input = content["action_input"]
                if action_name in self.tools:
                    tool_result = self.tools[action_name].run(action_input)
                    intermediate_observations.append(f"工具 {action_name} 返回: {tool_result}")
                else:
                    intermediate_observations.append(f"错误: 未知工具 {action_name}")
            else: # response_type == "answer"
                # 5. 返回最终答案
                final_answer = content
                # 清理答案中可能残留的指令标记
                final_answer = final_answer.replace("Final Answer:", "").strip()
                return final_answer
            
            current_step += 1
        
        return "任务处理超时或过于复杂,请简化您的请求。"

    def _build_prompt(self, user_input, chat_history, observations):
        # 这里整合系统提示词、对话历史、工具观察和当前用户输入
        # 具体实现取决于你的提示词模板设计
        pass

3.2 前端界面展示

在WebUI的聊天界面中,你需要区分普通聊天模式和智能体模式。可以添加一个复选框或按钮,如“启用智能体模式”。

当用户勾选此模式并输入复杂指令(如“查北京天气并推荐穿搭”)后,前端将请求发送到集成了SimpleAgent的后端。后端会运行智能体循环,并将整个过程(“思考:需要先查天气...”、“调用工具:get_weather...”、“观察:北京晴,25度...”、“思考:根据天气生成穿搭建议...”、“最终答案:...”)以结构化的方式(如可折叠的卡片)返回给前端展示。

这让用户不仅能得到结果,还能清晰看到智能体“思考”和“行动”的每一步,增加透明度和趣味性。

4. 效果展示:智能体如何一步步完成任务

让我们看看,当用户输入“帮我规划一下,如果明天上海下雨,我出门应该怎么穿?”时,这个智能体是如何工作的。

用户输入:“帮我规划一下,如果明天上海下雨,我出门应该怎么穿?”

智能体内部流程

  1. 思考1:用户想知道下雨天的穿搭。这需要先确认上海的天气,再根据天气给建议。我需要调用get_weather工具。
  2. 行动1:调用 get_weather,输入 {"city": "上海"}
  3. 观察1:工具返回:“上海今天有雨,气温8-12度,记得带伞。”
  4. 思考2:已经确认有雨。现在需要调用get_clothing_suggestion工具来获取具体穿搭建议。
  5. 行动2:调用 get_clothing_suggestion,输入 {"weather_description": "有雨,气温8-12度"}
  6. 观察2:工具返回:“建议穿着:防水外套或雨衣、速干裤、防滑鞋。携带雨伞。”
  7. 思考3:我已经获得了天气信息和穿搭建议。现在需要整合这些信息,给用户一个完整、自然的回答。
  8. 最终答案:“根据查询,上海明天预计有雨,气温在8-12度之间。这样的天气出门,建议您穿上防水外套或雨衣,搭配速干裤防滑鞋,确保身体干燥和行走安全。最重要的是,别忘了带上一把伞。这样的搭配可以帮您应对雨天,保持舒适。”

通过这个流程,智能体自动完成了“查询天气 -> 分析结果 -> 获取建议 -> 整合回复”的全过程。用户得到的是一个信息完整、直接可用的答案,而不是零散的、需要自己拼凑的信息。

5. 总结

将通义千问1.5-1.8B-Chat-GPTQ-Int4这样的模型与Agent框架结合,通过WebUI进行部署,为我们打开了一扇构建实用、个性化智能应用的大门。它不再是简单的聊天窗口,而是一个能自主规划、调用工具、解决复杂任务的智能中枢。

这种模式的优点很明显:解耦了知识(模型)与行动(工具)。模型负责其擅长的理解与推理,工具负责提供精准、实时的外部能力。无论是天气穿搭、旅行规划、数据分析还是信息检索,你都可以通过定义不同的工具集,让同一个模型“大脑”胜任多种角色。

动手尝试搭建这样一个智能体的过程,也是深入理解模型能力边界和提示工程技巧的好机会。你会发现,如何设计清晰、无歧义的系统提示,如何构建稳定可靠的工具解析逻辑,是让智能体真正“智能”起来的关键。从这个小实验开始,你可以逐步扩展工具库,尝试更复杂的任务链条,探索智能体技术的更多可能性。


获取更多AI镜像

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

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐