Skip to content

TigerBot开放函数调用能力,打开agent的无限可能

wei.cai edited this page Sep 27, 2023 · 5 revisions

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)进行集成,让用户使用自然语言调用函数。一般通过以下流程实现:

  1. 获取用户的查询式(query),将查询式以及你的自定义函数信息发送请求至Tigerbot Chat API。Tigerbot将根据你提供的函数信息,从用户的查询式中提取出符合函数参数定义的值返回。
  2. 你根据Tigerbot返回的函数参数,调用你的自定义函数,获得自定义函数的返回值。
  3. 将返回值、查询式(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有可能会返回不符合函数定义的值。如果碰到这种情况,请修改函数定义或者重试。

以下是演示,具体接口可以参考补全对话接口

  1. 获取用户的输入,将用户输入以及你的自定义函数信息发送请求至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
}
  1. 根据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

微信讨论群

image