AI菜鸟向前飞 — LangChain系列之十六 - Agent系列:从现象看机制(下篇)一款“无需传递中间步骤“的Agent

news2025/1/19 8:03:22

前言

    AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇)

    AI菜鸟向前飞 — LangChain系列之十五 - Agent系列:从现象看机制(中篇)一个Agent的“旅行”

    回顾前两篇文章,大家会发现一个问题

    为什么每次Agent在invoke的时候需要多加一个intermediate_steps(即:中间步骤),例如:

    预先准备一个Tool

# 一款Agent的诞生
from langchain.agents import create_react_agent
agent = create_react_agent(llm=model, tools=tools, prompt=prompt)

intermediate_steps = []
agent.invoke(
            {
                "input": "我是你的好朋友——Song榆钱儿",
                "intermediate_steps": intermediate_steps,
            }
        )

    多传一个空的列表,只是为了agent_scratchpad,那不然呢?:( 

   不传还不行,例如:

agent.invoke({"input": "我是你的好朋友——Song榆钱儿"})

结果

……(此处省略)
agent_scratchpad=lambda x: format_log_to_str(x["intermediate_steps"]),
KeyError: 'intermediate_steps'

解决办法

  • 常规方法

    有没有一种不需要传这个“多余”的参数方式,很多资料推荐你直接用AgentExecutor……  *_*

agent_executor = AgentExecutor(agent=agent, tools=tools)
agent_executor.invoke({"input": "我是你的好朋友——Song榆钱儿"})

结果

{'input': '我是你的好朋友——Song榆钱儿', 
 'output': '你好,Song榆钱儿!很高兴见到你。'}

    这么做没毛病,也倒是一种解法(很多资料也会这么讲)但当前这系列讲的是Agent呢:)

    我们来看看另一种、你没见过的解法:

  • 终极解法

# 一款“新”Agent的诞生
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(llm=model, tools=tools, messages_modifier=some_prompt)

agent.invoke(**{"input": {"messages": "我是你的好朋友——Song榆钱儿"}})

结果

{'messages': 
 [HumanMessage(content='我是你的好朋友——Song榆钱儿' …… )
  AIMessage(content='', …… , tool_calls=[{'name': 'greeting', 'args': {'string': 'Song榆钱儿'}, 'id': ''}])
  ToolMessage(content='你好啊,Song榆钱儿', name='greeting' …… ),AIMessage(content='哇,Song榆钱儿!很高兴见到你!有什么好玩的事儿或者问题想和我分享吗?' ……)
  ]
}

请注意:上面结果,省略了一些 当前看上去“多余”的元素

是不是很有意思,这样Agent在invoke的时候,就不需要带intermediate_steps中间步骤了,其中的运行机制,在介绍LangGraph的时候再跟大家说哈(因为无需传递中间步骤,只是从调用者角度来看的)

大家可自行结合我之前发的文章,看看这两类Agent在使用方面有何不同

那么,Agent系列就此结束,大家期待下一篇吧:)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1790338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT 信号和槽教程,窗体和控件对象之间的沟通一般都使用信号和槽

Qt的信号和槽(Signals and Slots)机制是一种强大的对象间通信方式,它允许对象在完全解耦的情况下相互通信。以下是关于Qt信号和槽的简明教程: 基本概念 信号(Signal):信号是由Qt对象发出的通知…

Python leetcode239滑动窗口最大值,单调队列解题思路,单调栈的代码模板,单调队列代码实战

1 题目 239. 滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1…

硕士课程可穿戴作业归档之三

代码运行 挑战赛要求 根据比赛要求, As in recent challenges, the data have been divided into three sets:- **Learning (training) set A**: includes noninvasive fetal ECG signals, as well as the reference annotations for them (for participants use…

2022.9.26DAY678

课程学习:《数据处理技术》讲了“数据查询”的语法格式,语法格式也算是简单,就是没能跟之前的内容联系起来,之前的内容没有及时回顾。 高等数学:“ 函数的概念”,讲了函数的概念,反函数&#…

C语言中 printf函数格式化输出

一. 简介 本文来简单学习一下,C语言中printf函数格式化输出时,因为我们的粗心没有 将数据类型与格式化参数对应,而导致的一些问题。 二. C语言中printf函数的格式化输出 在C语言中,printf函数是用于格式化输出的函数&#xff0…

Idea 的选择文件后定位瞄准器 “Select Opened File“ 的功能不见了

一、问题描述 使用Idea 时 “Select Opened File” 的功能不见了,一般是可以通过点击这个瞄准按钮,定位到文件的位置。 这个非常坑爹。 之前应该是有这个瞄准镜的。 二、解决方法 右键标题框,选择后点击Always Opened File,即…

[C][栈帧]详细讲解

目录 1.栈帧1.进程地址空间2.栈帧说明 2.认识相关寄存器3.认识相关汇编命令4.过程理解5.栈帧总结6.补充 1.栈帧 1.进程地址空间 .进程地址空间 2.栈帧说明 调用函数,形成栈帧函数返回,释放栈帧局部变量是存放在栈区上的栈区内存的使用习惯是&#xff…

阿里云语音合成TTS直播助手软件开发

阿里云的TTS比较便宜,效果比不了开源克隆的那种,比纯机器人效果好一点点 阿里云sambert https://help.aliyun.com/zh/dashscope/developer-reference/quick-start-13 Sambert系列模型 1万字1元 ,每主账号每模型每月3万字免费 创建API-KEY htt…

国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上Vim的详解03–使用Vundle插件管理器来安装和使用插件 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇在国产操作系统上使用Vundle插件管理器来安装和使用Vim插件的详解文章。Vundle是Vim的一款强大的插…

工业通讯现场中关于EtherCAT转TCPIP网关的现场应用

在当今工业自动化的浪潮中,EtherCAT技术以其高效、实时的特性成为了众多制造业的首选。然而,随着工业互联网的发展,对于数据的远程访问和云平台集成的需求日益增长,这就需要将EtherCAT协议转化为更为通用的TCP/IP协议。于是开疆智…

Day43 代码随想录打卡|二叉树篇---左叶子之和

题目(leecode T404): 给定二叉树的根节点 root ,返回所有左叶子之和。 方法: 迭代法:计算所有的左叶子节点,那我们就必然要找到所有的左叶子节点。那么怎么找呢?如何针对cur->l…

Java实现俄罗斯方块游戏源代码(启动即可玩)

这是一个用Java Swing实现的俄罗斯方块游戏,具有经典的游戏机制和图形界面。游戏中,玩家需要旋转和移动不断下落的方块,使其填满一行来消除该行并得分。 该项目适合学习Java GUI编程、游戏开发基础以及面向对象编程(OOP&#xff0…

【Qt】Qt Style Sheets (QSS) 指南:打造个性化用户界面

文章目录 前言:1. QSS 选择器2. 子控件选择器(Sub-Controls)2.1. 示例:给 QComboBox 给下拉按钮加上图标2.2. 示例:修改进度条颜色 3. 伪类选择器3.1. 代码示例: 设置按钮的伪类样式.3.2. 代码示例: 使用事件方式实现同…

想要成长就要持续地学习,而如何学习更有效率呢

为什么很多人学了知识,但是总感觉记不住,用不上呢? 在学习的过程中,为什么总感觉没什么进步呢? 看了很多书,为什么总感觉没什么用呢? 要说明这些问题,首先我们要知道一个好的、完整的…

语言模型测试系列【9】

语言模型 文心一言讯飞星火通义千问2.5豆包360智脑百小应腾讯元宝KimiC知道 好长时间没有做语言模型的测试了,一方面是没有好的素材,各模型都在升级优化,而且频率很高;另一方面近期在阅读和学习其他的知识,所以更的也…

阿里影业业绩大涨,除了沸腾的文娱市场还有什么原因?

影视文娱市场的火热仍在延续,新定档的电影和演出,不断引人关注这个行业的生机。而这个行业的支持者、受益者,就站在一线。 5月29日晚,阿里影业发布截至2024年3月31日的2024财年业绩公告。社会文娱消费的热情,对优质项…

怎么等比例缩小图片尺寸?这四种方法肯定可以帮到你!

怎么等比例缩小图片尺寸?在当今日常生活中,图片文件是我们不可或缺的一部分,它们以各种形式出现,从社交媒体上的照片到工作文档中的插图,然而,随之而来的问题是,有时这些图片文件的尺寸过大&…

Linux---用户及权限配置

文章目录 目录 文章目录 前言 一.基本概念 二.用户管理 创建用户 修改用户属性 用户组管理 用户授权 前言 用户在操作系统中是非常重要的,我们登录系统,访问共享文件夹等都需要用户进行验证。所以,掌握管理用户的知识非常有必要的 一.基…

Java Web学习笔记2——Web开发介绍

什么是Web? Web:全球广域网,也称为万维网(WWW World Wide Web),能够通过浏览器访问的网站。 1)淘宝、京东、唯品会等电商系统; 2)CRM、OA、ERP企业管理系统&#xff1…

解锁财富新篇章:消费增值模式引领未来消费趋势

你是否曾对日常消费感到一丝单调,认为它仅仅是一种物质上的交换,而非财富增长的途径?那么,让我们为你打开一扇全新的消费之门——消费增值模式。这不仅是一种全新的消费体验,更是一种让你的资金在消费过程中不断积累与…