Alibaba DASD-4B Thinking 对话工具 Agent 智能体开发入门自主任务规划与执行最近和几个做产品的朋友聊天他们都在琢磨同一个问题现在的AI对话模型能不能别光回答问题而是真的能“动手”帮用户把事情给办了比如用户说“帮我订一份披萨”AI不仅能理解还能自动去外卖平台下单、支付最后把订单号发回来。这听起来像是科幻电影里的场景但其实利用像Alibaba DASD-4B Thinking这样的对话模型结合工具调用能力我们完全可以在今天动手搭建出这样一个智能体的原型。这种能自主规划、调用工具、执行任务的AI我们通常称之为“智能体”或“Agent”。它不再是一个被动的问答机器而是一个主动的问题解决者。今天我就带你从零开始用DASD-4B Thinking作为核心“大脑”动手开发一个能理解复杂指令、自己规划步骤、并调用外部API完成任务的小助手。我们会以一个“自动订餐助手”为例子把整个过程走一遍。1. 为什么需要能“动手”的智能体你可能已经用过很多强大的对话AI它们能写诗、编程、解答难题。但你会发现当你的需求超出纯文本交互时它们就无能为力了。比如用户“查一下我明天从北京飞上海的航班选下午的价格别超过1000块。”传统对话AI它可能会给你列出搜索航班信息的步骤甚至模拟一段查询结果但它无法真正连接到携程或航司的API把真实的航班列表和价格给你抓取回来。智能体我们的目标它能理解这是一个“查询航班”的任务知道自己需要“访问航班查询接口”并可能需要“筛选时间”和“价格”。然后它真的去调用一个预设的航班查询工具获取真实数据再根据“下午”和“1000元”的条件进行过滤最后把符合条件的航班信息呈现给你。这个从“知道”到“做到”的跨越核心就在于工具调用能力。DASD-4B Thinking模型本身具备优秀的逻辑思考和规划能力我们可以通过特定的方式让它学会在需要的时候去使用我们为它准备好的“工具箱”里的工具也就是各种API函数。2. 搭建你的第一个智能体自动订餐助手我们来设计一个具体的场景开发一个能处理“帮我订一份披萨”这类指令的订餐助手。这个助手需要完成理解用户想吃披萨、选择一家餐厅、挑选菜品、模拟下单并返回确认信息。2.1 核心组件与工作原理在开始写代码前先搞清楚我们要构建的东西里有哪些关键部分智能体大脑Agent Core这就是Alibaba DASD-4B Thinking模型。它的核心职责是进行“思考”和“规划”。它接收用户的指令分析意图然后决定下一步该做什么是直接回答还是需要调用某个工具工具集Toolkit这是我们为智能体准备的一套“技能”。每个工具对应一个Python函数封装了特定的能力比如search_restaurants搜索餐厅、get_menu获取菜单、place_order下单。这些函数内部会调用模拟的或真实的外部API。工具调用接口这是连接大脑和工具的桥梁。我们需要以模型能理解的格式通常是特定的JSON结构向模型描述每个工具的功能、参数。当模型决定使用工具时它会输出一个结构化的调用请求我们的程序需要解析这个请求执行对应的工具函数并把执行结果返回给模型进行下一步思考。执行循环ReAct Loop智能体的工作通常是一个循环过程可以简单理解为“思考-行动-观察”。思考Reason模型根据当前对话历史和目标决定下一步行动。行动Act如果需要调用一个工具并执行。观察Observe获取工具执行的结果成功或失败以及返回的数据。然后基于观察结果进入下一轮“思考”直到任务完成或无法继续。2.2 环境准备与模型调用首先确保你有Python环境并安装必要的库。我们主要会用到requests来调用模型API以及json来处理数据。pip install requests假设你已经获得了Alibaba DASD-4B Thinking模型的API访问权限具体申请和部署方式请参考官方文档。我们定义一个简单的函数来调用它。import requests import json class DASDAgent: def __init__(self, api_url, api_key): self.api_url api_url self.api_key api_key # 初始化对话历史 self.conversation_history [] def call_model(self, prompt): 调用DASD-4B Thinking模型 headers { Authorization: fBearer {self.api_key}, Content-Type: application/json } # 将整个对话历史作为上下文发送这对于多轮思考和工具调用至关重要 full_prompt self._format_prompt_with_history(prompt) data { model: DASD-4B-Thinking, # 根据实际模型名调整 messages: full_prompt, temperature: 0.1, # 低温度使输出更确定适合任务规划 max_tokens: 1024 } try: response requests.post(self.api_url, headersheaders, jsondata) response.raise_for_status() result response.json() # 假设返回结构中有 choices[0].message.content model_reply result[choices][0][message][content] # 将模型回复加入历史 self.conversation_history.append({role: assistant, content: model_reply}) return model_reply except Exception as e: print(f调用模型失败: {e}) return None def _format_prompt_with_history(self, new_user_input): 格式化对话历史并加入最新的用户输入 # 先将新用户输入加入历史 self.conversation_history.append({role: user, content: new_user_input}) # 返回整个历史记录 return self.conversation_history2.3 定义你的“工具箱”接下来我们为订餐助手创建几个模拟的工具函数。在真实场景中这些函数内部会是调用真实的外卖平台API。# 模拟的工具函数 def search_restaurants(cuisine披萨, location用户地址): 根据菜系和位置搜索餐厅 # 这里模拟一个API调用 print(f[工具调用] 正在搜索{location}附近的{cuisine}餐厅...) # 模拟返回结果 restaurants [ {id: 1, name: 美味披萨屋, rating: 4.5, delivery_time: 30分钟}, {id: 2, name: 芝士力量, rating: 4.2, delivery_time: 25分钟}, ] return json.dumps({status: success, data: restaurants}, ensure_asciiFalse) def get_menu(restaurant_id): 获取指定餐厅的菜单 print(f[工具调用] 正在获取餐厅ID {restaurant_id} 的菜单...) menus { 1: [ {item_id: 101, name: 超级至尊披萨, price: 68}, {item_id: 102, name: 夏威夷风光披萨, price: 62}, ], 2: [ {item_id: 201, name: 双层芝士披萨, price: 75}, {item_id: 202, name: 麻辣牛肉披萨, price: 70}, ] } menu menus.get(restaurant_id, []) return json.dumps({status: success, data: menu}, ensure_asciiFalse) def place_order(restaurant_id, item_id, quantity, address): 在指定餐厅下单 print(f[工具调用] 正在向餐厅{restaurant_id}下单菜品{item_id} x{quantity}送至{address}) # 模拟下单成功 order_id fORDER_{restaurant_id}_{item_id}_{hash(address)}[:10] return json.dumps({ status: success, data: { order_id: order_id, estimated_delivery: 45分钟, total_price: 68 * quantity # 简单计算 } }, ensure_asciiFalse) # 工具描述用于告诉模型这些工具能干什么 TOOL_DESCRIPTIONS [ { name: search_restaurants, description: 根据菜系和用户位置搜索符合条件的餐厅。, parameters: { type: object, properties: { cuisine: {type: string, description: 菜系类型如‘披萨’、‘中餐’}, location: {type: string, description: 送餐地址} }, required: [cuisine, location] } }, { name: get_menu, description: 根据餐厅ID获取该餐厅的详细菜单。, parameters: { type: object, properties: { restaurant_id: {type: integer, description: 餐厅的唯一标识ID} }, required: [restaurant_id] } }, { name: place_order, description: 在选定的餐厅下单。, parameters: { type: object, properties: { restaurant_id: {type: integer, description: 餐厅ID}, item_id: {type: integer, description: 菜品ID}, quantity: {type: integer, description: 购买数量}, address: {type: string, description: 详细的送餐地址} }, required: [restaurant_id, item_id, quantity, address] } } ]2.4 实现核心的智能体执行循环现在我们把大脑、工具和调用逻辑组装起来。关键点在于我们需要在给模型的提示中清晰地说明它可以使用的工具并指导它以我们期望的格式如JSON来请求调用工具。class FoodOrderingAgent(DASDAgent): def __init__(self, api_url, api_key): super().__init__(api_url, api_key) self.tools { search_restaurants: search_restaurants, get_menu: get_menu, place_order: place_order, } # 在系统提示中定义角色和能力 system_prompt 你是一个智能订餐助手。你可以通过调用工具来帮助用户搜索餐厅、查看菜单和下单。 当用户想订餐时你需要按步骤规划 1. 询问用户想吃什么菜系和送餐地址如果未提供。 2. 调用 search_restaurants 工具搜索餐厅。 3. 根据用户选择或推荐一个餐厅调用 get_menu 获取菜单。 4. 帮助用户选择菜品确认数量调用 place_order 下单。 5. 将订单确认信息反馈给用户。 当你需要调用工具时请严格按照以下JSON格式输出且不要输出其他任何内容 { action: tool_call, tool_name: 工具名, parameters: { 参数1: 值1, 参数2: 值2 } } 我会执行工具并将结果以“工具结果{结果}”的格式返回给你。你根据结果继续下一步。 self.conversation_history [{role: system, content: system_prompt}] def execute_tool(self, tool_name, parameters): 解析并执行工具调用 if tool_name in self.tools: try: # 将参数字典解包传递给工具函数 result self.tools[tool_name](**parameters) return f工具结果{result} except Exception as e: return f工具调用出错{e} else: return f未知工具{tool_name} def process_user_request(self, user_input): 处理一轮用户输入可能包含多轮模型-工具交互 print(f用户: {user_input}) max_steps 10 # 防止无限循环 for step in range(max_steps): # 1. 模型思考/回复 model_response self.call_model(user_input if step 0 else tool_result) if not model_response: break print(f助手: {model_response}) # 2. 尝试解析模型回复看是否是工具调用 try: # 这是一个简单的解析实际应用中可能需要更健壮的解析逻辑 if { in model_response and \action\: \tool_call\ in model_response: # 提取JSON部分 import re json_match re.search(r\{.*\}, model_response, re.DOTALL) if json_match: action_data json.loads(json_match.group()) if action_data.get(action) tool_call: tool_name action_data[tool_name] params action_data[parameters] print(f检测到工具调用请求: {tool_name} with {params}) # 3. 执行工具 tool_result self.execute_tool(tool_name, params) print(tool_result) # 将工具结果作为下一轮模型的输入以特定格式 user_input tool_result continue # 继续循环让模型处理工具结果 except json.JSONDecodeError: pass # 如果模型回复不是工具调用或者解析失败则视为普通对话结束本轮处理 # 检查模型回复是否看起来像最终答案包含订单号、感谢等 if any(word in model_response for word in [订单号, 下单成功, 祝您用餐愉快]): print(任务完成或进入最终确认阶段。) break # 否则等待下一轮用户输入在自动循环演示中我们跳出 break return model_response # 模拟一次对话 if __name__ __main__: # 请替换为你的真实API地址和密钥 API_URL YOUR_MODEL_API_ENDPOINT API_KEY YOUR_API_KEY agent FoodOrderingAgent(API_URL, API_KEY) # 模拟用户输入 test_queries [ 我想订一份披萨送到科技园E栋。, # 在实际多轮中这里会根据助手回复如选择餐厅、菜品继续输入 # “选第一家餐厅吧” # “我要一个超级至尊披萨一份” ] for query in test_queries: final_response agent.process_user_request(query) print(- * 40)运行这段代码你会看到类似下面的输出流程这展示了智能体内部的“思考-行动”过程用户: 我想订一份披萨送到科技园E栋。 助手: 好的我来帮您订购披萨。首先我需要搜索科技园E栋附近的披萨店。 [工具调用] 正在搜索科技园E栋附近的披萨餐厅... 检测到工具调用请求: search_restaurants with {cuisine: 披萨, location: 科技园E栋} 工具结果工具结果{status: success, data: [{id: 1, name: 美味披萨屋, rating: 4.5, delivery_time: 30分钟}, {id: 2, name: 芝士力量, rating: 4.2, delivery_time: 25分钟}]} 助手: 找到两家不错的披萨店 1. 美味披萨屋评分4.5预计30分钟送达。 2. 芝士力量评分4.2预计25分钟送达。 您想选择哪一家或者需要我为您推荐3. 从原型到实用关键考量与进阶方向上面的例子是一个高度简化的原型。要让它真正实用你还需要考虑很多问题更鲁棒的提示工程系统提示词需要精心设计明确任务边界、工具使用规范和输出格式。可以加入少样本示例Few-shot让模型更好地学习调用模式。复杂的输出解析模型输出可能不总是完美的JSON。你需要编写更健壮的解析器或者使用支持“函数调用”或“工具调用”作为原生功能的模型/API它们通常能返回结构更清晰的请求。状态管理与记忆智能体需要记住之前的对话、用户的选择、工具调用的结果。我们的conversation_history是一个简单实现复杂场景可能需要更精细的状态管理。错误处理与重试工具调用可能失败网络错误、API限制。智能体应该能处理这些错误并尝试其他方案或向用户求助。扩展工具集订餐只是冰山一角。你可以集成天气查询、日历管理、邮件发送、数据分析等任何有API的服务打造一个真正的个人或企业级万能助手。4. 总结用Alibaba DASD-4B Thinking这类具备强大思维链能力的模型来构建智能体是一个令人兴奋的起点。它让我们看到了让AI从“顾问”转变为“执行者”的可行路径。今天我们一起完成了从概念理解、环境搭建、工具定义到实现一个简单执行循环的全过程。实际开发中你可能会遇到模型不按格式输出、工具参数提取不准等问题这都需要通过迭代优化提示词、改进解析逻辑来解决。不妨从这个小例子出发尝试把它变得更强大比如接入一个真实的天气API做一个“出行规划助手”或者接入文档处理库做一个“自动报告生成器”。智能体的世界刚刚打开动手去实现你的想法才是最有趣的。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
Alibaba DASD-4B Thinking 对话工具 Agent 智能体开发入门:自主任务规划与执行
Alibaba DASD-4B Thinking 对话工具 Agent 智能体开发入门自主任务规划与执行最近和几个做产品的朋友聊天他们都在琢磨同一个问题现在的AI对话模型能不能别光回答问题而是真的能“动手”帮用户把事情给办了比如用户说“帮我订一份披萨”AI不仅能理解还能自动去外卖平台下单、支付最后把订单号发回来。这听起来像是科幻电影里的场景但其实利用像Alibaba DASD-4B Thinking这样的对话模型结合工具调用能力我们完全可以在今天动手搭建出这样一个智能体的原型。这种能自主规划、调用工具、执行任务的AI我们通常称之为“智能体”或“Agent”。它不再是一个被动的问答机器而是一个主动的问题解决者。今天我就带你从零开始用DASD-4B Thinking作为核心“大脑”动手开发一个能理解复杂指令、自己规划步骤、并调用外部API完成任务的小助手。我们会以一个“自动订餐助手”为例子把整个过程走一遍。1. 为什么需要能“动手”的智能体你可能已经用过很多强大的对话AI它们能写诗、编程、解答难题。但你会发现当你的需求超出纯文本交互时它们就无能为力了。比如用户“查一下我明天从北京飞上海的航班选下午的价格别超过1000块。”传统对话AI它可能会给你列出搜索航班信息的步骤甚至模拟一段查询结果但它无法真正连接到携程或航司的API把真实的航班列表和价格给你抓取回来。智能体我们的目标它能理解这是一个“查询航班”的任务知道自己需要“访问航班查询接口”并可能需要“筛选时间”和“价格”。然后它真的去调用一个预设的航班查询工具获取真实数据再根据“下午”和“1000元”的条件进行过滤最后把符合条件的航班信息呈现给你。这个从“知道”到“做到”的跨越核心就在于工具调用能力。DASD-4B Thinking模型本身具备优秀的逻辑思考和规划能力我们可以通过特定的方式让它学会在需要的时候去使用我们为它准备好的“工具箱”里的工具也就是各种API函数。2. 搭建你的第一个智能体自动订餐助手我们来设计一个具体的场景开发一个能处理“帮我订一份披萨”这类指令的订餐助手。这个助手需要完成理解用户想吃披萨、选择一家餐厅、挑选菜品、模拟下单并返回确认信息。2.1 核心组件与工作原理在开始写代码前先搞清楚我们要构建的东西里有哪些关键部分智能体大脑Agent Core这就是Alibaba DASD-4B Thinking模型。它的核心职责是进行“思考”和“规划”。它接收用户的指令分析意图然后决定下一步该做什么是直接回答还是需要调用某个工具工具集Toolkit这是我们为智能体准备的一套“技能”。每个工具对应一个Python函数封装了特定的能力比如search_restaurants搜索餐厅、get_menu获取菜单、place_order下单。这些函数内部会调用模拟的或真实的外部API。工具调用接口这是连接大脑和工具的桥梁。我们需要以模型能理解的格式通常是特定的JSON结构向模型描述每个工具的功能、参数。当模型决定使用工具时它会输出一个结构化的调用请求我们的程序需要解析这个请求执行对应的工具函数并把执行结果返回给模型进行下一步思考。执行循环ReAct Loop智能体的工作通常是一个循环过程可以简单理解为“思考-行动-观察”。思考Reason模型根据当前对话历史和目标决定下一步行动。行动Act如果需要调用一个工具并执行。观察Observe获取工具执行的结果成功或失败以及返回的数据。然后基于观察结果进入下一轮“思考”直到任务完成或无法继续。2.2 环境准备与模型调用首先确保你有Python环境并安装必要的库。我们主要会用到requests来调用模型API以及json来处理数据。pip install requests假设你已经获得了Alibaba DASD-4B Thinking模型的API访问权限具体申请和部署方式请参考官方文档。我们定义一个简单的函数来调用它。import requests import json class DASDAgent: def __init__(self, api_url, api_key): self.api_url api_url self.api_key api_key # 初始化对话历史 self.conversation_history [] def call_model(self, prompt): 调用DASD-4B Thinking模型 headers { Authorization: fBearer {self.api_key}, Content-Type: application/json } # 将整个对话历史作为上下文发送这对于多轮思考和工具调用至关重要 full_prompt self._format_prompt_with_history(prompt) data { model: DASD-4B-Thinking, # 根据实际模型名调整 messages: full_prompt, temperature: 0.1, # 低温度使输出更确定适合任务规划 max_tokens: 1024 } try: response requests.post(self.api_url, headersheaders, jsondata) response.raise_for_status() result response.json() # 假设返回结构中有 choices[0].message.content model_reply result[choices][0][message][content] # 将模型回复加入历史 self.conversation_history.append({role: assistant, content: model_reply}) return model_reply except Exception as e: print(f调用模型失败: {e}) return None def _format_prompt_with_history(self, new_user_input): 格式化对话历史并加入最新的用户输入 # 先将新用户输入加入历史 self.conversation_history.append({role: user, content: new_user_input}) # 返回整个历史记录 return self.conversation_history2.3 定义你的“工具箱”接下来我们为订餐助手创建几个模拟的工具函数。在真实场景中这些函数内部会是调用真实的外卖平台API。# 模拟的工具函数 def search_restaurants(cuisine披萨, location用户地址): 根据菜系和位置搜索餐厅 # 这里模拟一个API调用 print(f[工具调用] 正在搜索{location}附近的{cuisine}餐厅...) # 模拟返回结果 restaurants [ {id: 1, name: 美味披萨屋, rating: 4.5, delivery_time: 30分钟}, {id: 2, name: 芝士力量, rating: 4.2, delivery_time: 25分钟}, ] return json.dumps({status: success, data: restaurants}, ensure_asciiFalse) def get_menu(restaurant_id): 获取指定餐厅的菜单 print(f[工具调用] 正在获取餐厅ID {restaurant_id} 的菜单...) menus { 1: [ {item_id: 101, name: 超级至尊披萨, price: 68}, {item_id: 102, name: 夏威夷风光披萨, price: 62}, ], 2: [ {item_id: 201, name: 双层芝士披萨, price: 75}, {item_id: 202, name: 麻辣牛肉披萨, price: 70}, ] } menu menus.get(restaurant_id, []) return json.dumps({status: success, data: menu}, ensure_asciiFalse) def place_order(restaurant_id, item_id, quantity, address): 在指定餐厅下单 print(f[工具调用] 正在向餐厅{restaurant_id}下单菜品{item_id} x{quantity}送至{address}) # 模拟下单成功 order_id fORDER_{restaurant_id}_{item_id}_{hash(address)}[:10] return json.dumps({ status: success, data: { order_id: order_id, estimated_delivery: 45分钟, total_price: 68 * quantity # 简单计算 } }, ensure_asciiFalse) # 工具描述用于告诉模型这些工具能干什么 TOOL_DESCRIPTIONS [ { name: search_restaurants, description: 根据菜系和用户位置搜索符合条件的餐厅。, parameters: { type: object, properties: { cuisine: {type: string, description: 菜系类型如‘披萨’、‘中餐’}, location: {type: string, description: 送餐地址} }, required: [cuisine, location] } }, { name: get_menu, description: 根据餐厅ID获取该餐厅的详细菜单。, parameters: { type: object, properties: { restaurant_id: {type: integer, description: 餐厅的唯一标识ID} }, required: [restaurant_id] } }, { name: place_order, description: 在选定的餐厅下单。, parameters: { type: object, properties: { restaurant_id: {type: integer, description: 餐厅ID}, item_id: {type: integer, description: 菜品ID}, quantity: {type: integer, description: 购买数量}, address: {type: string, description: 详细的送餐地址} }, required: [restaurant_id, item_id, quantity, address] } } ]2.4 实现核心的智能体执行循环现在我们把大脑、工具和调用逻辑组装起来。关键点在于我们需要在给模型的提示中清晰地说明它可以使用的工具并指导它以我们期望的格式如JSON来请求调用工具。class FoodOrderingAgent(DASDAgent): def __init__(self, api_url, api_key): super().__init__(api_url, api_key) self.tools { search_restaurants: search_restaurants, get_menu: get_menu, place_order: place_order, } # 在系统提示中定义角色和能力 system_prompt 你是一个智能订餐助手。你可以通过调用工具来帮助用户搜索餐厅、查看菜单和下单。 当用户想订餐时你需要按步骤规划 1. 询问用户想吃什么菜系和送餐地址如果未提供。 2. 调用 search_restaurants 工具搜索餐厅。 3. 根据用户选择或推荐一个餐厅调用 get_menu 获取菜单。 4. 帮助用户选择菜品确认数量调用 place_order 下单。 5. 将订单确认信息反馈给用户。 当你需要调用工具时请严格按照以下JSON格式输出且不要输出其他任何内容 { action: tool_call, tool_name: 工具名, parameters: { 参数1: 值1, 参数2: 值2 } } 我会执行工具并将结果以“工具结果{结果}”的格式返回给你。你根据结果继续下一步。 self.conversation_history [{role: system, content: system_prompt}] def execute_tool(self, tool_name, parameters): 解析并执行工具调用 if tool_name in self.tools: try: # 将参数字典解包传递给工具函数 result self.tools[tool_name](**parameters) return f工具结果{result} except Exception as e: return f工具调用出错{e} else: return f未知工具{tool_name} def process_user_request(self, user_input): 处理一轮用户输入可能包含多轮模型-工具交互 print(f用户: {user_input}) max_steps 10 # 防止无限循环 for step in range(max_steps): # 1. 模型思考/回复 model_response self.call_model(user_input if step 0 else tool_result) if not model_response: break print(f助手: {model_response}) # 2. 尝试解析模型回复看是否是工具调用 try: # 这是一个简单的解析实际应用中可能需要更健壮的解析逻辑 if { in model_response and \action\: \tool_call\ in model_response: # 提取JSON部分 import re json_match re.search(r\{.*\}, model_response, re.DOTALL) if json_match: action_data json.loads(json_match.group()) if action_data.get(action) tool_call: tool_name action_data[tool_name] params action_data[parameters] print(f检测到工具调用请求: {tool_name} with {params}) # 3. 执行工具 tool_result self.execute_tool(tool_name, params) print(tool_result) # 将工具结果作为下一轮模型的输入以特定格式 user_input tool_result continue # 继续循环让模型处理工具结果 except json.JSONDecodeError: pass # 如果模型回复不是工具调用或者解析失败则视为普通对话结束本轮处理 # 检查模型回复是否看起来像最终答案包含订单号、感谢等 if any(word in model_response for word in [订单号, 下单成功, 祝您用餐愉快]): print(任务完成或进入最终确认阶段。) break # 否则等待下一轮用户输入在自动循环演示中我们跳出 break return model_response # 模拟一次对话 if __name__ __main__: # 请替换为你的真实API地址和密钥 API_URL YOUR_MODEL_API_ENDPOINT API_KEY YOUR_API_KEY agent FoodOrderingAgent(API_URL, API_KEY) # 模拟用户输入 test_queries [ 我想订一份披萨送到科技园E栋。, # 在实际多轮中这里会根据助手回复如选择餐厅、菜品继续输入 # “选第一家餐厅吧” # “我要一个超级至尊披萨一份” ] for query in test_queries: final_response agent.process_user_request(query) print(- * 40)运行这段代码你会看到类似下面的输出流程这展示了智能体内部的“思考-行动”过程用户: 我想订一份披萨送到科技园E栋。 助手: 好的我来帮您订购披萨。首先我需要搜索科技园E栋附近的披萨店。 [工具调用] 正在搜索科技园E栋附近的披萨餐厅... 检测到工具调用请求: search_restaurants with {cuisine: 披萨, location: 科技园E栋} 工具结果工具结果{status: success, data: [{id: 1, name: 美味披萨屋, rating: 4.5, delivery_time: 30分钟}, {id: 2, name: 芝士力量, rating: 4.2, delivery_time: 25分钟}]} 助手: 找到两家不错的披萨店 1. 美味披萨屋评分4.5预计30分钟送达。 2. 芝士力量评分4.2预计25分钟送达。 您想选择哪一家或者需要我为您推荐3. 从原型到实用关键考量与进阶方向上面的例子是一个高度简化的原型。要让它真正实用你还需要考虑很多问题更鲁棒的提示工程系统提示词需要精心设计明确任务边界、工具使用规范和输出格式。可以加入少样本示例Few-shot让模型更好地学习调用模式。复杂的输出解析模型输出可能不总是完美的JSON。你需要编写更健壮的解析器或者使用支持“函数调用”或“工具调用”作为原生功能的模型/API它们通常能返回结构更清晰的请求。状态管理与记忆智能体需要记住之前的对话、用户的选择、工具调用的结果。我们的conversation_history是一个简单实现复杂场景可能需要更精细的状态管理。错误处理与重试工具调用可能失败网络错误、API限制。智能体应该能处理这些错误并尝试其他方案或向用户求助。扩展工具集订餐只是冰山一角。你可以集成天气查询、日历管理、邮件发送、数据分析等任何有API的服务打造一个真正的个人或企业级万能助手。4. 总结用Alibaba DASD-4B Thinking这类具备强大思维链能力的模型来构建智能体是一个令人兴奋的起点。它让我们看到了让AI从“顾问”转变为“执行者”的可行路径。今天我们一起完成了从概念理解、环境搭建、工具定义到实现一个简单执行循环的全过程。实际开发中你可能会遇到模型不按格式输出、工具参数提取不准等问题这都需要通过迭代优化提示词、改进解析逻辑来解决。不妨从这个小例子出发尝试把它变得更强大比如接入一个真实的天气API做一个“出行规划助手”或者接入文档处理库做一个“自动报告生成器”。智能体的世界刚刚打开动手去实现你的想法才是最有趣的。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。