当前位置: 首页 > news >正文

结合代码详细讲解大模型agent思路

一、核心思路:让大模型具备 “调用工具解决问题” 的能力

  传统大模型存在两个局限:(1)知识截止(无法获取实时信息);(2)缺乏实际操作能力(如计算、查询)。Agent 通过引入 “工具” 和 “工作流”,让大模型突破这两个局限 ——大模型负责 “判断该做什么、怎么调用工具”,工具负责 “实际做事”,工作流负责 “把两者串联起来”

对应到代码中,就是三个核心模块的协作:

# 核心协作关系
Agent(llm=大模型, tools=[工具1, 工具2])  # Agent协调大模型和工具

二、分模块拆解思路

1. 工具(Tools):给大模型 “装手脚”

思路:把具体功能(如查天气、算数学题)封装成工具,让大模型知道 “有什么可用” 以及 “怎么用”。

每个工具必须明确:名称(供大模型调用)、描述(告诉大模型该工具的用途)、函数(实际执行逻辑)。

代码实现:

class Tool:def __init__(self, name: str, description: str, function):self.name = name  # 工具名称(如"get_weather")self.description = description  # 功能描述(供大模型判断是否调用)self.function = function  # 实际执行的函数# 示例:天气查询工具
weather_tool = Tool(name="get_weather",description="查询指定城市的天气,需要参数:city(城市名)",  # 关键:让大模型知道何时用、传什么参数function=get_weather  # 具体实现(调用天气API或模拟数据)
)

为什么要这么设计
大模型无法直接执行代码或调用 API,必须通过人类预先定义的工具接口,才能将 “决策” 转化为 “行动”。工具的description是关键 —— 大模型通过阅读描述,判断是否需要调用该工具。

2. 大模型(LLM):Agent 的 “大脑”

思路:让大模型基于用户问题和工具描述,决定 “是否调用工具”“调用哪个工具”“传什么参数”。

  核心是通过结构化提示词引导大模型输出可解析的指令(如 JSON 格式),避免输出自然语言导致程序无法处理。

代码实现:

class SimpleLLM:def generate(self, prompt: str) -> str:# 实际中这里会调用真实大模型API(如GPT-3.5/4)# 示例:模拟大模型根据提示词判断,返回工具调用指令if "天气" in prompt:return '{"action": "get_weather", "parameters": {"city": "北京"}}'  # 调用天气工具elif "计算" in prompt:return '{"action": "calculate", "parameters": {"expression": "2+2"}}'  # 调用计算工具

关键设计:提示词模板
Agent 会自动构建包含 “用户问题 + 工具列表 + 格式要求” 的提示词,例如:

prompt = f"""
你可以使用这些工具:
- get_weather: 查询指定城市的天气,需要参数city
- calculate: 数学计算,需要参数expression用户问:北京的天气怎么样?
请返回JSON格式的工具调用指令(如{"action": "...", "parameters": {...}})
"""

大模型读到此提示词后,会输出符合格式的指令,确保 Agent 能解析并执行。

3. Agent 工作流:协调 “思考→行动→反馈” 的闭环

思路:用一套流程把 “用户问题→大模型决策→工具执行→结果整理” 串联起来,形成闭环。

核心步骤:接收问题→大模型判断调用工具→执行工具→生成回答

代码实现:

def run(self, user_query: str) -> str:# 1. 构建提示词(包含问题、工具描述)prompt = self._build_prompt(user_query, history)# 2. 大模型决策:该调用哪个工具?llm_response = self.llm.generate(prompt)  # 得到JSON指令# 3. 解析指令,调用工具action = json.loads(llm_response)if action["action"] in self.tools:tool_result = self.tools[action["action"]].call(**action["parameters"])  # 执行工具# 4. 用工具结果生成最终回答final_answer = self.llm.generate(f"用工具结果回答:{tool_result}")return final_answer

为什么需要闭环
复杂问题可能需要多轮调用(例如 “先查北京天气,再推荐适合的衣服”)。工作流确保 Agent 能根据工具返回的结果,决定是否继续调用其他工具,直到解决问题。

三、总结:Agent 的核心逻辑链

  1. 用户提问:如 “北京天气怎么样?”
  2. Agent 引导大模型思考:通过提示词告诉大模型 “有天气查询工具,需要城市参数”。
  3. 大模型决策:输出调用get_weather工具的指令,参数为city="北京"
  4. Agent 执行工具:调用get_weather("北京"),得到结果 “晴朗,25℃”。
  5. 生成回答:大模型将工具结果整理为自然语言:“北京今天晴朗,气温 25℃”。

这个过程本质是 “让大模型像人一样思考和使用工具”—— 人会判断 “我需要查天气→打开天气 APP→输入城市→看结果→告诉别人”,Agent 则用代码模拟了这个过程,其中大模型负责 “判断和理解”,工具负责 “实际操作”,工作流负责 “步骤衔接”。

实际应用中,只需扩展工具(如添加数据库查询、邮件发送)和优化提示词,就能让 Agent 处理更复杂的任务(如自动写报告、数据分析等)。

http://www.dtcms.com/a/359444.html

相关文章:

  • shell的原理和Linux的指令效果演示
  • 基于单片机智能电子秤/称重计费
  • Rsync 数据同步工具及实时同步配置
  • leetcode解题思路分析(一百六十六)1438 - 1444 题
  • [Mysql数据库] 知识点总结8
  • isp 图像处理--DPC坏点矫正
  • 人工神经网络(ANN)深度学习
  • 当服务器报警响起:CPU、内存、磁盘使用率飙升的诊断与处置
  • 零信任网络(1)
  • MySQL 8 的 SQL 语法新特性
  • WebSocket的基本使用方法
  • 异步编程以及promise的一些拓展
  • SpringBoot学习笔记(上)——自动装配原理、自定义 springboot-starter、配置文件编写
  • 螺旋曲面交线投影切线角度计算与分析
  • Junior Engineer浅谈CAS
  • 联合体Union
  • OpenStack 03:创建实例
  • LeetCode100-160相交链表【链表介绍】
  • 基于Adaboost集成学习与SHAP可解释性分析的分类预测
  • 洞悉边界:软件测试中边界值分析的艺术与科学
  • kotlin - 2个Activity实现平行视图,使用SplitPairFilter
  • 代码随想录算法训练营五十三天|图论part11
  • Linux中的ss命令
  • 项目跑起来之前的那些事
  • 【Spring】ApplicationListener监听器
  • BigDecimal账户分布式原子操作
  • Linux 中进入 root 权限
  • dayjs 常用方法总结
  • Nginx 502 Bad Gateway:从 upstream 日志到 FastCGI 超时复盘
  • 【大数据技术实战】流式计算 Flink~生产错误实战解析