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

news2024/11/24 16:04:05

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个没有获取到相关信息,直接返回正常交互回应。 

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

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

相关文章

【提交ACM出版 | EIScopus检索稳定 | 高录用】第五届大数据与社会科学国际学术会议(ICBDSS 2024,8月16-18)

第五届大数据与社会科学国际学术会议(ICBDSS 2024)将于2024年08月16-18日在中国-上海隆重举行。 ICBDSS会议在各专家教授的支持下,去年已成功举办了四届会议。为了让更多的学者有机会参与会议分享交流经验。本次会议主要围绕“大数据”、“社…

在线字节大端序小端序转换器

具体请前往:在线字节大端序小端序转换器

Linux kernel 与 设备树

Linux kernel 与 设备树 1 介绍1.1 概述1.2 发展历程1.3 各版本发布时间及特色1.4 Linux 单内核1.5 Linux 内核网址1.6 NXP 官方镜像与 野火 鲁班猫镜像的区别 2 Linux 内核组成2.1 进程管理2.2 内存管理2.3 文件系统2.4 设备管理2.5 网络功能 3 Linux 内核编译3.1 编译 Kernel…

Linux上使用 git 命令行

在 Github或者 gitee 注册账号 这个比较简单 , 参考着官网提示即可 . 需要进行邮箱校验.以下以创建Github为例。 创建项目 1. 登陆成功后 , 进入个人主页 , 点击下方的 create a new repository 按钮新建项目 2. 在创建好的项目页面中复制项目的链接 , 以备接下来进行下…

pandas数据分析(1)

pandas,即Python数据分析库(Python data analysis library) DataFrame和Series DataFrame(数据帧)和Series(序列)是pandas的核心数据结构。DataFrame的主要组件包含索引、列、数据。DataFrame和…

使用matlab开发stm32总结,stm32-matlab常见的问题处理以及报错合集

1,问题:本来是好的,突然编译运行报错,说是确少包, 解决方案:重启以后好了 2,有完美的马鞍波,为什么不能够转动呢? 原因是我这里模型的问题,我计算出来的是占…

访客(UV)、点击量(PV)、IP、访问量(VV)概念

1、https://www.cnblogs.com/QingPingZm/articles/13855808.htmlhttps://www.cnblogs.com/QingPingZm/articles/13855808.html

不能创建第三个变量,实现两个数的交换

目录 常规实现两个数的交换(如:交换变量a和变量b) 方法一:加减法 方法二:异或操作符 常规实现两个数的交换(如:交换变量a和变量b) 创建一个临时变量tmp,先将其中一个…

Java代码基础算法练习-计算被 3 或 5 整除数之和-2024.06.29

任务描述: 计算 1 到 n 之间能够被 3 或者 5 整除的数之和。 解决思路: 输入的数字为 for 循环总次数,每次循环就以当前的 i 进行 3、5 的取余操作,都成立计入总数sum中,循环结束,输出 sum 的值 代码示例&…

MySQL高级-SQL优化- order by 优化(尽量使用覆盖索引、注意联合索引创建的规则、增大排序缓冲区大小)

文章目录 0、order by优化原则1、Using filesort2、Using index3、连接数据库4、查看索引5、删除索引6、按照年龄进行排序7、执行计划 order by age8、执行计划 order by age,phone9、创建联合索引 (age,phone)10、再次执行计划 order by age11、再次执行计划 order by age,pho…

仓库管理系统18--出库管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现。 1、创建用户控件OutStoreView <UserControl x:Class"West.StoreMgr.View.OutStoreView"xmlns"http://sche…

C++【函数重载】【附有C语言为何不能实现函数重载的讲解】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …

【股指期权投教】一手股指期权大概多少钱?

一手股指期权的权利金大概在几千人民币左右&#xff0c;如果是作为期权卖方还需要另外缴纳保证金的。国内的股指期权有三种&#xff0c;沪深300、上证50、中证1000股指期权&#xff0c;每点合约人民币100 元。 期权合约的价值计算可以通过此公式得出&#xff1a;权利金的支付或…

C++继承(2)

目录 1.如何实现一个不可以被继承的类 2.继承和友元函数 3.继承和静态成员变量 4.菱形&#xff08;虚拟&#xff09;继承 &#xff08;1&#xff09;单继承和多继承 &#xff08;2&#xff09;菱形继承 &#xff08;3&#xff09;菱形继承的特殊情况 &#xff08;4&…

Unity2D - 状态机(State Machine)详解

1. 状态机概述 在角色的生成中&#xff0c;由于事件的不同&#xff0c;动作的不同&#xff0c;角色会处于不同的状态中。例如对战冒险游戏&#xff0c;面临Boss的攻击&#xff0c;角色会受到例如中毒&#xff0c;恐惧等Debuff效果&#xff0c;若单纯的在一个脚本中使用if等语句…

Linux Swap

Swap: 页面换出&#xff1a;就是在 Swap 机制下&#xff0c;当内存资源紧张时&#xff0c;内核就会把不经常使用的这些匿名页中的数据写入到 Swap 分区或者 Swap 文件中。从而释放这些数据所占用的内存空间。 页面换入&#xff1a;就是当进程再次访问那些被换出的数据时&…

中医对于帕金森病的病因和症状有何解释?

中医对帕金森病的病因解释 中医认为帕金森病的病因复杂多样&#xff0c;涉及多个方面。首先&#xff0c;精神因素如长期的情绪抑郁、悲伤、忧虑等精神不畅可能导致气机郁结&#xff0c;气血运行障碍&#xff0c;进而影响脑部神经系统的功能。其次&#xff0c;肝郁气滞也被认为…

怎么把amr格式转换为mp3格式?这6个mp3格式转换方法不容错过!

怎么把amr格式转换为mp3格式&#xff1f;AMR&#xff08;自适应多速率&#xff09;是一种音频编码格式&#xff0c;通常用于存储基于语音的文件&#xff0c;例如语音记录和VoIP应用&#xff0c;在3G移动设备上使用。它具有非常高的压缩比&#xff0c;导致声音质量较差。早期的安…

【Python机器学习】分类向量——数字可以编码分类变量

在adult数据集的例子中&#xff0c;分类变量被编码为字符。一方面可能会有拼写错误&#xff0c;但另一方面&#xff0c;它明确的将一个变量标记为分类变量。无论是为了便于存储还是因为数据的手机方式&#xff0c;分类变量通常被编码为整数。 假设adult数据集中的人口普查数据…

使用shell脚本编写监控系统资源(CPU,内存,磁盘)使用情况

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月20日16点30分 &#x1f004;️文章质量&#xff1a;95分 目录 ————前言———— 1.本章目标 2.编写脚本 1.获取内…