从0搭建Agentic RAG智能推荐系统(无需向量化)|Python实战分享

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI

传统RAG(检索增强生成)依赖向量化检索,流程复杂且资源消耗大。而Agentic RAG提供了一种更轻量的替代方案------无需向量化,仅需结构化内存数据库即可实现高效检索+生成。

<图片源于:LLM大模型>

Agentic RAG 在传统RAG流程的基础上加入了一个重要角色------Agent(智能体) 。它不仅能检索,还能根据任务动态选择工具、拆解问题、调用外部API,甚至多轮迭代优化结果。这意味着它可以:

  • 不依赖大型向量数据库
  • 根据不同任务,走不同的推理路线
  • 对数据源和API灵活切换

本期给大家分享的是由和鲸社区创作者 @StarTap 分享的Agentic RAG 全面教程:从理论到实战项目中的餐厅智能推荐系统,就是一个典型例子。

项目指路:www.heywhale.com/u/745b40

🌟推荐理由:

项目中不仅清晰说明了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的核心价值

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

学习资源推荐

如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI

相关推荐
郭东东17 小时前
用数据工程与策略,推动模型持续进化|字节跳动招聘全栈研发工程师 - AI 数据与安全
llm·ai编程·招聘
沉默王二18 小时前
面试官坏笑:“你用 AI 编程一年了,怎么保证 Claude Code 写出来的代码是对的?”我:“直接上 Claude Fable 5 啊!”
agent·ai编程·claude
米小虾18 小时前
AI Agent从Demo到生产:2026年主流Agent开发框架全景对比与实战选型指南
人工智能·agent
冬奇Lab18 小时前
Agent 系列(20):Harness 实战——从单文件到生产级模块包
人工智能·agent
玉鸯18 小时前
我认为的2026 年,Agent开发最佳的学习教程
agent
云烟成雨TD18 小时前
Agent Scope Java 2.x 系列【8】工具调用
java·人工智能·agent
云烟成雨TD19 小时前
Agent Scope Java 2.x 系列【9】接入高德 MCP 服务
java·人工智能·agent
花月C20 小时前
AI驱动的竞品分析多Agent协作系统设计理论
人工智能·python·ai·agent·ai编程
老梁agent20 小时前
Temperature=0.3 还是 0.7?工业诊断场景下调参实验
langchain·agent
码哥字节20 小时前
码哥实测:写了20行SKILL.md,Claude的代码质量提升了一倍
agent·mcp