刺猬猫阅读免费下载
126.01MB · 2025-10-14
朋友们,今天我们来聊一个能让你的AI助手从“江湖骗子”升级为“行业专家”的神奇技术——RAG。
不知道你们有没有遇到过这样的场景:
你问大模型:“我们公司最新的产品定价是多少?” 它自信满满地给你生成了一段话,结果价格、功能全是它“臆想”出来的,跟实际情况差了十万八千里。
这时候你是不是会扶额长叹:“大哥,你又在满嘴跑火车了!”
这真不完全是模型的锅。本质上,大模型就像一个天赋异禀、博览群书却有点“健忘”的大学毕业生。它的知识截止于它的“训练数据”,对于它“没看过”的内部文档、实时信息,它只能凭借“已有的语感”去编造,也就是我们常说的“幻觉”。
那怎么解决这个问题呢?很简单,像我们人类一样,不会查资料,我们就学会查资料!这就是今天的主角——RAG的核心理念。
RAG,全称检索增强生成。这个名字听起来高大上,但其实干的事儿特别接地气。
咱们用一个形象的比喻来理解:
当你向这位“老教授”提问时,“研究员助理”会立刻行动:
看,整个过程是不是清晰多了?RAG不是一个单独的模型,而是一个技术框架,它巧妙地把“检索”和“生成”这两个动作串联了起来。
在我的代码笔记里,我把它简化成了三个核心动作:
增强:为啥要增强? 因为大模型“脑子”里没有你的私有数据。增强,就是给它提供丰富的、相关的上下文。没有这个上下文,它就是巧妇难为无米之炊。
检索:核心难题,怎么找? 这是RAG的“技术心脏”。想象一下,你的知识库有几千页PDF,你怎么能瞬间找到和用户问题最相关的那几段?总不能Ctrl+F吧?这里就用到了一个核心技术——Embedding。
流程闭环:
用户提问 -> 知识库(通过Embedding技术检索)-> 把检索到的相关片段塞进Prompt -> 交给大模型 -> 得到精准回答
刚才我们提到了检索的核心是Embedding,这玩意儿是啥?它怎么就能找到相似的内容呢?
咱们用课程例子来解释:
假设我们有三个课程:
如果用户问:“我想学爬虫,推荐什么课?”
一个笨办法是让程序去匹配“爬虫”这个关键词,它能找到《B课程》。但如果用户问的是“抓取网络数据的课程”呢?关键词匹配就傻了。
而Embedding是一种“语义理解”的检索。它能把一段文字(比如一个句子、一段描述)转换成一串数字(一个高维向量),你可以把这串数字理解为这段文字在“语义空间”里的唯一坐标。
[0.1, 0.5, -0.2, ...]
[0.12, 0.48, -0.19, ...]
你会发现,这两个向量的“距离”非常近!因为它们的意思相近。同样,“Python基础”和“数据分析”的向量可能就在另一个区域。
所以,检索的过程就变成了:
这样一来,无论用户用“爬虫”、“网络抓取”还是“Scrapy”来问,我们都能精准地找到《B课程》的信息。
场景:我有一个lesson.txt
文件,里面记录着所有课程信息,这是我的“知识库”。
目标:回答用户关于课程的任何问题,比如“有多少门课程?”
代码流水线分解:
知识库准备:
readCourseInfo()
函数,简单粗暴地把整个lesson.txt
读进内存。在实际项目中,这一步会被替换成我们上面讲的“向量化并存入向量数据库”的复杂过程。
检索: 在这个demo里,为了极简,它没有做复杂的语义检索,而是把整个课程文档都当作“相关上下文”塞给了大模型。这在小文档时可行,大文档就不行了,因为大模型有上下文长度限制。真正的RAG系统会先做我们刚讲的Embedding检索,只取最相关的几条。
增强提示词: 这是画龙点睛的一步!看看我的Prompt设计:
const prompt = `
你是一个课程助手,你的任务是根据课程信息回答问题。
课程信息:${courseInfo} // <-- 这里注入了检索到的上下文!
问题:${question}
`;
我明确地告诉模型:“根据课程信息回答问题”,并把检索到的信息直接塞给它。这就彻底杜绝了它胡编乱造的可能性,把它牢牢地“按”在事实的轨道上。
调用大模型生成:
最后,把这个精心构造的Prompt发给大模型(这里我用的是OpenAI的API),让它基于我们提供的“弹药”来开火。设置temperature=0.1
是为了让它更稳定、更少瞎发挥。
这个过程的精妙之处在于:我们完全不需要去重新训练一个模型,只是巧妙地改变了我们使用模型的方式,就极大地提升了它在特定领域的准确性和可靠性。这就是框架的力量。
在RAG的世界里,还有两个常被提及的名词,我来给大家理清一下。
Function Calling:你可以理解为给大模型提供“工具”。
比如,你让模型“帮我把北京明天的天气写到Excel里”。模型自己不会查天气,也不会写Excel。但通过Function Calling,你可以告诉它:“我这里有get_weather(city)
和append_to_excel(data)
这两个工具你可以用。”模型就会在回复里说:“请调用get_weather('北京')
”,拿到结果后,再“请调用append_to_excel(...)
”。
它让大模型从一个“思想家”变成了一个“实干家”。
MCP:定义了LLM与外部资源通信的协议。 你可以把它想象成USB接口标准。有了这个标准,不同厂家生产的U盘(外部资源)才能即插即用地和电脑(LLM)通信。MCP旨在标准化大模型与数据库、API、文件系统等外部工具的连接方式,让生态更统一、更开放。
那么RAG、Function Calling和MCP是什么关系呢?
它们三者共同协作,把大模型从一座“信息孤岛”变成了连接整个数字世界的“超级大脑”。
RAG技术正在飞速发展,从简单的单轮检索,到能够进行自我验证、多步推理的复杂RAG系统。它极大地降低了我们构建高质量AI应用的门槛。
想象一下,你可以轻松地为你的团队搭建:
这一切,不再需要动辄千百万的算力和数据,利用开源的Embedding模型和向量数据库,配合RAG的思想,你就能创造出来。
所以,别再抱怨大模型“胡说八道”了,给它配上一个RAG“外部硬盘”,让它成为一个既有才华又有依据的“可靠伙伴”吧!
希望这篇笔记对你有帮助!如果你在实践过程中遇到任何问题,欢迎在评论区交流。点赞、收藏一下,下次寻找不迷路!