| ▲ | hbrn 18 hours ago | |||||||||||||
> it's ridiculous to reserve the term "RAG" for just the earliest most basic implementation Whether we like it or not, dumb semantic search became the colloquial definition of RAG. And when you hear someone saying "we use RAG here" 95% of the time this is exactly what they mean. When you inject user's name into the system prompt, technically you're doing RAG - but nobody thinks about it that way. I think it's one of those case where colloquial definition is actually more useful that the formal one. > doing it properly doesn't require a fundamentally different technique But agentic RAG is fundamentally different. | ||||||||||||||
| ▲ | joefourier 17 hours ago | parent [-] | |||||||||||||
Then what do you call RAG done well? You need a term for it. > And when you hear someone saying "we use RAG here" 95% of the time this is exactly what they mean. That's just Sturgeon's law in action. 95% of every implementation is crap. Back in the 90s, you might have heard "we use OOP here" and come to a similar conclusion, but that doesn't mean you need to invent a new word for doing OOP properly. > But agentic RAG is fundamentally different. From an implementation POV, absolutely not. I've personally gradually converted a dumb semantic search to a more fully featured agentic RAG in small steps like these: - Have a separate LLM call write the query instead of just using the user's message. - Make the RAG search a synthetic injected tool call, instead of appending it to the system prompt. - Improve the search endpoint by using an LLM to pre-process the data into structured chunks with hierarchical categories, tags, and possible search queries, embedding the search queries separately from the desired information (versus originally just having a raw blob). - Have the LLM be able to search both with a semantic sentence, and a list of tags. - Have the LLM view and navigate the hierarchy in a tree-like manner. - Make the original LLM able to call the search on its own instead of being automatically injected using a separate query rewriting call, letting it search in multiple rounds and refine its own queries. When did the system go from RAG to "not RAG"? Because fundamentally, all you need to do to make an agentic RAG is to have the LLM be able to write/rewrite its own search queries (possibly in multiple passes) as opposed to just passing the user's messages(s) directly. | ||||||||||||||
| ||||||||||||||