Build an agentic RAG
This tutorial will guide you through creating, indexing, searching, and retrieving structured data. You will learn how to:
- Create an index and upsert and manage records
- Perform advanced search queries
- Deploy a fully functional agentic RAG
This is useful for applications such as knowledge retrieval, content search, and structured data management.
Step 1: Set Up an Index
Indexes provide the foundation for structured data storage and retrieval.
Define a Synthetic Dataset
Define your data to create your index.
synthetic_data = [
    {"id": "doc1", "text": "Artificial intelligence is transforming industries worldwide.", "category": "technology"},
    {"id": "doc2", "text": "The Mona Lisa, painted by Leonardo da Vinci, is one of the most famous artworks.", "category": "art"},
    {"id": "doc3", "text": "Machine learning algorithms predict patient outcomes in hospitals.", "category": "healthcare"},
    {"id": "doc4", "text": "The Earth orbits the Sun once every 365.25 days.", "category": "science"},
]
Create an Index
Create an index utility tool to add data.
from aixplain.factories import IndexFactory
index = IndexFactory.create("Knowledge Base Index", "Index for general knowledge retrieval")
Upsert Records
Upsert your records into the index for fast and efficient searches:
from aixplain.modules.model.record import Record
records = [
    Record(value=item["text"], value_type="text", id=item["id"], attributes={"category": item["category"]})
    for item in synthetic_data
]
index.upsert(records)
Index ID
Get the ID of your index model.
print(index.id)
Refer to the Indexing and Search Guide for advanced indexing techniques and record management.
Step 2: Search with Model
Run the code below to search the utility model with your data. This helps you understand how the search works.
import requests
import json
def search_data(text: str, category: str):
    """
    Search the index based on the given category filter.
    """
    headers = {
        "x-api-key": API_KEY,
        "Content-Type": "application/json"
    }
    INDEX_ID= "<index id>"
    payload = {
        "action": "search",
        "data": text,
        "dataType": "text",
        "payload": {"top_k": 3},
    }
    if category == "None":
        category = None
    if category not in ["science", "healthcare", "art", "technology"]:
        raise Exception(
            f"Invalid case type: {category}, it must be one of the following: science, healthcare, art, technology"
        )
    if category is not None:
        payload["filter"] = {
            "field": "category",
            "operator": "==",
            "value": category}
    response = requests.post(f"https://models.aixplain.com/api/v2/execute/{INDEX_ID}", headers=headers, json=payload)
    if 200 <= response.status_code < 300:
        raw_content = response.content.decode('utf-8')
        response = json.loads(raw_content)
        return response
    else:
        return {"error": f"Request failed with status code: {response.status_code}"}
result = search_data("What is the impact of AI?", "technology")
print(result)
Step 3: Build an AI Agent
To automate queries and interactions, we create an agentic RAG.
Define the Agent
agent = AgentFactory.create(
    name="AI Search Assistant",
    description="An agent for intelligent search over indexed knowledge sources.",
    instructions=(
        """
        Perform search queries over structured indexed data. 
        Accept natural language queries, filter based on metadata like category, and return the most relevant results. 
        """
    ),
    tools=[
        AgentFactory.create_model_tool(model="<index_id>"),
    ]
)
Run the Agent
response = agent.run(data={"query": "What are the applications of quantum computing?"})
print(response.data.output)
Step 4: Deploy the AI Agent
Once tested, deploy the agentic RAG!
agent.deploy()
You have successfully built an AI-powered search and indexing system. This setup can be extended for various applications, including chatbots, document retrieval, and intelligent search assistants. 🚀