首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >15天学会AI应用开发(十三)上下文与RAG的阶段性总结

15天学会AI应用开发(十三)上下文与RAG的阶段性总结

作者头像
aqi00
发布2026-06-24 12:31:45
发布2026-06-24 12:31:45
1170
举报
文章被收录于专栏:老欧说安卓老欧说安卓

之前的系列文章主要讲解上下文(提示词)和RAG(知识库),为了方便大家归纳,这里把前面的几个重要内容重新梳理总结。

一、搭建应用开发环境

正所谓磨刀不误砍柴工,要想后续顺利进行AI应用编程,务必正确搭建电脑的Python开发环境,这样可以避免代码编译时出现奇奇怪怪的错误,才能心无旁骛地钻研AI应用技能。

首先是安装哪个Python版本。AI开发环境的Python版本推荐Python 3.10.x,该版本兼容所有 AI 库(torch、llama-index、langchain、langgraph、ollama),也没有新版本的奇怪Bug。

其次是安装哪个PyCharm版本。Python代码的开发工具PyCharm可以选择社区版的PyCharm 2024.1 / 2023.3 / 2022.2 ,PyCharm版本过低会不支持Python 3.10,版本过高会很消耗电脑资源。

再次是安装 Ollama ,AI应用在加载离线大模型时经常用到它。

二、上下文(提示词)

要让AI干活,先得丢个问题或者指令给它。这个问题或者指令就叫做“提示词”,意思是提示AI要干什么。

一边是大模型要求准确的提示词,另一边是用户千奇百怪的命令,夹在中间的AI应用开发者就得想办法连通这两者。

AI应用搭建的提示词转换桥梁,又被称作“提示词工程”,它要把用户的各种命令和提问转换为大模型容易理解的提示词。

为了让AI在不同的语境中准确理解用户的意图,在开启新会话时有必要把之前的历史对话记录发给AI,以便AI理解当前对话所处的上下文环境,才好做出有针对性的回答。

可是历史对话记录一方面数量很多,另一方面存在大量冗余,而每次发给AI大模型的提示词都会消耗宝贵的Token,于是AI应用开发者就得想办法精简历史对话记录,以得到提炼了主要意思的上下文信息。

历史对话的提炼方式经历了下列的优化过程:

1、按照某种规则截断历史对话

历史对话虽多,但关联度高的记录只有最近的几条,因此可保留最新的几条对话记录形成下次会话的上下文。对话记录的截断规则有下列两种:

(1)按照消息数量来截断历史对话;

(2)按照Token长度来截断历史对话;

其中在计算文本的Token长度时,给出了两种分词器及其使用说明。一种分词器是国外的tiktoken,另一种是国产的jieba,对中文段落分词推荐使用jieba库。

2、提取历史对话的摘要文字

精简历史对话的文字内容,提炼出紧凑的摘要文本,可提高上下文的信息密度,有效降低Token消耗。对话记录的摘要办法有下列几种:

(1)使用第三方的摘要库(如snownlp和sumy)进行文字摘要;

(2)使用在线大模型(如火山引擎)对原始文本输出摘要;

(3)使用离线大模型(如千问的文本大模型)对原始文本生成摘要;

在上下文部分的系列文章末尾,给出了一个使用离线大模型对文本生成摘要的实战例子。

先通过modelscope下载离线大模型Qwen1.5-1.8B-Chat,再通过transformers加载本地离线大模型,输出原始文本经过压缩后的摘要文字。实战演示过程发现,离线大模型支持设置返回内容的Token长度,并且离线处理不消耗在线Token,适合初学者练习AI应用开发。

三、RAG(知识库)

大模型虽智能,却存在下列两个短板:

(1)知识有截止日期,不懂新知识

(2)会幻觉、爱胡说八道

为弥补大模型的上述两处缺陷,就引入了RAG知识库。

RAG是一种结合检索和生成技术的模型,它通过引用外部知识库的信息来生成回答,外部知识库通常来源用户提供的文档资料。

RAG的使用流程包含下列五个步骤:

(1)加载文档资料

(2)对文本分块

(3)向量化文本

(4)存入向量数据库

(5)在用户提问时,检索向量数据库,并把结果反馈给大模型

以下简要说明各步骤的处理手段:

1、向量数据库

在RAG第4步的“向量数据库”,分别介绍了运行于内存的FAISS,以及运行于磁盘的Chroma。

其中FAISS速度快,适合一次性使用;而Chroma可持久保存数据,适合多次反复使用。

2、向量化文本

在RAG第3步的“向量化文本”,介绍了两种文本嵌入模型,一种是国外的all-MiniLM-L6-v2,另一种是国产的BGE-small。

其中,国产Embedding模型的优势是在处理中文时更加精准,能够给出更准确的检索结果。

3、对文本分块

在RAG第2步的“对文本分块”,要把一大段文本拆分为多个句子,基本要求如下:

(1)读取文档资料的所有文本内容。

(2)按照句号分割文本。

(3)每条知识设定字数下限,比如不得少于50个汉字;如果某条知识小于这个长度,就要跟下一条知识合并。

(4)处理过程注意去除无效字符,例如剔除空行、删除空格等等。

4、加载文档资料

在RAG第1步的“加载文档资料”,分别介绍了对TXT、PDF、DOCX、网页等文档格式的加载处理,各文档的解析过程简述如下:

(1)对于TXT格式,可直接打开并读取文本内容,注意兼容UTF-8与GBK这两种字符编码集。

(2)对于PDF格式,可通过三方库pdfplumber读取文本内容。

(3)对于DOCX格式,可通过三方库python-docx读取文本内容。

(4)对于网页格式,可通过三方库trafilatura读取文本内容。

在知识库部分的系列文章末尾,给出了一个使用BGE-small与FAISS,通过解析网页实现在线RAG的实战例子。

先通过modelscope下载离线大模型bge-small-zh-v1.5,再通过sentence-transformers加载本地离线大模型,并向量化来自在线网页的文本内容,把文本向量保存至向量检索库FAISS,最后从FAISS检索用户问题对应的知识信息。实战演示过程发现,在线RAG对几个问题的回答基本正确,说明结合BGE-small与FAISS成功实现了对网页的在线检索功能。

本系列的AI应用开发文章目录为《15天学会AI应用开发全目录(零基础小白,零Token消耗)》。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老欧说安卓 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档