首页 > 其他分享 >第三期 Plugins & Function Calling

第三期 Plugins & Function Calling

时间:2024-07-16 23:52:35浏览次数:13  
标签:Function function name messages Calling Plugins type response description

大模型的缺陷:

  • 没有最新消息:训练周期长且昂贵,GPT3.5/4的知识截至2021-9
  • 没有真逻辑:表现出的逻辑和推理,是训练文本的统计规律,不是真正的逻辑

Plugins

订机票、数学计算、日程提醒...

插件选择&使用

插件的原理

通过prompt判断是否应该调用插件

失败

  • 使用门槛高:用户需要知道每个插件是做什么的,学习成本大;插件数量多,用户不知道哪个插件最合适,此外只能手动选3个plugin
  • Sam Altman:比起应用程序位于gpt中,gpt更应该在应用程序中(不应该是干什么事都打开gpt,而是gpt无所不在)
  • 我认为插件不够灵活和精准,你无法保证大模型生成的参数就是规范的,人工介入一些会更好

Function Calling

目的

当gpt能力不足时,通过自定义的function补足(调哪个function、function的输入输出格式可以由gpt完成)

原理

示例

实例1

实例2

prompt = "6 * 3 / (4+2) = ?"
# prompt = "桌上有 2 个苹果,四个桃子和 3 本书,水果比书多多少?"
# prompt = """
# 让我们一步步计算:小明在一家水果店买水果。他买了X斤苹果,每斤10元;4斤香蕉,每斤5元;
# 和3斤橙子,每斤8元。他手头有100元。请问小明买完这些水果后,他还剩下多少钱?
#"""

messages = [
    {"role": "system", "content": "你是一个小学数学老师,你要教学生四则混合运算"},
    {"role": "user", "content": prompt}
]

response = get_completion(messages)
messages.append(response)  # 把大模型的回复加入到对话中。非常重要!
print(response)
while (response.get("function_call")):
    # 是否要调用 sum
    args = json.loads(response["function_call"]["arguments"])
    function_name = response["function_call"]["name"]

    if (function_name == "sum"):
        result = sum(args["numbers"])
    elif (function_name == "subtract"):
        result = args["a"] - args["b"]
    elif (function_name == "multiply"):
        result = 1
        for number in args["numbers"]:
            result *= number
    elif (function_name == "divide"):
        result = args["a"] / args["b"]
    else:
        result = "Unknown function"

    print(result)
    messages.append(
        {"role": "function", "name": function_name, "content": str(result)})
    response = get_completion(messages)
    messages.append(response)  # 把大模型的回复加入到对话中
    print(response)

print(response.content)
View Code
def get_completion(messages, model="gpt-4"):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0,  # 模型输出的随机性,0 表示随机性最小
        functions=[  # 用 JSON 描述函数。可以定义多个,但是只有一个会被调用,也可能都不会被调用
            {
                "name": "sum",
                "description": "计算数组中所有数字的和",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "numbers": {
                            "type": "array",
                            "items": {
                                "type": "number",
                                "description": "必须是数值类型"
                            }
                        }
                    }
                },
            },
            {
                "name": "subtract",
                "description": "计算 a - b 的值",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "a": {
                            "type": "number",
                            "description": "被减数,必须是数值类型"
                        },
                        "b": {
                            "type": "number",
                            "description": "减数,必须是数值类型"
                        }
                    }
                },
            },
            {
                "name": "multiply",
                "description": "计算数组中所有数字的积",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "numbers": {
                            "type": "array",
                            "items": {
                                "type": "number",
                                "description": "必须是数值类型"
                            }
                        }
                    }
                },
            },
            {
                "name": "divide",
                "description": "计算 a/b 的值",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "a": {
                            "type": "number",
                            "description": "被除数,必须是数值类型"
                        },
                        "b": {
                            "type": "number",
                            "description": "除数,必须是数值类型"
                        }
                    }
                },
            }
        ],
    )
    return response.choices[0].message
View Code
{
  "role": "assistant",
  "content": null,
  "function_call": {
    "name": "multiply",
    "arguments": "{\n  \"numbers\": [6, 3]\n}"
  }
}
18
{
  "role": "assistant",
  "content": null,
  "function_call": {
    "name": "sum",
    "arguments": "{\n  \"numbers\": [4, 2]\n}"
  }
}
6
{
  "role": "assistant",
  "content": null,
  "function_call": {
    "name": "divide",
    "arguments": "{\n  \"a\": 18,\n  \"b\": 6\n}"
  }
...
  "role": "assistant",
  "content": "6 * 3 / (4+2) = 3"
}
6 * 3 / (4+2) = 3

  

标签:Function,function,name,messages,Calling,Plugins,type,response,description
From: https://www.cnblogs.com/ssyfj/p/18306361

相关文章

  • 2021 ICPC 网络赛 第二场 L Euler Function(势能线段树,欧拉函数,状态压缩)
    2021ICPC网络赛第二场LEulerFunction题意给定序列,定义两个操作\(l,r,x\)对区间\([l,r]\)的数乘\(x\)\(l,r\)求\(\sum\phi{a}_{i}\)思路注意欧拉函数的性质,若\(i\bmodp=0\),\(\phi(i*p)=p*\phi(i)\),否则\(\phi(i*p)=(p-1)*\phi(i)\)因为\(x,w\)的......
  • Azure Function 时区设置
    一,引言AzureFunction上的默认使用UTC运行程序,我们在获取时间,或者通过时间执行某些逻辑时,返回UTC时间,导致业务数据不正常,由于AzureFunction是微软提供的IaaS托管服务,我们无法登录服务器来修改时区,那么我们今天将来实践操作,如何通过配置达到更改AzureFunction时区......
  • [CF1538F] Interesting Function 的题解
    题目大意给定两个正整数\(l,r\),将\(l\)不断加\(1\)直到\(l=r\),求出这一过程中\(l\)发生变化的位数总数。\(1\lel<r\le10^9\)。思路假设从\(l\)处理到\(r\)变化的次数为\(f(l,r)\)。因为直接求解出\(f(l,r)\)十分困难,所以可以通过求出\(f(0,l)\)......
  • [20240618]Oracle C functions annotations.txt
    [20240618]OracleCfunctionsannotations.txt--//网站orafun.info可以查询oraclecfunctions.CreatedbyFritsHooglandwithalittlehelpfromKamilStawiarski.--//可以通过它了解oracle内部C函数.实际上可以直接下载相关文件,在本地使用.https://gitlab.com/FritsHoog......
  • IDEA出错:Cannot resolve plugin org.apache.maven.plugins:maven-install-plugin:3.1.
    问题阐述:无论是怎么创建,都会报这个错,并且项目结构也不完整。这个问题困扰了我一晚上,为了解决它,浏览器问了个遍。网上说的最多的解决方案就是 maven 安装的路径和和本地仓库的目录必须要保持一致(不一致就会出现这个问题)。打开File->Settings-> 解决办法:这里主要......
  • Fatal error: Call to a member function read() on a non-object in 错误解决方法(织
    大家都说这是因为织梦代码优化不好怎么着怎么着的,其实有一些是因为这个原因,但不是完全因为这个。dede登录后台卡死原因分析登录完后台,加载的分别为顶部、左侧、右侧内容三个部分。顶部只是简单的查询一下权限不会卡、左侧也是简单的查询了一下也不会卡,那么原因就是......
  • Fatal error: Call to a member function read() on a non-object in 错误解决方法(织
    大家都说这是因为织梦代码优化不好怎么着怎么着的,其实有一些是因为这个原因,但不是完全因为这个。dede登录后台卡死原因分析登录完后台,加载的分别为顶部、左侧、右侧内容三个部分。顶部只是简单的查询一下权限不会卡、左侧也是简单的查询了一下也不会卡,那么原因就是......
  • [1031] re.escape() function in re of Python
    Certainly!Let’sunravelthemysteriesofthere.escape()functioninPython.......
  • 【大模型应用开发 动手做AI Agent】什么是Function Calling
    【大模型应用开发动手做AIAgent】什么是FunctionCalling1.背景介绍1.1问题的由来在人工智能和机器学习领域,函数调用(FunctionCalling)是一个基础且核心的概念。它指的是程序中一个函数被另一个函数、程序或库调用的过程。函数调用允许我们组织代码结构,复用代码片段,以......
  • 算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」今日216/10000抱个拳,送个礼神经网络设计与选择参数初始化与优化学习率调整与正则化数据预处理与标准化训练过程与监控特定模型技巧其他训练技巧1.神经网络设计......