-
Notifications
You must be signed in to change notification settings - Fork 194
TigerBot开放函数调用能力,打开agent的无限可能
TigerBot依靠自身不断进化的理解能力,实现了函数调用(Funcation Calling)的功能。我们日常生活中很多任务是结构化的,比如计算、股价查询、点外卖、订机票等。而另一方面人类交互的自然语言是非结构化的。TigerBot作为一个SOTA的大模型已逐渐胜任将泛化的用户prompt准确的转化成结构话的任务指令,这使得基于大模型的用户交互界面能够开始完成任务,与世界交互。我们从13B模型开始开发函数调用的API,至近期我们试验发现Tigerbot-70b-chat的理解和抽取能力已经能够胜任大部分日常函数调用功能。在一些细分领域,经过领域数据(natural prompt --> json function input)的微调训练,表现可以达到生产可用。在此,我们开放tigerbot-70b-chat和tigerbot-13b-chat api的function calling功能,期待开发者们写出各种奇妙的agent。
函数调用(Function Calling)提供从用户查询中提取指定函数的指定参数的功能。该功能可以方便地与你提供的函数(如第三方API)进行集成,让用户使用自然语言调用函数。一般通过以下流程实现:
- 获取用户的查询式(query),将查询式以及你的自定义函数信息发送请求至Tigerbot Chat API。Tigerbot将根据你提供的函数信息,从用户的查询式中提取出符合函数参数定义的值返回。
- 你根据Tigerbot返回的函数参数,调用你的自定义函数,获得自定义函数的返回值。
- 将返回值、查询式(query)、函数信息等作为内容发送请求至Tigerbot Chat API,Tigerbot将根据你提供的信息生成回答。
假设我作为一个服务提供方,我编写了一个函数eval_math
用于计算数学表达式的值。这个函数有expression
这个参数,表示数学表达式。用户输入的是自然语言"计算 1+1”,没有直接给出函数参数的具体值,因此无法直接调用函数eval_math
。此时可以利用TigerBot提供的“函数调用”功能从用户的输入中提取出指定函数所需参数的值,在此处为eval_math
函数的expression
参数。 “函数调用”功能将为我提取出正确的参数值,{"expression": "1+1"}
,得到这些参数值后我立即可以调用eval_math
并获取到结果。将eval_math
的结果再次提交至TigerBot,将会得到自然的回答,“根据给出的数据,计算1 + 1的结果是2。”。
需要注意的是,根据函数定义的不同,Tigerbot有可能会返回不符合函数定义的值。如果碰到这种情况,请修改函数定义或者重试。
以下是演示,具体接口可以参考补全对话接口
- 获取用户的输入,将用户输入以及你的自定义函数信息发送请求至Tigerbot Chat API:
import requests
url = "https://api.tigerbot.com/v1/chat/completions"
headers = {
'Authorization': 'Bearer ' + API_KEY
}
payload = {
"model": "tigerbot-70b-chat",
"query": "计算 1+1",
"functions": [
{
"name": "eval_math",
"description": "计算数学表达式的值",
"parameters": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "数学表达式"
}
},
"required": [
"expression"
]
}
}
]
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
curl --location 'https://api.tigerbot.com/v1/chat/completions' \
--header 'Authorization: Bearer API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"model": "tigerbot-70b-chat",
"query": "计算 1+1",
"functions": [
{
"name": "eval_math",
"description": "计算数学表达式的值",
"parameters": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "数学表达式"
}
},
"required": [
"expression"
]
}
}
]
}'
返回查询式中提取出符合函数参数定义的值:
{
"function_call": {
"name": "eval_math",
"arguments": "{\"expression\": \"1+1\"}"
},
"input_tokens": 104,
"total_tokens": 117
}
- 根据Tigerbot返回的函数参数,调用你的自定义函数
设此处的函数为(Python):
def eval_math(expression: str):
return {"result": eval(expression)}
调用 eval_math(expression="1+1")
,将获得结果 {"result": 2}
将返回值、查询式(query)、函数信息等作为内容发送请求至 Tigerbot Chat API:
import requests
url = "https://api.tigerbot.com/v1/chat/completions"
headers = {
'Authorization': 'Bearer ' + API_KEY
}
payload = {
"model": "tigerbot-70b-chat",
"query": "计算 1+1",
"session": [
{
"function": "{\"result\": 2}"
}
],
"functions": [
{
"name": "eval_math",
"description": "计算数学表达式的值",
"parameters": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "数学表达式"
}
},
"required": [
"expression"
]
}
}
]
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())
curl --location 'https://api.tigerbot.com/v1/chat/completions' \
--header 'Authorization: Bearer API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"model": "tigerbot-70b-chat",
"query": "计算 1+1",
"session": [
{
"function": "{\"result\": 2}"
}
],
"functions": [
{
"name": "eval_math",
"description": "计算数学表达式的值",
"parameters": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "数学表达式"
}
},
"required": [
"expression"
]
}
}
]
}'
Tigerbot 将根据你提供的信息生成回答:
{
"result": "根据给出的数据,计算 1 + 1 的结果是 2。",
"input_tokens": 30,
"total_tokens": 45
}
TigerBot demo在线体验: https://tigerbot.com/chat
Github项目: https://github.com/TigerResearch/TigerBot
微信讨论群