LangChain实战技巧之四:当模型(Model)不支持Tool/Function的解决办法

文心大模型两大主力模型已全面免费,可参考我之前发的文章

AI菜鸟向前飞 — 今日三则AI相关新闻

图片

但是,这些模型原生并不支持Tool/Function Call

如下所示:

@tool
def greeting(name: str):'''向朋友致欢迎语'''return f"你好啊, {name}"# 以ERNIE-Speed-8K为例,其他几款都一样
model_with_tool = QianfanChatEndpoint(model="ERNIE-Speed-8K").bind_tools([greeting])
model_with_tool.invoke("你好,我是你的新朋友")

输出结果

# 首先,映入眼帘的是 "不支持"(很直白的说了)
base.py:634 [t:4391572992]: This key `functions` does not seem to be a parameter that the model `ERNIE-Speed-8K` will acceptcontent='你好,很高兴认识你!请问你有什么想要聊的或者需要我帮助的地方吗?我会尽力提供帮助和支持。' additional_kwargs={'finish_reason': '', 'request_id': 'as-iv6grn9awc', 'object': 'chat.completion', 'search_info': [], 'function_call': {}, 'tool_calls': [{'type': 'function', 'function': {}}]} response_metadata={'token_usage': {'prompt_tokens': 36, 'completion_tokens': 21, 'total_tokens': 57}, 'model_name': 'ERNIE-Speed-8K', 'finish_reason': 'stop', 'id': 'as-iv6grn9awc', 'object': 'chat.completion', 'created': 1717174194, 'result': '你好,很高兴认识你!请问你有什么想要聊的或者需要我帮助的地方吗?我会尽力提供帮助和支持。', 'is_truncated': False, 'need_clear_history': False, 'usage': {'prompt_tokens': 36, 'completion_tokens': 21, 'total_tokens': 57}} id='run-a7ff5600-5962-40b8-b9ac-6168b85ee02d-0'

其中,content倒是比较多,关键注意观察tool_calls 部分

'tool_calls': [{'type': 'function', 'function': {}}]

果然没让你失望,免费的真的就是免费的,不支持Tool/Function Call

另外、可以先简单理解,tool是N个function的"合集"

那百度的这俩免费的model真无缘Tool/Function了么?

有解法,往后看...

  • 如果不支持bind_tools的话,我们可以自行编辑一份json格式的function,让LLM bind,请参考我之前写的这些内容

    AI菜鸟向前飞 — LangChain系列之十三 - 关于Tool的必知必会

    LangChain实战技巧之三:关于Tool的一点拓展

  • 已经实现"bind_tool"方法,即:让LLM知道工具,已经迈出一大步了,然后紧接着只需让LLM“聪明”的选择它(function)即可

可以尝试使用提示词(Prompt)的解法

prompt = ChatPromptTemplate.from_messages([("system",
"""
您是一名助理,可以使用以下工具。以下是工具的名称和说明:工具名称:greeting, 参数:name(str类型),此工具的用途说明:向朋友致欢迎语根据用户输入,返回要使用的工具的名称和输入。以包含 "name" 和 "arguments" 键的 JSON blob 形式返回响应。
"""),("user", "{input}")])chain = prompt | model | JsonOutputParser()chain.invoke("我是你的新朋友 —— Song榆钱儿")

我们用起来试试看

{'name': 'greeting', 'arguments': {'name': 'Song榆钱儿'}}

这虽然没执行函数,但这已经迈出一大步了,你往后看看 PS:LLM本身并不会执行任何函数,它只是完成了简单的交互逻辑

# 再来一个chain
tool_run_chain = prompt | model | JsonOutputParser() | (lambda x: x["arguments"]) | greeting
# 再看看效果
tool_run_chain.invoke("我是你的新朋友 —— Song榆钱儿")

效果如何,请君来看

你好啊, Song榆钱儿

这么做就将Model原本不支持Too/Function变成了“支持”

补充知识

# langchain提供了这样一个方法,很好用
from langchain.tools.render import render_text_description# 可以用它来替代提示词中的工具说明,如下所示
prompt = ChatPromptTemplate.from_messages(
[("system",
f"""
您是一名助理,可以使用以下工具。以下是工具的名称和说明:{render_text_description([greeting])}根据用户输入,返回要使用的工具的名称和输入。以包含 "name" 和 "arguments" 键的 JSON blob 形式返回响应。
"""),
("user", "{input}")] 
)

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

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

相关文章

基于LabVIEW虚拟示波器设计

随着计算机技术的发展,传统仪器开始向计算机化的方向发展。虚拟仪器是90年代提出的新概念。虚拟仪器技术的提出与发展,标志着二十一世纪自动测试与电子测量仪器领域技术发展的一个重要方向。所谓虚拟仪器,就是在通用的计算机平台上定义和设计…

TDR原理的介绍

目录 简介 简单定义 TDR测试原理 简介 时域和频域就像孪生兄弟一样,经常在测试测量领域同时出现,可谓是工程师们分析问题和解决问题的两大法宝。所以,在某些测试场景中,如果有时域信息的护法,咱们就能从时频域两个维…

【普通切换】【DC-based handover】【DAPS】协议栈分析

移动网络切换 移动通信中切换是保证终端业务的基本流程,而切换时延是终端(UE)不能与任何基站交互(传递)用户面数据包的最短时间。 在5G(NR)网络中当终端(UE)接收到切换命令时,将断开与源小区的连接向目标小区发起随机接入过程。在此期间终端(UE)的数据传…

牛客ONT45 距离是K的二叉树节点【中等 宽度优先遍历 Java/Go/PHP/C++】

题目 题目链接: https://www.nowcoder.com/practice/e280b9b5aabd42c9b36831e522485622 思路 图,队列 构件图,直接从target出发,扩展到第k层就是答案Java代码 import java.util.*;/** public class TreeNode {* int val 0;* …

架构设计之安全性属性深度剖析:从理论到实践的完美融合

文章目录 引言一、安全性属性的理论探讨1.1 定义说明1.2 安全原则1.3 安全模型1.4 安全机制 二、安全性属性的实践应用2.1 安全风险评估2.2 架构设计中的安全考虑2.3 技术手段和工具2.4 团队协作与沟通2.5 安全政策和流程2.6 合规性和标准2.7 持续监控和改进 三、理论与实践的融…

Python函数进阶

文章目录 1 函数多返回值2 函数多种传参方式2.1 位置参数2.2 关键字参数2.3 缺省参数2.4 不定长参数 3 匿名函数函数作为参数传递lambda匿名函数 1 函数多返回值 def test_return():return 1,2,3 x,y,z test_return() print(x) print(y) print(z)2 函数多种传参方式 2.1 位置参…

0基础认识C语言(理论+实操3)

所有籍籍无名的日子里 我从未看轻自己半分 小伙伴们,一起开始我们今天的话题吧 一、算法操作符 1.双目操作符 为何叫双目操作符呢?其实是因为我们进行加减乘除的时候,至少得需要两个数字进行这些运算,而这个数字就被称为操作数…

基于单片机的微型嵌入式温度测量仪的设计与实现分析

摘要 : 作为信息技术中重要的技术手段之一嵌入式单片机系统已经被应用到越来越多不同的行业领域中。如,各种手持监测设备、智能家电设备等。当前展开对单片机的微型嵌入式温度测量仪的设计和实现研究,从微型嵌入式单片机相关理论入手&#xf…

【实战教程】构建可复用的 Spring Boot starter 微服务组件

案例 Demo:https://gitee.com/regexpei/coding-trainee/tree/demo/20240526_starter 介绍 在 Spring Boot 中,starter 启动依赖就像一个“开箱即用”的工具箱,它包含了第三方组件的配置和依赖,让我们无需手动配置和添加这些组件。…

【多目标跟踪】《FlowMOT: 3D Multi-Object Tracking by Scene Flow Association》论文阅读笔记

0.论文 论文地址链接:https://arxiv.org/pdf/2012.07541v1 通过流的方式跟踪是一个比较新颖的点,所以这里比较关注运动跟踪,是如果做到流的跟踪来预测目标的位置以及ID绑定的。 FlowMOT的框架结构如下所示,本中会主要关注下运动跟踪、数据关联、ID分配、新生/消亡…

python替换占位符为变量,实现读取配置文件

文章目录 背景1、定义正则表达式2、替换变量占位符3、实现功能 背景 使用python编写小工具,有一个配置文件,希望实现类似shell命令的,定义变量并且使用${}或者$来引用。如果有好的建议欢迎讨论。 配置文件示例内容如下: D:\project\test\pr…

Arrays(操作数组工具类)、Lambda表达式

package exercise;import java.util.Arrays;public class ArraysDemo {public static void main(String[] args) {int[] arr {1, 2, 3, 4, 5};//将数组变成字符串System.out.println(Arrays.toString(arr));//二分查找法查找元素//细节1:1.数组必须是有序的 2.元素…

OpenCASCADE入门(2)——openCasCade7.6.0版本的exe方式安装,vs2017环境配置,编译和使用draw

3rd party Components | Open CASCADE Technology 目录 引出安装好vs2017和occt7.6设置环境变量 启动occt和编译关于custom.bat批处理文件双击运行 打开draw使用方式一:双击draw.bat批处理vs设置启动项 总结其他自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进…

路由器设置——隐藏SSID(隐藏WiFi名称)

参考来源: https://www.192ly.com/qiu-zhu/33315.htmlhttps://www.yunqishi.net/video/109743.html 一、什么是SSID? SSID是Service Set ldentifier的缩写,意思是服务集标识,简单来说SSID就是wifi的名字。 二、怎么隐藏SSID 将 开启SSI…

为什么要学习数据结构和算法

前言 控制专业转码学习记录,本科没学过这门课,但是要从事软件行业通过相关面试笔试基础还是要打牢固的,所以通过写博客记录一下。 必要性 1.越是厉害的公司,越是注重考察数据结构与算法这类基础知识 2.作为业务开发&#xff0c…

MMPose-RTMO推理详解及部署实现(上)

目录 前言1. 概述1.1 MMPopse1.2 MMDeploy1.3 RTMO 2. 环境配置3. Demo测试4. ONNX导出初探5. ONNX导出代码浅析6. 剔除NMS7. 输出合并8. LayerNormalization算子导出9. 动态batch的实现10. 导出修改总结11. 拓展-MMPose中导出ONNX结语下载链接参考 前言 最近在 MMPose 上看到了…

【NOIP2018普及组复赛】题2:龙虎斗

题2:龙虎斗 【题目描述】 轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 n n n 个兵营(自左至右编号 1 ∼ n 1∼n 1∼n),相邻编号的兵营之间相隔 1 1 1 厘米,即棋…

【Python从入门到进阶】56、Mysql防止SQL注入及ORM库简化操作

接上篇《55、使用Python轻松操作Mysql数据库》 上一篇我们讲解了Mysql的基本链接和增删改查,本篇我们来介绍链接Mysql时参数化查询与防止SQL注入以及使用ORM(对象关系映射)库简化操作的内容。 一、参数化查询与防止SQL注入 在数据库操作中&…

雄鹰只属于天空

雄鹰只属于天空 成大事者,必有人生至暗时刻之经历,高处坠落折戟沉沙,在孤立无援时,世态炎凉人情冷落,饱经苦楚滋味,所有的热情关系一夜冰封,冷嘲热讽袖手旁观,落井下石四面楚歌&…

互联网简史-分久必合,合久必分

六一儿童节,给孩子们讲讲互联网的历史。 任何当代技术都是古老技术的重组,这是真的。我从电话网络开始,两幅图完事。电波可以承载语音作为最开始,后面的事自然而然: 说实话,网络这种事,它的 …