Function-call 调用指南

更新时间:

通义星尘平台Function-call 调用指南介绍文档。

介绍

定制个性化智能体,您会希望更便捷地集成业务技能,function-calling功能可以更好地将大模型连接到您自有的业务接口。

在通义星尘API调用中,通过提供业务自定义function的功能和参数描述,大模型会根据输入自主地进行规划,检测何时应该调用函数, 并输出function的调用规划(JSON格式)。

场景示例

  1. 创建业务专属助手, 需要使用业务专有的API接口,回答用户问题

    • 例如,定义get_current_weather(location:string, date:string)item_search(query:string)

  2. 创建特定游戏中的智能NPC,需要使用操控NPC行为的API接口,驱动游戏页面

    • 例如, 定义move_to(place:string)go_dancing(type:string)

调用步骤

通义星尘API调用的基本步骤顺序如下:

  1. 使用user query和一组自定义函数描述,调用通义星尘API。

复制代码import unittest

from xingchen import Configuration, ApiClient, ChatApiSub, ChatReqParams, CharacterKey, Message, UserProfile, \
    ModelParameters


def build_chat_param():
    return ChatReqParams(
        bot_profile=CharacterKey(
            character_id="40f70d5466e1429ba9aa755842b35d9f",
            version=1
        ),
        model_parameters=ModelParameters(
            seed=1683806810,
            incrementalOutput=False,
            model_name="xingchen-plus"
        ),
        messages=[
            Message(
                name='小明',
role='user',
                content='杭州今天天气怎么样'
            )
        ],
		context=ChatContext(
            use_chat_history=True
        ),
        user_profile=UserProfile(
            user_id='123456789',
            user_name='小明'
        ),
        functions=[
            Function(
                name='weather',
                description='通过调用天气预报API获取当地天气预报信息通过调用天气预报API获取当地天气预报信息',
                parameters={
                    "type": "object",
                    "properties":{
                        "location":{
                            "type": "string",
                            "description": "地点"
                        },
                        "format":{
                            "type": "string",
                            "enum":[
                                "celsius",
                                "fahrenheit"
                            ],
                            "description": "温度单位"
                        }
                    },
                }
            )
        ]
    )


class Test(unittest.TestCase):

    @staticmethod
    def init_client():
        configuration = Configuration(
            host="https://nlp.aliyuncs.com"  
        )
        configuration.access_token = "{API-KEY}"  
        with ApiClient(configuration) as api_client:
            api_instance = ChatApiSub(api_client)
        return api_instance

    def test_chat_sync(self):
        api = self.init_client()
       

        chat_param = build_chat_param()
        res = api.chat(
            chat_req_params=chat_param
        )
        print(res.to_str())

备注:大模型可以选择调用一个或多个函数;如果是这样的话,内容将是一个字符串化的JSON对象,它遵循您的自定义模式(注意:模型可能会产生参数幻觉)。

  1. 将字符串解析为代码中的JSON,并使用提供的参数(如果存在)调用自定义函数。

  2. 通过将函数响应附加为新消息来再次调用通义星尘API,并让模型将结果汇总返回给用户。

流程参考

备注:紫色色块为调用通义星尘API的返回。

image.png