介绍
大型语言模型(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下建立。
现在可以在这里设置助手的名称和指令。
在仪表板中与助手交互时,JSON文档会在响应中生成,并且日志也可以在这里查看。
结论
函数是迈向正确方向的一步,通过它能够定义LLM从中输出数据的格式,并提供了一个结构或框架,以此LLM能够执行某种数据转换。