Aka blog tuqinx kunjams RAG ukatakix codebase ukar CocoIndex ukamp indexañax uk uñacht’ayapxäma. CocoIndex ukax mä herramienta ukawa, ukax índice ukat jiskt’äwinak datos ukar yanapt’añatakiwa. Ukax mä marco ukham apnaqañatakiw wakicht’ata, juma pachpaw pipeline de datos ukar lurañataki. CocoIndex ukax código base chunking ukaruw yanapt’i, nativo Tree-sitter ukampiw yanapt’asi.
Quqa-sitter ukax mä parser generador herramienta ukat mä incremental parsing biblioteca ukawa, ukax Rust 🦀 - GitHub ukan utji. CocoIndex ukax Rust ukan mayacht’asiw Tree-sitter ukamp luratawa, ukhamat código ukar sum uñakipt’añataki ukhamarak sintaxis quqanak apsuñataki kunayman programación arunakataki.
Codebase chunking ukax mä codebase ukar jisk’a, semánticamente significativo chunks ukar t’unjañ lurawiwa. CocoIndex ukax Tree-sitter ukan ch’amanchawinakap aprovecha, chiqpach sintaxis ukan estructura ukarjam amuyt’at chimpunak chimpuntañataki, jan ukax arbitrariu líneas ukar t’unjañataki. Ukatx uka semánticamente coherente chimpunakax sistemas RAG ukatakix mä índice juk’amp aski lurañatakiw apnaqasi, ukax juk’amp chiqaparu código apsuñapataki ukhamarak contexto juk’amp suma jark’aqañataki.
Fast pass 🚀 - ukax taqpach codigo ukax akan jikxatasi . ~ 50 líneas de código Python ukakiw RAG pipeline ukatakix utji, uñakipt'añäni 🤗!
Github ukan CocoIndex ukar mä warawara churapxañamawa, jiwasan lurawinakas munapxsta ukhax yanapt’apxita. Walpun yuspajarapxsma mä junt'u coco jamp'att'awimpi 🥥🤗.
Postgres ukax jan utjkchi ukhax, instalación guia ukar uñakipt’añamawa . CocoIndex ukax Postgres uka apnaqi, índice de datos ukar apnaqañataki, jiwasax thakhi uñacht’äwisanx yaqha bases de datos ukar yanapt’añatakiw utji, ukax nayrar sartaskir ukanakas utjarakiwa. Yaqha bases de datos ukar munaschi ukhax mä GitHub jan walt’äw jan ukax Discord ukar lurasaw yatiyapxita.
Mä base de código ukan uñakipañatakix cocoIndex flujo ukar qhanañcht’añäni ukat RAG ukar indexañäni.
Aka pata tuqinkir diagrama de flujo ukax kunjams jiwasan código base ukar lurañasa uk uñacht’ayi:
Aka flujo ukax mä juk’a pacharuw phuqhachañäni.
@cocoindex.flow_def(name="CodeEmbedding") def code_embedding_flow(flow_builder: cocoindex.FlowBuilder, data_scope: cocoindex.DataScope): """ Define an example flow that embeds files into a vector database. """ data_scope["files"] = flow_builder.add_source( cocoindex.sources.LocalFile(path="../..", included_patterns=["*.py", "*.rs", "*.toml", "*.md", "*.mdx"], excluded_patterns=[".*", "target", "**/node_modules"])) code_embeddings = data_scope.add_collector()
Aka uñacht’awina, cocoindex codebase ukax saphi directorio ukanx indexañatakiw saraski. Ukaxa thakhi mayjt’ayaña codebase ukaru indexaña munata. Taqi qillqatanakax .py
, .rs
, .toml
, .md
, .mdx
, ukat directorios saltar ukanak ., target (saphin) ukat node_modules (kuna directorio manqhan) ukanakamp qalltasin extensiones ukanakampiw indexañäni.
flow_builder.add_source
ukax mä tabla lurani aka jisk’a chiqanakampi, aka chiqan qillqatanaka uñakipt’aña.
filename
(llave, tipo: str
): qillqatan qillqat sutipa, sañäni dir1/file1.md
content
(tipo: str
ukax binary
ukax False
ukhamawa , jan ukhamäkanixa bytes
): qillqatan utjki ukaNayraqatax mä luraw qhanañcht’añäni, sapa qillqat lurañ pachanx mä qillqat sutimp jilxatayañataki. Aka chiqanx funcionamiento personalizado ukatakix documentación ukaw jikxatasi .
@cocoindex.op.function() def extract_extension(filename: str) -> str: """Extract the extension of a filename.""" return os.path.splitext(filename)[1]
Ukatxa sapa archivo uñakipaña ukhamaraki yatiyawinak apthapiña.
# ... with data_scope["files"].row() as file: file["extension"] = file["filename"].transform(extract_extension)
Aka chiqanx arsuwi sutimp jach’anchawi apsuñasawa ukatx extension
chiqan imañasawa. sañäni, qillqat sutix spec.rs
ukhamawa, extension
.rs
ukhamawa.
Ukxarusti, uka qillqatarux jisk’a t’aqanakaruw jaljañäni. Jiwasax SplitRecursively
uka lurawimpiw qillqat chimpunak jaljañatakix apnaqapxta. Uka lurawitak qillqatanakax akan jikxatasi .
CocoIndex ukax Tree-sitter ukaruw yanapt’i, ukhamat aru parámetro language
pasañapataki. Taqi yanapt’at aru sutinaka ukat jilxatäwinak uñjañatakix, aka chiqan qillqatanaka uñakipt’añäni . Taqi jach’a arunakax yanapt’atawa, sañäni, Python, Rust, JavaScript, TypeScript, Java, C++, ukat juk’ampinaka, jan uñt’ayat jan ukax uñt’ayat arunakax jan yanapt’atäkchi ukhax sapuru qillqatjam uñjatäni.
with data_scope["files"].row() as file: # ... file["chunks"] = file["content"].transform( cocoindex.functions.SplitRecursively(), language=file["extension"], chunk_size=1000, chunk_overlap=300)
Jiwasax SentenceTransformerEmbed
uka lurawimpiw chimpunak uñt’ayañäni. Uka lurawitak qillqatanakax akan jikxatasi . Ukax 12k modelos ukanakaw 🤗 Hugging Face ukamp yanapt'ata. Ukax mä modelo favorito ukarux ajlliñamawa.
def code_to_embedding(text: cocoindex.DataSlice) -> cocoindex.DataSlice: """ Embed the text using a SentenceTransformer model. """ return text.transform( cocoindex.functions.SentenceTransformerEmbed( model="sentence-transformers/all-MiniLM-L6-v2"))
Ukatx sapa chunk ukatakix, code_to_embedding
uka lurawimpiw uñakipt’añäni. ukatx code_embeddings
apthapiriruw uñt’ayawinak apthapiña.
Jiwasax aka code_to_embedding lurawix apsuwaytanwa, jan ukax chiqak transform(cocoindex.functions.SentenceTransformerEmbed(...)) ukar jawsañat sipansa.
Ukax kunatix aka maynix indexación flujo edificio ukat jiskt’äw apnaqir qhanañchäwimp chikancht’asiñ munapxta. Jan ukax, juk’amp jan ch’amäñapataki. Ukhamarakiw walikïskiwa aka extra función ukat chiqak lurañanak chiqaparu - janiw mä jach’a lurawikiti mä juk’a copia pegar, ukax proyecto quickstart ukatakiw lurapxta.
with data_scope["files"].row() as file: # ... with file["chunks"].row() as chunk: chunk["embedding"] = chunk["text"].call(code_to_embedding) code_embeddings.collect(filename=file["filename"], location=chunk["location"], code=chunk["text"], embedding=chunk["embedding"])
Tukuyañatakix, mä tabla ukar embeddings ukanakax exportación uñacht’ayañäni.
code_embeddings.export( "code_embeddings", cocoindex.storages.Postgres(), primary_key_fields=["filename", "location"], vector_index=[("embedding", cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY)])
Jiwasax SimpleSemanticsQueryHandler
ukampiw índice ukar jiskt’asiñäni. Qhanacht’añatakix code_to_embedding
uka lurawinx parámetro query_transform_flow
ukaruw pasañasa. Ukax kunatix jiskt’äw apnaqirix pachpa modelo de incrustación ukampiw apnaqani, kunjamatix flujo ukan apnaqatäki ukhama.
query_handler = cocoindex.query.SimpleSemanticsQueryHandler( name="SemanticsSearch", flow=code_embedding_flow, target_name="code_embeddings", query_transform_flow=code_to_embedding, default_similarity_metric=cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY)
Jiskt’awi apnaqiri apnaqañataki mä jach’a lurawi qhananchaña.
@cocoindex.main_fn() def _run(): # Run queries in a loop to demonstrate the query capabilities. while True: try: query = input("Enter search query (or Enter to quit): ") if query == '': break results, _ = query_handler.search(query, 10) print("\nSearch results:") for result in results: print(f"[{result.score:.3f}] {result.data['filename']}") print(f" {result.data['code']}") print("---") print() except KeyboardInterrupt: break if __name__ == "__main__": load_dotenv(override=True) _run()
@cocoindex.main_fn() k’achacht’irix biblioteca ukaruw qalltaraki, ukax wakicht’awinakampiw pacha mayjt’awinakat apkatata. Qalltañatakix documentación uñakipt’aña juk’amp yatxatañataki.
🎉 Jichhax jumanakax taqiniw wakicht'atäxapxtaxa!
Aka kamachinak phuqhañamawa wakicht’añataki ukhamaraki machaqar tukuyañataki índice.
python main.py cocoindex setup python main.py cocoindex update
Ukax terminal ukan estado de actualizaciones de índice ukar uñjatawa
Uka jisktʼa yantʼaña
Aka pachanxa, servidor cocoindex ukax qalltasispawa ukatx RAG ukax apnaqañ pachax datos ukar uñtasitw lurasispa.
Índice ukar yant’añatakix pä amtawiw utji:
python main.py
Kunawsatix jiskt’awi uñjktan ukhax thakhi jiskt’awiruw mantasma. sañäni: spec.
Enter search query (or Enter to quit): spec
Uka thakhinchawixa terminal ukanwa jikxatasi
Kutt’ayat amuyunaka - sapa qillqt’atax puntuación (Cosine Similarity), archivo suti, ukat código fragmento ukanak uñt’ayi. cocoindex uksanxa, cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY
ukampiw jiskt’awimp indexat yatiyawinakampix niya kipkakïtap uñakipañataki. Yaqha métricas ukar mayjt’ayaraksnawa ukat jank’akiw yant’asma.
Consine Similarity tuqit juk’amp yatxatañatakix Wiki uñakipt’añäni.
2 amtawi: CocoInsight ukax pipeline de datos ukat índice de datos ukanak amuyañatakiw apnaqasi
CocoInsight ukax mä herramienta ukawa, ukax pipeline de datos ukat índice de datos ukanak amuyañatakiw yanapt’i. Ukax CocoIndex local servidor ukaruw cero datos retención ukampiw chikañchasi.
CocoInsight ukax Early Access ukankiwa jichhax (Gratis) 😊 ¡Jumaw jikxatapxitu! Mä jank’ak 3 minutos video yatichäwi CocoInsight tuqit: YouTube ukan uñt’ayaña .
python main.py cocoindex server -c https://cocoindex.io
Mä kutix servidor ukax apnaqatäxi ukhax CocoInsight ukax navegador ukan jist’aratawa. Ukax mä servidor local CocoIndex ukaruw uñt’ayasi ukatx pipeline de datos ukat índice ukaruw uñt’ayasi.
Kupi tuqinxa, uñakipt’añatakix datos flujo ukax jiwasanakan qhanañchatawa.
Ch’iqa tuqinxa, índice de datos ukax datos previsuales ukan uñjasi.
Kawkïr filarus ch’iqt’asmawa uka datos ukar mantañ tuqit yatiyawinak uñjañataki, ukatx código chunks ukan taqpach contenido ukat incrustaciones ukanakap uñjañatakiwa.
¡Ayllunkirinakat ist’añax wali munatawa! Github ukat Discord ukanakan jikxatapxasmawa.
Jumatix aka post ukat lurawinakas munassta ukhax CocoIndex ukar Github ukan mä warawara ⭐ ukamp yanapt’añamawa. Mä junt'u coco jamp'att'awimpiw yuspajarapxsma 🥥🤗.