一、搭建应用开发环境正所谓磨刀不误砍柴工要想后续顺利进行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读取文本内容。