首页 > 其他分享 >GPT 中的函数调用(function call)是什么?

GPT 中的函数调用(function call)是什么?

时间:2024-02-05 21:56:36浏览次数:32  
标签:function glm 函数调用 multiply Gemini GPT response 函数

在 OpenAI ChatGPT API 和 Google Gemini API 中我们可以看到函数调用的功能。这个功能是做什么用的?下面大概讲解。

Google Gemini API 函数调用 一节中的内容为例,该章节举了一个例子:

大语言模型(LLMs)往往无法进行准确的数学运算。比如说,给 Gemini 两个数 \(a\) 和 \(b\),让它计算 \(a \times b\) 的值。Gemini 给出的值往往和实际计算值有所出入。

model = genai.GenerativeModel('gemini-pro')
chat = model.start_chat()

a = 2312371
b = 234234

response = chat.send_message(
    f"What's {a} X {b} ?"
)
print(response.text)

Gemini 给出的值是:

549899573314

而 \(a \times b\) 的实际值是 541635908814,Gemini 的计算并不正确。

我们会想:既然 Gemini 算不正确,但是这种小事我们用 Python 就能算正确了呀。能不能让 Gemini 像我们一样使用 Python 来进行计算呢?

答案是可以。

只要我们在本地定义好 Gemini 需要调用的函数,再向 Gemini 声明我们为它定义了哪些函数、函数的功能是什么,以及函数的参数有哪些,Gemini 就可以在它认为需要调用这些函数的时候,以对话的形式向我们请求调用这些函数。

比如说,我们希望 Gemini 的乘法运算能更准确一点,于是我们为它定义一个乘法函数:

def multiply(a, b):
    return a * b

我们还要告诉 Gemini 我们为它定义了 multiply 这个函数,用于计算两个数的乘积,并且它需要两个数字参数 ab

calculator = glm.Tool(
    function_declarations=[
      # 在这里进行函数声明
      glm.FunctionDeclaration(
        name='multiply',  # 函数名
        description="Returns the product of two numbers.",  # 功能描述
        # 在这里进行参数声明
        parameters=glm.Schema(
            type=glm.Type.OBJECT,
            properties={
                # 需要两个参数 a 和 b,类型为 NUMBER
                'a':glm.Schema(type=glm.Type.NUMBER),
                'b':glm.Schema(type=glm.Type.NUMBER)
            },
            required=['a','b']  # 声明必要参数,这里 a 和 b 都是必要的
        )
      )
    ])

这样,Gemini 就知道了我们为它准备了一个函数 multiply,用于乘法运算。

现在,我们再次询问 Gemini \(a \times b\) 的值:

model = genai.GenerativeModel('gemini-pro', tools=[calculator])
chat = model.start_chat()

a = 2312371
b = 234234

response = chat.send_message(
    f"What's {a} X {b} ?",
)

Gemini 在分析完我们的问题之后发现它要计算 a \times b 的值,并且还发现我们已经为它定义了一个函数 multiply 用于乘法运算。所以,它在生成回答之前,会先向我们请求调用 multiply 这个函数。我们在 response.candidates 这个属性中可以看到它请求调用的函数名:

response.candidates
[index: 0
content {
  parts {
    function_call {
      name: "multiply"
      args {
        fields {
          key: "b"
          value {
            number_value: 234234
          }
        }
        fields {
          key: "a"
          value {
            number_value: 2312371
          }
        }
      }
    }
  }
  role: "model"
}
finish_reason: STOP
]

可以看到,在 function_call 属性中,它请求了 multiply 这个函数,并且给出了函数的参数 ab

接下来,我们只需在本地为它执行 multiply 这个函数,并把函数的返回值传递给它即可:

fc = response.candidates[0].content.parts[0].function_call  # 获取 Gemini 请求的函数调用相关信息
if fc.name == 'multiply':  # 判断函数调用的名字是否为 multiply
    result = mutiply(fc.args['a'], fc.args['b'])  # 执行函数调用

# 最后,将函数调用的结果传递给 Gemini
response = chat.send_message(
    glm.Content(
    parts=[glm.Part(
        # 在这里传入函数调用的结果
        function_response = glm.FunctionResponse(
          name='multiply',
          response={'result': result}
        )
    )]
  )
)

标签:function,glm,函数调用,multiply,Gemini,GPT,response,函数
From: https://www.cnblogs.com/Undefined443/p/18008885

相关文章

  • ChessFunctions+ActiveXControl+SharedAddIn三合一【Office和VBA中呈现中国象棋】
    本软件由三个项目构成,各自下载链接如下:ChessFunctions链接:https://pan.baidu.com/s/11pMnmd28nHtpTGCU9rwNHg提取码:1234ChessFunctions的帮助文件链接:https://pan.baidu.com/s/1uxJYx8gOd8sNEBlda3onnA提取码:1234ActiveXControl链接:https://pan.baidu.com/s/1CTLcXlQgZaD1_av......
  • 文心一言 VS 讯飞星火 VS chatgpt (194)-- 算法导论14.3 2题
    二、用go语言,改写INTERVAL-SEARCH的代码,使得当所有区间都是开区间时,它也能正确地工作。文心一言,代码正常运行:在Go语言中,处理开区间(openintervals)时,我们需要特别注意区间的边界条件。开区间不包括其端点,因此在比较时不能使用等于(==)操作符。以下是一个使用Go语言实现的INTERVAL......
  • 文心一言 VS 讯飞星火 VS chatgpt (193)-- 算法导论14.3 1题
    一、用go语言,写出作用于区间树的结点且在〇(1)时间内更新max属性的过程LEFT-ROTATE的伪代码。文心一言:以下是一个简单的LEFT-ROTATE的伪代码,它对一个二叉搜索树进行左旋转操作。这个操作的作用是更新节点的max属性,使其在O(1)时间内完成。LEFT-ROTATE(T,x)://T是树,x......
  • prompt简介(chatgpt)
    一、什么是Prompts(提示词)prompts(提示词)可以理解成:让GPT能精准Get到你意图的话,或者与GPT沟通的语言方式。​ 如果你给GPT的提示词质量不好,或者不到位,那么它给到你的,往往就是那种“像是一堆正确的废话堆积而成”的文字垃圾。所以,想要获得GPT高质量回答的第一步,就是先学......
  • GPT回答的问题
     深度学习中存在一些问题,包括但不限于以下几个方面:贝叶斯理论与深度学习:深度学习模型的训练和推断方法通常基于概率论和统计学原理,但与贝叶斯推理理论的融合仍存在一些挑战和问题。解释性和可解释性:深度学习模型往往被视为“黑匣子”,其决策过程不太可解释。如何提高深度学......
  • ChatGPT 背后的“功臣”——RLHF 技术详解
    OpenAI推出的ChatGPT对话模型掀起了新的AI热潮,它面对多种多样的问题对答如流,似乎已经打破了机器和人的边界。这一工作的背后是大型语言模型(LargeLanguageModel,LLM)生成领域的新训练范式:RLHF(ReinforcementLearningfromHumanFeedback),即以强化学习方式依据人类反馈......
  • 【Azure Function】Function本地调试时遇见跨域问题(blocked by CORS policy)
    问题描述在本地调试AzureFunction时,遇见了跨域问题:AccesstoXMLHttpRequestat'http://localhost:7071/api/HttpTriggerToken?tenantId=b7f6f99f-3045-412a-8828-b3044070857e&documentId=6a8ffc27-026f-498e-9936-f6c55db558e5&userId=test-user&userName=Test+User......
  • 【Azure Function】Function本地调试时遇见跨域问题(blocked by CORS policy)
    问题描述在本地调试AzureFunction时,遇见了跨域问题:AccesstoXMLHttpRequestat'http://localhost:7071/api/HttpTriggerToken?tenantId=b7f6f99f-3045-412a-8828-b3044070857e&documentId=6a8ffc27-026f-498e-9936-f6c55db558e5&userId=test-user&userName=Test+User&......
  • ChatGPT 被曝泄露私密对话;美国 AI 企业一天蒸发 1.3 万亿市值丨 RTE 开发者日报 Vol.1
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • Azure Data Factory(十二)传参调用 Azure Function
    一,引言 在实际的项目中,AzureDataFactroy中的DataFlow并不能彻底帮我们完成一系列复制逻辑计算,比如我们需要针对数据集的每一行数据进行判断计算,DataFlow就显的有些吃力。别怕,AzureDataFactory提供了调用AzureFunction的组件,有了代码的加持,那么解决更复杂的都能迎......