【AI提升】AI利器Tool Call/Function Call(一):langchain+ollama+llama3/qwen2

1、使用AI的一个常用场景就是,接收人类的语言,识别人类的意图,最终进行相关的业务处理,这就是设计Tool Call / Function Call的初衷。 

2、现在一般都说Tool Call,以前常叫Function Call,不要纠结。

一、安装环境

1.1 安装ollama

参考:【AI基础】大模型部署工具之ollama的安装部署-第一步:下载安装ollama

1.2 部署大模型

参考:【AI基础】大模型部署工具之ollama的安装部署-第二步:部署安装大模型

如果使用llama3

> ollama pull llama3

如果使用qwen2:

> ollama pull qwen2

1.3 安装langchain

> pip install -q langchain_experimental
  • -q 静默安装,避免输出大量提示信息。

二、示例

这里以调用天气信息为例,毕竟,大家都用的这个例子。

1、使用Tool Call / Function Call的大致流程,先声明几个(1个或N个)业务函数,然后把它们绑定到大模型上,当与大模型交互时,大模型会识别是正常的交互还是需要业务调用,如果有业务调用,则返回识别出来的业务函数相关信息(函数名,参数列表),这样我们就可以调用业务函数进行处理,具体的过程在下面的代码中体现。

2、这里要注意,大模型只做识别,具体的业务函数是我们自己调用的。

2.1 新建python文件

假设文件存放 examples/dev_fc.py,当然也可以用jyputerlab来一步一步运行(请参考:【AI基础】大模型部署工具之ollama的安装部署 - 通过jupyterlab来运行)。

# 引入langchain中的function call
from langchain_experimental.llms.ollama_functions import OllamaFunctions

# 第一步:从ollama的接口获取大模型
# 1.1 如果使用大模型llama3
# model = OllamaFunctions(model='llama3', base_url='http://localhost:11434', format='json')
# 1.2 如果使用大模型qwen2
model = OllamaFunctions(model='qwen2', base_url='http://localhost:11434', format='json')

# 第二步:定义业务处理函数
# 2.1 具体的业务处理函数,可以多个
def get_current_weather(city):
    print('getting weather')
    if 'beijing' in city.lower():
        return 'good'
    elif 'paris' in city.lower():
        return 'not so good'
    else:
        return 'what?'


# 2.2 业务处理函数映射,方便后续调用
fn_map = {
    'get_current_weather': get_current_weather
}

# 第三步:通过业务处理函数描述,把业务函数绑定到大模型上
llm_with_tool = model.bind_tools(
    tools=[
        {
            'name': 'get_current_weather',
            'description': 'Get the current weather in a given location',
            'parameters': {
                'type': 'object',
                'properties': {
                    'city': {
                        'type': 'string',
                        'description': 'The city and state, e.g. San Francisco, CA',
                    }
                },
                'required': ['city'],
            },
        },
    ]
)


# 第四步:大模型处理输入并确定需要调用的业务函数,并实际调用业务函数
def chat_handler(chat_str):
    print("====================")
    print(f"user: {chat_str}")
    print("--------------------")
    ai_msg = llm_with_tool.invoke(chat_str)

    if ai_msg.tool_calls:
        fn_name = ai_msg.tool_calls[0]['name']
        fn_param = ai_msg.tool_calls[0]['args']
        print("ai:......")
        print(f"调用函数:{fn_name},参数:{fn_param}")
        res = fn_map[fn_name](**fn_param)
        print(f"函数返回值:{res}")
    else:
        print(ai_msg.content)
    return


# 第五步:演示
# 5.1 演示查询三个地区的天气情况
chat_handler('how is the weather in Beijing today')
chat_handler('how is the weather in Paris today')
chat_handler('how is the weather in Singapore today')

# 5.2 演示一个正常的聊天交互
chat_handler('who are you')

这里注意看第一步获取大模型,

如果是llama3:

model = OllamaFunctions(model='llama3', base_url='http://localhost:11434', format='json')

如果是qwen2:

model = OllamaFunctions(model='qwen2', base_url='http://localhost:11434', format='json')

 2.2 运行python文件

运行命令“ python examples/dev_fc.py ”:

从上图可以看出,第1,2,3个交互,AI识别出了业务回调并执行了正确的业务函数,第4个没有获取到相关信息,直接返回正常交互回应。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unable to get expected results using BM25 or any search functions in Weaviate

题意:使用 Weaviate 中的 BM25 或任何搜索函数都无法获得预期结果 问题背景: I have created a collection in Weaviate, and ingested some documents into the Weaviate database using LlamaIndex. When I used the default search, I found that it…

【管理咨询宝藏137】RB大型卡车集团供应链体系优化设计方案中期汇报

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏137】RB大型卡车集团供应链体系优化设计方案中期汇报 【格式】PDF版本 【关键词】罗兰贝格、供应链管理、运营提升 【核心观点】 - 甲方采取销售…

高精度除法的实现

高精度除法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移步至我的这篇博客:高精度加法计算的实现 在这里就不再详细讲解,只讲解主体过程qwq 主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 …

统信系统实战(2):安装redis

在系统中未发现redis,需要安装。 网上资料上说需要去redis官网下载,但是发现不管是github账号还是自己注册的sso账号,都各种提示有问题。 继续找资料,发现可以直接通过下载链接下载,指令如下: wget http…

django学习入门系列之第三点《position》

文章目录 fixed应用案例 固定窗口案例 对话框relative与absolute往期回顾 CSS 中的 position 属性用来设置元素在页面中的位置,通过该属性您可以把任何属性放置在任何您认为合适的位置。 ​   可以简单的理解成,写上这个之后,他不管你前面…

52、基于K 均值聚类实现基于颜色的分割(matlab)

1、K 均值聚类实现基于颜色的分割原理及流程 K 均值聚类是一种常用的聚类算法,通过将数据点分配到 K 个簇中,每个簇的中心代表簇的平均值来实现聚类的目的。 基于颜色的分割的原理是利用像素的颜色信息来对图像进行分割。首先需要将图像的每个像素点表…

【C语言】--操作符详解

🌭个人主页: 起名字真南 🍿个人专栏:【数据结构初阶】 【C语言】 目录 1 算术操作符1.1 和 -1.2 *1.3 /1.4 % 2 赋值操作符 :2.1 复合赋值符 3 单目操作符3.1 和- - 4 强制类型转换5 printf 和 scanf5.1 printf5.1.1 基本用法5.1.2 占位符5.…

AI 音乐生成器 MusicGPT,同声传译StreamSpeech!Web短视频平台Sharine

AI 音乐生成器 MusicGPT,同声传译StreamSpeech!Web短视频平台Sharine。 项目简介 MusicGPT 是一款应用程序,允许在任何平台上以高性能方式本地运行最新的音乐生成 AI 模型,而无需安装 Python 或机器学习框架等严重依赖项。 目前它仅支持 Me…

MySQL中的存储引擎

介绍 存储引擎就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以称为表类型(即一个数据库下的表可以选择不同的存储引擎)。 1. 如何查看一个…

一些指标的学习

1.平均倒数排名(MRR) 1.定义 MRR 是衡量检索系统返回的结果列表中第一个相关结果位置的指标。具体来说,它是所有查询倒数排名的平均值。 2.计算步骤 对每个查询,找到第一个正确答案在结果列表中的排名 𝑅&#x1d44…

Python数据库数据的读取

数据库数据的读取 绝大多数公司都会选择将数据存入数据库中,因为数据库既可以存放海量数据,又可以非常便捷地实现数据的查询。本节将以MySQL和SQL Server为例,教会读者如何使用Pandas模块和对应的数据库模块(分别是pymysql模块和…

金融科技:重塑用户体验,驱动满意度飙升

随着科技的飞速发展,金融科技(FinTech)已经深入到我们生活的每一个角落,从日常支付到投资理财,再到跨境汇款,它都在悄无声息地改变着我们的金融行为。而在这背后一个不可忽视的驱动力就是金融科技对用户体验…

短视频视频配:成都柏煜文化传媒有限公司

短视频视频配:​艺术与技术的完美融合 在短视频盛行的当下,一个优秀的短视频作品不仅仅依赖于精彩的内容,更需要在视频配上做足功夫。视频配,作为短视频的重要组成部分,涵盖了音效、配乐、字幕等多个方面,…

Camera Raw:编辑 - 曲线

Camera Raw “编辑”模块中的曲线 Curve面板提供了曲线这一强大的工具,通过精确控制亮度和对比度,以及调整红、绿、蓝通道的曲线,可以显著提升图像的视觉效果和色彩表现。这些调整工具为摄影师和图像编辑者提供了丰富的创意可能性&#xff0c…

ORB-SLAM2同OpenMVS实现三维重建

ORB-SLAM2 位姿导出 Note: 为与OpenMVS进行对接本次进对ORB-SLAM2进行部分修改,使之可以为 OpenMVS提供稀疏点云、关键帧的位姿、内参,以及稀疏点云在各个View 中的可见性。 主要更改如下 . 在Map文件下增添如下函数 public: void Save(const string &a…

Vue+Proj4Leaflet实现地图瓦片(Nginx代理本地地图瓦片为网络url)加载并实现CRS投影转换(附资源下载)

场景 Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件): Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件)_offline map maker-CSDN博客 Leaflet快速入门与加载OSM显示地图: Leaflet快速入门与…

spring aop 初探

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNecessary 分析JDK动态代理 生成的代理对象 构造函数,入参为 InvocationHandler public com.sun.proxy.$Proxy164(java.lang.reflect.InvocationHandler) 生成动态代理Class对象&…

Android 遥控器

遥控器源码 import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RadialGradient; import android.graphics.Region; import android.g…

JavaScript(2)——输入输出和执行顺序

目录 JS的输入输出语法 输出: 输入 JS的代码执行顺序 字面量 JS的输入输出语法 输出: document.write(内容)alert(内容) 页面弹出警告框console.log(内容) 控制台输出语法,程序员调试使用 作用:向body输出内容 注意&…

Node.js简介

一:Node.js简介 Node.js是一个跨平台的JavaScript运行环境,使开发者可以搭建服务器端的JavaScript应用程序 作用:使用Node.js编写服务器端程序 编写数据接口,提供网页资源浏览功能有利于前端工程化,可以集成各种开发…