引言

从上一章的入门案例中我们发现,我们只要配置好模型名称baseurl,Api Key等信息后。只需要从容器中注入ChatModel对象,然后调用其call方法就可以完成模型的调用。

但是本质上,call方法的调用还是发起的一个http请求。SpringAI其实就把请求中内容抽象成了一个个组件。

所以想要更好的理解组件还是要从元素的请求看起。

curl -X POST "https://open.bigmodel.cn/api/paas/v4/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
    "model": "glm-4.5",
    "messages": [
        {
            "role": "system",
            "content": "你是一个有用的AI助手。"
        },
        {
            "role": "user",
            "content": "你好,请介绍一下自己。"
        }
    ],
    "temperature": 0.6,
    "stream": true
}'

Message

在这里插入图片描述
我们来看请求中的这部分内容。messages是一个数组。
其中的每个对象都有role和content两个属性。 这个对象在SpringAI中就被抽象成Message。

我们先来看下智谱的文档中对messages的介绍:
在这里插入图片描述

再来看下SpringAI中的设计的Message的继承体系:
在这里插入图片描述
从这个继承关系中我们可以看到AbstractMessage相对于把我们接口中看到的role字段抽象成messageType属性。content字段抽象成textContent属性。

MessageType定义的枚举源码如下:

public enum MessageType {
  USER("user"),
  ASSISTANT("assistant"),
  SYSTEM("system"),
  TOOL("tool");
}

也是和我们目前role可以使用的4种值对应。

这个时候我们回过头去看call方法的支持的参数类型:
在这里插入图片描述
你就能理解为什么它可以支持传Message的可变参的含义了。 相对于就是传入了一个Message列表。这个列表本质上会转化为请求中的messages。

所以如下代码

chatModel.call(new SystemMessage("你是一个有用的AI助手。"),new UserMessage("你好,请介绍一下自己。"))

就等价于
在这里插入图片描述

Prompt 提示词

Prompt 提示词 是引导 AI 模型生成特定输出的输入格式,Prompt 的设计和措辞会显著影响模型的响应。
在这里插入图片描述

在SpringAI中,是把模型参数和消息列表的组合抽象为Prompt。

所以Prompt中主要是有以下两个属性
在这里插入图片描述
这个时候我们再看下call方法支持的参数类型中就有Prompt类型的就更容易理解了。
在这里插入图片描述

所以以下代码:

    @GetMapping("/simple")
    public String simpleChat() {
        List<Message> messages = new ArrayList<>();
        messages.add(new SystemMessage("你是一个有用的AI助手。"));
        messages.add(new UserMessage("你好,请介绍一下自己。"));

        ZhiPuAiChatOptions chatOptions = ZhiPuAiChatOptions.builder()
                .topP(0.7)
                .maxTokens(15536)
                .temperature(0.0)
                .model("glm-4.5")
                .build();
        return chatModel.call(new Prompt(messages,chatOptions)).getResult().getOutput().getText();
    }

等价于

curl -X POST "https://open.bigmodel.cn/api/paas/v4/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
    "model": "glm-4.5",
    "messages": [
        {
            "role": "system",
            "content": "你是一个有用的AI助手。"
        },
        {
            "role": "user",
            "content": "你好,请介绍一下自己。"
        }
    ],
    "temperature": 0.0,
    "maxTokens":15536
    "topP": 0.7
}'

这里需要注意的是每个模型参数支持设置的模型参数是有一些差异的。所以使用不同厂商的模型在设置模型参数时要依赖不同的starter,使用其中的XxxxxChatOptions的builder方法来设置模型参数。

ChatModel

对话模型(Chat Model)接收一系列消息(Message)作为输入,与模型 LLM 服务进行交互,并接收返回的聊天消息(Chat Message)作为输出。

以下是Model体系下几个核心实现:

  • ChatModel,文本聊天交互模型,支持纯文本格式作为输入,并将模型的输出以格式化文本形式返回。
  • ImageModel,接收用户文本输入,并将模型生成的图片作为输出返回。
  • AudioModel,接收用户文本输入,并将模型合成的语音作为输出返回。

ChatModel API 让应用开发者可以非常方便的与 AI 模型进行文本交互,它抽象了应用与模型交互的过程,包括使用 Prompt 作为输入,使用 ChatResponse 作为输出等。ChatModel 的工作原理是接收 Prompt 或部分对话作为输入,将输入发送给后端大模型,模型根据其训练数据和对自然语言的理解生成对话响应,应用程序可以将响应呈现给用户或用于进一步处理。

在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐