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

15天学会AI应用开发(十三)上下文与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的实战例子。

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

相关文章:

  • Cursor为何成硬科技首选AI原生IDE?键盘即编译器的工程革命
  • VC++中Tab键导航的完整实现:从原理到高级技巧
  • 安卓手机一键生成腾讯云IoT设备密钥工具(含源码与安装包)
  • 鸿蒙中declare关键字
  • 2026年五大数据挖掘平台:算法与性能解析 - 科技焦点
  • PY32F003F18之ADC外部干扰排查与硬件设计优化
  • 遥控器上的X:用运算符重载实现图形交互控制
  • ChatGPT标题优化失效了?:当LLM语义理解遇上人类情绪触发点——3个被忽略的心理学底层变量
  • C++交通灯模拟系统:面向对象设计与离散事件模拟实践
  • CC3130 Wi-Fi芯片电气特性与接口时序实战解析
  • 【运动控制】三轴CNC小线段前瞻速度规划与平滑过渡实践
  • Unity机器人仿真环境构建:从建模到性能优化的全流程实践
  • 2. 进程的基本概念和初步使用 fork 函数
  • 2026年摩擦线/重型摩擦线有实力的厂家:东莞市富祥机械设备有限公司的高承载与智能传输技术解析 - 甄选服务推荐
  • Codex 协同会话功能来了!一个主会话管理多个任务,开发效率再次提升(附客户端下载)
  • 深入解析SGI STL内存池:原理、实现与性能优化实践
  • 微服务学习 --- Spring Cloud概述
  • C++入门实战:从环境搭建到面向对象编程与内存管理
  • ClaudeCode工程实践:VS Code深度集成与上下文精准裁剪
  • 从Minica项目学习Go语言优雅架构设计与证书管理实践
  • Unity像素游戏场景制作全流程:从资产导入到像素完美渲染
  • FPGA实现TCP/IP协议栈,千兆网客户端版本,纯VHDL源码解析与21套工程移植实战
  • 实测USB转TTL串口文件传输:从理论波特率到实际速度的差距分析
  • 黑马程序员C++核心编程实战笔记:从内存模型到面向对象
  • Unity Debug 扩展
  • 什么是行星减速机?从结构、参数到工程应用完整解析
  • 旅行规划响应慢?实测ChatGPT-4o vs GPT-4 Turbo行程生成耗时对比(含Token消耗热力图与缓存优化策略)
  • 模板驱动型文档自动化:结构化填充与多格式一键交付
  • 【RayLink】从“能用”到“好用”:免费版与付费版如何选择?
  • C++与OpenCV实现高效图片格式转换:从原理到工程实践