Nutzung der OpenAI-kompatiblen API-Schnittstelle von Alan
In diesem Artikel finden Sie die notwendigen Schritte zur Nutzung von Alan über die OpenAI-kompatible API-Schnittstelle. Dies ermöglicht es, Alan sowohl direkt mittels des offiziellen OpenAI-Clients als auch indirekt mittels anderer OpenAI-kompatibler Software zu verwenden.
Bereitgestellte Endpunkte
Zur Nutzung mit OpenAI-kompatibler Software bietet Alan verschiedene Endpunkte an. Diese sind:
GET /oai/models
Listet alle verfügbaren Modelle auf, die über die OpenAI-kompatible API genutzt werden können, und wird genutzt, um den Status der bereitgestellten Modelle zu prüfen.
GET /oai/models/{model}
Ruft detaillierte Informationen zu einem spezifischen Modell ab.
GET /oai/chat/completions
Generiert Textantworten basierend auf einer Chat-Historie.
GET /oai/embeddings
Erzeugt Embeddings aus Texten.
Die bereitgestellten Endpunkte entsprechen im erwarteten Input und erzeugten Output den offiziellen OpenAI-Endpunkten.
Nutzung des offiziellen OpenAI-Clients
Im Folgenden soll anhand eines Codebeispiels demonstriert werden, wie Alan mittels des offiziellen OpenAI-Clients genutzt werden kann. Dabei können sowohl der asynchrone als auch der synchrone OpenAI-Client verwendet werden.
Vorbereitung
Die Nutzung von Alan mittels OpenAI-Client erfordert einen Alan-API-Key. Diesen kann sich jeder Nutzer selbst hier anlegen.
Synchroner Client
from openai import OpenAI
api_key = "alan-..."
base_url = "https://app.alan.de/api/v1/oai"
client = OpenAI(api_key=api_key, base_url=base_url)
Asynchroner Client
from openai import AsyncOpenAI
api_key = "alan-..."
base_url = "https://app.alan.de/api/v1/oai"
async_client = AsyncOpenAI(api_key=api_key, base_url=base_url)
Verfügbare Modelle und spezifische Modellinformationen abrufen
Listet alle verfügbaren Modelle und deren Status auf. Das Antwortschema entspricht dem OpenAI-Format.
model = "comma-soft/llama-comma-llm-s-v3"
print(client.models.list())
print(client.models.retrieve(model))
Chat Completions erzeugen
Generiert Textantworten basierend auf einer Chat-Historie, welche dem OpenAI-Standard entspricht. Bei der Nutzung des Endpunkts werden neben messages
, model
und stream
lediglich die folgenden Parameter berücksichtigt: temperature
, top_p
, max_token
. Die Wertebereiche und Typen der Parameter sowie das Antwortformat entsprechen dem OpenAI-Standard.
Streaming Response
completion = client.chat.completions.create(
messages=[{"role": "user", "content": "Wie geht es dir?"}],
model="comma-soft/comma-llm-l",
temperature=...,
top_p=...,
max_token=...,
stream=True
)
for chunk in completion:
print(chunk)
Non-Streaming Response
completion = client.chat.completions.create(
messages=[{"role": "user", "content": "Wie geht es dir?"}],
model="comma-soft/comma-llm-l",
stream=False
)
print(completion)
Embeddings
Berechnet einen numerischen Vektor für einen gegebenen Input-Text. Dabei können alle zur Verfügung stehenden Parameter genutzt werden.
embeddings = client.embeddings.create(input="Dies ist ein Text!", model="comma-soft/comma-embedding-20240625")
print(embeddings)
Erweiterung um Alan-spezifische Features
Zusätzlich bieten wir die Möglichkeit, Alan-spezifische Features wie Experten und Wissensdatenbanken über die OpenAI-Schnittstelle zu nutzen. Dazu wird der extra_body
-Parameter verwendet. Das Verhalten und die Priorisierung von Wissensdatenbanken entspricht damit dem generate_stream
-Endpunkt.
extra_body = {
"alan": {
"expert_id": "<expert-id>",
"knowledgebase_ids": ["<knowledgebase_id>"]
}
}
message = {
"role": "user",
"content": "Was kannst du mir über Max erzählen?"
}
completion = client.chat.completions.create(
messages=[message], model="comma-soft/llama-comma-llm-l-v3", stream=False, extra_body=extra_body
)
print(completion)
Einschränkungen
Zum jetzigen Zeitpunkt unterstützen wir lediglich die Basisfunktionalität wie oben beschrieben. Eine Erweiterung um fortgeschrittene Features wie Guided Generation oder Beam Search ist in einem der nächsten Updates geplant.