news 2026/5/16 2:22:44

从零构建RAG系统:Embedder——让机器读懂文字的第一步

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零构建RAG系统:Embedder——让机器读懂文字的第一步

这个RAG系统是用来干什么的?
在正式拆解代码之前,先说清楚这个项目的背景。

这套 RAG 系统,是为内容创作场景而生的。它的核心任务只有一件事:检索爆款文章,辅助创作。

具体来说,系统会提前将大量爆款文章向量化,存入知识库。当你需要创作一篇新内容时,只需输入主题或关键词,系统便会自动召回风格、结构、选题最相近的爆款文章作为参考,再交由大模型进行二次创作。

这套流程的本质,是把「人工翻阅参考资料」这件事,交给机器来做——更快、更准、可复用。
而这一切的起点,是 Embedder。


什么是RAG?为什么要从Embedder开始?
RAG,全称 Retrieval-Augmented Generation,检索增强生成。它的核心思想很朴素:与其让大模型死记硬背所有知识,不如给它一个「外挂记忆库」,让它在回答问题前先去查资料。

这套机制在工程上需要三个模块协同工作:

Embedder:把文字转化成向量,让计算机能「理解」语义
Initializer:负责知识库的构建与初始化
Retriever:根据问题去向量库中检索最相关的内容

三者之中,Embedder 是地基。没有高质量的向量表示,后续检索爆款文章的精度就是无源之水。所以我们从它开始。


向量嵌入究竟在做什么?
想象你有一个神奇的坐标系,每一段文字都能在这个坐标系里找到自己的位置。语义相近的文字,坐标就越近;意思相差甚远的,距离就越远。

「小红书爆款」和「高传播内容」会落在彼此附近,而「小红书爆款」和「量子力学」则相距甚远。

这个坐标系,就是向量空间。把文字映射进去的过程,就叫嵌入(Embedding)。

嵌入模型做的事,本质上是把人类语言的「意思」压缩成一串浮点数——比如 [0.023, -0.187, 0.541, …]。这串数字看起来毫无意义,

却是整个 RAG 系统得以运转的密码。也正是靠着这串数字,系统才能在几千篇爆款文章里,精准找到和你的创作意图最接近的那几篇。


拆解Embedder的代码实现
我们来看这个模块的完整结构。

初始化:配置优先,灵活兜底

pythondef __init__(self, api_key: Optional[str] = None, model: Optional[str] = None): self.api_key=api_keyorsettings.dashscope_api_key self.model=modelor settings.embedding_model if not self.api_key: raise ValueError("DashScope API Key未配置,请设置DASHSCOPE_API_KEY环境变量") self.embeddings = DashScopeEmbeddings( model=self.model, dashscope_api_key=self.api_key )

这里有一个值得注意的设计细节:api_key 和 model 都支持外部传入,若不传则自动回退到全局配置 settings。

这种「参数优先,配置兜底」的模式,在工程实践中非常实用——既保留了单元测试时灵活注入的能力,又避免了在业务代码里到处硬编码配置项。

本项目选用的是阿里云的 DashScope 嵌入服务,底层模型是通义系列的文本向量模型,中文语料的表现尤为稳定,非常适合处理中文爆款文章的语义理解。

单文本嵌入:查询场景的标配

pythondef embed_text(self, text: str) -> List[float]: return self.embeddings.embed_query(text)

这个方法对应的是查询阶段——用户输入一个创作主题或关键词,

系统需要将这段文字也转成向量,才能去向量库里做相似度搜索,找到最匹配的爆款文章。

注意这里调用的是 embed_query 而非 embed_documents。

在部分嵌入模型中,这两个接口会使用不同的指令前缀(Instruction Prefix),让查询向量和文档向量在空间分布上更加匹配,

从而提升检索精度。这个细节很容易被忽略,却直接影响召回效果。

批量嵌入:对抗限流的工程智慧

pythondef embed_texts(self, texts: List[str], batch_size: int = 25) -> List[List[float]]: results = [] for i in range(0, len(texts), batch_size): batch = texts[i:i + batch_size] results.extend(self.embeddings.embed_documents(batch)) return results

这是整个 Embedder 里最有工程含量的一段代码。

在这个创作辅助系统中,知识库里存放的是大量爆款文章。

当你需要把几百乃至上千篇文章灌入知识库时,一次性打包发给 API 是行不通的——大多数云服务都有单次请求的 Token 上限和速率限制(Rate Limit)。

这里的解决方案是分批处理(Batching):每次最多发送 batch_size=25 条,处理完一批再处理下一批,最终将所有结果合并。

这种分批策略,是构建生产级 RAG 系统的必备意识。知识库初始化时一旦触发限流,

轻则报错重试,重则丢失部分向量,导致某些爆款文章永远不会被检索到——这对创作辅助系统来说是不可接受的。

暴露原始函数:与LangChain生态无缝衔接

pythondef get_embedding_function(self): return self.embeddings

这个方法看起来简单,作用却不可忽视。

LangChain 的很多组件——比如 Chroma、FAISS 等向量数据库的封装——在初始化时需要直接接收一个 embedding function 对象,而不是调用封装好的方法。

通过暴露底层的 self.embeddings,这个 Embedder 可以直接插入 LangChain 的工具链,无需任何额外适配。这是面向框架生态设计接口的一个小技巧。


设计回顾:这个Embedder做对了什么?
回顾整个模块,它在不到 40 行代码里完成了几件事:

单一职责:只做嵌入,不掺杂存储、检索逻辑
配置解耦:通过 settings 统一管理密钥和模型名
工程健壮:分批处理应对限流,主动 raise 提前暴露配置缺失
生态兼容:对外暴露 LangChain 原生对象,方便集成

这种设计思路——小而内聚、对外友好——是构建可维护系统的基本素养。


总结:

Embedder 是这套爆款文章创作系统最底层的基础设施。

没有它,系统就无法理解「什么叫相似」,也就无从谈起精准召回。它的稳定性和质量,直接决定了整套系统最终能给创作者带来多大的价值。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 2:09:04

Go语言实现HTTP代理核心原理与工程实践详解

1. 项目概述:一个Go语言实现的轻量级HTTP代理工具 最近在整理自己的工具箱时,翻到了一个挺有意思的旧项目——GoPaw。这是一个用Go语言编写的、结构非常清晰的HTTP代理服务器。它不像那些功能庞杂的“全家桶”,GoPaw的定位很明确:…

作者头像 李华
网站建设 2026/5/16 2:06:04

怎么给照片更换背景?2026年最实用的免费工具推荐

前几天,一个朋友问我怎么快速给证件照换底色,她说用了好几个app都不太满意,不是效果差就是操作复杂。我才意识到,虽然现在给照片更换背景的工具这么多,但真正好用的却没几个。今天就来分享一下我用过的、靠谱的解决方案…

作者头像 李华
网站建设 2026/5/16 2:05:05

DataChad:基于大语言模型的私有数据库智能查询助手部署指南

1. 项目概述:当你的数据对话伙伴DataChad如果你经常和数据打交道,无论是分析销售报表、研究用户行为,还是处理一堆杂乱无章的日志文件,你肯定幻想过有一个“懂行”的伙伴,能直接用大白话回答你的问题,而不是…

作者头像 李华