精通多步推理与动态工具调用:打造高级AI Agent实战指南
本节目标通过本课程的学习您将能够理解多步骤推理在Agent中的应用掌握记忆机制的实现原理学会动态发现和使用工具的方法实现具有高级特性的Agent系统理论讲解多步骤推理多步骤推理是现代AI Agent的核心能力之一它使Agent能够分解复杂问题、制定计划并逐步执行。这种能力模拟了人类解决复杂问题的方式——将大问题分解为小问题然后逐一解决。多步骤推理的关键组成部分**思考(Thought)**Agent对当前情况的分析和下一步行动的考虑**行动(Action)**Agent采取的具体操作如调用工具或API**观察(Observation)**行动产生的结果用于后续决策**输出(Final Answer)**最终向用户提供的答案记忆机制记忆机制允许Agent在对话过程中保持上下文信息提供更连贯和个性化的交互体验。主要类型包括**短期记忆**存储当前对话的上下文信息**长期记忆**存储历史交互记录和个人偏好**实体记忆**跟踪对话中提到的重要实体信息工具动态发现与使用现代Agent系统需要能够动态地发现和使用新工具。这包括**工具注册**允许动态添加新功能**工具选择**根据任务需求选择合适的工具**参数验证**确保工具调用参数的有效性**错误处理**优雅地处理工具调用失败的情况设计思路我们将构建一个支持多步骤推理的Agent它具有以下特性使用ReAct(Reasoning Acting)框架进行多步骤推理集成短期记忆机制保持对话上下文支持动态工具注册和调用提供清晰的推理过程可视化我们的实现将包括一个推理引擎负责分析问题并制定行动计划一个工具管理器负责管理和调用可用工具一个记忆系统维护对话状态一个输出格式化器以标准化格式呈现结果代码实现import json import re from typing import Dict, List, Any, Optional from datetime import datetime import uuid class Tool: 工具基类 def __init__(self, name: str, description: str, parameters: Dict[str, Any]): self.name name self.description description self.parameters parameters def run(self, **kwargs) - str: 执行工具的具体逻辑子类需要重写此方法 raise NotImplementedError(子类必须实现run方法) class CalculatorTool(Tool): 计算器工具 def __init__(self): super().__init__( namecalculator, description执行数学计算, parameters{ expression: { type: string, description: 要计算的数学表达式 } } ) def run(self, expression: str) - str: try: # 安全计算表达式 allowed_chars set(0123456789-*/(). ) if not all(c in allowed_chars for c in expression): return 错误表达式包含不允许的字符 result eval(expression) return f{expression} {result} except Exception as e: return f计算错误: {str(e)} class DateTimeTool(Tool): 获取当前日期时间工具 def __init__(self): super().__init__( namedatetime, description获取当前日期和时间, parameters{} ) def run(self) - str: return f当前日期时间: {datetime.now().strftime(%Y-%m-%d %H:%M:%S)} class WebSearchTool(Tool): 网络搜索工具模拟 def __init__(self): super().__init__( nameweb_search, description模拟网络搜索功能, parameters{ query: { type: string, description: 搜索查询 } } ) def run(self, query: str) - str: # 模拟搜索结果 return f模拟搜索结果: {query} 的相关信息。例如Python是一种高级编程语言由Guido van Rossum于1991年首次发布。 class MemoryManager: 记忆管理系统 def __init__(self, max_turns: int 10): self.max_turns max_turns self.conversation_history [] self.entities {} self.user_profile {} def add_message(self, role: str, content: str): 添加对话消息 self.conversation_history.append({ role: role, content: content, timestamp: datetime.now().isoformat() }) # 限制历史长度 if len(self.conversation_history) self.max_turns: self.conversation_history self.conversation_history[-self.max_turns:] def get_context(self) - List[Dict[str, str]]: 获取当前对话上下文 return self.conversation_history[-5:] # 返回最近5轮对话 def update_entity(self, entity_type: str, entity_value: str): 更新实体信息 if entity_type not in self.entities: self.entities[entity_type] [] self.entities[entity_type].append(entity_value) def get_entities(self) - Dict[str, List[str]]: 获取所有实体信息 return self.entities class ToolManager: 工具管理器 def __init__(self): self.tools {} self.tool_schemas {} def register_tool(self, tool: Tool): 注册工具 self.tools[tool.name] tool self.tool_schemas[tool.name] { name: tool.name, description: tool.description, parameters: tool.parameters } def get_tool_schema(self) - List[Dict[str, Any]]: 获取所有工具的schema return list(self.tool_schemas.values()) def run_tool(self, tool_name: str, **kwargs) - str: 运行指定工具 if tool_name not in self.tools: return f错误找不到工具 {tool_name} try: return self.tools[tool_name].run(**kwargs) except Exception as e: return f工具执行错误: {str(e)} class AdvancedAgent: 高级Agent实现 def __init__(self): self.memory MemoryManager() self.tools ToolManager() self._setup_default_tools() def _setup_default_tools(self): 设置默认工具 self.tools.register_tool(CalculatorTool()) self.tools.register_tool(DateTimeTool()) self.tools.register_tool(WebSearchTool()) def parse_action(self, text: str) - Optional[Dict[str, str]]: 解析动作指令 # 匹配格式Action: tool_name Action Input: {param: value} action_match re.search(rAction:\s*(\w)\s*Action Input:\s*(.*), text) if action_match: tool_name action_match.group(1) try: tool_input json.loads(action_match.group(2)) return {tool_name: tool_name, tool_input: tool_input} except json.JSONDecodeError: return None return None def think(self, prompt: str) - str: 执行推理过程 # 获取上下文 context self.memory.get_context() context_str \n.join([f{msg[role]}: {msg[content]} for msg in context]) # 构建提示词 full_prompt f 你是一个高级AI助手能够进行多步骤推理。请使用以下工具来回答问题 可用工具: {json.dumps(self.tools.get_tool_schema(), ensure_asciiFalse, indent2)} 当前对话历史: {context_str} 用户输入: {prompt} 请按照以下格式回答 Thought: 你的思考过程 Action: 工具名称 Action Input: {{参数名: 参数值}} Observation: 工具返回的结果 (可以重复以上过程多次) Final Answer: 最终答案 # 在实际实现中这里会调用LLM # 为了演示目的我们使用简单的规则来模拟 return self._simulate_reasoning(prompt) def _simulate_reasoning(self, prompt: str) - str: 模拟推理过程 # 这里是简化的推理模拟 # 在真实实现中这会连接到大型语言模型 if 时间 in prompt or 日期 in prompt: return Thought: 用户询问当前时间我应该使用datetime工具获取当前时间 Action: datetime Action Input: {} Observation: 当前日期时间: 2023-12-07 15:30:45 Final Answer: 当前时间是2023年12月7日 15:30:45 elif 计算 in prompt or re.search(r\d[\\-\*\/]\d, prompt): # 提取计算表达式 calc_match re.search(r(\d[\\-\*\/]\d(?:[\\-\*\/]\d)*), prompt) if calc_match: expression calc_match.group(1) return fThought: 用户要求进行计算我应该使用calculator工具计算表达式 {expression} Action: calculator Action Input: {{expression: {expression}}} Observation: {expression} {eval(expression)} Final Answer: {expression} 的计算结果是 {eval(expression)} elif 搜索 in prompt or 查找 in prompt: search_query prompt.replace(搜索, ).replace(查找, ).strip() return fThought: 用户要求搜索信息我应该使用web_search工具搜索{search_query} Action: web_search Action Input: {{query: {search_query}}} Observation: 模拟搜索结果: {search_query} 的相关信息。例如Python是一种高级编程语言由Guido van Rossum于1991年首次发布。 Final Answer: 关于{search_query}的信息Python是一种高级编程语言由Guido van Rossum于1991年首次发布。 else: return fThought: 我可以直接回答用户的问题 Final Answer: 我是高级AI助手能够进行多步骤推理。我可以帮助您计算数学问题、获取当前时间或搜索信息。您的问题是{prompt} def chat(self, user_input: str) - str: 主聊天接口 # 添加用户输入到记忆 self.memory.add_message(user, user_input) # 执行推理 response self.think(user_input) # 解析响应并执行动作 lines response.split(\n) current_thought final_answer current_response i 0 while i len(lines): line lines[i].strip() if line.startswith(Thought:): thought line[len(Thought:):].strip() current_thought thought current_response f思考: {thought}\n elif line.startswith(Action:): action_line line action_input_line lines[i1] if i1 len(lines) and lines[i1].startswith(Action Input:) else if action_input_line: # 解析动作 action_match re.search(rAction:\s*(\w), action_line) input_match re.search(rAction Input:\s*(.*), action_input_line) if action_match and input_match: tool_name action_match.group(1) try: tool_input json.loads(input_match.group(1)) # 执行工具 observation self.tools.run_tool(tool_name, **tool_input) current_response f动作: {tool_name}({tool_input})\n current_response f观察: {observation}\n # 如果有观察行跳过它 j i 2 while j len(lines) and lines[j].startswith(Observation:): j 1 i j - 1 # 因为循环会增加i except json.JSONDecodeError: current_response f错误: 无法解析动作输入\n elif line.startswith(Final Answer:): final_answer line[len(Final Answer:):].strip() current_response f最终答案: {final_answer}\n i 1 # 添加AI响应到记忆 self.memory.add_message(assistant, response) return current_response # 使用示例 if __name__ __main__: # 创建高级Agent实例 agent AdvancedAgent() print( 高级Agent演示 \n) # 示例1获取当前时间 print(用户: 现在几点了) response agent.chat(现在几点了) print(fAgent: {response}) print(- * 50) # 示例2进行计算 print(用户: 计算 15 * 24 的结果) response agent.chat(计算 15 * 24 的结果) print(fAgent: {response}) print(- * 50) # 示例3搜索信息 print(用户: 搜索人工智能的发展历史) response agent.chat(搜索人工智能的发展历史) print(fAgent: {response}) print(- * 50) # 示例4复杂问题 print(用户: 今天是星期几另外请计算 100 50 * 2 的结果) response agent.chat(今天是星期几另外请计算 100 50 * 2 的结果) print(fAgent: {response}) print(- * 50) # 注册自定义工具 class WeatherTool(Tool): def __init__(self): super().__init__( nameweather, description获取天气信息, parameters{ city: { type: string, description: 城市名称 } } ) def run(self, city: str) - str: # 模拟天气数据 weather_data { 北京: 晴天气温15°C, 上海: 多云气温18°C, 广州: 雨天气温22°C } return f{city}的天气: {weather_data.get(city, 暂无数据)} agent.tools.register_tool(WeatherTool()) print(用户: 北京的天气怎么样) response agent.chat(北京的天气怎么样) print(fAgent: {response}) print(- * 50)实践练习**扩展工具集**实现一个翻译工具能够将中文翻译为英文实现一个单位转换工具能够在不同单位之间转换**改进记忆机制**实现长期记忆功能将对话历史保存到文件实现记忆压缩功能当记忆过长时自动总结**增强推理能力**实现更复杂的推理链支持嵌套思考添加错误恢复机制当工具调用失败时尝试替代方案2026年AI行业最大的机会毫无疑问就在应用层字节跳动已有7个团队全速布局Agent大模型岗位暴增69%年薪破百万腾讯、京东、百度开放招聘技术岗80%与AI相关……如今超过60%的企业都在推进AI产品落地而真正能交付项目的大模型应用开发工程师****却极度稀缺落地AI应用绝对不是写几个prompt调几个API就能搞定的企业真正需要的是能搞定这三项核心能力的人✅RAG融入外部信息修正模型输出给模型装靠谱大脑✅Agent智能体让AI自主干活通过工具调用Tools环境交互多步推理完成复杂任务。比如做智能客服等等……✅微调针对特定任务优化让模型适配业务目前脉脉上有超过1000家企业发布大模型相关岗位人工智能岗平均月薪7.8w实习生日薪高达4000远超其他行业收入水平技术的稀缺性才是你「值钱」的关键具备AI能力的程序员比传统开发高出不止一截有的人早就转行AI方向拿到百万年薪AI浪潮正在重构程序员的核心竞争力现在入场仍是最佳时机我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】⭐️从大模型微调到AI Agent智能体搭建剖析AI技术的应用场景用实战经验落地AI技术。从GPT到最火的开源模型让你从容面对AI技术革新大模型微调掌握主流大模型如DeepSeek、Qwen等的微调技术针对特定场景优化模型性能。学习如何利用领域数据如制造、医药、金融等进行模型定制提升任务准确性和效率。RAG应用开发深入理解检索增强生成Retrieval-Augmented Generation, RAG技术构建高效的知识检索与生成系统。应用于垂类场景如法律文档分析、医疗诊断辅助、金融报告生成等实现精准信息提取与内容生成。AI Agent智能体搭建学习如何设计和开发AI Agent实现多任务协同、自主决策和复杂问题解决。构建垂类场景下的智能助手如制造业中的设备故障诊断Agent、金融领域的投资分析Agent等。如果你也有以下诉求快速链接产品/业务团队参与前沿项目构建技术壁垒从竞争者中脱颖而出避开35岁裁员危险期顺利拿下高薪岗迭代技术水平延长未来20年的新职业发展……那这节课你一定要来听因为留给普通程序员的时间真的不多了立即扫码即可免费预约「AI技术原理 实战应用 职业发展」「大模型应用开发实战公开课」还有靠谱的内推机会直聘权益完课后赠送大模型应用案例集、AI商业落地白皮书