LLM#

介绍#

提示流 LLM 工具使您能够利用广泛使用的大型语言模型,如 OpenAIAzure OpenAI (AOAI) 以及 Azure AI Studio 模型目录中的模型,进行自然语言处理。

[!注意] 以前版本的 LLM 工具现已弃用。请升级到最新的 promptflow-tools 包以使用新的 LLM 工具。

提示流提供了几种不同的 LLM API

  • Completion:OpenAI 的 Completion 模型根据提供的提示生成文本。

  • Chat:OpenAI 的 Chat 模型通过基于文本的输入和响应促进交互式对话。

先决条件#

使用 Azure AI Studio 模型目录中的 LLM 模型(例如:llama2、mistral、cohere 等)创建 OpenAI 资源、Azure OpenAI 资源或 MaaS 部署

  • OpenAI

    注册账户 OpenAI 网站

    登录并 查找个人 API 密钥

  • Azure OpenAI (AOAI)

    按照说明创建 Azure OpenAI 资源

  • MaaS 部署

    按照说明为 Azure AI Studio 模型目录中的模型创建 MaaS 部署

    您可以创建无服务器连接来使用此 MaaS 部署。

连接#

在提示流中设置与已配置资源的连接。

类型

名称

API 密钥

API 基址

API 类型

API 版本

OpenAI

必填

必填

-

-

-

AzureOpenAI

必填

必填

必填

必填

必填

无服务器

必填

必填

必填

-

-

输入#

文本补全#

名称

类型

描述

必填

提示

字符串

语言模型将补全的文本提示

模型,部署名称

字符串

要使用的语言模型

max_tokens

整数

在补全中生成的最大令牌数。默认值为 16。

No

temperature

float

生成文本的随机性。默认值为 1。

No

stop

列表

生成文本的停止序列。默认值为 null。

No

suffix

字符串

附加到补全末尾的文本

No

top_p

float

使用生成令牌中最佳选择的概率。默认值为 1。

No

logprobs

整数

要生成的对数概率数。默认值为 null。

No

echo

布尔值

指示是否在响应中回显提示的值。默认值为 false。

No

presence_penalty

float

控制模型重复短语行为的值。默认值为 0。

No

frequency_penalty

float

控制模型生成罕见短语行为的值。默认值为 0。

No

best_of

整数

要生成的最佳补全数。默认值为 1。

No

logit_bias

字典

语言模型的 logit 偏差。默认值为空字典。

No

聊天#

名称

类型

描述

必填

提示

字符串

语言模型将响应的文本提示

模型,部署名称

字符串

要使用的语言模型

max_tokens

整数

在响应中生成的最大令牌数。默认值为 inf。

No

temperature

float

生成文本的随机性。默认值为 1。

No

stop

列表

生成文本的停止序列。默认值为 null。

No

top_p

float

使用生成令牌中最佳选择的概率。默认值为 1。

No

presence_penalty

float

控制模型重复短语行为的值。默认值为 0。

No

frequency_penalty

float

控制模型生成罕见短语行为的值。默认值为 0。

No

logit_bias

字典

语言模型的 logit 偏差。默认值为空字典。

No

tool_choice

object

控制模型调用哪个工具的值。默认值为 null。

No

tools

列表

模型可能为其生成 JSON 输入的工具列表。默认值为 null。

No

response_format

object

一个对象,指定模型必须输出的格式。默认值为 null。

No

输出#

返回类型

描述

字符串

一次预测补全或对话响应的文本

如何使用 LLM 工具?#

  1. 设置并选择与 OpenAI 资源的连接

  2. 配置 LLM 模型 API 及其参数

  3. 按照指南准备提示。

如何编写聊天提示?#

要掌握创建聊天提示的基础知识,请从此部分开始,以初步了解 Jinja。

我们提供了一种区分聊天提示中不同角色的方法,例如“系统”、“用户”、“助手”和“工具”。“系统”、“用户”、“助手”角色可以具有“name”和“content”属性。然而,“工具”角色应该具有“tool_call_id”和“content”属性。有关工具聊天提示的示例,请参阅示例 3

示例 1#

# system:
You are a helpful assistant.

{% for item in chat_history %}
# user:
{{item.inputs.question}}
# assistant:
{{item.outputs.answer}}
{% endfor %}

# user:
{{question}}

在 LLM 工具中,提示在发送到 OpenAI 聊天 API 之前会转换为匹配 openai messages 结构。

[
    {
        "role": "system",
        "content": "You are a helpful assistant."
    },
    {
        "role": "user",
        "content": "<question-of-chat-history-round-1>"
    },
    {
        "role": "assistant",
        "content": "<answer-of-chat-history-round-1>"
    },
    ...
    {
        "role": "user",
        "content": "<question>"
    }
]

示例 2#

# system:
{# For role naming customization, the following syntax is used #}
## name:
Alice
## content:
You are a bot can tell good jokes.

在 LLM 工具中,提示在发送到 OpenAI 聊天 API 之前会转换为匹配 openai messages 结构。

[
    {
        "role": "system",
        "name": "Alice",
        "content": "You are a bot can tell good jokes."
    }
]

示例 3#

此示例说明如何编写工具聊天提示。

# system:
You are a helpful assistant.

# user:
What is the current weather like in Boston?

# assistant:
{# The assistant message with 'tool_calls' must be followed by messages with role 'tool'. #}
## tool_calls:
{{llm_output.tool_calls}}

# tool:
{#
Messages with role 'tool' must be a response to a preceding message with 'tool_calls'.
Additionally, 'tool_call_id's should match ids of assistant message 'tool_calls'.
#}
## tool_call_id:
{{llm_output.tool_calls[0].id}}
## content:
{{tool-answer-of-last-question}}

# user:
{{question}}

在 LLM 工具中,提示在发送到 OpenAI 聊天 API 之前会转换为匹配 openai messages 结构。

[
    {
        "role": "system",
        "content": "You are a helpful assistant."
    },
    {
        "role": "user",
        "content": "What is the current weather like in Boston?"
    },
    {
        "role": "assistant",
        "content": null,
        "function_call": null,
        "tool_calls": [
            {
                "id": "<tool-call-id-of-last-question>",
                "type": "function",
                "function": "<function-to-call-of-last-question>"
            }
        ]
    },
    {
        "role": "tool",
        "tool_call_id": "<tool-call-id-of-last-question>",
        "content": "<tool-answer-of-last-question>"
    }
    ...
    {
        "role": "user",
        "content": "<question>"
    }
]