chat - 四种消息类型与持久化支持
1、四种消息类型结构
- UserMessage 用户消息
由用户输入的消息
属性 | 描述 |
---|---|
content:String | 内容 |
images:List<String> | 图片集合(可以是 url 或 base64) |
ChatMessage.ofUser("你好!");
- SystemMessage 系统消息
系统消息,主要是为当前会话设定AI的角性属性。一般作为一个会放的头条消息
属性 | 描述 |
---|---|
content:String | 内容 |
ChatMessage.ofSystem("你是个建筑工地的工人,对搬砖很有经验!");
- AssistantMessage 助理消息
由大语言模型生成的消息
属性 | 描述 |
---|---|
content:String | 内容(当内容为空时,表示为思考状态) |
reasoningContent:String | 思考内容(不会回传) |
toolCalls:String | 工具调用 |
- ToolMessage 工具消息
由本地函数调用(Function call)生成的消息
属性 | 描述 |
---|---|
content:String | 内容 |
name:String | 函数名 |
toolCallId:String | 工具调用标识 |
2、用户消息的构建方式
- 基本消息
chatModel.prompt(ChatMessage.ofUser("hello"))
.call();
- 消息增强(格式化上下文)
String message = "hello";
String prompt = String.format("%s\n\n context: %s", message, context); //context 可以是任何对象
chatModel.prompt(ChatMessage.ofUser(prompt))
.call();
- 带图片的消息(需要多模态大模型的支持)
//(使用图片地址)
chatModel.prompt(ChatMessage.ofUser("这个图上有人像吗?",
Arrays.asList("http://.../demo.jpg")))
.call();
//(使用图片 base64 码)
chatModel.prompt(ChatMessage.ofUser("这个图上有人像吗?",
Arrays.asList("data:image/jpeg;base64,.....")))
.call();
3、消息的序列化(即,持久化支持)
在开发会话窗口时,一般需要记忆能力。以及记忆的离线能力(或持久化)。
- 批量序列化与反序列化(基于 ndjson 转换),适合“批量”持久化
List<ChatMessage> messageList1 = ...;
String ndjson = ChatMessage.toNdjson(messageList1);
List<ChatMessage> messageList2 = ChatMessage.fromNdjson(ndjson);
- 单条序列化与反序列化(基于 json 转换),适合“逐条”持久化
ChatMessage message1 = ...;
String json = ChatMessage.toJson(message1);
ChatMessage message2 = ChatMessage.fromJson(json);