LLMs, Einbettungen und Reranker

Auf dieser Seite werden die abstrakten Schnittstellen vorgestellt, mit denen LLMs, Einbettungen und Reranker in den Oracle Agent-Speicher integriert werden.

LLM-Schnittstelle

Klasse oracleagentmemory.apis.llms.ILlm

Basen: ABC

Abstrakte Schnittstelle für LLM-Aufruf.

Methode generate (Übung)

Generieren Sie eine Antwort von einem LLM synchron.

Methode generate_async (abstrakt, asynchron)

Generieren Sie asynchron eine Antwort aus einem LLM.

LLM-Antworten

Klasse oracleagentmemory.apis.llms.LlmResponse

Basis: object

Eine kleine normalisierte Antwort, die von ILlm zurückgegeben wird.

Text

Der primäre generierte Textinhalt.

Einbettungsschnittstelle

Klasse oracleagentmemory.apis.IEmbedder

Basen: ABC

Abstrakte Schnittstelle für Texteinbettungen.

Methode embed (Übung)

Integrieren Sie eine Reihe von Texten in ein 2D float32 NumPy Array.

Methode embed_async (abstrakt, asynchron)

Integrieren Sie eine Reihe von Texten in ein 2D float32 NumPy Array.

Eigenschaft embedding_dimension

Unterklassen können diese Eigenschaft außer Kraft setzen, wenn die Einbettungsbreite aus Konfigurations- oder Providermetadaten bekannt ist. Die Standardimplementierung prüft einmal embed() und cacht die Ergebnisgröße.

Eigenschaft max_input_tokens

Unterklassen können diese Eigenschaft überschreiben, wenn das Eingabebudget des Modells aus Konfigurations- oder Providermetadaten bekannt ist. Die Standardimplementierung validiert eine Stichprobengröße einmal auf geschätzte 512-Eingabetoken und cacht 512 als konservatives Fallback. Ein Modell-Tokenizer wird nicht lokal ausgeführt. Daher sollten Aufrufer max_input_tokens manuell festlegen, wenn das tatsächliche Eingabebudget des Modells bekannt ist.

Reranker-Schnittstelle

Klasse oracleagentmemory.apis.IReranker

Basen: ABC

Abstrakte Schnittstelle für synchrones und asynchrones Dokumenten-Reranking.

Implementierungen müssen für jedes Eingabedokument ein Ergebnis zurückgeben. Jeder nullbasierte Eingabeindex muss genau einmal angezeigt werden. relevance_score muss endlich sein, und höhere Scores müssen eine größere Relevanz angeben. Die Ergebnisse müssen vom höchsten bis zum niedrigsten Score sortiert werden.

Methode rerank

Ordnen Sie Dokumente synchron an, indem Sie an rerank_async delegieren.

Methode rerank_async (abstrakt, asynchron)

Ordnen Sie Dokumente asynchron nach Relevanz für eine Abfrage ein.

Klasse oracleagentmemory.apis.RerankResponse

Basis: object

Schließen Sie die Dokumenteneinstufung nach absteigender Relevanz ab.

Klasse oracleagentmemory.apis.RerankResponseResult

Basis: object

Ergebnis der erneuten Einstufung eines Dokuments.

LiteLLM-Adapter

Klasse oracleagentmemory.core.llms.LlmApiType

Basis: str, Enum

Unterstützte OpenAI-kompatible API-Familien für Llm.

CHAT_COMPLETIONS = 'CHAT_COMPLETIONS'

RESPONSES = 'RESPONSES'

Klasse oracleagentmemory.core.llms.Llm

Basis: ILlm

Adapter zum Generieren von Modellantworten.

LLM-Adapter erstellen

Beispiele

OCI Generative AI-Modelle verwenden die "oci/..."-Modell-IDs von LiteLLM. Ein gängiges Setup besteht darin, OCI-API-Schlüsselauthentifizierungsdetails aus der OCI-Standardkonfigurationsdatei über LiteLLM-spezifische Schlüsselwortargumente zu übergeben. Das OCI-Python-SDK wird von diesem Package nicht installiert. Anwendungen, die bereits davon abhängig sind, können alternativ ein oci_signer-Objekt übergeben.

import configparser
from pathlib import Path
parser = configparser.RawConfigParser()
parser.read(Path("~/.oci/config").expanduser())
cfg = parser["DEFAULT"]
key_file = Path(cfg["key_file"]).expanduser()
oci_llm = Llm(
    model="oci/openai.gpt-oss-120b",
    oci_compartment_id="ocid1.compartment.oc1..example",
    oci_region=cfg.get("region", "us-chicago-1"),
    oci_user=cfg["user"],
    oci_fingerprint=cfg["fingerprint"],
    oci_tenancy=cfg["tenancy"],
    oci_key_file=str(key_file),
)
oci_llm.generate("Reply with OK.")

OpenAI-gehostete Modelle verwenden LiteLLM-Modell-IDs wie "openai/gpt-5.1" und einen OpenAI-API-Schlüssel. Chat-Abschlüsse sind die Standard-API-Familie.

openai_llm = Llm(
    model="openai/gpt-5.1",
    api_key="sk-example",
    temperature=0,
    max_tokens=128,
)
openai_llm.model
'openai/gpt-5.1'
openai_llm.generate("Reply with OK.")

Verwenden Sie api_type=LlmApiType.RESPONSES, wenn das Zielmodell über die OpenAI-Antworten-API anstelle von Chatabschlüssen aufgerufen werden soll.

responses_llm = Llm(
    model="openai/gpt-5.4",
    api_key="sk-example",
    api_type=LlmApiType.RESPONSES,
    reasoning_effort="high",
    stream=True,
)
responses_llm.model
'openai/gpt-5.4'

Selbst gehostete OpenAI-kompatible Server, einschließlich vLLM, werden mit einer Modell-ID "openai/..." plus der Basis-URL /v1 des Servers aufgerufen. Übergeben Sie eine nominale api_key, wie "none", wenn der Endpunkt die Authentifizierung nicht erzwingt.

vllm_llm = Llm(
    model="openai/openai/gpt-oss-120b",
    api_base="http://localhost:8000/v1",
    api_key="none",
    stream=True,
)
vllm_llm.model
'openai/openai/gpt-oss-120b'
vllm_llm.generate("Reply with OK.")

Methode generate

Generieren Sie eine Antwort.

Methode generate_async (asynchron)

Antwort asynchron generieren.

Eigenschaft supports_vision

Klasse oracleagentmemory.core.embedders.Embedder

Basis: IEmbedder

Provider-backed-Einbettung.

Providerbacked Embedder erstellen

Beispiele

OCI Generative AI-Einbettungsmodelle verwenden "oci/..."-Modell-IDs. Ein gängiges Setup besteht darin, OCI-API-Schlüsselauthentifizierungsdetails aus der OCI-Standardkonfigurationsdatei über LiteLLM-spezifische Schlüsselwortargumente zu übergeben. Das OCI-Python-SDK wird von diesem Package nicht installiert. Anwendungen, die bereits davon abhängig sind, können alternativ ein oci_signer-Objekt übergeben.

import configparser
from pathlib import Path
parser = configparser.RawConfigParser()
parser.read(Path("~/.oci/config").expanduser())
cfg = parser["DEFAULT"]
key_file = Path(cfg["key_file"]).expanduser()
oci_embedder = Embedder(
    model="oci/cohere.embed-english-v3.0",
    oci_compartment_id="ocid1.compartment.oc1..example",
    oci_region=cfg.get("region", "us-chicago-1"),
    oci_user=cfg["user"],
    oci_fingerprint=cfg["fingerprint"],
    oci_tenancy=cfg["tenancy"],
    oci_key_file=str(key_file),
)
oci_embedder.embed(["hello world"])

OpenAI-gehostete Einbettungsmodelle verwenden IDs wie "openai/text-embedding-3-small" mit einem OpenAI-API-Schlüssel.

openai_embedder = Embedder(
    model="openai/text-embedding-3-small",
    api_key="sk-example",
    truncate_prompt_tokens=8192,
)
openai_embedder.model
'openai/text-embedding-3-small'
openai_embedder.embed(["hello world"])

Selbst gehostete OpenAI-kompatible Einbettungsserver, einschließlich vLLM, verwenden das Providerpräfix "hosted_vllm/..." mit der Basis-URL /v1 des Servers.

vllm_embedder = Embedder(
    model="hosted_vllm/sentence-transformers/all-MiniLM-L6-v2",
    api_base="http://localhost:8000/v1",
)
vllm_embedder.model
'hosted_vllm/sentence-transformers/all-MiniLM-L6-v2'
vllm_embedder.embed(["hello world"])

Methode embed

Einbetten eines Textbatches mit dem konfigurierten Provider.

Methode embed_async (asynchron)

Einbetten eines Textbatches mit dem konfigurierten Provider asynchron.

Eigenschaft embedding_dimension

Hinweise

Ein vom Konstruktor angegebener Wert wird zurückgegeben, ohne den Provider zu kontaktieren. Andernfalls prüft die Eigenschaft einmal und speichert das Ergebnis im Cache.

Eigenschaft max_input_tokens

Hinweise

Ein vom Konstruktor angegebener Wert wird zurückgegeben, ohne den Provider zu kontaktieren. Andernfalls validiert die Eigenschaft eine Provider-Probe, deren Größe auf geschätzte 512-Eingabetoken geschätzt wird, und cacht 512 als konservatives Fallback. Ein Modell-Tokenizer wird nicht lokal ausgeführt. Legen Sie daher max_input_tokens manuell aus dem dokumentierten Eingabebudget des Modells fest, wenn die Genauigkeit wichtig ist.

Klasse oracleagentmemory.core.Reranker

Basis: IReranker

Reranker mit Provider-neutraler Rerank-Schnittstelle.

Beispiele

reranker = Reranker(
    model="your-reranker-model",
    api_base="https://your-reranker-endpoint/v1",
    api_key="your-api-key",
)
reranker.rerank("favorite food", ["The user likes pasta."])
oci_reranker = Reranker(
    model="oci/cohere.rerank-v4.0-fast",
    oci_compartment_id="ocid1.compartment...",
    oci_region="your-region",
    oci_user="ocid1.user...",
    oci_fingerprint="aa:bb:cc",
    oci_tenancy="ocid1.tenancy...",
    oci_key_file="~/.oci/oci_api_key.pem",
)
oci_reranker.rerank("favorite food", ["The user likes pasta."])

Reranker mit Provider-Unterstützung erstellen

Methode rerank_async (asynchron)

Ordnen Sie Dokumente asynchron nach Relevanz für eine Abfrage ein.

Oracle DB-Einbettungen

Klasse oracleagentmemory.core.embedders.OracleDBEmbedder

Basis: IEmbedder

Einbetten von Text durch Aufrufen von SQL zur Einbettung in Oracle AI Database.

Durch diese Einbettung bleibt der vorhandene Einbettungsvertrag des Packages intakt, während die Einbettungsgenerierung über SQL an die Datenbank delegiert wird. Die direkte Einbettung bevorzugt VECTOR_EMBEDDING für datenbankresidente Modellkonfigurationen und fällt zurück auf DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING, wenn die Vectorizer-Konfiguration die Oberfläche des JSON-Providerparameters benötigt.

Erstellen Sie einen Einbettungsknoten, der von der SQL-Ausführung von Oracle AI Database unterstützt wird.

Beispiele

Verwenden Sie einen Oracle-Verbindungspool und ein DB-residentes Einbettungsmodell:

import oracledb
pool = oracledb.create_pool(
    user="scott",
    password="tiger",
    dsn="dbhost.example.com/orclpdb",
)
embedder = OracleDBEmbedder(
    connection=pool,
    model="DOC_MODEL",
    embedding_dimension=768,
)
embedder.embed(["hello world"])

Schema-qualifizierte Modellnamen können verwendet werden, wenn das verbundene Schema über Berechtigungen für ein Modell verfügt, das einem anderen Schema gehört:

shared_embedder = OracleDBEmbedder(
    connection=pool,
    model="MY_OTHER_SCHEMA.MY_ONNX_MODEL",
    embedding_dimension=768,
)
shared_embedder.embed(["hello world"])

Die folgenden Beispiele zeigen, wie Sie Oracle AI Database-Einbettungen mit OpenAI, vLLM, Cohere und anderen Anbietern konfigurieren:

OpenAI-Beispiel:

openai_embedder = OracleDBEmbedder(
    connection=pool,
    provider="openai",
    model="text-embedding-3-small",
    provider_options={
        "credential_name": "OPENAI_CRED",
        "url": "https://api.openai.example.com/embeddings",
    },
)
openai_embedder.embed(["hello world"])

Cohere-Beispiel:

cohere_embedder = OracleDBEmbedder(
    connection=pool,
    provider="cohere",
    model="embed-english-v3.0",
    provider_options={
        "credential_name": "COHERE_CRED",
        "url": "https://api.cohere.example.com/embed",
        "input_type": "search_document",
    },
)
cohere_embedder.embed(["hello world"])

OpenAI-kompatible Services wie vLLM verwenden auch den "openai"-Provider. Setzen Sie host auf "local", wenn der Endpunkt keine Oracle AI Database-Zugangsdaten benötigt:

vllm_embedder = OracleDBEmbedder(
    connection=pool,
    provider="openai",
    model="BAAI/bge-small-en-v1.5",
    provider_options={
        "url": "http://localhost:8080/v1/embeddings",
        "host": "local",
    },
)
vllm_embedder.embed(["hello world"])

Zwillingsbeispiel:

gemini_embedder = OracleDBEmbedder(
    connection=pool,
    provider="googleai",
    model="gemini-embedding-001",
    provider_options={
        "credential_name": "GOOGLEAI_CRED",
        "url": "https://googleapis.example.com/models/",
    },
)
gemini_embedder.embed(["hello world"])

Beispiel für Hugging Face:

huggingface_embedder = OracleDBEmbedder(
    connection=pool,
    provider="huggingface",
    model=(
        "sentence-transformers/all-MiniLM-L6-v2"
    ),
    provider_options={
        "credential_name": "HF_CRED",
        "url": "https://router.huggingface.example.com/",
    },
)
huggingface_embedder.embed(["hello world"])

Abfragespezifische Präfixe können ohne Änderung der Speicher-API konfiguriert werden:

embedder = OracleDBEmbedder(
    connection=pool,
    model="DOC_MODEL",
    query_prefix="search_document: ",
)
embedder.embed(["pizza"], is_query=True)

Methode embed

Integrieren Sie einen Textbatch, indem Sie SQL in Oracle AI Database ausführen.

Beispiele

embedder = OracleDBEmbedder(
    connection=pool,
    model="DOC_MODEL",
)
matrix = embedder.embed(["alpha", "beta"])
matrix.shape[0]
2

Methode embed_async (asynchron)

Mit Oracle AI Database SQL asynchron einen Textbatch einbetten.

Beispiele

embedder = OracleDBEmbedder(
    connection=pool,
    model="DOC_MODEL",
)
matrix = await embedder.embed_async(["hello"])
matrix.shape
(1, 384)

Eigenschaft embedding_dimension

Hinweise

Ein vom Konstruktor bereitgestellter Wert wird zurückgegeben, ohne das Datenbankmodell zu kontaktieren. Andernfalls prüft die Eigenschaft einmal und speichert das Ergebnis für zukünftige Zugriffe im Cache.

Beispiele

embedder = OracleDBEmbedder(
    connection=pool,
    model="DOC_MODEL",
    embedding_dimension=768,
)
embedder.embedding_dimension
768

Methode get_vectorizer_config_json

Geben Sie JSON für die Oracle Vectorizer-Voreinstellung für dieses DB-Modell zurück.

Dieselbe Modellkonfiguration wird durch direkte Einbettung und durch verwaltete Hybridindizes verwendet. Die direkte Einbettung verwendet sie, um zu entscheiden, ob VECTOR_EMBEDDING das konfigurierte Datenbankmodell darstellen kann oder ob DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING für Provider-JSON erforderlich ist. Die Hybridindizierung übergibt sie an DBMS_VECTOR_CHAIN.CREATE_PREFERENCE, und dann ist die Vectorizer-Pipeline von Oracle Eigentümer der Einbettungsarbeit für diesen Index.

Beispiele

embedder = OracleDBEmbedder(
    connection=pool,
    model="DOC_MODEL",
    embedding_dimension=768,
)
embedder.get_vectorizer_config_json()
'{"model":"DOC_MODEL"}'
custom_embedder = OracleDBEmbedder(
    connection=pool,
    model="DOC_MODEL",
    input_name="TEXT",
    embedding_dimension=768,
)
custom_embedder.get_vectorizer_config_json()
'{"model":"DOC_MODEL","input_name":"TEXT"}'
shared_embedder = OracleDBEmbedder(
    connection=pool,
    model="MY_OTHER_SCHEMA.MY_ONNX_MODEL",
    embedding_dimension=768,
)
shared_embedder.get_vectorizer_config_json()
'{"model":"MY_OTHER_SCHEMA.MY_ONNX_MODEL"}'
remote_embedder = OracleDBEmbedder(
    connection=pool,
    provider="openai",
    model="text-embedding-3-small",
    provider_options={"host": "local", "url": "http://localhost:8080/v1/embeddings"},
)
remote_embedder.get_vectorizer_config_json()
'{"embedder_spec":{"host":"local","url":"http://localhost:8080/v1/embeddings","provider":"openai","model":"text-embedding-3-small"}}'

Eigenschaft max_input_tokens

Hinweise

Ein vom Konstruktor bereitgestellter Wert wird zurückgegeben, ohne das Datenbankmodell zu kontaktieren. Andernfalls validiert die Eigenschaft eine Datenbankmodell-Sondierung in der Größe auf geschätzte 512-Eingabetoken und cacht 512 als konservatives Fallback. Ein Modell-Tokenizer wird nicht lokal ausgeführt. Legen Sie daher max_input_tokens manuell aus dem dokumentierten Eingabebudget des Modells fest, wenn die Genauigkeit wichtig ist.

Beispiele

embedder = OracleDBEmbedder(
    connection=pool,
    model="DOC_MODEL",
    max_input_tokens=2048,
)
embedder.max_input_tokens
2048