LLM 和嵌入程序

此页提供了用于将 LLM 和嵌入程序插入到 Oracle 代理内存中的抽象接口。

LLM 接口

class oracleagentmemory.apis.llms.ILlm

基础:ABC

LLM 调用的抽象接口。

method generate(抽象)

同步从 LLM 生成响应。

method generate_async(抽象、异步)

从 LLM 异步生成响应。

LLM 响应

class oracleagentmemory.apis.llms.LlmResponse

基准:object

ILlm 返回的小型规范化响应。

文本

生成的主要文本内容。

嵌入器界面

class oracleagentmemory.apis.IEmbedder

基础:ABC

文本嵌入程序的抽象界面。

method embed(抽象)

将一批文本嵌入 2D float32 NumPy 数组中。

method embed_async(抽象、异步)

将一批文本嵌入 2D float32 NumPy 数组中。

property(属性)embedding_dimension

从配置或提供程序元数据中知道嵌入宽度时,子类可以覆盖此属性。缺省实现探测 embed() 一次并缓存结果大小。

property(属性)max_input_tokens

从配置或提供程序元数据中知道模型的输入预算时,子类可以覆盖此属性。默认实现将验证大小为估计 512 输入令牌的探测器一次,并将 512 高速缓存为保守回退。它不会在本地运行模型标记器,因此当已知模型的实际输入预算时,调用者应该手动设置 max_input_tokens

LiteLLM 适配器

class oracleagentmemory.core.llms.LlmApiType

基础:strEnum

Llm 支持 OpenAI 兼容的 API 系列。

CHAT_COMPLETIONS = ‘ CHAT_COMPLETIONS ’

响应 = 'RESPONSES'

class oracleagentmemory.core.llms.Llm

基础:ILlm

用于生成模型响应的适配器。

创建 LLM 适配器。

示例

OCI Generative AI 模型使用 LiteLLM 的 "oci/..." 模型标识符。一种常见的设置是将 OCI API 密钥验证详细信息从标准 OCI 配置文件传递到特定于 LiteLLM 的关键字参数。此程序包未安装 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/..." 模型标识符和服务器的 /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.")

method generate

生成回应。

method generate_async(异步)

异步生成响应。

class oracleagentmemory.core.embedders.Embedder

基础:IEmbedder

提供商支持的嵌入程序。

创建提供程序支持的嵌入程序。

示例

OCI Generative AI 嵌入模型使用 "oci/..." 模型标识符。一种常见的设置是将 OCI API 密钥验证详细信息从标准 OCI 配置文件传递到特定于 LiteLLM 的关键字参数。此程序包未安装 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 API 密钥的 "openai/text-embedding-3-small"

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)使用服务器 /v1 基本 URL 的 "hosted_vllm/..." 提供程序前缀。

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

method embed

使用配置的提供程序嵌入一批文本。

method embed_async(异步)

使用配置的提供程序异步嵌入一批文本。

property(属性)embedding_dimension

返回构造器提供的值,而不与提供程序联系。否则,属性将探测一次并缓存结果。

property(属性)max_input_tokens

返回构造器提供的值,而不与提供程序联系。否则,该属性将验证大小为估计 512 输入令牌的提供程序探测器,并将 512 高速缓存为保守回退。它不会在本地运行模型标记器,因此当精度很重要时,请从模型的已记录输入预算中手动设置 max_input_tokens

Oracle DB 嵌入程序

class oracleagentmemory.core.embedders.OracleDBEmbedder

基础:IEmbedder

通过调用 Oracle Database 嵌入 SQL 来嵌入文本。

此嵌入程序使程序包的现有嵌入程序合同保持不变,同时通过 SQL 将嵌入生成委托给数据库。对于数据库驻留模型配置,直接嵌入优先于 VECTOR_EMBEDDING,当向量器配置需要 JSON 提供方参数表面时,可回退到 DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING

创建由 Oracle 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"])

可以在不更改存储 API 的情况下配置特定于查询的前缀:

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

method embed

通过在 Oracle Database 中执行 SQL 嵌入一批文本。

示例

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

method embed_async(异步)

使用 Oracle Database SQL 异步嵌入一批文本。

示例

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

property(属性)embedding_dimension

在不与数据库模型联系的情况下,将返回构造器提供的值。否则,属性将探测一次并缓存结果以供将来访问。

示例

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

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

property(属性)max_input_tokens

在不与数据库模型联系的情况下,将返回构造器提供的值。否则,该属性将验证大小为估计 512 输入令牌的数据库模型探测器,并将 512 高速缓存为保守回退。它不会在本地运行模型标记器,因此当精度很重要时,请从模型的已记录输入预算中手动设置 max_input_tokens

示例

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