<二>Sping-AI alibaba 入门-记忆聊天及持久化

请看文档,流程不再赘述:官网及其示例

基础概念

1. ChatClient

ChatClient 本质上是一个封装了 AI 模型交互复杂性的 Fluent API(流畅接口),它的设计目标是让开发者无需关注底层组件的协同细节,就能快速实现与大语言模型(LLM)的交互。

类比来看,它就像应用开发中的「服务层」—— 上层应用只需调用其接口,底层的模型调用、参数处理、组件协调等工作都由它自动完成。

创建ChatClient

  1. 自动注入由Spring Boot 自动配置创建的默认 ChatClient.Builder 实例
@RestController
public class ChatController {
   
   
    private final ChatClient chatClient;
    
    // 注入Spring Boot自动配置的ChatClient.Builder
    public ChatController(ChatClient.Builder builder) {
   
   
        this.chatClient = builder.build();
    }
    
    @GetMapping("/chat")
    public String chat(String input) {
   
   
        // 构建用户消息并发送请求
        return this.chatClient.prompt()
                .user(input)       // 设置用户输入
                .call()            // 调用AI模型
                .content();        // 获取模型响应内容
    }
}
  1. 自行创建一个 ChatClient.Builder 实例并用它来得到 ChatClient 实例
@Configuration
public class ChatConfig {
   
   
    // 注入第一个ChatModel(如OpenAI模型)
    @Autowired
    private ChatModel openAiModel;
    
    // 注入第二个ChatModel(如本地LLM模型)
    @Autowired
    private ChatModel localModel;
    
    // 创建第一个ChatClient实例
    @Bean("openAiChatClient")
    public ChatClient openAiChatClient() {
   
   
        return ChatClient.builder(openAiModel)
                .withMemory(ChatMemoryFactory.createDefaultMemory()) // 自定义记忆策略
                .withOption(ChatOption.temperature(0.7)) // 设置模型参数
                .build();
    }
    
    // 创建第二个ChatClient实例
    @Bean("localChatClient")
    public ChatClient localChatClient() {
   
   
        return ChatClient.create(localModel); // 使用默认配置快速创建
    }
}

ChatClient 常用方法

  1. 请求构建方法:定义与 AI 模型的交互内容

    方法 功能描述 返回类型 示例代码
    prompt() 开始构建提示词(Prompt),支持链式调用添加多种类型消息。 PromptBuilder chatClient.prompt().user(“你好”).system(“回答要简洁”)
    user(String content) 添加用户消息(User Message)到提示词中,通常表示用户输入。 PromptBuilder .user(“推荐一部电影”)
    system(String content) 添加系统消息(System Message)到提示词中,用于指导模型行为(如人设、格式)。 PromptBuilder .system(“你是一个电影推荐专家”)
    assistant(String content) 添加助手消息(Assistant Message)到提示词中,通常用于历史对话。 PromptBuilder .assistant(“《肖申克的救赎》是一部经典电影…”)
    withFunction(FunctionDefinition function) 注册工具 / 函数调用(Function Calling),允许模型调用外部工具。 PromptBuilder .withFunction(getWeatherFunction())
  2. 响应处理方法:获取并解析 AI 模型的输出
    在这里插入图片描述

  3. 高级配置方法:定制模型行为与交互策略
    在这里插入图片描述

示例
// 示例1:标准同步调用(获取文本)
String response = chatClient.prompt()
    .system("你是一个电影推荐专家")
    .user("推荐一部科幻电影")
    .call()
    .content();

// 示例2:结构化数据解析
record Movie(String title, String genre, int year) {
   
   }

Movie movie = chatClient.prompt()
    .user("推荐一部经典科幻电影")
    .call()
    .entity(Movie.class);

// 示例3:流式响应(实时展示)
chatClient.prompt()
    .user("写一篇关于AI的文章")
    .stream()
    .content()
    .subscribe(
        chunk -> System.out.print(chunk),  // 实时打印每段内容
        error -> System.err.println("Error: " + error),
        () -> System.out.println("\n文章生成完成")
    );

// 示例4:工具调用(Function Calling)
FunctionDefinition weatherFunction = FunctionDefinition.builder()
    .name("getWeather")
    .description("获取指定城市的当前天气")
    .parameter("city", "城市名称", String.class)
    .build();

ChatResponse response = chatClient.prompt()
    .user("北京今天天气如何?")
    .withFunction(weatherFunction)
    .call()
    .chatResponse();

// 解析并执行函数调用
if (response.hasFunctionCall()) {
   
   
    FunctionCall functionCall = response.getFunctionCall();
    // 执行对应的工具逻辑...
}

定制 ChatClient

创建 ChatClient 时指定的配置将作为与模型交互时的默认参数,这样可以避免每次调用都重复设置

  • 设置默认 System Message

    1. 固定风格设置

    通过 defaultSystem 方法可设置固定的 System Message。例如,希望模型以海盗风格回复,代码如下:

    @Configuration
    class Config {
         
         
        @Bean
        ChatClient chatClient(ChatClient.Builder builder) {
         
         
            return builder.defaultSystem("You are a friendly chat bot that answers question in the voice of a Pirate")
                   .build();
        }
    }
    

    2. 动态模板设置

    若需根据不同场景调整 System Message 风格,可使用模板。例如:

    @Configuration
    class Config {
         
         
        @Bean
        ChatClient chatClient(ChatClient.Builder builder) {
         
         
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值