本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI。
传统RAG(检索增强生成)依赖向量化检索,流程复杂且资源消耗大。而Agentic RAG提供了一种更轻量的替代方案------无需向量化,仅需结构化内存数据库即可实现高效检索+生成。

<图片源于:LLM大模型>
Agentic RAG 在传统RAG流程的基础上加入了一个重要角色------Agent(智能体) 。它不仅能检索,还能根据任务动态选择工具、拆解问题、调用外部API,甚至多轮迭代优化结果。这意味着它可以:
- 不依赖大型向量数据库
- 根据不同任务,走不同的推理路线
- 对数据源和API灵活切换
本期给大家分享的是由和鲸社区创作者 @StarTap 分享的Agentic RAG 全面教程:从理论到实战项目中的餐厅智能推荐系统,就是一个典型例子。
🌟推荐理由:
项目中不仅清晰说明了Agentic RAG的理论基础(包含技术架构、工作原理以及与传统RAG的区别),还用极简的实现方式,构建了一个基于Agentic RAG思路的餐厅推荐系统,而且完全无需向量化,检索逻辑清晰、执行效率高,十分适合中小规模数据的业务场景。对于需要快速验证想法、构建轻量级智能推荐功能的团队来说,这将是一个很好的参考案例。



系统设计思路
整个系统的核心逻辑非常直接:
- 用户用自然语言描述需求(人数、人均价格、菜系)
- 系统从内存数据库中筛选符合条件的餐厅
- 用大模型包装检索结果,生成友好、准确的中文回复
关键在于:数据检索是纯Python条件过滤,不需要向量化。
知识源准备
项目中用了一个简化的餐厅数据集,每条数据包含:
- 餐厅名称、分店名称、地址
- 联系电话
- 人均消费
- 菜系类型编码
- 适合人数
数据示例(Python表示):
ini
restaurants = [
{"shopType": 10,"shopName": "居民楼火锅","branchName": "万松园店","address": "万松小区","phoneNo": "17771857933","phoneNo2": "18871569657","avgPrice": 50,"suitableFor": 3
},
{"shopType": 10,"shopName": "重庆老火锅","branchName": "江汉路店","address": "江汉路步行街","phoneNo": "13800138000","avgPrice": 60,"suitableFor": 4
}
]
核心实现
1、检索函数
它的工作很直接:按菜系、人数、人均价格范围过滤餐厅。价格范围放宽到 ±20%,增加匹配灵活性。
python
def query_restaurants(numOfPeople: int, avgOfAmount: int, cuisine_type: str) -> list:
results = []
type_code = CUISINE_TYPE_MAP.get(cuisine_type, None)if type_code is None:return []for restaurant in restaurants:if restaurant['shopType'] != type_code:continue
if restaurant['suitableFor'] < numOfPeople:continue
if not (0.8 * avgOfAmount <= restaurant['avgPrice'] <= 1.2 * avgOfAmount):continue
results.append(restaurant)return results
2、参数抽取
通过正则匹配从用户输入中抽取关键信息,比如"3个人""人均50""重庆火锅"等。
python
def extract_query_params(user_input: str):import re
num_match = re.search(r'(\d+)\s*人', user_input)
numOfPeople = int(num_match.group(1)) if num_match else 2
avg_match = re.search(r'人均(\d+)', user_input)
avgOfAmount = int(avg_match.group(1)) if avg_match else 50
cuisine_type = None
for k in CUISINE_TYPE_MAP.keys():if k in user_input:
cuisine_type = kbreak
if not cuisine_type:
cuisine_type = list(CUISINE_TYPE_MAP.keys())[0]return numOfPeople, avgOfAmount, cuisine_type
3、大模型API调用
这里的亮点是流式输出,让推荐结果像聊天一样即时出现。
ini
from openai import OpenAI
from dotenv import load_dotenv
import os
def run_agentic_rag():
load_dotenv()print("欢迎使用 Agentic RAG 餐厅推荐系统(无需向量化)!\n")while True:
user_input = input("请输入您的需求:")if user_input.strip().lower() == 'q':break
numOfPeople, avgOfAmount, cuisine_type = extract_query_params(user_input)
results = query_restaurants(numOfPeople, avgOfAmount, cuisine_type)if results:
r = results[0]
answer = f"按您的要求,我找到了{r['shopName']}({r['branchName']}),位于{r['address']},电话是{r['phoneNo']},是一家{cuisine_type},人均消费{r['avgPrice']}元,适合{r['suitableFor']}个人用餐。"else:
answer = "没有找到符合条件的餐厅。"
system_prompt = "你是餐饮推荐专家,请根据用户需求和检索到的结果,生成简洁、友好、准确的中文回复。"
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": f"用户需求:{user_input}\n检索结果:{answer}"}
]
client = OpenAI(
api_key="api_key",
base_url="https://aistudio.baidu.com/llm/lmapi/v3",
)
completion = client.chat.completions.create(
model="deepseek-r1",
messages=messages,
stream=True,
)for chunk in completion:if len(chunk.choices) > 0:if hasattr(chunk.choices[0].delta, 'reasoning_content') and chunk.choices[0].delta.reasoning_content:print(chunk.choices[0].delta.reasoning_content, end="", flush=True)else:print(chunk.choices[0].delta.content, end="", flush=True)print()
⚠️由于openai版本原因,在fork项目时,需手动升级安装最新版openai

通过这个轻量级的餐厅推荐系统案例,我们可以看到Agentic RAG的核心价值:
- 技术降本:用结构化数据+条件检索替代向量化,节省算力与存储开销,尤其适合中小规模场景。
- 灵活扩展:通过修改数据源或检索逻辑,可快速适配酒店推荐、活动匹配等同类需求。
- 敏捷验证:无需复杂基础设施,一个Python脚本即可验证智能推荐的核心流程。

学习资源推荐
如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。
本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI。