Solon v3.0.9

chat - 四种消息类型与持久化支持

</> markdown

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);