{"id":9115,"date":"2026-11-03T09:52:11","date_gmt":"2026-11-03T04:22:11","guid":{"rendered":"https:\/\/nextagile.ai\/blogs\/?p=9115"},"modified":"2026-11-03T09:53:34","modified_gmt":"2026-11-03T04:23:34","slug":"rag-project-ideas-for-students","status":"publish","type":"post","link":"https:\/\/nextagile.ai\/blogs\/gen-ai\/rag-project-ideas-for-students\/","title":{"rendered":"10 RAG Project Ideas for Students (With Tools and Source Code)"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">The best RAG projects for students are ones where you can prove the answers are right: a PDF Q&amp;A bot, a campus FAQ assistant, an arXiv paper explorer, a documentation support bot, a filings analyst, a code repository assistant, a lecture transcript assistant, a multilingual assistant, a small graph-based RAG and a RAG evaluation capstone. Each project below lists the tools, a public data source, the steps and how to test it. Starter code for the core pipeline is included, along with guidance on choosing a stack, evaluating results and presenting the project.<\/span><\/p>\n<h2><b>Key Highlights of RAG Project Ideas<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">RAG (retrieval-augmented generation) combines a retriever that finds relevant text with a language model that writes the answer from it.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The ten projects move from beginner to advanced. Start with Project 1 or 2 if you are new.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Every project should show citations and an evaluation table. A demo that cannot be checked will not convince an interviewer.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Depth beats volume. One well-measured project is worth more than five tutorial clones.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The starter code is written for this article and uses common open-source libraries. Pin library versions, because APIs change.<\/span><\/li>\n<\/ul>\n<h2><b>What Is RAG and Why Build RAG Projects?<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Retrieval-augmented generation (RAG) lets a language model answer from documents you supply instead of relying only on what it learned in training. The idea was set out in the 2020 paper <\/span><a href=\"https:\/\/arxiv.org\/abs\/2005.11401\" rel=\"nofollow noopener\" target=\"_blank\"><span style=\"font-weight: 400;\">Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks<\/span><\/a><span style=\"font-weight: 400;\"> by Patrick Lewis and colleagues, which paired a pretrained sequence-to-sequence model with a neural retriever over a dense index of Wikipedia. Today the same pattern powers company knowledge bases, support bots and research tools.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">RAG is a strong student project area because it covers skills employers ask about: working with documents, search, embeddings, prompting, evaluation and basic security. It also gives you something concrete to discuss in an interview. If you want to practise the questions you are likely to be asked, work through our <\/span><a href=\"https:\/\/nextagile.ai\/blogs\/gen-ai\/rag-interview-questions-and-answers\/\"><span style=\"font-weight: 400;\">RAG interview questions and answers<\/span><\/a><span style=\"font-weight: 400;\"> alongside your build.<\/span><\/p>\n<h2><b>How a Basic RAG Pipeline Works<\/b><\/h2>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Load and clean<\/b><span style=\"font-weight: 400;\"> your documents.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Chunk<\/b><span style=\"font-weight: 400;\"> them into passages of manageable size, usually with some overlap.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Embed<\/b><span style=\"font-weight: 400;\"> each chunk into a vector and store the vectors in an index.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Retrieve<\/b><span style=\"font-weight: 400;\"> the chunks closest to the user&#8217;s question.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Generate<\/b><span style=\"font-weight: 400;\"> an answer from a prompt that contains the question and the retrieved chunks, and ask the model to cite them.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">Here is a minimal retrieval core you can reuse in most projects. It uses the sentence-transformers library and <\/span><a href=\"https:\/\/github.com\/facebookresearch\/faiss\" rel=\"nofollow noopener\" target=\"_blank\"><span style=\"font-weight: 400;\">FAISS<\/span><\/a><span style=\"font-weight: 400;\">, Meta&#8217;s open-source library for similarity search, and is original starter code, not taken from any repository:<\/span><\/p>\n<p><span style=\"font-weight: 400;\"># pip install sentence-transformers faiss-cpu pypdf numpy<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">import numpy as np, faiss<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">from pypdf import PdfReader<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">from sentence_transformers import SentenceTransformer<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">def load_pdf(path):<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 reader = PdfReader(path)<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 return &#8220;\\n&#8221;.join(page.extract_text() or &#8220;&#8221; for page in reader.pages)<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">def chunk(text, size=800, overlap=150):<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 chunks, start = [], 0<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 while start &lt; len(text):<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 \u00a0 \u00a0 chunks.append(text[start:start + size])<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 \u00a0 \u00a0 start += size &#8211; overlap<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 return chunks<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">model = SentenceTransformer(&#8220;all-MiniLM-L6-v2&#8221;)<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">chunks = chunk(load_pdf(&#8220;notes.pdf&#8221;))<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">emb = model.encode(chunks, normalize_embeddings=True).astype(&#8220;float32&#8221;)<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">index = faiss.IndexFlatIP(emb.shape[1]) \u00a0 # inner product = cosine on normalised vectors<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">index.add(emb)<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">def retrieve(question, k=3):<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 q = model.encode([question], normalize_embeddings=True).astype(&#8220;float32&#8221;)<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 scores, ids = index.search(q, k)<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 return [(int(i), chunks[i], float(s)) for i, s in zip(ids[0], scores[0])]<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">def build_prompt(question, hits):<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 context = &#8220;\\n\\n&#8221;.join(f&#8221;[{i}] {text}&#8221; for i, text, _ in hits)<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 return (&#8220;Answer using only the context below. Cite chunk numbers like [2]. &#8220;<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &#8220;If the answer is not in the context, say you do not know.\\n\\n&#8221;<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 f&#8221;Context:\\n{context}\\n\\nQuestion: {question}\\nAnswer:&#8221;)<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\"># answer = call_your_llm(build_prompt(q, retrieve(q))) \u00a0 # use any LLM API or a local model<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">To check retrieval before you add a language model, write 15 to 20 questions together with the chunk that contains each answer, then measure how often the right chunk appears in the top three results:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">def hit_rate(test_set, k=3):<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 # test_set: list of (question, correct_chunk_id)<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 hits = sum(1 for q, cid in test_set if cid in [i for i, _, _ in retrieve(q, k)])<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">\u00a0 \u00a0 return hits \/ len(test_set)<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Notice the prompt in build_prompt. It tells the model to use only the supplied context, to cite chunk numbers and to say it does not know when the answer is missing. Writing that instruction well is a skill in itself, and our guides to <\/span><a href=\"https:\/\/nextagile.ai\/blogs\/ai\/prompt-engineering-techniques\/\"><span style=\"font-weight: 400;\">prompt engineering techniques<\/span><\/a><span style=\"font-weight: 400;\"> and to <\/span><a href=\"https:\/\/nextagile.ai\/blogs\/gen-ai\/context-engineering-vs-prompt-engineering\/\"><span style=\"font-weight: 400;\">context engineering vs prompt engineering<\/span><\/a><span style=\"font-weight: 400;\"> explain why what you put into the context matters as much as how you phrase the instruction.<\/span><\/p>\n<h2><b>Choosing Your Stack Before You Start<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Students often lose weeks to tool choices. A sensible default is enough for any project below, and you can swap parts later because a RAG pipeline is modular.<\/span><\/p>\n<table>\n<thead>\n<tr>\n<th><span style=\"font-weight: 400;\">Layer<\/span><\/th>\n<th><span style=\"font-weight: 400;\">Good starting choices<\/span><\/th>\n<th><span style=\"font-weight: 400;\">Consider switching when<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">Document loading<\/span><\/td>\n<td><span style=\"font-weight: 400;\">pypdf for PDFs, BeautifulSoup for web pages, plain text readers<\/span><\/td>\n<td><span style=\"font-weight: 400;\">You need table or layout extraction from complex reports<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Embeddings<\/span><\/td>\n<td><span style=\"font-weight: 400;\">A sentence-transformers model such as all-MiniLM-L6-v2 for English; a multilingual model for other languages<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Retrieval quality is poor on your domain or language<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Vector store<\/span><\/td>\n<td><span style=\"font-weight: 400;\">FAISS for in-memory search, Chroma for a simple persistent local store<\/span><\/td>\n<td><span style=\"font-weight: 400;\">You need filtering, many users or a hosted service<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Orchestration<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Plain Python first; LangChain or LlamaIndex once you want ready-made loaders and chains<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Your pipeline has many steps or tools<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Language model<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Any hosted API or a local open-weights model<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Cost, privacy or latency becomes a problem<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Interface<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Streamlit or Gradio<\/span><\/td>\n<td><span style=\"font-weight: 400;\">You want a custom front end<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">Start with plain Python so you understand each step. When you move to a framework, you will know what it is doing for you. Our comparison of <\/span><a href=\"https:\/\/nextagile.ai\/blogs\/ai\/llamaindex-vs-langchain\/\"><span style=\"font-weight: 400;\">LlamaIndex vs LangChain<\/span><\/a><span style=\"font-weight: 400;\"> will help you choose between the two most common options.<\/span><\/p>\n<h2><b>Chunking Strategies You Should Know<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Chunking has more effect on answer quality than most students expect. Try these approaches and compare them on your own question set:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Fixed size with overlap.<\/b><span style=\"font-weight: 400;\"> Simple and a good baseline, as in the starter code. It can split a sentence or table in half.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Structure-aware chunking.<\/b><span style=\"font-weight: 400;\"> Split on headings, sections or paragraphs so each chunk is a complete idea. This usually helps for handbooks, reports and documentation.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Semantic chunking.<\/b><span style=\"font-weight: 400;\"> Split where the topic changes, measured with embeddings. It costs more to compute and needs testing to prove it helps.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Parent and child chunks.<\/b><span style=\"font-weight: 400;\"> Search small chunks for precision but return the larger surrounding section as context.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Metadata.<\/b><span style=\"font-weight: 400;\"> Attach the document name, page, heading and date to every chunk. This supports citations and filtering.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">There is no universally best size. Measure retrieval hit rate for two or three settings and record the results. That small experiment is exactly the kind of evidence interviewers like to see.<\/span><\/p>\n<h2><b>Project 1: Chat With Your Course Notes (PDF Q&amp;A)<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Difficulty:<\/b><span style=\"font-weight: 400;\"> Beginner<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>What you build:<\/b><span style=\"font-weight: 400;\"> A web app where you upload lecture notes or a textbook chapter and ask questions that are answered with page citations.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Tools:<\/b><span style=\"font-weight: 400;\"> pypdf, sentence-transformers, FAISS, Streamlit or Gradio for the interface, any LLM API or local model.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Data:<\/b><span style=\"font-weight: 400;\"> Your own notes, or openly licensed textbooks. Check the licence before sharing a demo publicly.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Steps:<\/b><span style=\"font-weight: 400;\"> Use the starter code above, store the page number with each chunk, show the cited pages beside each answer, and add a &#8220;not found in notes&#8221; response.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>How to test it:<\/b><span style=\"font-weight: 400;\"> Write 20 questions from your notes with known answers and report the top-3 hit rate.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stretch:<\/b><span style=\"font-weight: 400;\"> Support several PDFs and filter by document.<\/span><\/li>\n<\/ul>\n<h2><b>Project 2: Campus or Company FAQ Assistant With Citations<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Difficulty:<\/b><span style=\"font-weight: 400;\"> Beginner<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>What you build:<\/b><span style=\"font-weight: 400;\"> An assistant that answers questions about a college handbook, hostel rules or a student club&#8217;s policies and always links the source section.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Tools:<\/b><span style=\"font-weight: 400;\"> LangChain or LlamaIndex for loaders and chunking, Chroma as a local vector store, Streamlit.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Data:<\/b><span style=\"font-weight: 400;\"> Publicly available handbooks and policy pages. Do not use private student data.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Steps:<\/b><span style=\"font-weight: 400;\"> Split documents by headings rather than fixed length, store the heading with each chunk, and return the heading as the citation. Add a rule that refuses questions outside the handbook.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>How to test it:<\/b><span style=\"font-weight: 400;\"> Include trick questions the handbook does not answer and check that the bot says it does not know.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stretch:<\/b><span style=\"font-weight: 400;\"> Add a feedback button and log which questions fail.<\/span><\/li>\n<\/ul>\n<h2><b>Project 3: arXiv Paper Explorer<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Difficulty:<\/b><span style=\"font-weight: 400;\"> Beginner to intermediate<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>What you build:<\/b><span style=\"font-weight: 400;\"> A research assistant that answers questions across a set of papers on one topic, such as retrieval-augmented generation or time-series forecasting, and lists the papers it used.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Tools:<\/b><span style=\"font-weight: 400;\"> The public arXiv API for metadata and abstracts, sentence-transformers, FAISS or Chroma, Streamlit.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Data:<\/b><span style=\"font-weight: 400;\"> Abstracts and, where the licence allows, full text of 200 to 500 papers on one topic.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Steps:<\/b><span style=\"font-weight: 400;\"> Download metadata with the arXiv API, embed abstracts, retrieve by question, and have the model summarise with paper titles and IDs as citations.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>How to test it:<\/b><span style=\"font-weight: 400;\"> Ask questions whose answers sit in a single paper and check that the paper is retrieved.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stretch:<\/b><span style=\"font-weight: 400;\"> Add date filters and a &#8220;compare two papers&#8221; mode.<\/span><\/li>\n<\/ul>\n<h2><b>Project 4: Documentation Support Bot With Hybrid Search<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Difficulty:<\/b><span style=\"font-weight: 400;\"> Intermediate<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>What you build:<\/b><span style=\"font-weight: 400;\"> A support bot for an open-source library&#8217;s documentation, combining keyword search and vector search.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Tools:<\/b><span style=\"font-weight: 400;\"> rank_bm25 for keyword search, sentence-transformers and FAISS for vectors, and a simple fusion step to merge the two ranked lists.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Data:<\/b><span style=\"font-weight: 400;\"> The documentation of an open-source project you use. Check its licence.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Steps:<\/b><span style=\"font-weight: 400;\"> Chunk by documentation page and section, run both searches, merge results with reciprocal rank fusion, and cite the page URL.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>How to test it:<\/b><span style=\"font-weight: 400;\"> Compare vector-only, keyword-only and hybrid search on the same 30 questions. Exact error messages and function names often favour keyword search, so the table will show why hybrid helps.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stretch:<\/b><span style=\"font-weight: 400;\"> Add a re-ranking model for the top 20 results.<\/span><\/li>\n<\/ul>\n<h2><b>Project 5: Annual Report and Filing Analyst<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Difficulty:<\/b><span style=\"font-weight: 400;\"> Intermediate<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>What you build:<\/b><span style=\"font-weight: 400;\"> An assistant that answers questions about a company&#8217;s annual report, such as risk factors, segments and management discussion, with the section cited.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Tools:<\/b><span style=\"font-weight: 400;\"> Documents from the US SEC EDGAR system (public filings) or a company&#8217;s published annual report, a PDF or HTML parser, Chroma or FAISS.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Data:<\/b><span style=\"font-weight: 400;\"> One to three annual reports. For SEC EDGAR, follow the SEC&#8217;s access rules, including declaring a User-Agent.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Steps:<\/b><span style=\"font-weight: 400;\"> Split by filing section, keep tables as separate chunks with their captions, and add a rule that numbers must come from the text, never from the model&#8217;s memory.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>How to test it:<\/b><span style=\"font-weight: 400;\"> Ask for specific figures and compare against the report. Count answers that contain a number not found in the retrieved text.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stretch:<\/b><span style=\"font-weight: 400;\"> Compare the same section across two years.<\/span><\/li>\n<\/ul>\n<h2><b>Project 6: Code Repository Q&amp;A Assistant<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Difficulty:<\/b><span style=\"font-weight: 400;\"> Intermediate<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>What you build:<\/b><span style=\"font-weight: 400;\"> A tool that answers &#8220;where is X handled?&#8221; or &#8220;how does Y work?&#8221; for a small open-source repository.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Tools:<\/b><span style=\"font-weight: 400;\"> Python&#8217;s ast module or tree-sitter to split code by function and class, an embedding model, FAISS or Chroma.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Data:<\/b><span style=\"font-weight: 400;\"> A small open-source repository with a permissive licence.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Steps:<\/b><span style=\"font-weight: 400;\"> Chunk by function, store the file path and line numbers, retrieve with the question, and show the code snippet with its location.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>How to test it:<\/b><span style=\"font-weight: 400;\"> Write 20 questions with known file locations and report how often the right file appears in the top five.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stretch:<\/b><span style=\"font-weight: 400;\"> Add the README and docstrings as a second index.<\/span><\/li>\n<\/ul>\n<h2><b>Project 7: Lecture and Meeting Transcript Assistant<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Difficulty:<\/b><span style=\"font-weight: 400;\"> Intermediate<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>What you build:<\/b><span style=\"font-weight: 400;\"> An assistant that turns a recorded lecture or team meeting into a searchable transcript and answers questions with timestamps.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Tools:<\/b><span style=\"font-weight: 400;\"> OpenAI&#8217;s open-source Whisper model for speech-to-text, sentence-transformers, FAISS, Streamlit.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Data:<\/b><span style=\"font-weight: 400;\"> Recordings you have permission to use, such as your own lectures or a club meeting. Get consent before recording others.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Steps:<\/b><span style=\"font-weight: 400;\"> Transcribe with timestamps, chunk by time window, store start and end times, and show a timestamp with each cited answer.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>How to test it:<\/b><span style=\"font-weight: 400;\"> Ask questions about moments you remember and check the cited timestamp.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stretch:<\/b><span style=\"font-weight: 400;\"> Generate action items and link each to its timestamp.<\/span><\/li>\n<\/ul>\n<h2><b>Project 8: Multilingual Q&amp;A Over Indian-Language Documents<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Difficulty:<\/b><span style=\"font-weight: 400;\"> Intermediate to advanced<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>What you build:<\/b><span style=\"font-weight: 400;\"> An assistant that answers in the user&#8217;s language from documents written in Hindi, Telugu, Tamil or another Indian language, for example a state government scheme guide.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Tools:<\/b><span style=\"font-weight: 400;\"> A multilingual embedding model such as multilingual-e5 (available through the Hugging Face hub), FAISS or Chroma, and a language model that handles your target language.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Data:<\/b><span style=\"font-weight: 400;\"> Public documents from government portals. Check usage terms.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Steps:<\/b><span style=\"font-weight: 400;\"> Embed documents and questions with the multilingual model, test whether a question in one language retrieves a passage written in another, and ask the model to answer in the question&#8217;s language.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>How to test it:<\/b><span style=\"font-weight: 400;\"> Build a small question set in two languages and compare retrieval hit rate by language.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stretch:<\/b><span style=\"font-weight: 400;\"> Detect the question language automatically.<\/span><\/li>\n<\/ul>\n<h2><b>Project 9: GraphRAG-Lite, an Entity Graph Over a Document Set<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Difficulty:<\/b><span style=\"font-weight: 400;\"> Advanced<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>What you build:<\/b><span style=\"font-weight: 400;\"> A RAG system that links people, organisations and places across documents and uses those links to answer questions that need several documents.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Tools:<\/b><span style=\"font-weight: 400;\"> spaCy for entity extraction, networkx for the graph, FAISS or Chroma for text retrieval.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Data:<\/b><span style=\"font-weight: 400;\"> A set of news articles or case notes on one topic, from sources that allow reuse.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Steps:<\/b><span style=\"font-weight: 400;\"> Extract entities per chunk, connect entities that appear together, retrieve chunks by question, then add chunks connected through the graph. Compare answers with plain RAG.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>How to test it:<\/b><span style=\"font-weight: 400;\"> Write multi-hop questions such as &#8220;Which organisations are connected to both X and Y?&#8221; and score both systems.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stretch:<\/b><span style=\"font-weight: 400;\"> Read how production systems approach this in our comparison of <\/span><a href=\"https:\/\/nextagile.ai\/blogs\/ai\/graphrag-vs-rag\/\"><span style=\"font-weight: 400;\">GraphRAG vs RAG<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/li>\n<\/ul>\n<h2><b>Project 10: RAG Evaluation and Guardrails Capstone<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Difficulty:<\/b><span style=\"font-weight: 400;\"> Advanced<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>What you build:<\/b><span style=\"font-weight: 400;\"> Take any project above and add a measurement and safety layer: an evaluation report and checks for unsafe or unsupported answers.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Tools:<\/b><span style=\"font-weight: 400;\"> The <\/span><a href=\"https:\/\/docs.ragas.io\" rel=\"nofollow noopener\" target=\"_blank\"><span style=\"font-weight: 400;\">Ragas<\/span><\/a><span style=\"font-weight: 400;\"> library for RAG evaluation, plus simple rule-based checks you write yourself.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Data:<\/b><span style=\"font-weight: 400;\"> The question set from your earlier project, extended with reference answers.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Steps:<\/b><span style=\"font-weight: 400;\"> Score faithfulness (are the answer&#8217;s claims supported by the retrieved context), answer relevancy (does it address the question), context precision (are relevant chunks ranked first) and context recall (did retrieval capture what is needed). Add rules that block answers without citations and flag prompt-injection text found in documents.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>How to test it:<\/b><span style=\"font-weight: 400;\"> Change one thing at a time, such as chunk size or the number of retrieved chunks, and show how the scores move.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Stretch:<\/b><span style=\"font-weight: 400;\"> Add a small set of adversarial questions and report how many are blocked.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Metric names and function calls in Ragas change between versions, so follow the documentation for the version you install.<\/span><\/p>\n<h2><b>How to Evaluate a RAG Project: A Worked Example<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Evaluation is where most student projects stop short, so it is worth seeing what a good result looks like. The table below is a hypothetical example for a campus FAQ assistant. The numbers are invented to show the format, not real results.<\/span><\/p>\n<table>\n<thead>\n<tr>\n<th><span style=\"font-weight: 400;\">Experiment (hypothetical)<\/span><\/th>\n<th><span style=\"font-weight: 400;\">Chunking<\/span><\/th>\n<th><span style=\"font-weight: 400;\">Chunks retrieved<\/span><\/th>\n<th><span style=\"font-weight: 400;\">Top-k hit rate<\/span><\/th>\n<th><span style=\"font-weight: 400;\">Faithfulness (manual review of 20 answers)<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">A (baseline)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Fixed 800 characters<\/span><\/td>\n<td><span style=\"font-weight: 400;\">3<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Lower<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Several unsupported claims<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">B<\/span><\/td>\n<td><span style=\"font-weight: 400;\">By heading<\/span><\/td>\n<td><span style=\"font-weight: 400;\">3<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Higher<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Fewer unsupported claims<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">C<\/span><\/td>\n<td><span style=\"font-weight: 400;\">By heading<\/span><\/td>\n<td><span style=\"font-weight: 400;\">5<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Similar to B<\/span><\/td>\n<td><span style=\"font-weight: 400;\">More off-topic detail in answers<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">The point is the method: change one variable, measure on the same questions and explain what happened. Write two sentences under each experiment saying what you learned. A README that shows this reasoning tells a reviewer you can think like an engineer, not only follow a tutorial.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Also test failure cases deliberately. Ask questions the documents do not answer, ask ambiguous questions, and try a document that contains an instruction such as &#8220;ignore previous instructions&#8221;. Record what your system does in each case.<\/span><\/p>\n<h2><b>How to Choose Your Project<\/b><\/h2>\n<table>\n<thead>\n<tr>\n<th><span style=\"font-weight: 400;\">If you are<\/span><\/th>\n<th><span style=\"font-weight: 400;\">Start with<\/span><\/th>\n<th><span style=\"font-weight: 400;\">Then<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400;\">New to RAG<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Project 1 or 2<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Project 3<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Comfortable with Python and APIs<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Project 4 or 5<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Project 10 to add evaluation<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Preparing for an AI engineering role<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Project 6 or 7<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Project 9 and 10<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Interested in Indian-language users<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Project 8<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Project 10<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">If you are still deciding whether RAG is the right area for you, our overview of <\/span><a href=\"https:\/\/nextagile.ai\/blog\/ai\/artificial-intelligence-projects-for-students\/\"><span style=\"font-weight: 400;\">AI projects for students<\/span><\/a><span style=\"font-weight: 400;\"> shows the wider landscape.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you are planning a hackathon entry, a RAG project is a strong core, and our list of <\/span><a href=\"https:\/\/nextagile.ai\/blogs\/gen-ai\/top-hackathon-project-ideas\/\"><span style=\"font-weight: 400;\">hackathon project ideas<\/span><\/a><span style=\"font-weight: 400;\"> can help you pick a problem worth solving. If you would rather build an agent that uses retrieval as one of its tools, see our ideas for <\/span><a href=\"https:\/\/nextagile.ai\/blog\/ai\/ai-agent-project-ideas\/\"><span style=\"font-weight: 400;\">AI agent projects<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h2><b>How to Present a RAG Project in Your Portfolio<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Write a clear README.<\/b><span style=\"font-weight: 400;\"> State the problem, the data, the architecture in one diagram, how to run it and what you measured.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Show evidence, not just a demo.<\/b><span style=\"font-weight: 400;\"> Put your question set and results table in the repository.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Cite every answer<\/b><span style=\"font-weight: 400;\"> and show what the system does when it does not know.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Document your choices:<\/b><span style=\"font-weight: 400;\"> chunk size, embedding model, number of retrieved chunks and what you tried that did not work.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Respect data rules.<\/b><span style=\"font-weight: 400;\"> Use public or permitted data, and state licences.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Add safety notes.<\/b><span style=\"font-weight: 400;\"> Mention prompt injection through documents and how you handled it.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Record a short demo video<\/b><span style=\"font-weight: 400;\"> so a recruiter can see it working in two minutes.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">RAG is one of several areas worth building in. If you want to widen your portfolio, our guide to <\/span><a href=\"https:\/\/nextagile.ai\/blogs\/ai\/agentic-ai-projects\/\"><span style=\"font-weight: 400;\">agentic AI projects<\/span><\/a><span style=\"font-weight: 400;\"> covers a neighbouring direction that often uses retrieval as one tool among several.<\/span><\/p>\n<h2><b>Common RAG Project Mistakes<\/b><\/h2>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Choosing chunk size by guess and never testing it.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Letting the model answer from memory when retrieval finds nothing.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Skipping evaluation because the demo &#8220;looks right&#8221;.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Using private or copyrighted data in a public demo.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Calling a project RAG when it only pastes one long document into a prompt.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Hiding failures. A section on known limits makes a project more credible, not less.<\/span><\/li>\n<\/ul>\n<h2><b>Conclusion<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Pick one project, finish it, and measure it. A small RAG system that cites its sources and reports its own accuracy is worth more than a large one nobody can verify. Build in the order that suits your level, and keep your question set as the proof of what works.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you want guided practice, NextAgile&#8217;s <\/span><a href=\"https:\/\/nextagile.ai\/gen-ai-engineering-program\/\"><span style=\"font-weight: 400;\">Gen AI Foundation Training for Freshers<\/span><\/a><span style=\"font-weight: 400;\"> is a 16-week programme that its page describes as about 60% labs with 10+ project options, and the <\/span><a href=\"https:\/\/nextagile.ai\/workshop\/langchain-mastery-workshop\/\"><span style=\"font-weight: 400;\">LangChain Mastery Workshop<\/span><\/a><span style=\"font-weight: 400;\"> covers RAG pipelines and vector stores for technical teams.<\/span><\/p>\n<h2><b>Frequently Asked Questions<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">These are audience questions identified by the NextAgile team, not observed search results.<\/span><\/p>\n<p><b>1.What is a RAG project?<\/b><\/p>\n<p><span style=\"font-weight: 400;\">A project that retrieves relevant text from your own documents and gives it to a language model so the answer is grounded in that text.<\/span><\/p>\n<p><b>2.Which RAG project is best for beginners?<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A PDF Q&amp;A bot or a campus FAQ assistant, because the data is small and you can check answers yourself.<\/span><\/p>\n<p><b>3.Which vector database should I use?<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For learning, FAISS or Chroma run locally with little setup. Move to a hosted store only if your project needs it.<\/span><\/p>\n<p><b>4.Do I need to fine-tune a model for RAG?<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">No. RAG works with an off-the-shelf model because the knowledge comes from retrieval, not from training.<\/span><\/p>\n<p><b>5.How do I know my RAG system is accurate?<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Build a question set with known answers and measure retrieval hit rate and answer faithfulness, as in Projects 1 and 10.<\/span><\/p>\n<p><b>6.How do I explain my RAG project in an interview?<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Describe the problem, your design choices, your evaluation results and what failed. Practise with our <\/span><a href=\"https:\/\/nextagile.ai\/blogs\/gen-ai\/llm-interview-questions\/\"><span style=\"font-weight: 400;\">LLM interview questions<\/span><\/a><span style=\"font-weight: 400;\">, which cover the model-level concepts interviewers tend to probe.<\/span><\/p>\n<p><b>7.Can I build a RAG project without paying for an API?<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Yes. You can use a local open-weights model for generation and local embeddings, though quality and speed depend on your hardware.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The best RAG projects for students are ones where you can prove the answers are right: a PDF Q&amp;A bot, a campus FAQ assistant, an arXiv paper explorer, a documentation support bot, a filings analyst, a code repository assistant, a lecture transcript assistant, a multilingual assistant, a small graph-based RAG and a RAG evaluation capstone&#8230;.<\/p>\n","protected":false},"author":19,"featured_media":9116,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[145],"tags":[],"class_list":["post-9115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gen-ai"],"_links":{"self":[{"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/posts\/9115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/comments?post=9115"}],"version-history":[{"count":2,"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/posts\/9115\/revisions"}],"predecessor-version":[{"id":9118,"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/posts\/9115\/revisions\/9118"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/media\/9116"}],"wp:attachment":[{"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/media?parent=9115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/categories?post=9115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nextagile.ai\/blogs\/wp-json\/wp\/v2\/tags?post=9115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}