chat - 四种消息类型及用户消息增强
大模型接收的是“提示语”,返回的是“生成内容”。提示语,则有一条或多条不同类型的消息组成。
1、四种消息类型结构
- UserMessage 用户消息
由用户输入的消息
属性 | 描述 |
---|---|
content:String | 内容 |
images:List<String> | 图片集合(可以是 url 或 base64) |
ChatMessage.ofUser("你好!");
- SystemMessage 系统消息(现在的模型,一般用不到了)
系统消息,主要是为当前会话设定AI的角色属性。一般作为一个会放的头条消息
属性 | 描述 |
---|---|
content:String | 内容 |
ChatMessage.ofSystem("你是个建筑工地的工人,对搬砖很有经验!");
- AssistantMessage 助理消息
由大语言模型生成的消息
属性 | 描述 |
---|---|
content:String | 内容(当内容为空时,表示为思考状态) |
metadata:Map | 元数据(用于扩展输出) |
reasoningContent:String | 思考内容(不会回传) |
toolCalls:String | 工具调用 |
- ToolMessage 工具消息
由框架根据 AssistantMessage 描述的本地函数调用(Function call)生成的消息。
属性 | 描述 |
---|---|
content:String | 内容 |
name:String | 函数名 |
toolCallId:String | 工具调用标识 |
2、用户消息的构建方式
- 基本消息
chatModel.prompt(ChatMessage.ofUser("hello"))
.call();
- 消息增强(格式化上下文)
String message = "今天天气好吗?";
chatModel.prompt(ChatMessage.augment(message, context)); //context 可以是描述天气的任何对象
.call();
3、关于用户消息的“消息增强”
将用户输入的消息通过格式化,附加相关的上下文(或参考资料),从而实现“消息增强”。这也是构成 RAG技术(检索增强生成,结合信息检索和语言模型)的纽带。
- 快捷增强(固定模板,让消息有时间和参考上下文)
//ChatMessage.augment(String message, Object context);
//示例1:
ChatMessage.augment("a+b 等于几?", "假如 a=1, b=2");
//示例2:
let message = "刘德华今年有哪些演唱会?"
let context = ticketRepository.search(message);
ChatMessage.augment(message, context);
- 模板增强(基于模板定制消息格式)
let message = "刘德华今年有哪些演唱会?"
let context = ticketRepository.search(message);
ChatMessage.template("${message} \n\n #参考资料:${context} \n\n #要求:如果参考资料里没有,返回没有")
.param("message", message)
.param("context", context).
generate();