更新 SpringAI/0_使用SpringAI接入AI模型.md

This commit is contained in:
8ga 2025-03-16 14:55:15 +08:00
parent 981599bd21
commit 8bbefca044

View File

@ -150,7 +150,7 @@ spring:
private final ChatModel chatModel;
```
2. 非流式问答
2. 同步返回答案
```java
@GetMapping("chat")
@ -163,11 +163,11 @@ public String chat(@RequestParam String prompt) {// 用户输入的prompt
}
```
3. 流式问答
3. 流式返回答案
```java
@GetMapping(value = "chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<String>> chatStream(@RequestParam String prompt) {
public Flux<ServerSentEvent<String>> chat(@RequestParam String prompt) {
return ChatClient.create(chatModel)
.prompt()
.user(prompt)
@ -177,3 +177,26 @@ public String chat(@RequestParam String prompt) {// 用户输入的prompt
.map(chatResponse -> ServerSentEvent.builder(JSONUtil.toJsonStr(chatResponse)).event("message").build());
}
```
### ChatMermory
ChatMermory是一个记录与用户对话的组件在聊天的模型中将用户与大模型API前几轮对话消息发送给大模型的API是一个很常见的需求。它本身是一个接口比如**InMemoryChatMemory**就是一个在JVM内存中记录的实现。可以按照自己的需求实现不同形式的存储比如Redis、或数据库持久化存储。
### MessageChatMemoryAdvisor
ChatMermory仅仅是一个存储和获取历史对话消息的接口而MessageChatMemoryAdvisor则是ChatClient中的一部分比如这样做
```java
// 这里用InMemoryChatMemory做示例
private static final ChatMemory chatMemory = new InMemoryChatMemory();
// 从历史记录里取6条对话消息一起发送至模型的API。
// 历史消息也是算在这一次对话Token消耗的要关注Token膨胀的问题
var messageChatMemoryAdvisor = new MessageChatMemoryAdvisor(chatMemory, sessionId, 6);
ChatClient.create(chatModel)
.prompt()
.user(prompt)
.advisors(messageChatMemoryAdvisor)
.stream()
.content()
.map(chatResponse -> ServerSentEvent.builder(chatResponse).event("message").build());
```