මෙම බ්ලොගයෙන්, CocoIndex සමඟ RAG සඳහා කේත පදනම සුචිගත කරන්නේ කෙසේදැයි අපි ඔබට පෙන්වන්නෙමු. CocoIndex යනු ඔබේ දත්ත සුචිගත කිරීමට සහ විමසුම් කිරීමට ඔබට උපකාර කරන මෙවලමකි. එය ඔබේම දත්ත නල මාර්ගයක් ගොඩනැගීම සඳහා රාමුවක් ලෙස භාවිතා කිරීමට නිර්මාණය කර ඇත. CocoIndex ස්වදේශීය ගස්-සිටර් සහාය ඇතිව, කේත පාදක කුට්ටි කිරීම සඳහා බිල්ට්-ඉන් සහය සපයයි. ගස්- සිටර් යනු විග්රහක උත්පාදක මෙවලමක් සහ වර්ධක විග්රහක පුස්තකාලයකි, එය Rust 🦀 - හි ඇත. CocoIndex සතුව Tree-sitter සමඟ ඒකාබද්ධ Rust ඒකාබද්ධ කිරීම ඇත, එමඟින් විවිධ ක්රමලේඛන භාෂා සඳහා කේත කාර්යක්ෂමව විග්රහ කිරීමට සහ සින්ටැක්ස් ගස් උපුටා ගැනීමට හැකි වේ. Tree-sitter GitHub කේත පාදක කුට්ටි කිරීම යනු කේත පදනමක් කුඩා, අර්ථාන්විතව අර්ථවත් කොටස් වලට කැඩීමේ ක්රියාවලියයි. CocoIndex අත්තනෝමතික රේඛා බිඳීම් වෙනුවට සැබෑ සින්ටැක්ස් ව්යුහය මත පදනම්ව බුද්ධිමත්ව කේත කොටස් කිරීමට Tree-sitter හි හැකියාවන් භාවිතා කරයි. මෙම අර්ථාන්විතව සංගත කුට්ටි පසුව RAG පද්ධති සඳහා වඩාත් ඵලදායී දර්ශකයක් ගොඩනැගීමට භාවිතා කරයි, එමඟින් වඩාත් නිවැරදි කේත ලබා ගැනීම සහ වඩා හොඳ සන්දර්භ සංරක්ෂණය සක්රීය කරයි. වේගවත් ප්රවේශය 🚀 - ඔබට සම්පූර්ණ කේතය සොයාගත හැකිය. RAG නල මාර්ගය සඳහා පයිතන් කේත පේළි ~ 50 ක් පමණි, එය පරීක්ෂා කර බලන්න 🤗! මෙතැනින් අපේ වැඩේට කැමති නම් තරුවක් දීලා අපිට සහයෝගය දක්වන්න. උණුසුම් පොල් ගෙඩියක් වැළඳගෙන බොහොම ස්තූතියි 🥥🤗. Github එකේ CocoIndex එකට පූර්ව අවශ්යතා ඔබ Postgres ස්ථාපනය කර නොමැති නම්, කරුණාකර බලන්න. CocoIndex දත්ත දර්ශකය කළමනාකරණය කිරීමට Postgres භාවිතා කරයි, ප්රගතියේ පවතින ඒවා ඇතුළුව අනෙකුත් දත්ත සමුදායන් සඳහා සහය දැක්වීමට අපි එය අපගේ මාර්ග සිතියමේ තබා ඇත්තෙමු. ඔබ වෙනත් දත්ත සමුදායන් ගැන උනන්දුවක් දක්වන්නේ නම්, කරුණාකර හෝ නිර්මාණය කිරීමෙන් අපට දන්වන්න. ස්ථාපන මාර්ගෝපදේශය GitHub ගැටළුවක් Discord පොල් දර්ශක නිර්වචනය කරන්න ප්රවාහය කේත පදනමකින් කියවීමට cocoIndex ප්රවාහය නිර්වචනය කර එය RAG සඳහා සුචිගත කරමු. ඉහත ප්රවාහ රූප සටහන අපගේ කේත පදනම සකසන ආකාරය නිරූපණය කරයි: දේශීය ගොනු පද්ධතියෙන් කේත ගොනු කියවන්න ගොනු දිගු උපුටා ගන්න Tree-sitter භාවිතයෙන් කේතය අර්ථකථන කොටස් වලට බෙදන්න. එක් එක් කොටස සඳහා කාවැද්දීම් ජනනය කරන්න ලබා ගැනීම සඳහා දෛශික දත්ත ගබඩාවක ගබඩා කරන්න. මෙම ප්රවාහය පියවරෙන් පියවර ක්රියාත්මක කරමු. 1. මූලාශ්රයක් ලෙස කේත පදනම එක් කරන්න . @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() මෙම උදාහරණයේදී, අපි cocoindex කේත පදනම root නාමාවලියෙන් සුචිගත කිරීමට යන්නෙමු. ඔබට සුචිගත කිරීමට අවශ්ය කේත පදනමට මාර්ගය වෙනස් කළ හැකිය. අපි , , , , යන දිගු සහිත සියලුම ගොනු සුචිගත කර ., target (root හි) සහ node_modules (ඕනෑම නාමාවලියක් යටතේ) වලින් ආරම්භ වන නාමාවලි මඟ හරිමු. .py .rs .toml .md .mdx පහත උප ක්ෂේත්ර සහිත වගුවක් සාදනු ඇත, මෙහි බලන්න. flow_builder.add_source ලේඛන (යතුර, වර්ගය: ): ගොනුවේ ගොනු නාමය, උදා: filename str dir1/file1.md (වර්ගය: නම් , එසේ නොමැතිනම් ): ගොනුවේ අන්තර්ගතය content binary False str bytes 2. එක් එක් ගොනුව සකසා තොරතුරු රැස් කරන්න . 2.1 දිගුව උපුටා ගන්න ගොනු නාමයක පළමුව, එක් එක් ගොනුව සැකසීමේදී ගොනු නාමයක දිගුව උපුටා ගැනීම සඳහා ශ්රිතයක් අර්ථ දක්වමු. අභිරුචි ශ්රිතය සඳහා ලියකියවිලි ඔබට සොයාගත හැකිය. මෙතැනින් @cocoindex.op.function() def extract_extension(filename: str) -> str: """Extract the extension of a filename.""" return os.path.splitext(filename)[1] ඉන්පසු අපි එක් එක් ගොනුව සකස් කර තොරතුරු රැස් කරන්නෙමු. # ... with data_scope["files"].row() as file: file["extension"] = file["filename"].transform(extract_extension) මෙහිදී අපි ගොනු නාමයේ දිගුව උපුටා ගෙන එය ක්ෂේත්රයේ ගබඩා කරමු. උදාහරණයක් ලෙස, ගොනු නාමය නම්, ක්ෂේත්රය වනු ඇත. extension spec.rs extension .rs 2.2 ගොනුව වලට බෙදන්න කොටස් ඊළඟට, අපි ගොනුව කොටස් වලට බෙදන්නෙමු. ගොනුව කොටස් වලට බෙදීමට අපි ශ්රිතය භාවිතා කරමු. ඔබට ශ්රිතය සඳහා ලියකියවිලි සොයාගත හැකිය. SplitRecursively මෙතැනින් CocoIndex මඟින් Tree-sitter සඳහා බිල්ට්-ඉන් සහය ලබා දෙන අතර, එමඟින් ඔබට භාෂාව පරාමිතියට මාරු කළ හැකිය. සියලුම සහය දක්වන භාෂා නම් සහ දිගු බැලීමට, ලේඛන බලන්න. සියලුම ප්රධාන භාෂා සඳහා සහය දක්වයි, උදා: Python, Rust, JavaScript, TypeScript, Java, C++, ආදිය. එය නිශ්චිතව දක්වා නොමැති නම් හෝ නිශ්චිත භාෂාවට සහය නොදක්වන්නේ නම්, එය සරල පෙළ ලෙස සලකනු ලැබේ. language මෙහි with data_scope["files"].row() as file: # ... file["chunks"] = file["content"].transform( cocoindex.functions.SplitRecursively(), language=file["extension"], chunk_size=1000, chunk_overlap=300) 2.3 ඇතුළත් කරන්න කුට්ටි අපි කුට්ටි එම්බෙඩ් කිරීමට ශ්රිතය භාවිතා කරන්නෙමු. ඔබට ශ්රිතය සඳහා ලියකියවිලි සොයාගත හැකිය. 🤗 මගින් සහය දක්වන 12k මාදිලි තිබේ. ඔබට ඔබේ ප්රියතම මාදිලිය තෝරා ගත හැකිය. SentenceTransformerEmbed මෙතැනින් Hugging Face 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")) ඉන්පසු සෑම කොටසකටම, අපි එය ශ්රිතය භාවිතයෙන් කාවැද්දූ අතර, එකතු කරන්නා වෙත කාවැද්දූ ඒවා එකතු කරන්නෙමු. code_to_embedding code_embeddings අපි මෙම code_to_embedding ශ්රිතය සෘජුවම transform(cocoindex.functions.SentenceTransformerEmbed(...)) ලෙස ඇමතීම වෙනුවට උපුටා ගනිමු. මෙයට හේතුව අපට මෙය සුචිගත කිරීමේ ප්රවාහ ගොඩනැගීම සහ විමසුම් හසුරුවන්නා අර්ථ දැක්වීම අතර බෙදා ගැනීමට අවශ්ය වීමයි. විකල්පයක් ලෙස, එය සරල කිරීමට. මෙම අමතර ශ්රිතය වළක්වා සෘජුවම දේවල් කිරීමද හරි - ටිකක් පිටපත් කිරීම ලොකු දෙයක් නොවේ, අපි මෙය ව්යාපෘතිය සඳහා කළෙමු. ඉක්මන් ආරම්භක 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"]) 2.4 එකතු කරන්න කාවැද්දීම් අවසාන වශයෙන්, අපි කාවැද්දීම් වගුවකට අපනයනය කරමු. code_embeddings.export( "code_embeddings", cocoindex.storages.Postgres(), primary_key_fields=["filename", "location"], vector_index=[("embedding", cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY)]) 3. ඔබේ සඳහා විමසුම් හසුරුවන්නා සකසන්න දර්ශකය දර්ශකය විමසුම සඳහා අපි භාවිතා කරන්නෙමු. ශ්රිතය පරාමිතිය වෙත යැවීමට අපට අවශ්ය බව සලකන්න. මෙයට හේතුව විමසුම් හසුරුවන්නා ප්රවාහයේ භාවිතා කරන ලද එම්බෙඩින් ආකෘතියම භාවිතා කරන බැවිනි. SimpleSemanticsQueryHandler code_to_embedding query_transform_flow 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) විමසුම් හසුරුවන්නා ක්රියාත්මක කිරීම සඳහා ප්රධාන ශ්රිතයක් අර්ථ දක්වන්න. @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() සැරසිලිකරු පරිසර විචල්යයන්ගෙන් පූරණය කරන ලද සැකසුම් සමඟ පුස්තකාලය ආරම්භ කරයි. වැඩි විස්තර සඳහා බලන්න. ආරම්භ කිරීම සඳහා ලියකියවිලි දර්ශක සැකසුම ක්රියාත්මක කර යාවත්කාලීන කරන්න 🎉 දැන් ඔබ සියල්ල සූදානම්! දර්ශකය සැකසීමට සහ යාවත්කාලීන කිරීමට පහත විධානයන් ක්රියාත්මක කරන්න. python main.py cocoindex setup python main.py cocoindex update ඔබට ටර්මිනලයේ දර්ශක යාවත්කාලීන තත්ත්වය පෙනෙනු ඇත. පරීක්ෂා කරන්න විමසුම මෙම අවස්ථාවේදී, ඔබට cocoindex සේවාදායකය ආරම්භ කර දත්ත වලට එරෙහිව ඔබේ RAG ධාවන කාලය සංවර්ධනය කළ හැකිය. ඔබේ දර්ශකය පරීක්ෂා කිරීමට, විකල්ප දෙකක් තිබේ: විකල්ප 1: දර්ශක සේවාදායකය ක්රියාත්මක කරන්න ටර්මිනලයේ python main.py ඔබ විමසුම දුටු විට, ඔබට ඔබේ සෙවුම් විමසුම ඇතුළත් කළ හැකිය. උදාහරණයක් ලෙස: spec. Enter search query (or Enter to quit): spec ඔබට ටර්මිනලයේ සෙවුම් ප්රතිඵල සොයාගත හැකිය. ආපසු ලබා දුන් ප්රතිඵල - සෑම ඇතුළත් කිරීමකම ලකුණු (කෝසයින් සමානතාවය), ගොනු නාමය සහ ගැලපෙන කේත කොටස අඩංගු වේ. cocoindex හිදී, විමසුම සහ සුචිගත කළ දත්ත අතර සමානකම මැනීමට අපි භාවිතා කරමු. ඔබට වෙනත් මිනුම් වෙත මාරු වී එය ඉක්මනින් පරීක්ෂා කළ හැකිය. cocoindex.VectorSimilarityMetric.COSINE_SIMILARITY Consine සමානකම පිළිබඳ වැඩිදුර දැන ගැනීමට, බලන්න. Wiki විකල්ප 2: ඔබේ දත්ත නල මාර්ගය සහ දත්ත තේරුම් ගැනීමට CocoInsight ධාවනය කරන්න දර්ශකය CocoInsight යනු ඔබේ දත්ත නල මාර්ගය සහ දත්ත දර්ශකය තේරුම් ගැනීමට උපකාරී වන මෙවලමකි. එය ඔබගේ දේශීය CocoIndex සේවාදායකයට ශුන්ය දත්ත රඳවා ගැනීමකින් සම්බන්ධ වේ. CocoInsight දැන් මුල් ප්රවේශයේ ඇත (නොමිලේ) 😊 ඔබ අපව සොයා ගත්තා! CocoInsight පිළිබඳ මිනිත්තු 3 ක කෙටි වීඩියෝ නිබන්ධනයක්: . YouTube හි නරඹන්න CocoIndex ක්රියාත්මක කරන්න සේවාදායකය python main.py cocoindex server -c https://cocoindex.io සේවාදායකය ක්රියාත්මක වූ පසු, ඔබේ බ්රවුසරයේ විවෘත කරන්න. ඔබට ඔබේ දේශීය CocoIndex සේවාදායකයට සම්බන්ධ වී ඔබේ දත්ත නල මාර්ගය සහ දර්ශකය ගවේෂණය කිරීමට හැකි වනු ඇත. CocoInsight දකුණු පැත්තේ, අප අර්ථ දැක්වූ දත්ත ප්රවාහය ඔබට දැක ගත හැකිය. වම් පැත්තේ, ඔබට දත්ත පෙරදසුනෙහි දත්ත දර්ශකය දැකිය හැකිය. කේත කොටස්වල සම්පූර්ණ අන්තර්ගතය සහ ඒවායේ කාවැද්දීම් ඇතුළුව, එම දත්ත ඇතුළත් කිරීමේ විස්තර බැලීමට ඔබට ඕනෑම පේළියක් මත ක්ලික් කළ හැකිය. ප්රජාව අපි ප්රජාවෙන් අහන්න කැමතියි! ඔබට අපව සහ හි සොයා ගත හැක. Github Discord ඔබ මෙම සටහනට සහ අපගේ කාර්යයට කැමති නම්, කරුණාකර තරුවක් සමඟ සහාය වන්න ⭐. උණුසුම් පොල් වැළඳගැනීමක් සමඟ ස්තූතියි 🥥🤗. Github හි CocoIndex වෙත