Function-Calling应用流

本模板介绍如何使用LangStudio构建Function-Calling应用流。在该应用流中,开发者可以提供多个函数,将问题以及函数描述传递给LLM,让LLM返回合适的函数名和参数,然后通过Python节点执行对应的函数,返回结果。根据需要,开发者可以在本模板基础上进行二次开发。

LLM 工具使用介绍

toolsOpenAI API中的一个可选参数,用于使模型生成符合指定规范的工具参数。

说明

模型并不会实际执行任何工具调用,开发者需要根据模型输出自行执行工具调用。

通过设置tools参数传递可用工具列表,并将tool_choice参数设置为auto,模型会自动选择使用某个工具。tools参数格式可参考下面的代码示例。

如果使用了tools,输出响应将包含"finish_reason": "tool_calls",并附带一个tool_calls对象,该对象包含需要调用的工具名称和工具参数。根据工具名称,开发者可以执行相应的操作。

import openai

# 定义函数
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather in a given location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {"type": "string", "description": "The city and state, e.g. San Francisco, CA"},
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
                },
                "required": ["location"]
            }
        }
    }
]

# 使用函数
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo-0613",
    messages=[{"role": "user", "content": "What's the weather like in Boston?"}],
    tools=tools,
    tool_choice="auto"  # 让模型自己决定是否使用函数
)

# 检查是否有函数调用
if response.choices[0].message.tool_calls:
    # 处理函数调用
    function_call = response.choices[0].message.tool_calls[0]
    # ... 执行相应的操作 ...
    

详细信息可参考OpenAI API文档

快速上手

创建连接

构建应用流前,您需要准备如下工作:

  1. 开通大模型服务平台百炼。

    • 访问阿里云百炼大模型服务平台 开通服务。

    • 在控制台创建API Key,用于调用Qwen-Max、通义万相、语音合成CosyVoice大模型服务。

    • 连接管理中创建百炼大模型服务连接,并将api_key填入对应字段。具体操作,请参见连接管理

      dashscope

  2. 申请SerpApi Key。

    • 访问SerpApi 官网注册账号并获取API Key,用于调用搜索引擎。

    • 连接管理中创建自定义连接。具体操作,请参见连接管理

      serp

构建应用流

参考应用流开发,构建如下应用流节点:

  1. gather_tool

    python节点,用于生成全部tools描述。tools描述要求符合OpenAI API规范,详情可参考OpenAI API文档。模板中该节点合并输出预制tools和自定义tools的描述,其中自定义tools使用user_define_tool.json文件进行描述。

  2. function_call_router

    LLM节点,以Function calling方式调用LLM,需要配置如下参数:

    • connection:选择前面创建的百炼大模型服务连接。

    • model:选择支持Function calling的模型,例如qwen-max,详细模型列表见模型列表

  3. search

    • search_connection:选择前面配置的SerpApi自定义连接。

    • num:搜索引擎返回结果数量。

    • location:搜索引擎需要的位置信息。

    • engine输入搜索引擎,该模板仅支持BingBaidu,其他搜索引擎请自行修改模板支持。

    说明

    可自定义该节点,使用其他方式调用搜索引擎。

  4. answer_with_search

    LLM节点,接收search节点搜索的结果,并将搜索结果和问题传给LLM,生成回答,需要配置如下参数:

    • connection:选择前面创建的百炼大模型服务连接。

    • model:模型名,例如qwen-max,详细模型列表见模型列表

  5. image_synthesis

    python节点,用于调用百炼大模型服务,生成图像,需要配置如下参数:

    • dashscope_connection:选择前面配置的百炼大模型服务连接,本模板会默认调用通义万相。

  6. voice_synthesis

    python节点,用于调用百炼大模型服务,生成语音,需要配置如下参数:

    • dashscope_connection:选择前面配置的百炼大模型服务连接,本模板会调用语音合成CosyVoice。

  7. direct_generate

    python节点,如果function_call_router判断不做function调用,直接生成回答,则会通过该节点透传回答。

  8. gather_output

    python节点,用于收集并合并所有节点的输出。

测试应用流

  1. 首先,单击右上角启动运行时按钮,配置运行资源以及VPC。这里VPC需要和数据库所在的VPC保持一致,或者已经打通。

    nl2sql-vpc

  2. 等待运行时启动完成,单击右上角对话按钮,开始对话。

    fc-calling-output

部署应用流

测试完成,单击右上角部署按钮,填写服务名/部署资源组、VPC信息,将工作流部署成EAS服务。这里的VPC同样需要和数据库所在的VPC保持一致。服务调用方法请参见调用方式概览

fc-calling-deploy