Solon AI 开发学习 7-chat - 四种消息类型及提示语增强

大模型接收的是"提示语"(或提示词),返回的是"生成内容"。提示语,则有一条或多条不同类型的消息组成(可以有会话历史消息)。

1、四种消息类型结构

  • UserMessage 用户消息

由用户输入的消息

属性 描述
metadata:Map 元数据(用于扩展输出)
content:String 内容
medias:List<AiMedia> 图片集合(可以是 url 或 base64)
复制代码
ChatMessage.ofUser("你好!");

//需要多模态模型支持
ChatMessage.ofUser("这图里有方块吗?", Image.ofUrl("http://../demo.jpg"));

ChatMessage.ofUser(Image.ofUrl("http://../demo.jpg"));
ChatMessage.ofUser("这图里有方块吗?");
  • SystemMessage 系统消息(现在的模型,一般用不到了)

系统消息,主要是为当前会话设定AI的角色属性。一般作为一个会放的头条消息

属性 描述
metadata:Map 元数据(用于扩展输出)
content:String 内容
复制代码
ChatMessage.ofSystem("你是个建筑工地的工人,对搬砖很有经验!");

应用示例:

复制代码
List<ChatMessage> messages = new ArrayList();
messages.add(ChatMessage.ofSystem("你是个建筑工地的工人,对搬砖很有经验!"));
messages.add(ChatMessage.ofUser("100块砖,搬到10楼大概要多久?"));

chatModel.prompt(messages); //context 可以是描述天气的任何对象
            .call();
  • AssistantMessage 助理消息

由大语言模型生成的消息

属性 描述
metadata:Map 元数据(用于扩展输出)
content:String 内容(当内容为空时,表示为思考状态)
toolCalls:List<ToolCall> 工具调用
  • ToolMessage 工具消息

由框架根据 AssistantMessage 描述的本地工具调用(Tool call)生成的消息。

属性 描述
metadata:Map 元数据(用于扩展输出)
content:String 内容
name:String 函数名
toolCallId:String 工具调用标识
returnDirect:boot 是否直接返回

2、用户消息的构建方式

  • 基本消息

    chatModel.prompt(ChatMessage.ofUser("hello"))
    .call();

  • 消息增强(格式化上下文)

    String message = "今天天气好吗?";

    chatModel.prompt(ChatMessage.ofUserAugment(message, context)) //context 可以是描述天气的任何对象
    .call();

  • 消息增强(定制格式模板)

    String message = "今天天气好吗?";

    chatModel.prompt(ChatMessage.ofUserTmpl("#{query} \n\n 请参考以下内容回答:#{context}")
    .paramAdd("query", message)
    .paramAdd("context", context)
    .generate())
    .call();

3、关于用户消息的"消息增强"

将用户输入的消息通过格式化,附加相关的上下文(或参考资料),从而实现"消息增强"。这也是构成 RAG技术(检索增强生成,结合信息检索和语言模型)的纽带。

  • 快捷增强(固定模板,让消息有时间和参考上下文)

    //ChatMessage.ofUserAugment(String message, Object context);

    //示例1:
    ChatMessage.ofUserAugment("a+b 等于几?", "假如 a=1, b=2");

    //示例2:
    let message = "刘德华今年有哪些演唱会?"
    let context = ticketRepository.search(message);

    ChatMessage.ofUserAugment(message, context);

  • 模板增强(基于模板定制消息格式)

    let message = "刘德华今年有哪些演唱会?"
    let context = ticketRepository.search(message);

    ChatMessage.ofUserTmpl("#{message} \n\n #参考资料:#{context} \n\n #要求:如果参考资料里没有,返回没有")
    .paramAdd("message", message)
    .paramAdd("context", context)
    .generate();

4、多角色混合提示增强

可组合 SystemMessage、UserMessage 和 AssistantMessage 实现多轮对话。达到场景效果。

复制代码
List<ChatMessage> prompt = List.of(
    ChatMessage.ofSystem("你是一个天气预报助手,只回答天气相关问题。"),
    ChatMessage.ofUser("今天北京天气如何?"),
    ChatMessage.ofAssistant("北京今天晴,气温20-25℃。"),
    ChatMessage.ofUser("需要带伞吗?")
);

chatModel.prompt(prompt); 
            .call();
相关推荐
这个DBA有点耶29 分钟前
数据库数据同步解决方案怎么选?6款主流工具横向对比与信创选型指南
数据库·架构·dba
刃神太酷啦37 分钟前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存
小雷信息医学38 分钟前
不会写复杂代码也能发 SCI?手把手教你用 InSpireR 交互系统一键提取、合并与导出临床科研宽表【第三章】
数据库
旺仔不是程序员1 小时前
复合索引最左前缀原则:PostgreSQL 的 WHERE 为什么必须命中第一列
数据库·后端·sql
旺仔不是程序员1 小时前
字段类型不一致:PostgreSQL 报错与索引失效的第一元凶
数据库·后端·sql
白远山1 小时前
货运跑腿搬家平台开发实战:从需求分析到落地部署指南
数据库·数据挖掘·需求分析
geovindu2 小时前
sql: Data Modeling Patterns
数据库·sql·设计模式·sqlserver
上海蓝色星球2 小时前
蓝色星球NG-AIOS新型AI工业操作系统重磅发布——以本体智能为内核,重构“AI+制造“新范式
大数据·数据库·人工智能·机器人
瀚高PG实验室2 小时前
瀚高数据库如何克隆表
数据库·sql·postgresql·瀚高数据库
雨辰AI2 小时前
信创多租户项目 9 大踩坑|数据隔离失效、权限越权终极解决(金仓 / 达梦 / 高斯全库适配)
java·大数据·数据库·后端