LLM#
介绍#
提示流 LLM 工具使您能够利用广泛使用的大型语言模型,如 OpenAI、Azure 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 工具?#
设置并选择与 OpenAI 资源的连接
配置 LLM 模型 API 及其参数
按照指南准备提示。
如何编写聊天提示?#
要掌握创建聊天提示的基础知识,请从此部分开始,以初步了解 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>"
}
]