Skip to content

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

python
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

python
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.

python
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

python
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

python
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.

python
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.

python
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.