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

本文主要是介绍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}")] 
)

这篇关于LangChain实战技巧之四:当模型(Model)不支持Tool/Function的解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022820

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Oracle Scheduler任务故障诊断方法实战指南

《OracleScheduler任务故障诊断方法实战指南》Oracle数据库作为企业级应用中最常用的关系型数据库管理系统之一,偶尔会遇到各种故障和问题,:本文主要介绍OracleSchedul... 目录前言一、故障场景:当定时任务突然“消失”二、基础环境诊断:搭建“全局视角”1. 数据库实例与PDB状态2

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

录音功能在哪里? 电脑手机等设备打开录音功能的技巧

《录音功能在哪里?电脑手机等设备打开录音功能的技巧》很多时候我们需要使用录音功能,电脑和手机这些常用设备怎么使用录音功能呢?下面我们就来看看详细的教程... 我们在会议讨论、采访记录、课堂学习、灵感创作、法律取证、重要对话时,都可能有录音需求,便于留存关键信息。下面分享一下如何在电脑端和手机端上找到录音功能

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分