大模型开发
概念
以大语言模型为功能核心(指令理解
与 文本生成
)、通过大语言模型的强大理解能力和生成能力、结合特殊的数据或业务逻辑来提供独特功能的应用。
在这个过程中,一般不会大幅度改动模型,而是将大模型作为一个调用工具,通过 Prompt Engineering、数据工程、业务逻辑分解等手段来充分发挥大模型能力,适配应用任务。
整体思路
用 Prompt Engineering 来替代子模型的训练调优,通过 Prompt 链路组合来实现业务逻辑,用一个通用大模型 + 若干业务 Prompt 来解决任务。
评估思路
直接从实际业务需求出发构造小批量验证集,设计合理 Prompt 来满足验证集效果。然后,不断从业务逻辑中收集当下 Prompt 的 Bad Case,并将 Bad Case 加入到验证集中,针对性优化 Prompt,最后实现较好的泛化效果。
一般流程
- 确定目标: 确定要开发的应用的应用场景、目标人群、核心价值。对于个体开发者或小型开发团队而言,一般应先设定最小化目标,从构建一个 mvp(最小可行性产品)开始,逐步进行完善和优化。
- 设计功能:确定应用的核心功能,然后延展设计核心功能的上下游功能。
- 搭建整体架构:基于 LangChain 框架开发特定数据库+ Prompt + 通用大模型的架构,实现从用户输入到数据库再到大模型最后输出的整体架构连接。
- 搭建数据库:收集数据并进行预处理,再向量化存储到数据库中。数据预处理一般包括从多种格式向纯文本的转化。完成预处理后,需要进行切片、向量化构建出个性化数据库。
- Prompt Engineering:明确 Prompt 设计的一般原则及技巧,构建出一个来源于实际业务的小型验证集,基于小型验证集设计满足基本要求、具备基本能力的 Prompt。
- 验证迭代:通过不断发现 Bad Case 并针对性改进 Prompt Engineering 来提升系统效果、应对边界情况。
- 前后端搭建:设计产品页面,让我们的应用能够上线成为产品。快速开发 Demo 的框架:Gradio 和 Streamlit。
- 体验优化:进行长期的用户体验跟踪,记录 Bad Case 与用户负反馈,再针对性进行优化。
项目流程
-
项目规划与需求分析:确定项目目标、核心功能、技术架构和工具(LangChain框架、Chroma知识库、GPT、科大讯飞的星火大模型、文心一言、GLM、Gradio、Streamlit
-
数据准备与向量知识库构建:收集和整理数据,向量化数据,导入知识库,建立知识库索引
-
大模型集成与API连接:集成大模型,配置 API 连接,实现与大模型 API 的交互
-
核心功能实现:构建 Prompt Engineering,实现大模型回答功能,根据用户提问和知识库内容生成回答
-
核心功能迭代优化:进行验证评估,收集 Bad Case,根据 Bad Case 迭代优化核心功能实现
-
前端与用户交互界面开发:使用 Gradio 和 Streamlit 搭建前端界面
-
部署测试与上线:部署问答助手到服务器或云平台,确保可在互联网上访问;进行生产环境测试,确保系统稳定,上线并向用户发布
-
维护与持续改进:监测系统性能和用户反馈,及时处理问题;收集用户需求,进行系统改进和功能扩展
项目架构
LLM 层:基于四种流行 LLM API 进行了 LLM 调用封装,支持用户以统一的入口、方式来访问不同的模型,支持随时进行模型的切换;
数据层:包括个人知识库的源数据以及 Embedding API,源数据经过 Embedding 处理可以被向量数据库使用;
数据库层:为基于个人知识库源数据搭建的向量数据库;
应用层:为核心功能的最顶层封装,基于 LangChain 提供的检索问答链基类进行了进一步封装,从而支持不同模型切换以及便捷实现基于数据库的检索问答;
服务层:实现了 Gradio 搭建 Demo 与 FastAPI 组建 API 两种方式来支持本项目的服务访问。