最近在启动一个OpenAI的工程,之前写过一个如何通过spring boot连接chatGPT的文章,本文主要总结一下spring提供哪些基本的chatGPT的功能.spring ai对接了很多AI接口.本文以ChatGPT为例子说明.
由于基本概念和详细使用说明spring boot官方已经很详细了.这里主要是对功能的一个总结.为刚刚接触AI的同学做一些基本应用的说明.下面以一个简单的业务场景开始.
ChatGPT(为了方便,后面简称CG)最基本功能就是聊天,你发一个消息给ai,ai反馈一个消息给你.为了让聊天更加丰富多彩,CG为我们提供很多其他的可配置功能.
- 为了聊天的话题更加专业我们可以给CG设置一些身份,例如:我们告诉CG你是一个律师或者医生,回答的问题要使用律师或者医生的专业术语回答.这样聊天就更加专业了.
- 为了聊天的连续性,需要把之前聊天内容返回给CG.返回的信息分为你发送的信息和CG给你的信息.
- 还有就是希望cg返回的信息包括一些特征,例如返回信息的格式等.默认是markdown.
- 如果我们要加入一些已知的内容,或者cg不知道其他系统知道的内容,我们需要对cg的返回信息进行丰富,例如今天的天气.cg的知识和他训练信息的截止日期有关,当前的内容不知道
- 如果我们输入的信息不够完善,需要增加默认的相关信息,对我们的输入信息进行丰富
- 返回的信息是图片
- 我们通过语音进行聊天,语音需要转文字
对于以上内容spring ai都提供了基本的使用方法.
对于发送给CG的消息类型
userMessage:用户录入的信息
systemMessage:对话背景说明,例如告诉cg,你是一个律师.为了实现上面的1功能
AssistantMessage:cg之前返回的消息 实现2
FunctionMessage:实现3
Funciton回调函数实现4
spring ai提供了多种客户端:
ChatClient:聊天用
ImageClient:返回图片:实现6
AudioTranscriptionClint:语音转文字:实现7
对于上面的5实现比较麻烦.
首先我们要知道哪些信息是和用户输入相关的.一起发送给cg.
例如:用户输入苹果.我们可能把富士苹果也发送.橘子不发送.这就需要有一个功能从语义层面考虑相关性.
由于通过文字来分析比较麻烦,转成数字分析就简单了.例如:苹果是1,富士苹果是3.橘子是5.由于3-1 < 5-1.就说富士苹果离苹果近.根据这个原理.cg会帮助我们将文字转成一串浮点数流入:0.1,0.2,0.9.一串数叫向量.还要有一个计算两个向量距离的算法.例如:余玄函数等.
spring ai embeddingClient文字转向量.
转了之后需要存,需要找一个向量数据库.spring 提供了多种向量数据库的客户端.例如:milvus. milvus可以帮我们进行距离计算.可以通过配置查询到相关性近的内容发送给CG.
代码的例子这里就不写了.spring boot官网有详细的说明,新人可以根据上面说的7个功能点在官网里面查找一下.基本上对应ChatGPT的目录了.这里简单总结翻译一下.