第一章 大模型简介
大语言模型(LLM)是指包含数百亿或更多参数的语言模型,通过在大量文本数据上训练,能够理解和生成人类语言。LLM的出现改变了计算机与人类的交互方式,广泛应用于自然语言处理、信息检索和计算机视觉等领域。LLM被认为是通用人工智能(AGI)的早期形式,引发了对未来人工智能发展的思考和计划。这一技术令人兴奋,正在不断推动我们与技术互动的方式,并开启对人工智能未来的探索。
第二章 大模型的调用
大模型chatgpt调用 1、获取gpt的key 2、搭建本地的 Jupyter Labs 开发环境有了 API Key 之后,我们还需要搭建一个开发环境。 一般来说,还需要一个 Python 的包管理和环境管理工具, 我自己比较习惯使用 Conda。最后,还需要通过包管理工具,配置一个独立的 Python 3.10 的环境, 并安装好 JupyterLab、OpenAI 以及后面要用到的一系列开发包。我把对应的 Conda 命令也列在了下面, 供你参考。conda create --name py310 python=3.10conda activate py310conda install -c conda-forge jupyterlabconda install -c conda-forge ipywidgetsconda install -c conda-forge openai 3、安装完 JupyterLab 之后,只需要把刚才我们获取到的 API Key 设置到环境变量里,然后启动 JupyterLab。可以从浏览器里, 通过 Jupyter Notebook 交互式地运行这个课程后面的代码,体验 OpenAI 的大语言模型神奇的效果。
第三章 大模型的开发流程
开发一个应用的步骤可以总结为确定目标、设计功能、搭建整体架构、搭建数据库、Prompt工程、验证迭代、前后端搭建和体验优化。这些步骤对于个体开发者或小型开发团队来说很有帮助。在开发过程中,还可以使用Gradio和Streamlit等框架来快速搭建可视化页面实现Demo上线。最后,还需要进行长期的用户体验跟踪和优化。
第四章 数据库搭建
大模型要用到向量数据库,区别于传统的关系型数据库。
大模型的向量数据库是一种用于存储和检索大规模数据的数据库系统。它通过在高维空间中表示数据点的向量来实现快速的数据查询和分析。这种类型的数据库可以处理和存储数十亿甚至数万亿个向量,并且可以在毫秒级的时间内进行高效的相似性搜索和数据匹配。大模型的向量数据库通常用于人脸识别、图像识别、自然语言处理和推荐系统等应用领域,能够为用户提供快速、准确的解决方案。
Langchain 集成了超过 30 个不同的向量存储库。我们选择 Chroma 是因为它轻量级且数据存储在内存中,这使得它非常容易启动和开始使用。
基于 LangChain,我们可以构造一个使用 LLM 进行问答的检索式问答链,这是一种通过检索步骤进行问答的方法。我们可以通过传入一个语言模型和一个向量数据库来创建它作为检索器。然后,我们可以用问题作为查询调用它,得到一个答案。
过程中遇到的一个坑
以下代码报错,fitz包失败
from langchain.document_loaders import PyMuPDFLoader
# 创建一个 PyMuPDFLoader Class 实例,输入为待加载的 pdf 文档路径
loader = PyMuPDFLoader("data/sl.pdf")
# 调用 PyMuPDFLoader Class 的函数 load 对 pdf 文件进行加载
pages = loader.load()
print(f"载入后的变量类型为:{type(pages)},", f"该 PDF 一共包含 {len(pages)} 页")
解决方案 blog.csdn.net/jerryshen88… 我们不应该仅仅使用pip install fitz来安装fitz,而是同时安装fitz和PyMuPDF(一定注意安装顺序:先安装fitz,然后安装pymupdf,如果顺序相反则无法导入)
另外注意:不能只安装PyMuPDF,当只安装PyMuPDF时,虽然可以用import fitz,但是运行fitz.open()等会出错
第五章 Prompt 设计的原则和技巧
Prompt 设计是指为了引导语言模型生成合适回复而设计的输入文本。总结的一些 Prompt 设计的原则和技巧:
- 清晰明确的指令:Prompt 应该包含明确的指令,以引导模型生成特定类型的回复。指令应该明确要求模型回答问题、提供解释、给出步骤等。
- 提供上下文:Prompt 应该提供足够的上下文信息,以帮助模型理解用户的意图和问题。这可以包括问题的背景、相关细节、先前的对话内容等。
- 控制回复长度:通过在 Prompt 中设置最大回复长度或使用截断技术,可以控制模型生成的回复长度。这可以避免生成过长或不相关的回复。
- 使用示例:在 Prompt 中使用示例对话可以帮助模型更好地理解预期的对话模式和回复格式。示例可以包括用户问题和期望的模型回复,以及不同情境下的对话片段。
- 多轮对话:对于多轮对话任务,可以在 Prompt 中包含先前对话的摘要或重要信息,以帮助模型理解上下文并生成连贯的回复。
- 迭代和实验:通过不断迭代和尝试不同的 Prompt 设计,可以逐步改进模型的回复质量。尝试不同的指令、上下文信息和示例对话,并评估生成的回复是否符合预期。
- 平衡指令和开放度:Prompt 设计需要在提供明确指令的同时保持一定的开放度,以允许模型在回复中展示创造力和灵活性。这样可以避免过于限制模型的生成能力,同时确保生成的回复符合预期。
如果要给大模型记忆,可以使用对话检索链
第六章 验证迭代
正常的没问题,但是遇到一些Bad Case很头疼
将Bad Case加入到验证集中,通常需要经历以下步骤:
- 发现Bad Case:首先需要对模型的输出进行分析,识别不准确或不理想的结果,这些就是Bad Case。
- 添加到验证集:将这些Bad Case样本添加到当前的验证集中,以便在模型进行进一步训练和验证时,能够针对这些特定情况进行优化和改进。
- 重新评估模型:在训练模型后,重新对验证集进行评估,看是否有所改善,以及其他Bad Case是否出现。
这样循环迭代,能够帮助模型更好地适应Bad Case的情况,从而提高模型的整体性能。
大模型评估准则
准则一 量化评估
准则二 多维评估
针对本项目个人知识库助手,我们可以设计以下混合评估方法:
- 客观正确性。客观正确性指对于一些有固定正确答案的问题,模型可以给出正确的回答。
- 主观正确性。主观正确性指对于没有固定正确答案的主观问题,模型可以给出正确的、全面的回答。
- 智能性。智能性指模型的回答是否足够拟人化。
- 知识查找正确性。知识查找正确性指对于特定问题,从知识库检索到的知识片段是否正确、是否足够回答问题。
第七章 前后端搭建
Gradio
是一种快速便捷的方法,没有前端基础也可以方便搭建,但是缺点是还是不如前端灵活,不能有更多的扩展。
要搭建一个前后端分离的大语言模型的知识库,我觉得按如下思路:
- 选择大语言模型:选择适合自己需求的大语言模型,比如GPT-3、GPT-4等,并获取相应的API密钥。
- 搭建后端服务:使用后端框架(如Flask、Django等),编写API接口以及后端逻辑处理,将语言模型的API整合进来,使其能够接收用户请求并与大语言模型进行交互。这里主流开发语言比如,java都可以。
- 设计数据库:根据需求设计数据库,存储知识库相关的数据,比如问题-答案对、文章内容等。
- 开发前端界面:利用前端框架(如React、Vue.js等),开发用户界面,实现用户与知识库的交互,并调用后端API。
- 整合前后端:将前端界面和后端服务进行整合,确保数据的正确传输和交互。
开发实践
ChatGLM-6b+streamlit搭建的知识小助手,通过上传知识库,可以快速查找。 地址 gitee.com/LeoLXiong/a…