LLM大语言模型(十四):LangChain中Tool的不同定义方式,对prompt的影响

背景

ChatGLM3-6B的函数调用功能,和LangChain的Tool调用,在prompt上并没有对齐。

参考:LLM大语言模型(十二):关于ChatGLM3-6B不兼容Langchain 的Function Call_error: valueerror: caught exception: unknown forma-CSDN博客

因此在LangChain的Agent中调用ChatGLM3-6B时,单独对prompt进行了转换。

参考:LLM大语言模型(十三):ChatGLM3-6B兼容Langchain的Function Call的一步一步的详细转换过程记录_langchain+chatglm3-CSDN博客

今日发现,使用LangChain的不同方式定义的tool,之前的prompt转换失效了。

LangChain中不同Tool定义方式,生成的prompt不同

方式一:@tool

from langchain_core.tools import tool@tooldef calculator(calculation:str)->str:"Useful for when you need to calculate math problems"calculation = calculation.replace("^", "**")if "sqrt" in calculation:calculation = calculation.replace("sqrt", "math.sqrt")elif "log" in calculation:calculation = calculation.replace("log", "math.log")return eval(calculation)

在Agent执行时生成的prompt如下,关注红色部分:

'System: Respond to the human as helpfully and accurately as possible. You have access to the following tools:\n\n

calculator: calculator(calculation: str) -> str - Useful for when you need to calculate math problems, args: {\'calculation\': {\'title\': \'Calculation\', \'type\': \'string\'}}\n\n

Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input).\n\nValid "action" values: "Final Answer" or calculator\n\nProvide only ONE action per $JSON_BLOB, as shown:\n\n```\n{\n  "action": $TOOL_NAME,\n  "action_input": $INPUT\n}\n```\n\nFollow this format:\n\nQuestion: input question to answer\nThought: consider previous and subsequent steps\nAction:\n```\n$JSON_BLOB\n```\nObservation: action result\n... (repeat Thought/Action/Observation N times)\nThought: I know what to respond\nAction:\n```\n{\n  "action": "Final Answer",\n  "action_input": "Final response to human"\n}\n\nBegin! Reminder to ALWAYS respond with a valid json blob of a single action. Use tools if necessary. Respond directly if appropriate. Format is Action:```$JSON_BLOB```then Observation\nHuman: 34 * 34\n\n\n (reminder to respond in a JSON blob no matter what)'


 

方式二:继承BaseTool

import os
import requestsfrom typing import Type, Any
from langchain.tools import BaseTool
from pydantic import BaseModel, Fieldclass WeatherInput(BaseModel):location: str = Field(description="the location need to check the weather")class Weather(BaseTool):name = "weather"description = "Use for searching weather at a specific location"args_schema: Type[BaseModel] = WeatherInputdef __init__(self):super().__init__()def _run(self, location: str) -> dict[str, Any]:weather = {"temperature": "20度","description": "温度适中",}return weather

在Agent执行时生成的prompt如下,关注红色部分:

System: Respond to the human as helpfully and accurately as possible. You have access to the following tools:\n\n

Calculator: Useful for when you need to calculate math problems, args: {\'calculation\': {\'description\': \'calculation to perform\', \'title\': \'Calculation\', \'type\': \'string\'}}\n\n

Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input).\n\nValid "action" values: "Final Answer" or Calculator\n\nProvide only ONE action per $JSON_BLOB, as shown:\n\n```\n{\n  "action": $TOOL_NAME,\n  "action_input": $INPUT\n}\n```\n\nFollow this format:\n\nQuestion: input question to answer\nThought: consider previous and subsequent steps\nAction:\n```\n$JSON_BLOB\n```\nObservation: action result\n... (repeat Thought/Action/Observation N times)\nThought: I know what to respond\nAction:\n```\n{\n  "action": "Final Answer",\n  "action_input": "Final response to human"\n}\n\nBegin! Reminder to ALWAYS respond with a valid json blob of a single action. Use tools if necessary. Respond directly if appropriate. Format is Action:```$JSON_BLOB```then Observation\nHuman: 34 * 34\n\n\n (reminder to respond in a JSON blob no matter what)

因为生成的prompt不同了,所以之前的prompt转换也就失效了。

LangChain使用上的一个坑。

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

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

相关文章

神卓互联内网穿透之快速创建https类型通道【最新】

神卓互联最近上线了V9.0内网穿透通信传输模式,相比与之前的V8.0在速度和延迟方面确实提升了很多,控制台也进行了改版升级,这里是对升级后的控制台创建https通道方法进行记录: 登录神卓互联控制台 选择【内网穿透】-【映射管理】…

如何利用AI提高内容生产效率与AIGC典型案例分析

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

有趣的css - 打字机动画效果

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是使用 css 实现好玩的单行打字机效果,和我一起看看吧。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整…

centos7同步银河麒麟服务器SP系列外网yum源包同步不完整问题

centos7同步银河麒麟服务器SP系列外网yum源包同步不完整问题 一 问题描述二 解决方法三 外网源配置步骤 一 问题描述 Red 7.7 x86架构同步银河麒麟服务器SP arm架构外网源的yum包不完整问题,yum repolist查看源里面有15000左右的包,使用reposync命令同步…

疾病防范:拯救微笑,关于儿童抑郁的注意事项

引言: 儿童抑郁是一种常见但常被忽视的心理健康问题,对孩子的身心健康和成长都会造成严重影响。本文将探讨儿童抑郁的注意事项,以帮助家长和教育者更好地识别、理解和应对儿童抑郁问题。 1. 深入了解抑郁症: 抑郁症并非一种偶发的…

B端设计与C端设计,用户模型区别!

B端设计和C端设计到底有哪些不同?这篇文章里,作者就做了相对详细的阐述和分析,不妨来看一下。 C 全称是 Customer 即消费者(泛指用户)的产品,个人用户或终端用户,使用的是客户端。例如&#xff…

羊大师解析,如何遵守《节约用水条例》

羊大师解析,如何遵守《节约用水条例》 《节约用水条例》的实施旨在倡导和推动全社会形成节约用水的良好风尚,以应对日益严峻的水资源短缺问题。羊大师发现随着这一条例的深入实施,越来越多的人开始意识到节约用水的重要性,并积极…

Redis—图文详解高可用原因

本文不会讲解Redis的用途,关于用途会发另一片文章讲解,本文主要讲的是高可用的原理。 Redis高可用主要有以下三个原因:主从模式(上一篇讲Kafka的文章里有涉及到),哨兵模式,Redis-Cluster(Redis集群)。 什么是主从模式…

第二证券|北交所股票散户可以买吗?门槛多少?

北交所股票散户能够买,不过一般来说,北交所股票出资风险比较大,不适合资金实力不雄厚的散户。 北交所买卖权限注册条件:请求注册权限前20个买卖日的证券账户和资金账户内的财物日均不低于50万元,其间不包括经过融资融…

Flutter 中的 PageView 控件:全面指南

Flutter 中的 PageView 控件:全面指南 PageView 是 Flutter 中用于创建可滑动页面视图的小部件,它允许用户左右(或上下,取决于滚动方向)滑动以在不同的页面间切换。PageView 控件非常适合用于幻灯片、相册、分页菜单等…

基于Springboot的村庄果园预售系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的村庄果园预售系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

[力扣题解]135. 分发糖果

[困难] 题目&#xff1a;135. 分发糖果 思路 贪心法 代码 // 贪心 // Step 1 : 从左往右 // Step 2 : 从右往左 class Solution { public:int candy(vector<int>& ratings) {int i, size ratings.size(), sum 0;vector<int> candy(size, 1); // 基础是1个…

AES对称加密算法原理、C++代码示例

目录 基础介绍 一、特点 二、原理 代码示例 Crypto库 为什么需要安全的密钥管理&#xff1f; 生成密钥 用秘钥加解密 Microsoft CryptoAPI 注意点 OpenSSL 1.1版本 代码解释&#xff1a; 总结 介绍AES加密以及代码示例 基础介绍 高级加密标准&#xff08…

知识付费系统怎么安装教程,教师课堂教学该掌握哪些表达技巧?

课堂教学语言表达是教学艺术的一个基本且重要的组成部分。教师向学生传道、授业、解惑以及师生之间信息的传递和情感的交流&#xff0c;都离不开运用教学语言这一有力的工具&#xff0c;在课堂上&#xff0c;教师通过情趣盎然的表述&#xff0c;鞭辟入里的分析&#xff0c;恰到…

VR030AA080V01V02比例减压阀控制器

MAGNET-SCHULTZ比例阀是一种用于液压控制系统的装置&#xff0c;它能够根据输入信号自动调节输出的比例&#xff0c;常应用于流量、压力和温度等参数的控制。机械制造业中BEUEC比例放大器用于确保机械操作的精准度和重复性。MAGNET-SCHULTZ比例阀VR030AA080V01V01、VR030AA080V…

聚观早报 | 比亚迪海狮07 EV上市;苹果将升级Siri

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 5月13日消息 比亚迪海狮07 EV上市 苹果将升级Siri OpenAI开发全新技术 沃尔沃EX30车型将上市 SpaceX计划新建发…

ICLR 2024落幕,一文了解ICLR + 历年(2017-2024) 论文整理(含源码!)

来源: AINLPer公众号&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2024-5-13 引言 最近这几天&#xff0c;相信大家都或多或少的刷到了ICLR 2024这个关键词。对于刚刚入门的小伙伴或对此并没有深入的理解&#xff0c;只知…

p6spy-starter springboot快速引入p6spy简单配置即可自动替换数据源

p6spy-starter 通过属性配置便可以自动替换springboot数据源中p6spy的配置(支持常见数据库).项目地址 https://github.com/joker-pper/p6spy-starter 功能介绍 仅对springboot中的环境变量配置进行自动替换 (p6spy使用方式与原来一致) 无需改变原数据源配置内容便可实现引入…

【C++】————类与对象(上)-基础知识

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 类的两种定义方式&#xff1a; 成员变量命名规则的建议&#xff1a; 4.类的访问限定符及封装 4.1 访问限定符 ​编辑 【面试题】问题&#xff1a;C中struct和class的区别是什么&#xff1f; 4.2 封装 【面试…

李廉洋:5.13黄金原油消息面面和行情分析,必看策略。

黄金方面&#xff1a;月初公布的美国非农等就业市场数据比较弱势&#xff0c;显示美国就业市场开始走软&#xff0c;美联储在就业市场开始变差的背景下&#xff0c;存在提前降息的可能性&#xff0c;这有利于推动金价走高。The         近期公布的美国5月密歇根大学消费者…