Chat & Generieren#
Lernen, wie man mit LLM in Xinference chattet.
Introduction#
Modelle mit der Fähigkeit chat oder generate werden üblicherweise als große Sprachmodelle (LLM) oder Textgenerierungsmodelle bezeichnet. Diese Modelle sind darauf ausgelegt, basierend auf der erhaltenen Eingabe in Form von Textausgabe zu antworten, die oft als „Prompt“ bezeichnet wird. Im Allgemeinen können diese Modelle durch spezifische Anweisungen oder die Bereitstellung konkreter Beispiele zur Erfüllung von Aufgaben angeleitet werden.
Modelle mit generate-Fähigkeit sind in der Regel vortrainierte große Sprachmodelle. Andererseits sind Modelle mit chat-Funktion feinabgestimmte und ausgerichtete LLMs (Language Models), die speziell für Dialogszenarien optimiert wurden. In den meisten Fällen haben Modelle, die auf „chat“ enden (z. B. llama-2-chat, qwen-chat usw.), eine chat-Funktion.
Die Chat-API und die Generate-API bieten zwei verschiedene Methoden zur Interaktion mit LLMs:
Chat API (ähnlich der Chat Completion API von OpenAI) ermöglicht mehrrundige Dialoge.
Generate API (ähnlich wie OpenAIs Completions API) ermöglicht es Ihnen, Text basierend auf einem Textprompt zu generieren.
Modellfähigkeiten |
API-Endpunkt |
OpenAI-kompatibler Endpunkt |
|---|---|---|
chat |
Chat API |
/v1/chat/completions |
generate |
Generate API |
/v1/completions |
Unterstützte Modellliste#
Sie können alle Fähigkeiten der in Xinference integrierten LLM-Modelle einsehen.
Chat-Modell#
Chat API#
Testen Sie die Chat-API mit cURL, dem OpenAI Client oder dem Python-Client von Xinference:
curl -X 'POST' \
'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/chat/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "<MODEL_UID>",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What is the largest animal?"
}
],
"max_tokens": 512,
"temperature": 0.7
}'
import openai
client = openai.Client(
api_key="cannot be empty",
base_url="http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1"
)
client.chat.completions.create(
model="<MODEL_UID>",
messages=[
{
"content": "What is the largest animal?",
"role": "user",
}
],
max_tokens=512,
temperature=0.7
)
from xinference.client import RESTfulClient
client = RESTfulClient("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>")
messages = [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What is the largest animal?"}]
model.chat(
messages,
generate_config={
"max_tokens": 512,
"temperature": 0.7
}
)
{
"id": "chatcmpl-8d76b65a-bad0-42ef-912d-4a0533d90d61",
"model": "<MODEL_UID>",
"object": "chat.completion",
"created": 1688919187,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "The largest animal that has been scientifically measured is the blue whale, which has a maximum length of around 23 meters (75 feet) for adult animals and can weigh up to 150,000 pounds (68,000 kg). However, it is important to note that this is just an estimate and that the largest animal known to science may be larger still. Some scientists believe that the largest animals may not have a clear \"size\" in the same way that humans do, as their size can vary depending on the environment and the stage of their life."
},
"finish_reason": "None"
}
],
"usage": {
"prompt_tokens": -1,
"completion_tokens": -1,
"total_tokens": -1
}
}
Du findest weitere Beispiele für die Chat-API in den Tutorial-Notebooks.
Beispiele zur Nutzung der Chat-API von Xinference und des Python-Clients.
Hybrid Thinking Model#
Einige große Sprachmodelle sind als Mischtyp gekennzeichnet und bieten die Option, den Denkmodus wahlweise zu aktivieren oder zu deaktivieren.
Added in version v1.17.0: Der request-level enable_thinking-Schalter wird in v1.17.0 unterstützt.
Xinference bietet einen anforderungsbezogenen enable_thinking-Schalter, der für verschiedene Modellvorlagen geeignet ist (z. B. verwendet Qwen enable_thinking, während einige DeepSeek-Vorlagen thinking verwenden).
Verwendungsbeispiel:
curl -X 'POST' \
'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/chat/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "<MODEL_UID>",
"messages": [
{"role": "user", "content": "What is the largest animal?"}
],
"enable_thinking": false
}'
import openai
client = openai.Client(
api_key="cannot be empty",
base_url="http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1"
)
client.chat.completions.create(
model="<MODEL_UID>",
messages=[
{"role": "user", "content": "What is the largest animal?"}
],
extra_body={"enable_thinking": False}
)
from xinference.client import RESTfulClient
client = RESTfulClient("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>")
model.chat(
[{"role": "user", "content": "What is the largest animal?"}],
enable_thinking=False,
)
model.chat(
[{"role": "user", "content": "What is the largest animal?"}],
generate_config={"chat_template_kwargs": {"enable_thinking": False}},
)
Generatives Modell#
Generate API#
Generate API repliziert das Completions API von OpenAI.
Der Hauptunterschied zwischen der Generate API und der Chat API liegt im Eingabeformat. Die Chat API akzeptiert eine Liste von Nachrichten als Eingabe, während die Generate API eine freitextliche Zeichenfolge namens „prompt“ als Eingabe akzeptiert.
curl -X 'POST' \
'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "<MODEL_UID>",
"prompt": "What is the largest animal?",
"max_tokens": 512,
"temperature": 0.7
}'
import openai
client = openai.Client(api_key="cannot be empty", base_url="http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1")
client.chat.completions.create(
model=("<MODEL_UID>",
messages=[
{"role": "user", "content": "What is the largest animal?"}
],
max_tokens=512,
temperature=0.7
)
from xinference.client import RESTfulClient
client = RESTfulClient("http://<XINFERENCE_HOST>:<XINFERENCE_PORT>")
model = client.get_model("<MODEL_UID>")
print(model.generate(
prompt="What is the largest animal?",
generate_config={
"max_tokens": 512,
"temperature": 0.7
}
))
{
"id": "cmpl-8d76b65a-bad0-42ef-912d-4a0533d90d61",
"model": "<MODEL_UID>",
"object": "text_completion",
"created": 1688919187,
"choices": [
{
"index": 0,
"text": "The largest animal that has been scientifically measured is the blue whale, which has a maximum length of around 23 meters (75 feet) for adult animals and can weigh up to 150,000 pounds (68,000 kg). However, it is important to note that this is just an estimate and that the largest animal known to science may be larger still. Some scientists believe that the largest animals may not have a clear \"size\" in the same way that humans do, as their size can vary depending on the environment and the stage of their life.",
"finish_reason": "None"
}
],
"usage": {
"prompt_tokens": -1,
"completion_tokens": -1,
"total_tokens": -1
}
}
FAQ#
Bietet Xinference für LLMs eine Integrationsmöglichkeit mit LangChain oder LlamaIndex?#
Ja, du kannst die entsprechenden Abschnitte in den jeweiligen offiziellen Xinference-Dokumentationen einsehen. Hier sind die Links: