EsempioscriptintermediateEseguibileresearch-brief
Embedding
Esempio rieseguibile intermediate di tipo script che usa docling, ipykernel.
Fatti chiave
- Livello
- intermediate
- Runtime
- Python • API OpenAI
- Pattern
- Ricerca supportata dal contesto con evidenza esplicita
- Interazione
- Sandbox live • Script
- Aggiornato
- 14 marzo 2026
Naviga questo esempio
Libreria
Sfoglia gli esempiRiapri la libreria completa per confrontare pattern vicini e percorsi collegati.Interazione
Esegui ora nel sandboxProva l'interazione direttamente nella superficie guidata di questo esempio.Sorgente
Apri codice completoLeggi l'implementazione reale, i punti evidenziati e i requisiti runtime.MCP
Chiama via MCPUsa la stessa risorsa dentro agenti, export deterministici e setup MCP.
Principi collegati
3-embedding.py
python
from typing import List
import lancedb
from docling.chunking import HybridChunker
from docling.document_converter import DocumentConverter
from dotenv import load_dotenv
from lancedb.embeddings import get_registry
from lancedb.pydantic import LanceModel, Vector
from openai import OpenAI
from utils.tokenizer import OpenAITokenizerWrapper
load_dotenv()
# Initialize OpenAI client (make sure you have OPENAI_API_KEY in your environment variables)
client = OpenAI()
tokenizer = OpenAITokenizerWrapper() # Load our custom tokenizer for OpenAI
MAX_TOKENS = 8191 # text-embedding-3-large's maximum context length
# --------------------------------------------------------------
# Extract the data
# --------------------------------------------------------------
converter = DocumentConverter()
result = converter.convert("https://arxiv.org/pdf/2408.09869")
# --------------------------------------------------------------
# Apply hybrid chunking
# --------------------------------------------------------------
chunker = HybridChunker(
tokenizer=tokenizer,
max_tokens=MAX_TOKENS,
merge_peers=True,
)
chunk_iter = chunker.chunk(dl_doc=result.document)
chunks = list(chunk_iter)
# --------------------------------------------------------------
# Create a LanceDB database and table
# --------------------------------------------------------------
# Create a LanceDB database
db = lancedb.connect("data/lancedb")
# Get the OpenAI embedding function
func = get_registry().get("openai").create(name="text-embedding-3-large")
# Define a simplified metadata schema
class ChunkMetadata(LanceModel):
"""
You must order the fields in alphabetical order.
This is a requirement of the Pydantic implementation.
"""
filename: str | None
page_numbers: List[int] | None
title: str | None
# Define the main Schema
class Chunks(LanceModel):
text: str = func.SourceField()
vector: Vector(func.ndims()) = func.VectorField() # type: ignore
metadata: ChunkMetadata
table = db.create_table("docling", schema=Chunks, mode="overwrite")
# --------------------------------------------------------------
# Prepare the chunks for the table
# --------------------------------------------------------------
# Create table with processed chunks
processed_chunks = [
{
"text": chunk.text,
"metadata": {
"filename": chunk.meta.origin.filename,
"page_numbers": [
page_no
for page_no in sorted(
set(
prov.page_no
for item in chunk.meta.doc_items
for prov in item.prov
)
)
]
or None,
"title": chunk.meta.headings[0] if chunk.meta.headings else None,
},
}
for chunk in chunks
]
# --------------------------------------------------------------
# Add the chunks to the table (automatically embeds the text)
# --------------------------------------------------------------
table.add(processed_chunks)
# --------------------------------------------------------------
# Load the table
# --------------------------------------------------------------
table.to_pandas()
table.count_rows()
Principi correlati
- P4trustApplicare la divulgazione progressiva all'agenzia del sistemaFornire per impostazione predefinita le informazioni minime necessarie, consentendo agli utenti di ispezionare ulteriori dettagli quando è richiesta fiducia, comprensione o intervento.Apri il principio →
- P6visibilityEsporre uno stato operativo significativo, non la complessità internaPresentare lo stato del sistema in linguaggio e strutture rilevanti per l'utente, piuttosto che esporre dettagli interni di basso livello che non supportano l'azione o la comprensione.Apri il principio →
- P7trustStabilire fiducia attraverso l'ispezionabilitàGli utenti dovrebbero essere in grado di esaminare come è stato prodotto un risultato quando la fiducia, la responsabilità o la qualità della decisione sono importanti.Apri il principio →