Skip to content
LlamaIndex 文档版本 跟随上游 源快照 63d50f4a 更新于 2026-10-18

llama-index-embeddings-isaacus 包包含 LlamaIndex 集成,用于基于 Isaacus 的法律 AI 嵌入模型构建应用。该集成让你可以轻松连接并使用 Kanon 2 Embedder——在大规模法律嵌入基准(MLEB) 上全球最准确的法律嵌入模型。

Isaacus 嵌入模型支持针对特定任务的优化:

  • task="retrieval/query":针对搜索查询优化嵌入
  • task="retrieval/document":针对待索引的文档优化嵌入

在本 Notebook 中,我们将演示如何使用 Isaacus Embeddings 进行法律文档检索。

安装

安装必要的集成。

如果你在 Colab 中打开这个 Notebook,可能需要先安装 LlamaIndex 🦙。

%pip install llama-index-embeddings-isaacus
%pip install llama-index-llms-openai
%pip install llama-index

设置

获取 Isaacus API 密钥

  1. 在 Isaacus 平台 创建账户
  2. 添加支付方式 以领取免费额度
  3. 创建 API 密钥
import os

# Set your Isaacus API key
isaacus_api_key = "YOUR_ISAACUS_API_KEY"
os.environ["ISAACUS_API_KEY"] = isaacus_api_key

基本用法

获取单个嵌入

from llama_index.embeddings.isaacus import IsaacusEmbedding

# Initialize the Isaacus Embedding model
embed_model = IsaacusEmbedding(
    api_key=isaacus_api_key,
    model="kanon-2-embedder",
)

# Get a single embedding
embedding = embed_model.get_text_embedding(
    "This agreement shall be governed by the laws of Delaware."
)

print(f"Embedding dimension: {len(embedding)}")
print(f"First 5 values: {embedding[:5]}")

获取批量嵌入

# Get embeddings for multiple legal texts
legal_texts = [
    "The parties agree to binding arbitration.",
    "Confidential information shall not be disclosed.",
    "This contract may be terminated with 30 days notice.",
]

embeddings = embed_model.get_text_embedding_batch(legal_texts)

print(f"Number of embeddings: {len(embeddings)}")
print(f"Each embedding has {len(embeddings[0])} dimensions")

面向特定任务的嵌入

Isaacus 嵌入模型支持不同的任务,以实现最佳性能:

  • retrieval/document:用于待索引的文档
  • retrieval/query:用于搜索查询

使用合适的任务可提升检索准确率。

# For documents (use when indexing)
doc_embed_model = IsaacusEmbedding(
    api_key=isaacus_api_key,
    task="retrieval/document",
)

doc_embedding = doc_embed_model.get_text_embedding(
    "The Company has the right to terminate this agreement."
)

print(f"Document embedding dimension: {len(doc_embedding)}")
# For queries (automatically used by get_query_embedding)
query_embedding = embed_model.get_query_embedding(
    "What are the termination conditions?"
)

print(f"Query embedding dimension: {len(query_embedding)}")

降维

你可以降低嵌入维度,以加快搜索速度并降低存储成本:

# Use reduced dimensions (default is 1792)
embed_model_512 = IsaacusEmbedding(
    api_key=isaacus_api_key,
    dimensions=512,
)

embedding_512 = embed_model_512.get_text_embedding("Legal text example")

print(f"Reduced embedding dimension: {len(embedding_512)}")

使用法律文档的完整 RAG 示例

现在,让我们使用 Isaacus embeddings 和一个法律文档(Uber 的 10-K SEC 申报文件)构建完整的 RAG 流水线。

import logging
import sys

logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.llms.openai import OpenAI
from llama_index.core.response.notebook_utils import display_source_node
from IPython.display import Markdown, display

下载法律文档数据

我们将使用 Uber 的 10-K SEC 申报文件,其中包含法律与监管信息——非常适合展示 Kanon 2 在法律领域的专业能力。

!mkdir -p 'data/10k/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/10k/uber_2021.pdf' -O 'data/10k/uber_2021.pdf'

加载法律文档

documents = SimpleDirectoryReader("./data/10k/").load_data()
print(f"Loaded {len(documents)} document(s)")

使用文档任务构建索引

构建索引时,我们使用 task="retrieval/document" 来针对文档存储优化嵌入。

# Initialize embedding model for documents
embed_model = IsaacusEmbedding(
    api_key=isaacus_api_key,
    model="kanon-2-embedder",
    task="retrieval/document",
)

# Build the index
index = VectorStoreIndex.from_documents(
    documents=documents,
    embed_model=embed_model,
)

使用法律问题查询

现在我们将用法律领域的问题查询索引。请注意,get_query_embedding 会自动使用 task="retrieval/query" 以获得最佳查询性能。

# Create a retriever
retriever = index.as_retriever(similarity_top_k=3)

# Query about risk factors
retrieved_nodes = retriever.retrieve(
    "What are the main risk factors mentioned in the document?"
)

print(f"Retrieved {len(retrieved_nodes)} nodes\n")

for i, node in enumerate(retrieved_nodes):
    print(f"\n--- Node {i+1} (Score: {node.score:.4f}) ---")
    display_source_node(node, source_length=500)

查询法律诉讼

# Query about legal proceedings
retrieved_nodes = retriever.retrieve(
    "What legal proceedings or litigation is the company involved in?"
)

print(f"Retrieved {len(retrieved_nodes)} nodes\n")

for i, node in enumerate(retrieved_nodes):
    print(f"\n--- Node {i+1} (Score: {node.score:.4f}) ---")
    display_source_node(node, source_length=500)

使用 LLM 构建查询引擎

将 Isaacus embeddings 与 LLM 结合,实现完整的问答:

import os

# Set your OpenAI API key
openai_api_key = "YOUR_OPENAI_API_KEY"
os.environ["OPENAI_API_KEY"] = openai_api_key
# Set up LLM
llm = OpenAI(model="gpt-4o-mini", temperature=0)

# Create query engine
query_engine = index.as_query_engine(
    llm=llm,
    similarity_top_k=5,
)

# Ask a legal question
response = query_engine.query(
    "What are the company's main regulatory and legal risks?"
)

display(Markdown(f"**Answer:** {response}"))

另一个法律查询

response = query_engine.query(
    "What intellectual property does the company rely on?"
)

display(Markdown(f"**Answer:** {response}"))

异步用法

Isaacus embeddings 还支持异步操作,可在异步应用中提升性能:

import asyncio

async def get_embeddings_async():
    embed_model = IsaacusEmbedding(
        api_key=isaacus_api_key,
    )

    # Get async single embedding
    embedding = await embed_model.aget_text_embedding(
        "Async legal document text"
    )

    # Get async batch embeddings
    embeddings = await embed_model.aget_text_embedding_batch(
        ["Text 1", "Text 2", "Text 3"]
    )

    return embedding, embeddings

# Run async function
embedding, embeddings = await get_embeddings_async()

print(f"Async single embedding dimension: {len(embedding)}")
print(
    f"Async batch: {len(embeddings)} embeddings of {len(embeddings[0])} dimensions each"
)

总结

在本 Notebook 中,我们演示了:

  1. 基本用法——获取单个和批量嵌入
  2. 任务特定优化——使用 retrieval/document 建立索引,使用 retrieval/query 进行搜索
  3. 降维——缩小嵌入尺寸以提高效率
  4. 法律 RAG 流水线——使用法律文档(Uber 10-K)构建完整的检索系统
  5. 异步操作——使用异步方法提升性能

Kanon 2 Embedder 擅长法律文档理解与检索,非常适合法律科技应用、合规工具、合同分析等场景。

其他资源

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。