OpenAI助手功能工具到底是什么?

2023年11月17日 由 alex 发表 673 0

介绍


大型语言模型(LLM)依赖于非结构化、对话式的数据作为输入,而从LLM得到的输出同样是非结构化和对话式的。


Functions Tools是一种结构化并格式化LLM输出的方式,通常是以准备好提交给外部API的格式为准。


这个名称可能会引起误解,有些人会以为LLM实际上运行代码或执行集成以调用函数。实际上,LLM通过将用户输入中的实体和短语与预定义的JSON模式进行匹配,来填充一个预定义的JSON文档中的参数。


结构化的JSON输出可以用于任何事情,它既可以用来结构化数据,也可以用于数据存储等。


关于功能更多信息


功能调用允许你向助手描述自定义函数,以便用于访问外部API。这应该让你更容易地通过生成API所期望的JSON格式的输出来调用外部函数。并且JSON已经预先填充了相关的输入参数。


功能调用是结构化LLM输出的一种方式,用户可以为“函数”定义模式,LLM将选择一个模式并填充该模式的项目。因此,功能工具只是尝试准备API所期望的格式的数据。


功能是聊天完成API的一部分,现在助手也支持该功能。


以下是最简单的应用程序,你可以复制这段Python代码,粘贴到笔记本中然后运行它。你需要做的全部就是添加你自己的OpenAI API密钥。


用户对助手的输入是:Send Cobus from Kore AI an email asking for the monthly report?


下面是生成的JSON文档,完整包含了邮件正文中的换行。


send_email({
   "to_address":"cobus@kore.ai",
   "subject":"Request for Monthly Report",
   "body":"Dear Cobus,\n\n
          I hope this message finds you well. I am reaching out to kindly 
          request the monthly report. Could you please provide the latest 
          update at your earliest convenience?\n\nThank you in advance for 
          your assistance.\n\n
          Best regards,"
})


在代码的工具下,定义了一种工具类型的功能,它包含三个属性:to_address(地址)、subject(主题)和body(正文)。


pip install --upgrade openai
########################################
import os
import openai
import requests
import json
from openai import OpenAI
########################################
api_key = "your openai api key goes here"
########################################
client = OpenAI(api_key=api_key)
########################################
assistant = client.beta.assistants.create(
  instructions="You are a HR bot, answering HR questions.",
  model="gpt-4-1106-preview",
  tools=[{
        "type": "function",
        "function": {
              "name": "send_email",
              "description": "Please send an email.",
              "parameters": {
                "type": "object",
                "properties": {
                  "to_address": {
                    "type": "string",
                    "description": "To address for email"
                  },          
                  "subject": {
                    "type": "string",
                    "description": "subject of the email"
                  },
                  "body": {
                    "type": "string",
                    "description": "Body of the email"
                  }
          }
                            }
        }
    }]
  )
########################################
thread = client.beta.threads.create()
########################################
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="Send Cobus from Kore AI an email asking for the monthly report?"
)
########################################
run = client.beta.threads.runs.create(
  thread_id=thread.id,
  assistant_id=assistant.id,
  instructions="Use the function tool for this query."
)
########################################
run = client.beta.threads.runs.retrieve(
  thread_id=thread.id,
  run_id=run.id
)
########################################
messages = client.beta.threads.messages.list(
  thread_id=thread.id
)
########################################


代码执行完毕后,你可以前往你的OpenAI控制面板,在那里你将看到你的助手已被创建,同时工具send_email也已在Functions下建立。


现在可以在这里设置助手的名称和指令。


12


在仪表板中与助手交互时,JSON文档会在响应中生成,并且日志也可以在这里查看。


13


结论


函数是迈向正确方向的一步,通过它能够定义LLM从中输出数据的格式,并提供了一个结构或框架,以此LLM能够执行某种数据转换。

文章来源:https://cobusgreyling.medium.com/what-are-openai-assistant-function-tools-exactly-06ef8e39b7bd
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消