当前位置: 首页 > news >正文

AI 智能应用开发(持续更新中)

AI 智能应用开发全解析

  • RAG
    • 简介
    • RAG 核心思想
    • 核心价值与作用
    • RAG 系统处理全流程
  • 分词
    • 为什么需要分词
    • Jieba 中文分词
      • 简介
      • 分词模式
        • 精确模式
        • 全模式
        • 搜索引擎模式
        • 模式对比
      • 高级功能
        • 添加自定义词
        • 自定义词典
        • 关键词提取
  • 停用词清洗
    • 简介
    • 为什么要清洗
    • 停用词表
      • 开源词表
      • 过滤(分词+停用词清洗)
    • 分词+清洗的应用场景
  • Embedding 向量化
    • 简介
    • 为什么需要向量化
  • 检索策略
    • 稠密检索(向量检索)
      • 原理
      • 优点
      • 缺点
    • 稀疏检索(BM25 检索)
      • 原理
      • 优点
      • 缺点
    • 混合检索
      • 为什么需要混合检索
      • 优点
  • 结果融合
    • RRF 融合算法
      • 原理
      • 优势
      • 代码实现
    • RERANK 重排序
      • 简介
      • 区别(较向量检索)
      • 代码实现

RAG

简介

  • RAG(Retrieval-Augmented Generation),即检索生成增强
  • 是目前最主流的 LLM 落地架构之一。

RAG 核心思想

  • 在生成答案前,先从外部知识库检索相关信息片段,将其作为“参考资料”传递给 LLM,引导模型基于真实、精确的外部数据生成回答。

核心价值与作用

  1. 解决知识滞后与过时的问题
- LLM 的训练数据通常都有时间截至点(例如,训练于 2024 年的大模型无法知晓 2025 年及之后的事件); - RAG 通过引入外部知识库,可以实时更新信息,让模型掌握最新的知识。
  1. 解决事实性错误与幻觉的问题
- LLM 有时会生成看似合理但与事实不符的内容,这种行为即“幻觉”; - RAG 通过强制模型基于检索到可信来源进行回答,大大降低了产生幻觉的可能,提升了答案的准确性与可信度。
  1. 解决成本高昂与数据隐私的问题
- 通过微调(Fine-tuning)更新模型知识成本高、周期长; - 若非本地部署,还存在将私有数据暴露给第三方模型提供商的风险; - RAG 架构无需重新训练模型(更新知识),直接使用外部最新知识; - 既降低了成本,又能保证数据隐私(知识库私有)。

RAG 系统处理全流程


一句话总结:先把知识“向量化存好”,再用“关键词检索 + 语义检索”一起找内容,最后交给大模型生成答案。

分词

为什么需要分词

  1. 构建语义基础:准确的分词是后续所有 NLP 任务(如词性标注、实体识别)的基石;
  2. 提升检索与召回精度:错误分词会导致专有名词被切断,生成的向量无法准确表征原义,从而显著降低搜索引擎的召回率;
  3. 优化大模型生成质量:高质量分词有助于精准筛选和组织上下文信息,减少噪声干扰,使 LLM 的生成内容更聚焦于核心语义。

Jieba 中文分词

简介

  • 与英文不同,中文词语之间没有固定的分隔符(如空格),因此需要依靠分词工具进行划分。 Jieba 是 Python 中最流行的中文分词工具,它以简单易用、高效和灵活著称,支持多种分词模式用户自定义词典关键词提取,结合了基于前缀词典的高效扫描与隐马尔可夫模型(HMM)机器学习算法,能够精准处理复杂的中文文本结构。

分词模式

Jieba 提供了三种主要的分词模式:

精确模式
  1. 特点:旨在将文本切分成最精确的词语,无冗余结果
  2. 优点:准确率极高,文本分析的首选模式;
  3. 缺点:无法处理所有歧义问题,对未登录词识别较弱;
  4. 适用:词频统计、RAG 系统文本向量化
全模式
  1. 特点:全切分扫描,词汇组合覆盖较全;
  2. 优点:分词速度快,对未登录词友好;
  3. 缺点:结果冗余度太高,包含过多无效分词;
  4. 适用:快速词汇匹配、数据的探索性分析(例词典编写);
搜索引擎模式
  1. 特点:精确模式输出的最优切分+长词再切分;
  2. 优点:兼顾准确性与召回率,能够同时支持精确匹配和部分前缀/子词检索;
  3. 缺点:相比精确模式,输出词数增多(但比全模式冗余少),分词速度略慢于全模式(需额外计算长词的细分),仍可能产生少量噪声(如过度切分常见组合);
  4. 适用:搜索引擎索引构建、细粒度文本检索(如用户输入“北京大学”既能匹配“北京大学”,也能匹配“北京”或“大学”)、推荐系统;
模式对比
importjieba user_input="我来到北京清华大学"# 精确匹配seg_list=list(jieba.cut(user_input,cut_all=False))print("精确模式: "+"/ ".join(seg_list))# 全模式seg_list=list(jieba.cut(user_input,cut_all=True))print("全模式: "+"/ ".join(list(seg_list)))# 搜索引擎模式seg_list=list(jieba.cut_for_search(user_input))print("搜索引擎模式: "+"/ ".join(list(seg_list)))
  1. 精确模式:我/ 来到/ 北京/ 清华大学
  2. 全模式:我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
  3. 搜索引擎模式:我/ 来到/ 北京/ 清华/ 华大/ 大学/ 清华大学

高级功能

添加自定义词
importjieba# 精确模式示例user_input="雨下整夜,是一首很美的歌"seg_list=list(jieba.cut(user_input))print("/ ".join(seg_list))# 输出:雨下/ 整夜/ ,/ 是/ 一首/ 很/ 美/ 的/ 歌# 添加自定义词jieba.add_word("雨下整夜")seg_list=list(jieba.cut(user_input))print("/ ".join(seg_list))# 输出:雨下整夜/ ,/ 是/ 一首/ 很/ 美的/ 歌
自定义词典
importjieba# 精确模式示例user_input="我来到隐世修所很开心,这里比森寒冬港的环境好很多"seg_list=list(jieba.cut(user_input))print("/ ".join(seg_list))# 输出:我/ 来到/ 隐世修/ 所/ 很/ 开心/ ,/ 这里/ 比森寒/ 冬港/ 的/ 环境/ 好/ 很多script_path=os.path.dirname(os.path.abspath(__file__))user_dict_path=os.path.join(script_path,"userdict.txt")# 加载用户自定义词典,内容:隐世修所 10 ns,森寒冬港 10 nsjieba.load_userdict(user_dict_path)seg_list=list(jieba.cut(user_input))print("/ ".join(seg_list))# 输出:我/ 来到/ 隐世修所/ 很/ 开心/ ,/ 这里/ 比/ 森寒冬港/ 的/ 环境/ 好/ 很多
关键词提取

简单来说,它就是在你已有的分词基础上,帮你从文本里找出最能代表核心内容的几个词。jieba 提供了两种无监督的算法来实现这一点:TF-IDFTextRank

  1. 基于 TF-IDF 的关键词提取
# 基于TF-IDF的关键词提取user_input="我来到隐世修所很开心,这里比森寒冬港的环境好很多"keywords=analyse.extract_tags(user_input,topK=5,withWeight=True)print("关键词:")forkeywordinkeywords:print(keyword)# 关键词:# ('隐世修所', 1.7078239289857142)# ('森寒冬港', 1.7078239289857142)# ('开心', 1.161765236597143)# ('来到', 0.7693838405871428)# ('环境', 0.7402877264185713)
  1. 基于 TextRank 的关键词提取
# 基于TextRank的关键词提取keywords=analyse.textrank(user_input,topK=5,withWeight=True)print("关键词:")forkeywordinkeywords:print(keyword)# 关键词:# ('开心', 1.0)# ('森寒冬港', 0.7470070442103558)# ('隐世修所', 0.6683682393186766)# ('来到', 0.6656674769499933)# ('环境', 0.40679763001497043)

停用词清洗

简介

  • 文本中频繁出现,但本身不携带过多实际语义的字符,它们的存在往往会干扰核心信息的提取。

为什么要清洗

一句话总结:停用词清洗的目的是去噪提效——去掉那些“高频无用”的词,让算法集中精力于真正有含义的内容。

  1. 减少数据噪音,提升检索精度:避免大量停用词稀释核心词语的权重,加强模型对文本主题的理解;
  2. 降低计算成本,提升检索速度:显著降低文本特征维度,减少存储和内存占用,加速后续处理(如向量化、聚类、分类、关键词提取);
  3. 降低大模型Token消耗:避免大量不相关的停用词被计入模型输入总数。

停用词表

开源词表

  1. 哈工大停用词表(hit_stopwords.txt):NLP 领域最经典、应用最广泛的中文停用词表之一;
  2. 百度停用词表(baidu_stopwords.txt):基于海量网络搜索日志整理,覆盖大量网络流行虚词;
  3. 川大机器智能实验室词库(scu_stopwords.txt):针对特定领域语境优化,包含更多语境相关的停用词;
  4. 通用中文停用词表(cn_stopwords.txt):通用集合,适合大多数常规的文本处理场景。

过滤(分词+停用词清洗)

演示:

importjieba,os# 定义加载停用词表的函数defload_stopwords(file_path):stopwords=set()# 使用集合存储,查找速度快,复杂度为O(1)try:withopen(file_path,'r',encoding='utf-8')asf:forlineinf:word=line.strip()# 去除行首行尾的空白字符ifword:# 确保不添加空行stopwords.add(word)exceptFileNotFoundError:print(f"文件{file_path}未找到")exceptExceptionase:print(f"读取文件{file_path}时发生错误:{e}")returnstopwords# 定义清洗函数defclean_text(text,stopwords):"""分词并去除停用词"""print(f"原始文本:{text}")words=jieba.lcut(text)print(f"分词结果:{words}")filtered_words=[wordforwordinwordsifwordnotinstopwords]print(f"去除停用词后的结果:{filtered_words}")return' '.join(filtered_words)if__name__=="__main__":script_path=os.path.dirname(os.path.abspath(__file__))stopwords_file=os.path.join(script_path,"hit_stopwords.txt")# 停用词文件路径stopwords=load_stopwords(stopwords_file)user_input="RAG的优点是什么?"cleaned_text=clean_text(user_input,stopwords)print(f"清洗后的文本:{cleaned_text}")# 输出结果# 分词结果: ['RAG', '的', '优点', '是', '什么', '?']# 去除停用词后的结果: ['RAG', '优点']# 清洗后的文本: RAG 优点

分词+清洗的应用场景

在将用户输入提交给大模型处理前,RAG 架构的做法通常需要先执行知识库检索。混合检索结合了稠密检索(向量语义检索)和稀疏检索(如 BM-25),是当前的主流方法。这两种检索方式对输入文本的预处理需求存在显著差异:

  1. 稠密检索(向量语义检索):得益于现代向量数据库的能力,此分支通常无需进行传统分词和停用词清洗等预处理。向量模型能够捕捉词语的上下文语义关系,保留原始文本特征(包括潜在的停用词)往往更能精确表达查询的完整语义意图,从而提升向量检索的精度。
  2. 稀疏检索(BM-25 等):此类方法主要依赖关键词匹配和词频统计等非语义级机制。因此,对输入文本执行分词、停用词去除等清洗操作至关重要。移除无关词汇、标准化词形后的精简文本能显著减少噪声,更精准地匹配文档中的关键词,从而有效提升基于词袋模型的稀疏检索的精度。

因此,在混合检索架构中,预处理(尤其是分词和清洗)主要服务于稀疏检索组件。预处理生成的“干净”文本被输入 BM-25 等稀疏检索器,而原始或仅轻微处理的文本则直接用于向量语义检索,以实现各自的最佳性能。

Embedding 向量化

简介

  • Embedding 向量化是将文本(词语、句子、段落等)转换为固定长度的稠密浮点数向量的过程。这些向量在语义空间中的位置可以表示文本的内在含义——语义越接近的文本,其向量在空间中也越靠近。在 RAG 系统中,Embedding 模型负责将用户查询和知识库文档映射到同一向量空间,从而实现基于语义相似度的检索,让系统不仅能找到关键词匹配的内容,还能理解“买水果”与“选购苹果、香蕉”这类同义表达。

为什么需要向量化

  • 计算机无法直接理解人类的自然语言,但擅长处理数值计算。向量化的本质就是将文本转换为计算机能够运算的数值形式,从而让机器可以“理解”和比较文本之间的语义关系。
    在 RAG 系统(检索增强生成)中,向量化主要解决了以下几个关键问题:
  1. 实现语义搜索,而非仅关键词匹配
  • 传统方式:关键词匹配(如 BM25、TF-IDF)只能找到包含完全相同词语的文档。例如,搜索“买水果”无法匹配到“选购苹果、香蕉”,因为词语完全不同。
  • 向量化后:通过嵌入模型将“买水果”和“选购苹果、香蕉”映射到语义空间中相近的位置,计算向量相似度(如余弦相似度)就能召回语义相关的文档。
  1. 让计算机能够“计算相似度”
  • 文本本身是离散的、符号化的,无法直接做加减乘除。
  • 转化为固定长度的稠密向量后,就可以通过数学运算(如点积、欧氏距离)快速比较两段文本的相似程度,为检索排序提供依据。
  1. 支持大规模高效检索
  • 一旦文档被向量化,我们可以预先构建向量索引(如 HNSW、IVF),实现毫秒级的海量相似度搜索。
  • 如果没有向量化,每次查询都要遍历所有文档并进行复杂的语义理解,成本极高且不现实。
  1. 捕捉深层的语义特征
  • 好的嵌入模型能够学习到同义词、上下位词、甚至隐含的情感倾向。例如,“开心”和“快乐”、“这个电影很棒”与“这部影片非常精彩”在向量空间中都能相互靠近。
  • 这种能力让 RAG 系统不仅依赖字面匹配,而是真正理解用户意图。
  1. 融合多模态信息
  • 向量化不仅可以处理文本,还能处理图像、音频等。将它们映射到同一语义空间后,就可以实现跨模态检索(例如用文字描述搜索图片)。

检索策略

稠密检索(向量检索)

原理

  • 查询(问题)和文档(参考资料)映射到同一个向量空间,通过计算向量间的距离来衡量相关性
  • 流程如下:

优点

  1. 语义理解强:能捕捉同义词、上下文和隐含语义,不依赖字面匹配;
  2. 匹配更智能:例如“如何修自行车”可匹配到“单车维修指南”;
  3. 抗噪声:对拼写错误、同义替换等有一定鲁棒性;
  4. 支持多模态:可将文本、图像等映射到同一空间进行跨模态检索。

缺点

  1. 计算成本高:训练和推理需要GPU资源,尤其是大规模索引。
  2. 领域依赖性强:在未见过的专业领域可能性能下降明显。
  3. 可解释性差:难以解释为什么某篇文档被召回(黑箱特性)。
  4. 数据需求大:需要大量高质量的标注数据来训练模型。

稀疏检索(BM25 检索)

原理

  • 基于词袋模型倒排索引,用精确的词项匹配及统计权重(如 BM25)计算查询与文档的相关性。
    1. 词袋表示:将文本表示为高维稀疏向量,每一维对应词典中的一个词,值通常是词频(TF)、TF-IDF 或 BM25 权重;
    2. 倒排索引:预先建立“词 → 包含该词的文档列表”的映射,实现快速定位。
  • 流程如下:

优点

  1. 检索速度快:依靠倒排索引,无需遍历所有文档。
  2. 精确匹配能力强:对专业术语、编号等精确词召回准确。
  3. 可解释性高:高亮匹配词,清晰说明为什么文档被召回。
  4. 资源消耗低:只需要 CPU 和少量内存,无需 GPU。
  5. 成熟稳定:几十年的工业级实践,易于调优(如调整 BM25 的 k1、b 参数)。

缺点

  1. 语义鸿沟:无法理解同义词、近义词(如“车”与“汽车”无法匹配)。
  2. 词形敏感:对拼写错误、时态、词形变化无力。
  3. 稀疏向量维度爆炸:词典大小动辄几十万维,但实际有效计算仍借助倒排索引。
  4. 忽略词序和语境:“猫追老鼠”与“老鼠追猫”会被视为相同(若只考虑词袋)。
  5. 长尾查询召回弱:罕见词或组合可能出现零匹配。

混合检索

为什么需要混合检索

混合检索通过融合稠密检索的语义理解能力稀疏检索的关键词匹配能力,实现“语义+精确”互补,是当下高质量检索系统(尤其是RAG)的标准方案。

优点

  1. 召回率更高:两类检索的漏检文档往往不重叠,合并后可覆盖更多相关结果;
  2. 鲁棒性强:单一方法失效时(如查询中包含罕见词且为同义词),另一方法可能仍有效;
  3. 平衡精准与语义:既保留关键词的精确性,又利用语义泛化能力。

结果融合

在混合检索中,结果融合是指将来自不同检索通路(如稀疏检索的 BM25 结果、稠密检索的向量相似度结果)返回的文档列表合并成一个统一的、按相关性排序的最终列表的过程。
常用方法:

方法原理优点缺点
RRF(倒数排名融合)只使用文档在各结果列表中的排名,忽略原始分数。公式:无需分数归一化;对离群值鲁棒;简单高效未能利用原始分数信息
加权求和先将不同检索器的分数归一化到相同范围(如 0~1),然后加权相加。可以调节每个检索器的权重归一化方式敏感;权重需手动或学习得到
学习排序(LTR)使用机器学习模型(如 RankNet, LambdaMART)从标注数据中学习融合规则。理论上最佳,能挖掘复杂模式需要大量标注数据,训练成本高

RRF 融合算法

原理

优势

代码实现

RERANK 重排序

简介

区别(较向量检索)

代码实现

http://www.jsqmd.com/news/772025/

相关文章:

  • Kindle漫画转换终极指南:用KCC在电子阅读器上完美阅读漫画
  • ChanlunX:终极缠论自动化分析插件,让技术分析变得简单高效
  • 终极指南:使用Sass的hidpi mixin轻松实现Retina高分辨率图片适配
  • C++ 移动语义
  • 2026甘肃配电柜厂家推荐:诚辉电气——兰州本土高性价比之选,西北五省快速交付 - 深度智识库
  • 只做高端岩茶开店创业开茶会所,普通人做茶生意加盟哪个高端武夷岩茶品牌市场认可度高推荐白皮书(2026) - 商业科技观察
  • 3个关键技巧解决Calibre多语言环境下的文件传输难题
  • Rust 异步编程实战:构建高效的并发应用
  • Upscayl完整攻略:Mac用户AI图像放大体验优化与进阶技巧
  • 3分钟永久备份QQ空间:GetQzonehistory一键导出青春记忆
  • AISMM指标体系×FinOps成本单元:2026奇点大会首次公开37个可审计、可追溯、可计费的智能运维原子指标
  • 【完整源码+数据集+部署教程】交通标志与道路标线分割系统源码&数据集分享 [yolov8-seg-C2f-CloAtt&yolov8-seg-EfficientFormerV2等50+全套改进创新点
  • 事件驱动架构中的状态机模式:ralph-loop实现异步工作流管理
  • 2026口腔执业医师备考:选择靠谱机构的五个关键 - 医考机构品牌测评专家
  • 2026年执业医师技能考试时间已定,备考视频课程怎么选? - 医考机构品牌测评专家
  • 4分钟找回QQ号:手机号快速查询工具完整指南
  • agentsrc-py:为AI编程助手注入精准源代码上下文,消除代码幻觉
  • 国产时空基座自立,物理镜像孪生自强——镜像视界全域空间智能技术白皮书
  • 收藏 | 学AI别直接冲大模型!小白程序员必经的6步进阶路线
  • AI编程新范式:从Vibe Coding到自主编码代理的实战指南
  • MAA明日方舟助手:终极自动化解决方案,解放你的游戏时间
  • AI智能体安全架构:基于加密信任中介的零信任纵深防御实践
  • UML分析与设计 - 软考备战(五十四)
  • TVA与CNN的历史性对决(18)
  • 2026医师考试:一份值得参考的优质备考机构推荐 - 医考机构品牌测评专家
  • Playnite:革命性智能游戏库管理器,一站式整合你的所有游戏平台
  • 明日方舟终极自动化助手:Arknights-mower 完整使用指南
  • 2026年如何集成Hermes Agent/OpenClaw?阿里云合规集成及Coding Plan配置教程
  • IronClaw:基于Rust的AI智能体安全框架与13层纵深防御实践
  • 汽车机油品牌全案策划案例分析:以奇正沐古与康明斯为例 - 品牌速递