AI 问答
AI 问答
实现 AI 问答非常容易。可以通过笔者的 java-openai 库调用 OpenAI 的 Chat 接口,将用户的问题发送给 GPT 模型,GPT 模型会返回推理结果。
临时记忆
临时记忆的实现有多种方式,这里简单介绍两种方法:
- 数据库存储对话记录:将用户和大模型的对话记录存入数据库中。当需要对新的问题进行推理时,将新消息和历史消息一起发送给大模型。这种方法的缺点是每次推理都会增加 token 数量。
- 提示词汇总:编写一个提示词,将用户的最新消息和历史记录放入提示词中。通过这个提示词,大模型会将新消息和历史消息汇总成一个最新的问题,再将这个问题交给大模型推理。此方法可以减少推理的 token 数量,但会增加一层模型调用。
长期记忆
长期记忆的实现相对复杂,这里介绍一种简单的方法:
- 将用户的输入和大模型的输出添加到历史记录表中,并进行向量化处理。
- 当用户有新的输入时,先对输入进行向量化,得到输入向量。然后将输入向量与历史记录中的向量进行余弦相似度计算,找到相似度较高的历史输入和输出。
- 将相似度较高的历史输入和输出与最新的数据一起交给大模型推理,或者先让大模型汇总成一个输入,再让大模型进行推理。
这种方法有以下几个优点:
- 减少 token 数量:并不是所有历史输入和输出中的信息都与最新输入有关联。通过余弦相似度找到相似度较高的片段,可以减少 token 数量。
- 理论上支持无限长的对话:可以通过工程技术找出相似度最高的前 10 条或者前 100 条,理论上永远不会超出 token 限制。
后置处理
什么是后置处理
后置处理是指对大语言模型(LLM)的输出进行额外的处理和优化。这个过程发生在模型生成初始响应之后,旨在进一步改进和丰富最终呈现给用户的内容。
为什么要进行后置处理
后置处理有几个重要目的:
提升信息质量:通过额外的数据补充和验证,确保输出的准确性和完整性。
优化信息呈现:将原始输出转化为更易读、更有结构的格式。
个性化用户体验:根据用户偏好或具体需求定制输出内容。
增强功能性:集成额外的功能,如链接相关资源或交互式元素。
确保一致性:使输出符合预定义的标准或品牌指南。
后置处理示例
让我们详细展开您提供的示例,并添加一些额外的步骤和解释:
用户输入:"Math 241 的课程教授简介"
信息获取:
- 通过文档检索系统查找相关课程信息
- 利用结构化数据库检索教师信息
- 使用搜索引擎获取补充资料
- 调用大学 API 获取最新的课程安排
LLM 处理:
- 大模型整合所有获取的信息
- 生成一份详细的教授简介,可能长达 1000 字
内容提取:
- 使用自然语言处理(NLP)技术从长文本中提取关键信息
- 识别并提取教授的姓名、专业领域、研究方向等核心信息
补充信息检索:
- 利用提取出的教授姓名,在专门的教职员工数据库中进行精确检索
- 获取教授的最新出版物、获奖情况、联系方式等补充信息
结构化数据处理:
- 将检索到的结构化信息整合为一个简洁的"教授名片"格式
- 可能包括:照片、职称、研究领域、办公室地点、office hours 等
用户界面优化:
- 设计一个视觉吸引力强的教授名片界面
- 添加交互元素,如可点击的邮箱地址或个人主页链接
相关信息链接:
- 提供该教授其他课程的链接
- 添加相关研究论文或项目的参考
最终呈现:
- 将优化后的教授名片展示给用户
- 提供选项让用户查看更详细的信息或返回到简洁视图
