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

作者:大模型教程日期:2025/11/18

本文较长,建议点赞收藏。更多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表示):

1restaurants = [
2{"shopType": 10,"shopName": "居民楼火锅","branchName": "万松园店","address": "万松小区","phoneNo": "17771857933","phoneNo2": "18871569657","avgPrice": 50,"suitableFor": 3
3},
4{"shopType": 10,"shopName": "重庆老火锅","branchName": "江汉路店","address": "江汉路步行街","phoneNo": "13800138000","avgPrice": 60,"suitableFor": 4
5}
6]
7

核心实现

1、检索函数

它的工作很直接:按菜系、人数、人均价格范围过滤餐厅。价格范围放宽到 ±20%,增加匹配灵活性。

1def query_restaurants(numOfPeople: int, avgOfAmount: int, cuisine_type: str) -> list:
2results = []
3type_code = CUISINE_TYPE_MAP.get(cuisine_type, None)if type_code is None:return []for restaurant in restaurants:if restaurant['shopType'] != type_code:continue
4if restaurant['suitableFor'] < numOfPeople:continue
5if not (0.8 * avgOfAmount <= restaurant['avgPrice'] <= 1.2 * avgOfAmount):continue
6results.append(restaurant)return results
7

2、参数抽取

通过正则匹配从用户输入中抽取关键信息,比如“3个人”“人均50”“重庆火锅”等。

1def extract_query_params(user_input: str):import re
2num_match = re.search(r'(\d+)\s*人', user_input)
3numOfPeople = int(num_match.group(1)) if num_match else 2
4avg_match = re.search(r'人均(\d+)', user_input)
5avgOfAmount = int(avg_match.group(1)) if avg_match else 50
6cuisine_type = None
7for k in CUISINE_TYPE_MAP.keys():if k in user_input:
8cuisine_type = kbreak
9if not cuisine_type:
10cuisine_type = list(CUISINE_TYPE_MAP.keys())[0]return numOfPeople, avgOfAmount, cuisine_type
11

3、大模型API调用

这里的亮点是流式输出,让推荐结果像聊天一样即时出现。

1from openai import OpenAI
2from dotenv import load_dotenv
3import os
4def run_agentic_rag():
5load_dotenv()print("欢迎使用 Agentic RAG 餐厅推荐系统(无需向量化)!\n")while True:
6user_input = input("请输入您的需求:")if user_input.strip().lower() == 'q':break
7numOfPeople, avgOfAmount, cuisine_type = extract_query_params(user_input)
8results = query_restaurants(numOfPeople, avgOfAmount, cuisine_type)if results:
9r = results[0]
10answer = f"按您的要求,我找到了{r['shopName']}({r['branchName']}),位于{r['address']},电话是{r['phoneNo']},是一家{cuisine_type},人均消费{r['avgPrice']}元,适合{r['suitableFor']}个人用餐。"else:
11answer = "没有找到符合条件的餐厅。"
12system_prompt = "你是餐饮推荐专家,请根据用户需求和检索到的结果,生成简洁、友好、准确的中文回复。"
13messages = [
14{"role": "system", "content": system_prompt},
15{"role": "user", "content": f"用户需求:{user_input}\n检索结果:{answer}"}
16]
17client = OpenAI(
18api_key="api_key",
19base_url="https://aistudio.baidu.com/llm/lmapi/v3",
20)
21completion = client.chat.completions.create(
22model="deepseek-r1",
23messages=messages,
24stream=True,
25)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()
26

⚠️由于openai版本原因,在fork项目时,需手动升级安装最新版openai

通过这个轻量级的餐厅推荐系统案例,我们可以看到Agentic RAG的核心价值

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

学习资源推荐

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

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


从0搭建Agentic RAG智能推荐系统(无需向量化)|Python实战分享》 是转载文章,点击查看原文


相关推荐


【赵渝强老师】OceanBase的连接与路由管理
赵渝强老师2025/11/17

OceanBase数据库连接路由管理组件ODP(OceanBase Database Proxy)是OceanBase数据库专用的连接路由管理集群。OceanBase数据库用户的数据会以多副本的形式存放在各个OBServer节点上,ODP接收用户发出的SQL请求,并将SQL请求转发至最佳目标OBServer节点,最后将执行结果返回给用户。 一、 ODP简介 OceanBase数据库与传统单机数据库不同,OceanBase数据库是分布式数据库,每个表甚至每个表的不同分区都可能存放在不同的机器上


Redis(127)Redis的内部数据结构是什么?
Victor3562025/11/16

Redis 是一个高性能的内存数据库,其底层实现依赖于多种数据结构。这些数据结构不仅决定了 Redis 的高性能,也使得 Redis 在处理不同类型的数据时能够保持高效。下面详细介绍 Redis 的内部数据结构,并结合具体代码示例进行解释。 1. 字符串(String) 字符串是 Redis 中最基本的数据类型。它不仅可以存储文本,还可以存储二进制数据,如图像或序列化对象。 示例代码 import redis.clients.jedis.Jedis; public class RedisStr


基于STM32与RS485总线的串口通信
listhi5202025/11/14

一、硬件架构设计 1. 硬件连接示意图 STM32(F103C8T6) MAX485芯片 LabVIEW PC - - USART1_TX → DI → RO (MAX485) USART1_RX ← RO → DI (MAX485) DE/RE → GPIOA.8 → DE/RE (控制) GND → GND 3.3V → VCC 2. 关键元器件选型 元件型号作用MCUSTM32F103C8T6主控芯片R


电脑硬盘数据恢复原理及核心技术解析
电脑小白技术2025/11/13

数据恢复技术的核心在于理解文件删除的底层逻辑。当文件被删除时,操作系统并未立即清除数据,而是将文件占用的空间标记为可覆盖。这意味着,只要这些空间未被新数据覆盖,文件就有机会被恢复。数据恢复技术通过扫描硬盘,寻找这些被标记为可覆盖但尚未被覆盖的数据块,从而实现文件的恢复。 在实际应用中,数据恢复技术已成功帮助无数人找回误删的重要文件。无论是个人用户还是企业,数据恢复技术都发挥着不可替代的作用。通过本文,我们将深入探讨数据恢复技术的原理、方法及其应用案例,带您了解这一神秘而实用的技术。 硬盘


AR眼镜基于上下文智能识别:电力运维高效规范操作应用方案|阿法龙XR云平台
北京阿法龙科技有限公司2025/11/12

传统电力运维依赖人工经验判断设备状态、查阅纸质、移动端手册,存在操作效率低、信息不对称、误操作风险高等痛点。随着AR技术与AI算法的融合升级,AR 眼镜已从被动显示提示向主动智能识别演进。依托AI图像识别、上下文语义理解技术,实现开关、仪表、设备状态的自动识别与精准交互,辅助运维人员规范操作流程、提升巡检效率,降低人为失误导致的安全风险。 AR终端采用轻量化AR眼镜,集成高清摄像头、麦克风,支持双手解放操作。本方案的算法核心包含设备识别模型(训练开关、仪表、互感器等电力设备特征库)、状态解析模


快速定位bug,编写测试用例
程序员小远2025/11/10

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快    作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员,那么在团队里你在开发中的地位显而易见 ,口碑、升值、加薪那应该是你遥不可及的梦。 但是作为测试人员来说,尽管你不能深入的去分析问题,但是你能发现系统存在的问题,这点也是值得肯定的,所以继续加油! 所以今天给大家分享的主题是:"怎么快速定位bug" 一、定位问题的重要性 很多测试人员可能会说,我


编写微服务api
CV_J2025/11/8

1.创建实体类模块 2.导入lombok <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> </dependencies> 3.添加实体类 packag


使用CameraX 1.5进行高速拍摄和慢动作视频拍摄
稀有猿诉2025/11/5

本文译自「High-Speed Capture and Slow-Motion Video with CameraX 1.5」,原文链接android-developers.googleblog.com/2025/10/hig…,由Leo Huang发布于2025年10月28日。 清晰捕捉快速运动的画面是现代相机应用的关键特性。这可以通过高速拍摄来实现——即以 120 或 240 fps 等速率采集帧。这种高保真拍摄可用于两种截然不同的用途:创建高帧率视频以进行逐帧的详细分析,或生成慢动作视


MPK(Mirage Persistent Kernel)源码笔记(4)--- 转译系统
罗西的思考2025/10/31

MPK(Mirage Persistent Kernel)源码笔记(4)--- 转译系统 0x00 概要 0x01 Task和Event 1.1 可执行任务 1.2 事件 0x02 生成CUDA代码 2.1 生成代码 2.2 注册代码 2.3 获取代码 0x03 生成任务图 3.1 入口 3.2 runtime.cc主体 3.3 建立依赖关系 3.4 输出代码 0xFF 参考 0x00 概要 此处的”转译系统“包含两部分: 把计算图转换为任务图。 将 Mir


目标使用过期的TLS1.0 版协议
oneslide2025/10/29

文章目录 目标使用过期的TLS1.0 版协议详细描述解决办法启用测试办法注意事项 目标主机支持RSA密钥交换详细描述解决办法 目标使用过期的TLS1.0 版协议 详细描述 该插件连接到目标主机服务,检测到目标服务加密通信使用的SSL加密算法。 远程服务利用旧版 TLS 加密流量。 解决办法 启用 TLS 1.2 和/或 1.3 支持,禁用 TLS 1.0 支持 nginx样例配置如下: server { list

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0