当前位置:   article > 正文

chatgpt Function calling(函数调用)功能讲解和应用示例

function calling

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3

更新内容

OpenAI 6月13号发布了一个重大更新。可以访问官网获取详细介绍。这次更新了几方面的内容:

1、API调用的价格降低了

  • 嵌入模型(Embeddings)的成本降低了 75%,现在价格是1K tokens 0.0001 美元
  • 输入token的成本降低 25%,现在价格是1K tokens 0.0015, 输出 1K tokens 0.002

2、加入新模型

  • 3.5模型
模型名说明
gpt-3.5-turbo-16k16,384 tokens
gpt-3.5-turbo-16k-061316,384 tokens
gpt-3.5-turbo4,096 tokens
gpt-3.5-turbo-06134,096 tokens
  • 4.0模型
模型名说明
gpt-48,192 tokens
gpt-4-06138,192 tokens
gpt-4-32k32,768 tokens
gpt-4-32k-061332,768 tokens
  • gpt-3.5-turbo-16k和gpt-3.5-turbo-16k-0613 上下文是原来的4倍,味着该模型现在可以在单个请求中支持约 20 页文本。
  • gpt-4-32k-0613和gpt-4-0613

3、新增了一个功能 “Function calling”(函数调用)

  • 本文主要讲解Function calling如何使用

一、Function calling是什么?为什么使用Function calling?

  • Function calling是什么

Function calling是可以让我们用自己的函数当作调用chatgpt的参数,在函数中我们可以做任何事情,例如获取网络上的数据,查询自己的数据库等。

  • 为什么使用Function calling

比如当我们问chatgpt:上海今天得天气怎么样?他得回答是:很抱歉,作为一个语言模型,我无法提供实时的天气信息…为什么这样呢,因为chatgpt没有实时地网络数据,而有了Function calling我们可以在函数中调用查询天气的接口返回给chatgpt,chatgpt按照我们的需求把数据转为自然语言。如果还不理解通过下面的示例相信你就明白了。当然这只是一个最基础最简单的应用场景,实际会有更多更复杂的应用场景

如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3

二、如何使用Function calling

我们通过一个简单的示例来讲解如何使用Function calling:

功能:我自己有一个数据库其中有学生表,记录每个学生的成绩,我现在需要和chatgpt交流 问他其中某个学生的成绩怎么样。

	question="你觉得小白的成绩怎么样?"
    response = openai.ChatCompletion.create(

        model="gpt-3.5-turbo-0613",
        messages=[{"role": "user", "content": question}],
        functions=[
            {
                "name": "get_scrore",
                "description": "通过学生的姓名,查询学生的成绩",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "name": {
                            "type": "string",
                            "description": "学生的姓名",
                        },
                    },
                     "required": ["name"],
                },
            }
        ],
        function_call="auto",
    )

    message = response["choices"][0]["message"]
    name = eval(message['function_call']['arguments']).get("name")

    print(name)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

chatgpt api基础可以看我前几篇文章的介绍,这里只讲新增的functions参数。

functions其实就是对函数的说明或者说是描述,其实没有实际的功能。只是用来描述我的函数名

是什么 函数参数是什么 函数作用是什么,事例中只有一个函数,实际应用可能有几十上百个函

数,清楚的描述可以让chatgpt更好的识别我们调用的功能或者需要的数据从而返回给我们需要的

数据。

参数名说明
name函数名
description函数描述
parameters函数参数以及参数的名称描述
required哪些参数是必须的

message 的内容如下

{
  "content": null,
  "function_call": {
    "arguments": "{\n\"name\": \"\u5c0f\u767d\"\n}",
    "name": "get_scrore"
  },
  "role": "assistant"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

name=小白

通过上面的代码我们得到了问题中需要查询的学生的姓名和调用的方法

下面就可以去调用GPT接口获取我们需要的内容了。

这里是模拟读取数据库中的学生表

def get_score(name):
    # 用一个字典存储姓名和成绩对应关系
    scores = {"小明": 90, "小红": 80, "小白": 59}
    score = {
        "name": name,
        "score": scores[name],
    }

    return json.dumps(score)


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
    if message.get("function_call"):
        function_name = message["function_call"]["name"]

        function_response = get_score(name)
        print(function_response)

        # Step 4, send model the info on the function call and function response
        second_response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-0613",
            messages=[
                {"role": "user", "content": question},
                message,
                {
                    "role": "function",
                    "name": function_name,
                    "content": function_response,
                },
            ],
        )
        print(second_response['choices'][0]['message']['content'])
        return second_response
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

返回的内容是:根据我获取的数据,小白的成绩是59分。到此这个事例就完成了。如果你想让返

回结果有一个分级,比如60以下是差 可以通过修改get_score实现,比如加入

        "grade_levels" : {
            "成绩好": [90, 100],
            "成绩一般": [60, 89],
            "成绩差": [0, 59]
        }
  • 1
  • 2
  • 3
  • 4
  • 5

这样返回的结果是:根据小白的成绩,他的得分为59分。根据成绩水平划分,小白的成绩属于成

绩差的范围。

至此我们要的效果就实现了


总结

结合上面的示例你应该对Function calling的用法和用途有所了解了,如果还是不明白可以私信,或者联系我

如果有问题可以联系我**:https://gitee.com/xiaoyuren/gpt3

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/200075
推荐阅读
相关标签
  

闽ICP备14008679号