主题
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-openai1
2
2
%pip install llama-index1
设置
获取 Isaacus API 密钥
- 在 Isaacus 平台 创建账户
- 添加支付方式 以领取免费额度
- 创建 API 密钥
import os
# Set your Isaacus API key
isaacus_api_key = "YOUR_ISAACUS_API_KEY"
os.environ["ISAACUS_API_KEY"] = isaacus_api_key1
2
3
4
5
2
3
4
5
基本用法
获取单个嵌入
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]}")1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
获取批量嵌入
# 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")1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
面向特定任务的嵌入
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)}")1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 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)}")1
2
3
4
5
6
2
3
4
5
6
降维
你可以降低嵌入维度,以加快搜索速度并降低存储成本:
# 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)}")1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
使用法律文档的完整 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, display1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
下载法律文档数据
我们将使用 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'1
2
2
加载法律文档
documents = SimpleDirectoryReader("./data/10k/").load_data()
print(f"Loaded {len(documents)} document(s)")1
2
2
使用文档任务构建索引
构建索引时,我们使用 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,
)1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
使用法律问题查询
现在我们将用法律领域的问题查询索引。请注意,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)1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
查询法律诉讼
# 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)1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
使用 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_key1
2
3
4
5
2
3
4
5
# 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}"))1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
另一个法律查询
response = query_engine.query(
"What intellectual property does the company rely on?"
)
display(Markdown(f"**Answer:** {response}"))1
2
3
4
5
2
3
4
5
异步用法
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"
)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
总结
在本 Notebook 中,我们演示了:
- 基本用法——获取单个和批量嵌入
- 任务特定优化——使用
retrieval/document建立索引,使用retrieval/query进行搜索 - 降维——缩小嵌入尺寸以提高效率
- 法律 RAG 流水线——使用法律文档(Uber 10-K)构建完整的检索系统
- 异步操作——使用异步方法提升性能
Kanon 2 Embedder 擅长法律文档理解与检索,非常适合法律科技应用、合规工具、合同分析等场景。