聊天完成
在对话上下文中,根据消息列表生成响应,支持对话式语言模型 (LLM) 和对话式视觉语言模型 (VLM)。这是 text-generation
和 image-text-to-text
的子任务。
推荐模型
对话式大型语言模型 (LLM)
- google/gemma-2-2b-it: 一个经过训练以遵循指令的文本生成模型。
- meta-llama/Meta-Llama-3.1-8B-Instruct: 非常强大的文本生成模型,经过训练以遵循指令。
- microsoft/Phi-3-mini-4k-instruct: 体积小但功能强大的文本生成模型。
- HuggingFaceH4/starchat2-15b-v0.1: 强大的编码助手模型。
- mistralai/Mistral-Nemo-Instruct-2407: 非常强大的开源大型语言模型。
对话式视觉语言模型 (VLM)
- meta-llama/Llama-3.2-11B-Vision-Instruct: 具有强大的视觉理解和推理能力的强大视觉语言模型。
- microsoft/Phi-3.5-vision-instruct: 强大的图像-文本到文本模型。
API Playground
对于聊天完成模型,我们提供了一个交互式 UI Playground,以便更容易进行测试
- 快速在 UI 中迭代您的提示。
- 设置和覆盖系统、助手和用户消息。
- 浏览并选择当前在推理 API 上可用的模型。
- 并排比较两个模型的输出。
- 从 UI 中调整请求参数。
- 在 UI 视图和代码片段之间轻松切换。
访问推理 UI Playground 并开始探索:https://huggingface.co/playground
使用 API
API 支持
- 使用与 OpenAI SDK 兼容的聊天完成 API。
- 使用语法、约束和工具。
- 流式输出
对话式 LLM 的代码片段示例
Python
JavaScript
cURL
from huggingface_hub import InferenceClient
client = InferenceClient(api_key="hf_***")
for message in client.chat_completion(
model="google/gemma-2-2b-it",
messages=[{"role": "user", "content": "What is the capital of France?"}],
max_tokens=500,
stream=True,
):
print(message.choices[0].delta.content, end="")
要使用 Python 客户端,请参阅 huggingface_hub
的 软件包参考。
对话式 VLM 的代码片段示例
Python
JavaScript
cURL
from huggingface_hub import InferenceClient
client = InferenceClient(api_key="hf_***")
image_url = "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg"
for message in client.chat_completion(
model="meta-llama/Llama-3.2-11B-Vision-Instruct",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": image_url}},
{"type": "text", "text": "Describe this image in one sentence."},
],
}
],
max_tokens=500,
stream=True,
):
print(message.choices[0].delta.content, end="")
要使用 Python 客户端,请参阅 huggingface_hub
的 软件包参考。
API 规范
请求
有效负载 | ||
---|---|---|
frequency_penalty | 数字 | -2.0 到 2.0 之间的数字。正值会根据新 token 在迄今为止文本中的出现频率对其进行惩罚,从而降低模型重复相同行逐字的可能性。 |
logprobs | 布尔值 | 是否返回输出 token 的对数概率。如果为真,则在消息内容中返回每个输出 token 的对数概率。 |
max_tokens | 整数 | 聊天完成中可以生成的 token 最大数量。 |
messages* | object[] | 包含迄今为止对话的所有消息的列表。 |
content* | 未知 | 以下之一 |
(#1) | 字符串 | |
(#2) | object[] | |
(#1) | 对象 | |
text* | 字符串 | |
type* | 枚举 | 可能的值:text。 |
(#2) | 对象 | |
image_url* | 对象 | |
url* | 字符串 | |
type* | 枚举 | 可能的值:image_url。 |
name | 字符串 | |
role* | 字符串 | |
presence_penalty | 数字 | -2.0 到 2.0 之间的数字。正值会根据新 token 是否出现在迄今为止的文本中对其进行惩罚,从而提高模型谈论新主题的可能性。 |
response_format | 未知 | 以下之一 |
(#1) | 对象 | |
type* | 枚举 | 可能的值:json。 |
value* | 未知 | 表示 JSON Schema 的字符串。JSON Schema 是一种声明性语言,允许使用类型和描述对 JSON 文档进行注释。 |
(#2) | 对象 | |
type* | 枚举 | 可能的值:regex。 |
value* | 字符串 | |
seed | 整数 | |
stop | string[] | 最多 4 个序列,API 将停止生成进一步的 token。 |
stream | 布尔值 | |
stream_options | 对象 | |
include_usage* | 布尔值 | 如果设置,将在数据之前流式传输一个额外的块:[DONE] 消息。此块上的 usage 字段显示整个请求的 token 使用统计信息,choices 字段始终为空数组。所有其他块也将包含 usage 字段,但值为 null。 |
temperature | 数字 | 要使用的采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定性。我们通常建议更改此设置或 top_p ,但不要同时更改两者。 |
tool_choice | 未知 | 以下之一 |
(#1) | 对象 | |
(#2) | 字符串 | |
(#3) | 对象 | |
function* | 对象 | |
name* | 字符串 | |
(#4) | 对象 | |
tool_prompt | 字符串 | 在工具之前附加的提示 |
tools | object[] | 模型可能调用的工具列表。目前,仅支持函数作为工具。使用此方法提供模型可能为其生成 JSON 输入的函数列表。 |
function* | 对象 | |
arguments* | 未知 | |
description | 字符串 | |
name* | 字符串 | |
type* | 字符串 | |
top_logprobs | 整数 | 介于 0 和 5 之间的整数,指定在每个 token 位置返回的可能性最大的 token 数量,每个 token 都带有相关的对数概率。如果使用此参数,则必须将 logprobs 设置为 true。 |
top_p | 数字 | 对使用温度进行采样的另一种方法,称为核采样,其中模型会考虑具有 top_p 概率质量的 token 的结果。因此,0.1 表示仅考虑构成前 10% 概率质量的 token。 |
某些选项可以通过将标头传递到推理 API 来配置。以下是可用的标头
标头 | ||
---|---|---|
authorization | 字符串 | 身份验证标头,格式为 'Bearer: hf_****' ,其中 hf_**** 是具有推理 API 权限的个人用户访问令牌。您可以在 您的设置页面 上生成一个。 |
x-use-cache | 布尔值,默认为 true | 推理 API 上有一个缓存层,可以加快我们已经看到的请求的速度。大多数模型可以使用这些结果,因为它们是确定性的(意味着输出始终相同)。但是,如果您使用的是非确定性模型,则可以将此参数设置为阻止缓存机制被使用,从而导致真正的全新查询。阅读有关缓存的更多信息 此处。 |
x-wait-for-model | 布尔值,默认为 false | 如果模型未准备好,请等待它,而不是接收 503。它限制了完成推理所需的请求数量。建议仅在收到 503 错误后才将此标志设置为 true,因为它会将您的应用程序挂起限制在已知位置。阅读有关模型可用性的更多信息 此处。 |
有关推理 API 标头的更多信息,请查看参数 指南。
响应
输出类型取决于 stream
输入参数。如果 stream
为 false
(默认),则响应将是包含以下字段的 JSON 对象
正文 | ||
---|---|---|
choices | object[] | |
finish_reason | 字符串 | |
index | 整数 | |
logprobs | 对象 | |
content | object[] | |
logprob | 数字 | |
token | 字符串 | |
top_logprobs | object[] | |
logprob | 数字 | |
token | 字符串 | |
message | 未知 | 以下之一 |
(#1) | 对象 | |
content | 字符串 | |
role | 字符串 | |
(#2) | 对象 | |
role | 字符串 | |
tool_calls | object[] | |
function | 对象 | |
参数 | 未知 | |
描述 | 字符串 | |
名称 | 字符串 | |
ID | 字符串 | |
类型 | 字符串 | |
创建 | 整数 | |
ID | 字符串 | |
模型 | 字符串 | |
系统指纹 | 字符串 | |
使用情况 | 对象 | |
完成令牌 | 整数 | |
提示令牌 | 整数 | |
总令牌 | 整数 |
如果stream
为true
,则生成的令牌将作为流返回,使用服务器发送事件 (SSE)。有关流的更多信息,请查看本指南。
正文 | ||
---|---|---|
choices | object[] | |
增量 | 未知 | 以下之一 |
(#1) | 对象 | |
content | 字符串 | |
role | 字符串 | |
(#2) | 对象 | |
role | 字符串 | |
tool_calls | 对象 | |
function | 对象 | |
参数 | 字符串 | |
名称 | 字符串 | |
ID | 字符串 | |
索引 | 整数 | |
类型 | 字符串 | |
finish_reason | 字符串 | |
index | 整数 | |
logprobs | 对象 | |
content | object[] | |
logprob | 数字 | |
token | 字符串 | |
top_logprobs | object[] | |
logprob | 数字 | |
token | 字符串 | |
创建 | 整数 | |
ID | 字符串 | |
模型 | 字符串 | |
系统指纹 | 字符串 | |
使用情况 | 对象 | |
完成令牌 | 整数 | |
提示令牌 | 整数 | |
总令牌 | 整数 |