LLM、嵌入器及排名器

此頁面顯示用於將 LLM、內嵌及重新排名插入「Oracle 代理程式記憶體」的抽象介面。

LLM 介面

類別 oracleagentmemory.apis.llms.ILlm

基本:ABC

LLM 呼叫的抽象介面。

方法 generate (摘要)

同步從 LLM 產生回應。

method generate_async (抽象、非同步)

以非同步方式從 LLM 產生回應。

LLM 回應

類別 oracleagentmemory.apis.llms.LlmResponse

基礎:object

ILlm 傳回的小型標準化回應。

文字

主要產生的文字內容。

內嵌介面

類別 oracleagentmemory.apis.IEmbedder

基本:ABC

文字內嵌器的抽象介面 。

方法 embed (摘要)

將一批文字嵌入到 2D float32 NumPy 陣列中。

method embed_async (抽象、非同步)

將一批文字嵌入到 2D float32 NumPy 陣列中。

特性 embedding_dimension

從組態或提供者描述資料知道內嵌寬度時,子類別可以覆寫此特性。預設實作會探測 embed() 一次,並快取結果大小。

特性 max_input_tokens

當模型的輸入預算來自組態或提供者中繼資料時,子類別可以置換此特性。預設實作會驗證大小為預估 512 輸入記號的探測一次,並將 512 快取為保守的後援。它不會在本機執行模型記號器,因此當已知模型的實際輸入預算時,呼叫者應手動設定 max_input_tokens。

重新排名器介面

類別 oracleagentmemory.apis.IReranker

基本:ABC

同步與非同步文件重新排名的摘要介面。

實作必須為每個輸入文件傳回一個結果。每個零基輸入索引必須完全出現一次。relevance_score 必須是有限的,而較高的分數必須表示較大的相關性。結果必須從最高分數排序到最低分數。

方法 rerank

透過委派至 rerank_async 來同步排列文件的等級。

method rerank_async (抽象、非同步)

以非同步方式依與查詢的關聯來排列文件的等級。

類別 oracleagentmemory.apis.RerankResponse

基礎:object

完成依相關性分數遞減排序的文件排名。

類別 oracleagentmemory.apis.RerankResponseResult

基礎:object

一個文件的重新排名結果。

LiteLLM 轉接器

類別 oracleagentmemory.core.llms.LlmApiType

基礎:str、Enum

支援 OpenAI 相容的 Llm API 系列。

CHAT_COMPLETIONS = 'CHAT_COMPLETIONS'

回應 = 'RESPONSES'

類別 oracleagentmemory.core.llms.Llm

基本:ILlm

用於產生模型回應的轉接器。

建立 LLM 轉接器。

範例

OCI Generative AI 模型使用 LiteLLM 的 "oci/..." 模型識別碼。一般設定是透過 LiteLLM 特定關鍵字引數,從標準 OCI 組態檔傳送 OCI API 金鑰驗證明細。此套裝程式未安裝 OCI Python SDK;已經相依於它的應用程式可以交互傳送 oci_signer 物件。

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 代管的模型使用 LiteLLM 模型識別碼,例如 "openai/gpt-5.1" 和 OpenAI API 金鑰。「交談完成」是預設的 API 系列。

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.")

當應透過 OpenAI 回應 API 而非對談完成來呼叫目標模型時,請使用 api_type=LlmApiType.RESPONSES。

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'

自行代管的 OpenAI 相容伺服器 (包括 vLLM) 會以 "openai/..." 模型 ID 加上伺服器的 /v1 基本 URL 來呼叫。當端點未強制認證時,傳送名義 api_key,例如 "none"。

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.")

方法 generate

產生回應。

方法 generate_async (非同步)

非同步產生回應。

特性 supports_vision

類別 oracleagentmemory.core.embedders.Embedder

基本:IEmbedder

提供者支持的嵌入器。

建立提供者支持的嵌入器。

範例

OCI Generative AI 嵌入模型使用 "oci/..." 模型識別碼。一般設定是透過 LiteLLM 特定關鍵字引數,從標準 OCI 組態檔傳送 OCI API 金鑰驗證明細。此套裝程式未安裝 OCI Python SDK;已經相依於它的應用程式可以交互傳送 oci_signer 物件。

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 代管的內嵌模型使用識別碼,例如 "openai/text-embedding-3-small" 與 OpenAI API 金鑰。

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"])

自行代管的 OpenAI 相容內嵌伺服器 (包括 vLLM),請使用 "hosted_vllm/..." 提供者前置碼搭配伺服器的 /v1 基本 URL。

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"])

方法 embed

使用已設定的提供者內嵌一批文字。

方法 embed_async (非同步)

使用設定的提供者以非同步方式內嵌一批文字。

特性 embedding_dimension

備註

系統會傳回建構子提供的值,但不會聯絡提供者。否則,該特性會探測一次並快取結果。

特性 max_input_tokens

備註

系統會傳回建構子提供的值,但不會聯絡提供者。否則,該特性會驗證大小為預估 512 輸入記號的提供者探測,並將 512 快取為保守的後援。它不會在本機執行模型記號器,因此在精確度很重要時,從模型記載的輸入預算手動設定 max_input_tokens。

類別 oracleagentmemory.core.Reranker

基本:IReranker

Reranker 以供應商中立的排名介面為後盾。

範例

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."])

建立提供者支持的重新排名器。

方法 rerank_async (非同步)

以非同步方式依與查詢的關聯來排列文件的等級。

Oracle DB 嵌入器

類別 oracleagentmemory.core.embedders.OracleDBEmbedder

基本:IEmbedder

藉由呼叫 Oracle AI Database 內嵌 SQL 來內嵌文字。

此內嵌程式透過 SQL 將內嵌產生委派至資料庫時,會保持套件的現有內嵌程式合約不變。當向量化程式組態需要 JSON 提供者參數曲面時,直接內嵌會偏好使用 VECTOR_EMBEDDING 作為資料庫常駐模型組態,並落回 DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING。

建立由 Oracle AI Database SQL 執行支援的內嵌程式。

範例

使用 Oracle 連線集區與資料庫常駐內嵌模型:

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"])

當連線的綱要擁有其他綱要所擁有之模型的權限時,可以使用綱要限定模型名稱:

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

以下範例示範如何使用 OpenAI、vLLM、Cohere 和其他提供者設定 Oracle AI Database 內嵌項目:

OpenAI 範例:

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 範例:

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 相容的服務 (例如 vLLM) 也使用 "openai" 提供者。當端點不需要 Oracle AI Database 證明資料時,請將 host 設為 "local":

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"])

Gemini 範例:

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"])

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"])

您可以在不變更存放區 API 的情況下設定查詢特定前置碼:

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

方法 embed

在 Oracle AI Database 中執行 SQL 來內嵌一批文字。

範例

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

方法 embed_async (非同步)

使用 Oracle AI Database SQL 以非同步方式內嵌一批文字。

範例

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

特性 embedding_dimension

備註

傳回建構子提供的值,但未連線資料庫模型。否則,該屬性會探測一次,並將結果快取以供未來存取。

範例

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

方法 get_vectorizer_config_json

傳回此資料庫模型的 Oracle 向量設定程式偏好設定 JSON。

直接內嵌和受管理的混合索引會使用相同的模型組態。直接內嵌使用它來決定 VECTOR_EMBEDDING 是否可以代表設定的資料庫模型,或提供者 JSON 是否需要 DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING。混合編製索引會將其傳遞至 DBMS_VECTOR_CHAIN.CREATE_PREFERENCE,然後 Oracle 的向量化程式管線擁有該索引的內嵌工作。

範例

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"}}'

特性 max_input_tokens

備註

傳回建構子提供的值,但未連線資料庫模型。否則,此特性會驗證大小為預估 512 輸入記號的資料庫模型探測,並將 512 快取為保守的後援。它不會在本機執行模型記號器,因此在精確度很重要時,從模型記載的輸入預算手動設定 max_input_tokens。

範例

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