Step-by-step examples
Three recipes, from the most common to the most complete. Each one has an ingestion flow (run once, and again whenever the documents change) and a query flow (the one people use). Component and field names are the ones you see in the editor.
| Recipe | What for | You need |
|---|---|---|
| A. Manual assistant with Qdrant and Local Rerank | Answering about manuals, policies or product sheets with the best measured quality. | A Qdrant server and a language model. |
| B. Technical assistant with manuals and a graph | An agent that combines documents and linked records. | The above and a Neo4j database. |
| C. FAQ with verification | An assistant that would rather say “I don’t know” than make things up, with no servers. | Only a language model. |
A. Manual assistant with Qdrant and Local Rerank
What you get. An agent that answers from your manuals with the combination that worked best in our measurements: contextual chunks and reranking. Vectors and reranking are computed inside NappAI, with no per-use cost.
Ingestion flow
Components: Storage Files, Contextual Text Splitter, a language model (for example DeepSeek), Qdrant and FastEmbed Embeddings (Local).
- Upload your manuals to a folder in your storage, for example
manuals/. - Add Storage Files with Operation
Get File, the file in File or File Path, and ContentText. - Connect its output to Data Inputs of Contextual Text Splitter. Set Chunk Size to 800 and Chunk Overlap to 150, and connect the model to Language Model.
- Connect Chunks to Ingest Data of Qdrant, with Operation
Add. Fill in URL, Collection Name (for examplemanuals) and, if your server needs it, API Key. - Connect FastEmbed Embeddings (Local) to Embedding of Qdrant, with the default model.
- Run the flow. Repeat with every new manual.
Query flow
Components: Chat Input, Agent, a language model, Qdrant, FastEmbed Embeddings (Local), Local Rerank and Chat Output.
- Add Qdrant with the same URL and Collection Name, Operation
Retrieverand Number of Results 20. Connect the same FastEmbed Embeddings (Local) to Embedding. - Connect its Retriever output to Retriever of Local Rerank. Set Results to Keep to 5.
- Connect the Tool output of Local Rerank to Tools of the Agent. In the Tool tab, Tool Name
search_manualsand Tool Description “Searches the manuals: errors, repairs, parts, maintenance and warranty”. - Connect the model to Model, Chat Input to Input and Response to Chat Output.
- In System Prompt write:
You are the assistant of the company's technicians. For any question aboutthe machines, use the search_manuals tool.Answer only with what you find. If it is not there, say so and do not make it up.Answer clearly and briefly.Try it. In the playground, ask about an error code or a part reference from your manuals and then about something that is not in them. In the run you can see which chunks Local Rerank returned each time.
If your users search a lot by code, add hybrid search: a BM25 Retriever that reads the same collection and an Ensemble Retriever with both retrievers and Weights 0.5, 0.5, whose Retriever output goes to Local Rerank. See Retrieval techniques.
B. Technical assistant with manuals and a graph
What you get. The flows from the video in What is RAG: an assistant for the technicians of a coffee-machine repair service. A single agent searches all the documentation, searches only one brand’s documents when the question names it, and queries the incident history, stored as a graph in Neo4j.
The knowledge base. 9 PDFs in a folder of your storage: the manual of each machine (Jaltec Brío 2G, Vellani Aurora 2G and 3G, Molinar M64 OD grinder), the warranty and rates, the maintenance guide, three monthly incident reports and the FAQ. The same error code means different things on each brand, which is why every chunk is stored with its brand.
”Knowledge base · ingestion” flow
| Component | Key settings | Connects to |
|---|---|---|
| Storage Files (list) | Operation List Files on the documents folder | The second Storage Files |
| Storage Files (read) | Operation Get File in Batch Mode, to read the files of the list one by one; Content Text | Data Inputs of Contextual Text Splitter |
| Contextual Text Splitter | A fast model in Language Model, which adds to each chunk a sentence with its context | Data of Metadata Tagger |
| Metadata Tagger | Metadata Schema with the four fields below | Ingest Data of Qdrant |
| Qdrant | Operation Add | – |
| FastEmbed Embeddings (Local) | Default model | Embedding of Qdrant |
How to read the files of a list one by one: Storage Files and Batch Mode.
The fields of the Metadata Tagger schema (named in Spanish, as in the video):
| Name | Type | What it holds |
|---|---|---|
brand | string | The machine’s brand: Jaltec, Vellani or Molinar. |
type | string | The document type: manual, warranty, report, FAQ… |
month | string | The month of a report, written as 2026-07. |
codes | array | The error codes that appear in the chunk, such as E07. |
When you run it, the Tagged Data output shows every chunk with its text and its tags.
”Technical assistant · the whole RAG” flow
| Component | Key settings | Connects to |
|---|---|---|
| Qdrant | Operation Retriever, the same collection | Retrievers of Ensemble Retriever |
| BM25 Retriever | Reads the chunks of the same collection: the Vector Store output of Qdrant in Parent document vectorstore | Retrievers of Ensemble Retriever |
| Ensemble Retriever | Weights 0.5, 0.5 | Retriever of Local Rerank |
| Local Rerank “Search the documentation” | Results to Keep 5 | Tools of the Agent (Tool output) |
| Qdrant “Search by brand” | Filter by Metadata in Dynamic mode, with Metadata Filter (JSON) in tool mode so the agent writes the filter from the question | Tools of the Agent (Tool output) |
| Neo4j GraphRAG “Query incidents” | Neo4j API credential, Operation Text2Cypher, examples in Examples | Tools of the Agent (Tool output) |
| FastEmbed Embeddings (Local) | The same model as at ingestion | Embedding of both Qdrant nodes |
| DeepSeek | – | Model of the Agent and Language Model of Neo4j GraphRAG |
| Agent “Technical assistant” | Instructions that tell it which tool to use for what | Response to Chat Output |
The graph links each incident to its bar, its technician and its machine. How to prepare the graph and write the Examples: GraphRAG with Neo4j. A System Prompt that works with these three tools:
You are the assistant of Bean & Co's technicians, who repair coffee machines in bars and cafés.Use your tools:- Search the documentation, for errors, faults, parts, maintenance, warranty and rates.- Search by brand, when the question names a brand: the same code means different things on each one.- Query incidents, for specific data about incidents, bars, machines and technicians.If a question needs several, use several. Do not make anything up: if you cannot find it, say so.Answer in English, clearly and briefly.Try it with the video’s questions:
| Question | What it answers |
|---|---|
| ”Which part is VL-2210…?” | The PT1000 temperature probe of the Vellani Aurora. |
| ”My Vellani Aurora shows error E07…” | Blocked flowmeter, part VL-1180 and real cases. It warns that E07 means something else on the grinder. |
| ”Which open incidents does Lucía Ortega have…?” | All three, each with its bar, taken from the graph. |
| ”How much does a new Vellani Aurora cost to buy?” | It says it does not have that data, because it is neither in the documentation nor in the graph. |
Each technique in its own video
- Brand filters, in Retrieval techniques and Qdrant.
- The filter written by a model, in Self Query Retriever.
- Hybrid search with reranking, in Local Rerank.
- Questions phrased in other words, in Multi Query Retriever.
- Whole sections instead of chunks, in Multi Vector Retriever.
- The agent with sources and checks, in RAG agent.
- How to score the answers, in RAG Evaluator.
C. FAQ with verification
What you get. An FAQ assistant that checks every answer and says it could not find the information when it is not in your documents. It uses FAISS, which needs no server: the index is kept in your NappAI storage.
Ingestion flow
Components: Storage Files, Recursive Character Text Splitter, FAISS and FastEmbed Embeddings (Local).
- Storage Files with Operation
Get File, your FAQ document in File and ContentText. - Connect its output to Input of Recursive Character Text Splitter, with Chunk Size 800 and Chunk Overlap 150. If each question with its answer is shorter than that, one chunk will be one question.
- Connect the splitter’s output to Ingest Data of FAISS, with Operation
Add, Index Nameshop_faqand Persist Directoryfaq. - Connect FastEmbed Embeddings (Local) to Embedding and run.
If you prefer Chroma DB, it works the same: use Collection Name and Persist Directory instead of Index Name.
Query flow
Components: Chat Input, RAG Agent, a language model, FAISS, FastEmbed Embeddings (Local) and Chat Output.
- FAISS with Operation
Retriever, the same Index Name and Persist Directory, and Number of Results 4. Connect FastEmbed Embeddings (Local) to Embedding. - Connect its Retriever output to Retrievers of the RAG Agent.
- Connect the model to Model, Chat Input to Question and Response to Chat Output.
- Keep the accuracy options: Enable Document Relevance Grading and Enable Hallucination Check on, Enable Web Search Fallback off.
- In Additional Instructions write who it speaks for and what to do when it cannot find the answer:
You speak for Electrohogar Norte and address customers informally.If the documentation does not have the answer, invite them to write to soporte@electrohogar-norte.example.- If people ask chained questions, turn on Use Memory.
Try it. Ask something that is in your FAQ, then a follow-up (“and how much does it cost?”) and finally something that is not there. In the test we ran with a fictitious shop (in Spanish), “Do you have a physical store in Lisbon?” got an answer saying it could not find information about physical stores in Lisbon in the available documentation, and inviting the customer to write to support. Each answer cites its documents ([1], [2]…) and ends with the Sources (the Show Sources option, on by default).
More about each option in RAG agent.