د Steam کتابتون لپاره یو سمارټ، چټک لاره تاسو د احساس پوه شئ. تاسو د یوه لوبه چې د استراتژی، د همکارۍ، شاید سره د sci-fi موضوع په لټه کې یاست. تاسو کولی شئ د ټایټونو دیوال چې د دې ډول سره مطابقت ترلاسه کړئ. هغه څه چې تاسو غواړئ یو مختصر لیست دی چې په حقیقت کې ستاسو د کلمو پیژندل کوي. په دې لارښود کې، موږ ښيي چې څنګه د Superlinked سره LlamaIndex سره جلا کړي. د پایله د ګمرک شوي Steam لوبې رټریور دی چې د ژانر او توضیحات او ټایټونه درکوي، او په میلی ثانیو کې ځوابونه خدمت کوي. * د ایا تاسو غواړئ په خپل معلوماتو کې د واقعي پوښتنو او رخصتۍ شمیره وګورئ؟ اړیکه ونیسئ. . Get in touch په تماس کې په تماس کې د درملنې د ګمرکولو retrievers تاسو ته د ډومین کنټرول، میټاباټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټاټا Superlinked د ډیرو متن ځایونو سره یو semantic فضا کې یوځای کوي او په حافظه کې پوښتنو ته د عجيبه پايلې لپاره کار کوي. LlamaIndex د پاک retriever انټرنیټ وړاندې کوي او په مستقیم ډول د پوښتنې انجنونو او ځواب synthesis ته تړاو لري. د LlamaIndex لپاره یو رسمي Superlinked retriever انټرنټ دی چې تاسو کولی شئ وارد کړئ او کاروئ. لاندې وګورئ. د LlamaIndex لپاره رسمي Superlinked retriever Superlinked سره LlamaIndex له لارې د رسمي په LlamaHub کې لیست شوي، نو تاسو کولی شئ د Superlinked سره یو ساده نصب او د دې لپاره، دا د A په اړه نور معلومات د ټولګي او جوړونکي پارامترونه په LlamaIndex API اشاره کې ثبت شوي دي. SuperlinkedRetriever from llama_index.retrievers.superlinked import SuperlinkedRetriever RetrieverQueryEngine . د انټرنېټ رسمي پاڼه . د انټرنېټ رسمي پاڼه د انټرنېټ رسمي پاڼه pip install llama-index-retrievers-superlinked from llama_index.retrievers.superlinked import SuperlinkedRetriever # sl_app: a running Superlinked App # query_descriptor: a Superlinked QueryDescriptor that describes your query plan retriever = SuperlinkedRetriever( sl_client=sl_app, sl_query=query_descriptor, page_content_field="text", query_text_param="query_text", metadata_fields=None, top_k=10, ) nodes = retriever.retrieve("strategic co-op sci fi game") ترټولو ترټولو په لاس جوړ شي یا د منطق په اوږدو کې customize؟ ادامه وکړئ. Why Superlinked + LlamaIndex? ولې Superlinked + LlamaIndex؟ هدف ساده دی: د Superlinked د څو ځمکې د لټون لپاره د قوتونو په لټه کې ونیسئ او دوی راټول کړئ نو ډیزاینونکي کولی شي په حقیقي RAG سیسټمونو کې وده ورکړي او پراختیا وکړي. Superlinked تاسو سره مرسته کوي چې د بیان وړ ویکتور فضاونه او پوښتنو تعریف کړئ چې د نوم، توضیحات، او ژورنال په څیر ځمکېونو کې یو واحد سمینټیک نندارې ونیسئ. LlamaIndex د لټون استازیتوب، پوښتنې انجنونه، او ځواب synthesis راټول کوي چې د اپلیکیشنونو او اټکلونو سره لږ تر لږه لیږد ونیسئ. تاسو کولی شئ هم په د Superlinked نوټونه څخه ورته بڼې کاروي. د Google کالټ د Google کالټ کالټ چرا د ګمرک Retrievers مهمه دي د خپل ډومین لپاره تنظیم شوی - د عمومي رټریور لپاره د عمومي کارولو لپاره ښه دی، مګر دوی ترټولو ګټور دي. د ژیرګون، خلاص یا د ډومین ځانګړي اصطلاحاتو په اړه فکر وکړئ، دوی معمولا نه پوښل کیږي، که څه هم ستاسو رټریور پوه شي چې څنګه چمتو شي. دا هغه ځای دی چې د ګمرکونو ښکاره کوي: تاسو کولی شئ په دې اړیکو کې hardwire کړئ. د ټیکټ څخه ډیره کار کوي - ډیری حقیقي نړۍ ډاټا یوازې ساده متن نه دي. تاسو به معمولا د میټاډاټاډونو او ټایټونو هم لري. د مثال په توګه، د لوبې سپارښتنې سیسټم کې، موږ نه یوازې د لوبې توضیحات په اړه فکر کوو. موږ به هم په ژانرونو، ټایټونو، د کاروونکو درجهونو او نور ډولونو کې اړتیا لرئ. د دې منطق په اړه فکر وکړئ: هغه څوک چې د "ستراتژی د همکارۍ لوبې سره د سایټ فین عناصر" لرو چې د ټیکټ یوازې سره مطابقت نه کوي. د ګمرکولو او رتبه بندی منطق - ځینې وختونه تاسو غواړئ ستاسو د خپل قواعدو په اړه زده کړئ چې څنګه کارونه کښته شوي یا فلټر شوي دي. شاید تاسو غواړئ د نوي موادو ترټولو ترټولو ترټولو غوره کړي، یا هغه پایلې ته سزا کړئ چې د کیفیت ځانګړتیاوې پوره نه کوي. زه فکر کوم، چې دا ډول کنترول د خپل رټریور لپاره یو واقعي دماغ ورکړي، دا کولی شي یوازې د ویټور فاصلهونو پرته له خوا د اړتیا په لټه کې وي. د فعالیت ګټورونه - ایا په واقعیت کې وي: د عمومي مقاصد حلونه د ټولو لپاره د کار لپاره "خود" جوړ شوي دي، نه ستاسو لپاره ښه. که تاسو ستاسو ډاټا او ستاسو د لاس رسی نمونې پوه شئ، تاسو کولی شئ ستاسو د راټریور سره سمون کړئ ترڅو چټک شي، ښه راټول شي، او د پایلو کې د غیرقانوني شور کم کړئ. د غوښتنلیک پراختیا برخه 1: د اصلي بستې او وارداتو import time import logging import pandas as pd from typing import List from llama_index.core.retrievers import BaseRetriever from llama_index.core.schema import NodeWithScore, QueryBundle, TextNode from llama_index.core.query_engine import RetrieverQueryEngine from llama_index.core.response_synthesizers import get_response_synthesizer from llama_index.core import Settings from llama_index.llms.openai import OpenAI import superlinked.framework as sl د وارداتو جوړښت زموږ د هیدرولیک لارښوونې ښيي: LlamaIndex کور: د ګټورولو abstraction layer وړاندې کوي Superlinked Framework: د ویکتور محاسبه او سمینټیک څیړنې کاروي Pandas: د معلوماتو مخکښ پروسس او manipulation مدیریت برخه 2: د LlamaIndex Custom Retrievers درکولو مخکې چې زموږ د Superlinked اپلوزونو ته وده ورکړئ، دا مهمه ده چې پوه شئ چې LlamaIndex د ګمرکولو retriever آرکټیکټوریټ څنګه کار کوي او ځکه چې دا د ډومین ځانګړي RAG غوښتنلیکونو جوړولو لپاره خورا قوي دی. BaseRetriever Abstraction په اړه LlamaIndex د abstract وړاندې کوي د دې ډیزاین ښکلا په اسانه توګه دی - هر custom retriever یوازې د یو کور پروګرام ته اړتیا لري: BaseRetriever from abc import abstractmethod from llama_index.core.retrievers import BaseRetriever from llama_index.core.schema import NodeWithScore, QueryBundle class BaseRetriever: @abstractmethod def _retrieve(self, query_bundle: QueryBundle) -> List[NodeWithScore]: """Retrieve nodes given query.""" pass دلته د Retrieval پروتوکول د LlamaIndex څخه شتون لري. لکه څنګه چې دا "Retrieval پروتوکول" دا په اسانۍ سره د مختلفو backends یا ستراتیژۍونو ته اړتیا نلري چې ستاسو د سیستم په بډایه کې ونیسئ. چیرته چې دا په ځانګړې توګه په هغه څه کې رامینځته کیږي: Input: QueryBundle This is the query object passed into your retriever. At minimum, it contains the user's raw query string (e.g., "sci-fi strategy games"). But it can also include extra metadata like filters, embeddings, or user preferences. Basically, anything that might help shape a more relevant response. Output: List[NodeWithScore] The retriever returns a list of nodes—these are your chunks of content, documents, or data entries—each paired with a relevance score. The higher the score, the more relevant the node is to the query. This list is what gets passed downstream to the LLM or other post-processing steps. As in our case, we are plugging on the Processing: Backend-Agnostic Here’s the cool part: how you get from query to result is totally up to you. You can use a vector database, a traditional search engine, a REST API, or even something handcrafted for your specific use case. This decouples logic and gives you full control over the retrieval stack. دا څه مهمه ده؟ دا abstraction پاک دی او دا معنی لري چې تاسو کولی شئ: د قدرت ډیری ستراتیژۍ ترکیب کړئ - که اړتيا وي، د غليظ وکتور څیړنې او د کلیدي کلمه فلټر کولو سره کاروئ. په اسانۍ سره A / B ازموینې ترسره کړئ - د مختلفو راټولرونو مقایسه وکړئ ترڅو وګورئ چې څه ستاسو د کاروونکو لپاره غوره پايلې کوي. د هر اګانو یا وسایلو سره نښلوي - که تاسو د چیټ بوټ، د څیړنې UI، یا بشپړ اګانو سیسټم جوړ کړئ، دا retriever انټرنېټ په اسانۍ سره ساتي. د کټګوریو پروتوکول په توګه د "کټګوریو دماغ" او هر څه تر منځ د API کنټرول په توګه فکر وکړئ. کله چې تاسو دا پیژندل کړئ، تاسو وړیا یاست چې په سټینډ کې هر څه چې تاسو غواړئ نوښت کړئ. Plugging Superlinked په LlamaIndex کې ښه، نو د ټولګي په اصل کې زموږ د سمارټ، سمینټیک لوبې سپارښتنه ورکولو لپاره زموږ د لارښود دی. موږ به په چټکۍ سره وګورئ چې دا څنګه جوړ شوی، او بیا وروسته په هر برخه کې ډک کړئ ترڅو په حقیقت کې وګورئ چې دا څه چټک کوي. SuperlinkedSteamGamesRetriever په لومړي کې د ، د دې په توګه د بنسټ په توګه فکر وکړئ. دا هغه څه دی چې هر څه منظم او اعتبار لري. د Superlinked کارولو سره موږ د مهمو معلوماتو لکه د د او دا ټول د لوبې معلوماتو پاک او مطابقت لري، او دا په Superlinked پایپ کې راټول کیږي نو هر څه په چټکۍ سره جریان کوي. schema definition GameSchema game_number name desc_snippet genre class GameSchema(sl.Schema): game_number: sl.IdField name: sl.String desc_snippet: sl.String game_details: sl.String languages: sl.String genre: sl.String game_description: sl.String original_price: sl.Float discount_price: sl.Float combined_text: sl.String # New field for combined text self.game = GameSchema() په بل کې د دلته دا دی چې د Semantic Search جادو ترسره کیږي. دا د د نمونوي د لوبې معلوماتو (چې نوم، شرح، ژانر، او داسې نور) په ټیټ وکتور نمونې بدلون. په عمده توګه، دا د دې ټولې متن سره یوځای کوي چې د نمونوي کولی شي پوه شي. د ګرم برخه؟ دا اجازه ورکوي چې د راټریور پوه شي چې یو کاروونکي ، نه یوازې هغه کلمه چې دوی ټیپوي. نو که څوک د "پرنډ نړۍ ماجراجویی" په څیر څه چمتو کوي، دا کولی شي د لوبو چې په حقیقت کې د دې هوا سره مطابقت کوي، نه یوازې هغه چې د دې دقیقا کلمه لري. text similarity space sentence-transformers/all-mpnet-base-v2 معنی self.text_space = sl.TextSimilaritySpace( text=self.game.combined_text, model="sentence-transformers/all-mpnet-base-v2" ) د دا د معلوماتو مختلفو بټونه (چې د لوبې نوم، توضیحات، ژانر، او نور) لګوي او دوی په یو لوی ټیکټ ټکټ جوړوي. دا ماډل ته د هر لوبې په اړه د بشپړ انځور ورکوي کله چې دا په ویټورونو کې بدل کیږي. د پایلې؟ د ښه لارښوونې، ځکه چې دا په هر وخت کې د مختلفو تفصيلاتو په ټوټه کې راټول کیږي په ځای کې یوازې د یو څه په انفرادي ډول وګورئ. combined text field self.df['combined_text'] = ( self.df['name'].astype(str) + " " + self.df['desc_snippet'].astype(str) + " " + self.df['genre'].astype(str) + " " + self.df['game_details'].astype(str) + " " + self.df['game_description'].astype(str) ) په پای کې، دا هغه څه دی چې هر څه super snappy کوي. سپارښتنه د Superlinked ، د retriever کولی شي په واقعي وخت کې د پوښتنو په کارولو، نه تاخیرونه، یوازې د اټکل پايلې. دا معنی لري که څه هم څوک د يو ځانګړي ژانر لپاره د څارنې یا یوازې د هغه څه لپاره چې یو نوي لټون ته چمتو کوي، دوی په چټکۍ سره او دقیق لارښوونې ترلاسه کوي پرته انتظار نه کوي. in-memory execution InMemoryExecutor # Set up in-memory source and executor source = sl.InMemorySource(self.game, parser=parser) self.executor = sl.InMemoryExecutor(sources=[source], indices=[self.index]) self.app = self.executor.run() # Load data source.put([self.df]) د دغو ټوټهونو سره یوځای کړئ، او تاسو د - د ګرځنده سپارښتنه وړاندې کولو لپاره د پیاوړی تنظیم چې په حقیقت کې د کاروونکي لپاره معنی لري. دا چټک، سمارټ، او شخصي دی. دلته دا دی چې ټول څه په عمل کې ښکاري ... SuperlinkedSteamGamesRetriever class SuperlinkedSteamGamesRetriever(BaseRetriever): """A custom LlamaIndex retriever using Superlinked for Steam games data.""" def __init__(self, csv_file: str, top_k: int = 10): """ Initialize the retriever with a CSV file path and top_k parameter. Args: csv_file (str): Path to games_data.csv top_k (int): Number of results to return (default: 10) """ self.top_k = top_k # Load the dataset and ensure all required columns are present self.df = pd.read_csv(csv_file) print(f"Loaded dataset with {len(self.df)} games") print("DataFrame Columns:", list(self.df.columns)) required_columns = [ 'game_number', 'name', 'desc_snippet', 'game_details', 'languages', 'genre', 'game_description', 'original_price', 'discount_price' ] for col in required_columns: if col not in self.df.columns: raise ValueError(f"Missing required column: {col}") # Combine relevant columns into a single field for text similarity self.df['combined_text'] = ( self.df['name'].astype(str) + " " + self.df['desc_snippet'].astype(str) + " " + self.df['genre'].astype(str) + " " + self.df['game_details'].astype(str) + " " + self.df['game_description'].astype(str) ) self._setup_superlinked() def _setup_superlinked(self): """Set up Superlinked schema, space, index, and executor.""" # Define schema class GameSchema(sl.Schema): game_number: sl.IdField name: sl.String desc_snippet: sl.String game_details: sl.String languages: sl.String genre: sl.String game_description: sl.String original_price: sl.Float discount_price: sl.Float combined_text: sl.String # New field for combined text self.game = GameSchema() # Create text similarity space using the combined_text field self.text_space = sl.TextSimilaritySpace( text=self.game.combined_text, model="sentence-transformers/all-mpnet-base-v2" ) # Create index self.index = sl.Index([self.text_space]) # Map DataFrame columns to schema parser = sl.DataFrameParser( self.game, mapping={ self.game.game_number: "game_number", self.game.name: "name", self.game.desc_snippet: "desc_snippet", self.game.game_details: "game_details", self.game.languages: "languages", self.game.genre: "genre", self.game.game_description: "game_description", self.game.original_price: "original_price", self.game.discount_price: "discount_price", self.game.combined_text: "combined_text" } ) # Set up in-memory source and executor source = sl.InMemorySource(self.game, parser=parser) self.executor = sl.InMemoryExecutor(sources=[source], indices=[self.index]) self.app = self.executor.run() # Load data source.put([self.df]) print(f"Initialized Superlinked retriever with {len(self.df)} games") def _retrieve(self, query_bundle: QueryBundle) -> List[NodeWithScore]: """ Retrieve top-k games based on the query string. Args: query_bundle (QueryBundle): Contains the query string Returns: List[NodeWithScore]: List of retrieved games with scores """ query_text = query_bundle.query_str # Define Superlinked query with explicit field selection query = ( sl.Query(self.index) .find(self.game) .similar(self.text_space, query_text) .select([ self.game.game_number, self.game.name, self.game.desc_snippet, self.game.game_details, self.game.languages, self.game.genre, self.game.game_description, self.game.original_price, self.game.discount_price ]) .limit(self.top_k) ) # Execute query result = self.app.query(query) df_result = sl.PandasConverter.to_pandas(result) # Convert results to NodeWithScore objects nodes_with_scores = [] for i, row in df_result.iterrows(): text = f"{row['name']}: {row['desc_snippet']}" metadata = { "game_number": row["id"], "name": row["name"], "desc_snippet": row["desc_snippet"], "game_details": row["game_details"], "languages": row["languages"], "genre": row["genre"], "game_description": row["game_description"], "original_price": row["original_price"], "discount_price": row["discount_price"] } score = 1.0 - (i / self.top_k) node = TextNode(text=text, metadata=metadata) nodes_with_scores.append(NodeWithScore(node=node, score=score)) return nodes_with_scores print("✅ SuperlinkedSteamGamesRetriever class defined successfully!") Integration Architecture Deep Dive برخه 3: د Superlinked Schema تعریف او تنظیم اوس د وخت دی کله چې موږ د ځینې څه په اړه یوځای شو. د سیسټم ډیزاین سره پیل کول، اوس په Superlinked کې، د سیسټم یوازې د معلوماتو ډولونو د تعریف په اړه ندي، دا د معلوماتو او د زیرمې ویټور کمپیوټر انجن تر منځ د رسمي تعریف په څیر دی. دا سیسټم مشخصوي چې زموږ ډاټا څرنګول شوي، انډیزل شوي، او پوښتنې کیږي، نو دا مناسب وي. زموږ په ، د سیسټم په دې توګه تعریف شوی: SuperlinkedSteamGamesRetriever class GameSchema(sl.Schema): game_number: sl.IdField name: sl.String desc_snippet: sl.String game_details: sl.String languages: sl.String genre: sl.String game_description: sl.String original_price: sl.Float discount_price: sl.Float combined_text: sl.String # New field for combined text self.game = GameSchema() راځي چې په حقیقت کې هغه څه چې د دې عناصر څخه ځینې : د (→ ) Think of this as our primary key. It gives each game a unique identity and allows Superlinked to index and retrieve items efficiently, I mean basically it’s about how we are telling the Superlinked to segregate the unique identify of the games, and btw it’s especially important when you're dealing with thousands of records. sl.IdField game_number and Now these aren't just type hints—they enable Superlinked to optimize operations differently depending on the field. For instance, fields can be embedded and compared semantically, while fields can support numeric filtering or sorting. sl.String sl.Float sl.String sl.Float This is the of our retriever. It’s a synthetic field where we concatenate the game name, description, genre, and other relevant attributes into a single block of text. This lets us build a single using sentence-transformer embeddings: combined_text semantic anchor text similarity space self.text_space = sl.TextSimilaritySpace( text=self.game.combined_text, model="sentence-transformers/all-mpnet-base-v2" ) ځکه چې کاروونکي نه یوازې د ژانر یا نوم لرو، دوی بیان کوي چې دوی څه دي . له دې امله چې د ټولو مهم سیگنالونه په ، موږ کولی شو په ښه توګه د ټولو مهمو لوبو سره د نښلیدو، طبيعي ژوره پوښتنو سره مطابقت کړي. په لټه کې combined_text برخه 4: د ویکټر فضا ترتیب # Create text similarity space using the combined_text field self.text_space = sl.TextSimilaritySpace( text=self.game.combined_text, model="sentence-transformers/all-mpnet-base-v2" ) # Create index self.index = sl.Index([self.text_space]) د Steam لوبې ډاټاټونو په اړه د سمینټیک څیړنې لپاره، زه د دوو د ډیزاین انتخابونو لپاره چې د فعالیت، ساده، او انعطاف سره توازن کوي. لومړی، د embedding ماډل لپاره، زه غوره کړم د Sentence Transformers کتابتون څخه. دا ماډل د 768-dimensional embeddings تولید کوي چې د پیاوړتیا منځني ځمکه راټولوي: دوی د غليظ سمینسي معنی په لټه کې کولی شي، مګر په تولید کې په چټکه توګه په لټه کې دي. زه فکر کوم چې دا یو قابل اعتماد عمومي هدف ماډل ده، چې په مختلفو متن ډولونو کې ښه کار کوي - کوم چې ډیر مهمه ده کله چې ستاسو ډاټا د مختصر ژورنال ټایګ څخه د اوږد فورمه لوبې شرحونو ته اړتيا لري. زموږ په صورت کې، ما د يو ماډل ته اړتيا لري چې د دې سپیکټرم په هر پای کې ډک نه وي، او په پاکیزه توګه کار وکړي. all-mpnet-base-v2 all-mpnet-base-v2 بل، که څه هم Superlinked Multi-space indexing ملاتړ کوي - که تاسو کولی شئ څو ځلې یا حتی modalities (چې متن + انځورونه) ترکیب کړئ). زه په عادي توګه کارونه ساده سره یو واحد زه به د دلته هم، مګر زه د لوبو لپاره د ریلیز تاریخ په اړه معلومات نه لري. مګر یوازې دا ته دلته ورکړئ، که موږ د ریلیز تاریخ معلومات لري، زه کولی شي دلته د RecencySpace پلک کړئ، او زه حتی کولی شي د لوبو سره د لکه څنګه چې د نوي لوبې. Cool.. TextSimilaritySpace RecencySpace TextSimilaritySpace برخه 5: د ډاټا پایپینډ او executor setup # Map DataFrame columns to schema - Critical for data integrity parser = sl.DataFrameParser( self.game, mapping={ self.game.game_number: "game_number", self.game.name: "name", self.game.desc_snippet: "desc_snippet", self.game.game_details: "game_details", self.game.languages: "languages", self.game.genre: "genre", self.game.game_description: "game_description", self.game.original_price: "original_price", self.game.discount_price: "discount_price", self.game.combined_text: "combined_text" } ) # Set up in-memory source and executor source = sl.InMemorySource(self.game, parser=parser) self.executor = sl.InMemoryExecutor(sources=[source], indices=[self.index]) self.app = self.executor.run() # Load data source.put([self.df]) print(f"Initialized Superlinked retriever with {len(self.df)} games") زموږ د ترلاسه کولو سیسټم په مرکز کې د واضحیت او سرعت لپاره جوړ شوی سټیلینډ پمپ دی. ، کوم چې زموږ د ETL کچه په توګه کار کوي. دا تضمین کوي چې د ډاټا سیټ کې د هر ځمکه په درست ډول ټیپ شوي او په پایله توګه زموږ په سیسټم کې کارول کیږي؛ په عمده توګه زموږ د خام CSV معلوماتو او Superlinked Indexing کچه تر منځ د قرارداد په توګه عمل کوي. DataFrameParser کله چې د معلوماتو جوړ شوی دی، زه دا په یو ، کوم چې د ډاټا سیټونو لپاره مناسب دی چې په آرامۍ سره په یادښت کې پوښل کیږي. دا لارښوونې هر څه په چټک سرعت کې وده ورکوي د ذخیره کولو او یا د شبکې د لټینټونو نږدې. په پایله کې، د پوښتنو له خوا کارول کیږي ، چې د sub-millisecond لټینټ لپاره ګټور دی. دا هغه څه دی چې Superlinked د واقعي وخت غوښتنلیکونو لپاره مناسب کوي لکه د انټرنېټیک سپارښتنه سیسټمونه، په کوم کې د سرعت په مستقیم ډول د کاروونکي تجربه اغیزه کوي. InMemorySource InMemoryExecutor برخه 6: د Retrieval انجن def _retrieve(self, query_bundle: QueryBundle) -> List[NodeWithScore]: """ Retrieve top-k games based on the query string. Args: query_bundle (QueryBundle): Contains the query string Returns: List[NodeWithScore]: List of retrieved games with scores """ query_text = query_bundle.query_str # Define Superlinked query with explicit field selection query = ( sl.Query(self.index) .find(self.game) .similar(self.text_space, query_text) .select([ self.game.game_number, self.game.name, self.game.desc_snippet, self.game.game_details, self.game.languages, self.game.genre, self.game.game_description, self.game.original_price, self.game.discount_price ]) .limit(self.top_k) ) # Execute query result = self.app.query(query) df_result = sl.PandasConverter.to_pandas(result) یو څه چې د Superlinked سره کار کولو لپاره خورا خوشحاله کوي دا دی چې د دې سټیل پوښتنې جوړونکي دی. که تاسو د کتابتونونو لکه SQLAlchemy یا Django ORM کار واخلئ، د نمونوي به پوه شي. په چټک کې هر پروسه د چڼاسکه په ځای کې چڼاسکه اضافه کوي. زموږ په صورت کې، د پوښتنې له خوا د اړونده انډیز انتخاب او د ورتهېېېېېېېېېېېېېېېېېېېېېېېېېېېېېېېېېېېېې د پروګرام، چې د نښلیدو په فضا کې د cosine شواهدو محاسبه کوي. دا موږ ته اجازه ورکوي چې د کاروونکي طبيعي ژوره پوښتنې پر بنسټ سمینټیکي قناعت لوبې ترلاسه کړي. .similar() یو بل ډیزاین انتخاب چې زه جوړ کړم د زه په پایله کې د پایلو په اړه فکر کوي، د دې لپاره چې څه لکه دا کولی شي کوچني غږ وي، مګر دا د ډاټا لګښت ساتل کوي، د پروسس په لټه کې کموي، او ډاټا کوي چې موږ د وروسته پروسس کولو په وخت کې د غیر ضروری ګټور لوډ څخه مخنیوی نه کوو. د دې په توګه د بیلګې په پرتله دقت فکر وکړئ، په ځانګړي ډول کله چې تاسو د لنډیز حساس پایپینډ کې د اجزاء ترمنځ ډاټا حرکت وکړئ. explicitly select the fields SELECT * برخه 7: د پایلو د پروسس او نند د جوړولو # Convert to LlamaIndex NodeWithScore format nodes_with_scores = [] for i, row in df_result.iterrows(): text = f"{row['name']}: {row['desc_snippet']}" metadata = { "game_number": row["id"], "name": row["name"], "desc_snippet": row["desc_snippet"], "game_details": row["game_details"], "languages": row["languages"], "genre": row["genre"], "game_description": row["game_description"], "original_price": row["original_price"], "discount_price": row["discount_price"] } # Simple ranking score based on result position score = 1.0 - (i / self.top_k) node = TextNode(text=text, metadata=metadata) nodes_with_scores.append(NodeWithScore(node=node, score=score)) return nodes_with_scores اوس کله چې موږ د Superlinked پایلو ترلاسه کړم، زه دوی ته د فورمه بدل کړم چې د LlamaIndex سره ښه کار کوي. لومړی، زه یو جوړ د لوبې نوم سره د دې مختصر توضیحات سره ترکیب کول. دا د هر نښی په محتوا کې وي، دا د ژور ماډل لپاره اسانه کولو لپاره آسانه کوي. دا یو کوچني ټک دی، مګر دا په حقیقت کې ښه کوي چې د لیږد شوي ډاټا کله چې د LLM ته انتقال شوي وي. human-readable text وروسته، زه ډاډ چې د ډاټا سیټ څخه، لکه ژانر، pricing، او د لوبې تفصيلات په شمول - په متاډاټا کې خوندي دي. دا مهمه ده ځکه چې لاندې پروسسونه ممکن د دې معلوماتو په اساس د پایلو فلټر، ښیښه، یا راټول کړي. زه نه غواړم چې یو ځل چې موږ د ترلاسه شوي نښانونو سره کار وکړي له امله هر ډول ګټور کنکټور له لاسه ورکړم. all original fields په پایله کې، زه د رڼا وزن ستراتیژۍ. په ځای کې چې د خام شواهدې کچه پرته، موږ د پایلو په لیست کې د پایلو موقعیت په اساس کچه ورکړي. دا کارونه ساده او مطابقت لري. د لوړ پایلو تل د لوړ پایلو لري، او د نورو په پایله کې پیژندل کیږي. دا فینسی نه ده، مګر دا موږ ته د ثابت او تفسیر وړ کچه سیسټم ورکوي چې په مختلفو پوښتنو کې ښه کار کوي. score normalisation نندارې وخت: د پمپ چلولو اوس چې د ټولو برخو په ځای کې دي، دا وخت دی چې زموږ د Retrieval-Augmented Generation (RAG) سیسټم ته ژوند ورکړي. لاندې ده د Superlinked او LlamaIndex په عملياتو کې د پای ته د انټرنېټ. # Initialize the RAG pipeline print("Setting up complete Retrieval pipeline...") # Create response synthesizer and query engine response_synthesizer = get_response_synthesizer() query_engine = RetrieverQueryEngine( retriever=retriever, response_synthesizer=response_synthesizer ) print("✅ RAG pipeline configured successfully!") print("\n" + "="*60) print("FULL RAG PIPELINE DEMONSTRATION") print("="*60) # Test queries with full RAG responses test_queries = [ "I want to find a magic game with spells and wizards", "Recommend a fun party game for friends", "I'm looking for a strategic sci-fi game", "What's a good cooperative game for teamwork?" ] for i, query in enumerate(test_queries, 1): print(f"\nQuery {i}: '{query}'") print("-" * 50) response = query_engine.query(query) print(f"Response: {response}") print("\n" + "="*50) دا سیسټم زموږ د ګمرک semantic retriever سره د LLM د بریښنا د ځواب جنراتور سره یوځای کوي. پوښتنو په چټکۍ سره د پایپ لخوا حرکت کوي، او په ځای کې چې یوازې د خامو ډاټا له لاسه ورکوي، دا د هغه څه په اړه چې د کاروونکي کولی شي په حقیقت کې د هغه څه په اساس لوبوي چې دوی پوهیږي. Takeaways د نندارتون Custom retrievers let you bake domain rules and jargon into the system. Combining multiple text fields into one index improves query understanding. In LlamaIndex you only need to implement _retrieve for a custom backend. Superlinked InMemoryExecutor gives real time latency on moderate datasets. Schema choice matters for clean parsing and mapping. Simple position based scoring is a stable default when you want predictable ranks.\ If you want a quick chat about where mixture of encoders or multi-field retrieval fits in your pipeline, ! talk to one of our engineers که تاسو غواړئ چې په چټکۍ سره په اړه چیټ وکړئ چې د کوډر مزي یا د څو ځمکې د ترلاسه کولو په ستاسو د پایپینډ کې مناسب وي، ! د خپلو انجنيرانو څخه خبرې وکړئ د خپلو انجنيرانو څخه خبرې وکړئ د خپلو انجنيرانو څخه خبرې وکړئ د انټرنېټ References: Superlinked retriever بسته په PyPI او LlamaIndex ډکونو لپاره د ګمرکولو retrievers. د مسلکي Vipul Maheshwari، د نویسنده فیلیپ Makraduli، د نندارتون