messages = chatMemory.get(conversationId);
+ ChatResponse response = chatModel.call(new Prompt(messages));
+ chatMemory.add(conversationId, response.getResult().getOutput());
+ return response.getResult().getOutput().getText();
+ }
+
+ /**
+ * 模拟一个对话场景,用户先介绍自己的名字,然后询问 AI 自己的名字
+ *
+ * 这里使用的方式是 Memory in Chat Model
+ *
+ * @param message 用户输入的消息
+ * @param conversationId 对话 ID
+ * @return AI 的回答
+ */
+ public void chat(String message, String conversationId) {
+ // First interaction
+ call("My name is James Bond", conversationId);
+ // Second interaction
+ call("What is my name?", conversationId);
+ }
+
+
+ public ChatMemory getChatMemory() {
+ return chatMemory;
+ }
+}
diff --git a/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.properties b/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.properties
deleted file mode 100644
index 80650b1..0000000
--- a/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-spring.application.name=spring-ai-chat-ollama
-server.port=8081
-spring.profiles.active=ollama
-
-# Ollama configuration for Spring AI Chat
-# The address of the Ollama service, which defaults to http://localhost:11434.
-spring.ai.ollama.base-url=http://localhost:11434
-# The model name which is the one you previously downloaded via the terminal using `ollama pull` or `ollama run`
-spring.ai.ollama.chat.model=glm4:9b
-spring.ai.ollama.chat.options.temperature=0.7
diff --git a/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/schema-mysql.sql b/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/schema-mysql.sql
new file mode 100644
index 0000000..f503ea8
--- /dev/null
+++ b/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/schema-mysql.sql
@@ -0,0 +1,9 @@
+CREATE TABLE IF NOT EXISTS SPRING_AI_CHAT_MEMORY (
+ conversation_id VARCHAR(36) NOT NULL,
+ content TEXT NOT NULL,
+ type VARCHAR(10) NOT NULL,
+ `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ CONSTRAINT TYPE_CHECK CHECK (type IN ('USER', 'ASSISTANT', 'SYSTEM', 'TOOL'))
+ );
+
+CREATE INDEX SPRING_AI_CHAT_MEMORY_CONVERSATION_ID_TIMESTAMP_IDX ON SPRING_AI_CHAT_MEMORY(conversation_id, `timestamp`);
\ No newline at end of file
From 7098e39d2cb1d6a9050b00005da2bd62de5375aa Mon Sep 17 00:00:00 2001
From: yl-dengxs <1195279222@qq.com>
Date: Sun, 21 Jun 2026 11:34:50 +0800
Subject: [PATCH 5/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=AE=B0?=
=?UTF-8?q?=E5=BF=86=E6=A8=A1=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ollama/controller/WxBotController.java | 22 +++++++++++++++
.../src/main/resources/application.yml | 28 +++++++++++++++++++
2 files changed, 50 insertions(+)
create mode 100644 spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/WxBotController.java
create mode 100644 spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.yml
diff --git a/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/WxBotController.java b/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/WxBotController.java
new file mode 100644
index 0000000..d253a96
--- /dev/null
+++ b/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/WxBotController.java
@@ -0,0 +1,22 @@
+package com.glmapper.ai.chat.ollama.controller;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * @description:
+ * @author:dxs
+ * @date:2026/1/15 09:11
+ */
+@Slf4j
+@RestController
+@RequestMapping("/wxbot")
+public class WxBotController {
+ @PostMapping("/callBack")
+ public String callBack(@RequestBody Map msg) {
+ log.info("接收到微信消息:{}", msg);
+ return "success";
+ }
+}
diff --git a/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.yml b/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.yml
new file mode 100644
index 0000000..83bcc11
--- /dev/null
+++ b/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.yml
@@ -0,0 +1,28 @@
+spring:
+ application:
+ name: spring-ai-chat-ollama
+ profiles:
+ active: ollama
+ datasource:
+ url: jdbc:mysql://localhost:3306/wxbot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
+ username: root
+ password: 12345678
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ ai:
+ ollama:
+ base-url: http://localhost:11434
+ chat:
+ model: glm4:9b
+ options:
+ temperature: 0.7
+ chat:
+ memory:
+ repository:
+ jdbc:
+ initialize-schema: always
+ schema: classpath:schema-@@platform@@.sql
+ platform: mysql
+
+server:
+ port: 8081
+
From 8f9227b45d101ac12a7a2862e7e23482beebf459 Mon Sep 17 00:00:00 2001
From: yl-dengxs <1195279222@qq.com>
Date: Sun, 21 Jun 2026 11:43:02 +0800
Subject: [PATCH 6/9] =?UTF-8?q?Revert=20"=E6=B7=BB=E5=8A=A0=E4=BA=86?=
=?UTF-8?q?=E8=AE=B0=E5=BF=86=E6=A8=A1=E5=9D=97"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reverts commit 7098e39d2cb1d6a9050b00005da2bd62de5375aa.
---
.../ollama/controller/WxBotController.java | 22 ---------------
.../src/main/resources/application.yml | 28 -------------------
2 files changed, 50 deletions(-)
delete mode 100644 spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/WxBotController.java
delete mode 100644 spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.yml
diff --git a/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/WxBotController.java b/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/WxBotController.java
deleted file mode 100644
index d253a96..0000000
--- a/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/WxBotController.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.glmapper.ai.chat.ollama.controller;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Map;
-
-/**
- * @description:
- * @author:dxs
- * @date:2026/1/15 09:11
- */
-@Slf4j
-@RestController
-@RequestMapping("/wxbot")
-public class WxBotController {
- @PostMapping("/callBack")
- public String callBack(@RequestBody Map msg) {
- log.info("接收到微信消息:{}", msg);
- return "success";
- }
-}
diff --git a/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.yml b/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.yml
deleted file mode 100644
index 83bcc11..0000000
--- a/spring-ai-chat/spring-ai-chat-ollama/src/main/resources/application.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-spring:
- application:
- name: spring-ai-chat-ollama
- profiles:
- active: ollama
- datasource:
- url: jdbc:mysql://localhost:3306/wxbot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
- username: root
- password: 12345678
- driver-class-name: com.mysql.cj.jdbc.Driver
- ai:
- ollama:
- base-url: http://localhost:11434
- chat:
- model: glm4:9b
- options:
- temperature: 0.7
- chat:
- memory:
- repository:
- jdbc:
- initialize-schema: always
- schema: classpath:schema-@@platform@@.sql
- platform: mysql
-
-server:
- port: 8081
-
From 470cf59091eb4bb19c578376f74d8d367a497abc Mon Sep 17 00:00:00 2001
From: yl-dengxs <1195279222@qq.com>
Date: Sun, 21 Jun 2026 12:02:23 +0800
Subject: [PATCH 7/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=AE=B0?=
=?UTF-8?q?=E5=BF=86=E6=A8=A1=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/glmapper/ai/chat/ollama/controller/ChatController.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/ChatController.java b/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/ChatController.java
index 9c89b21..22fe632 100644
--- a/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/ChatController.java
+++ b/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/controller/ChatController.java
@@ -14,7 +14,7 @@
* @Classname ChatController
* @Description ollama ChatController
* @Date 2025/6/6 08:26
- * @Created by Gepeng18
+ * @Created by Gepeng18111
*/
@RestController
@RequestMapping("/api/ollama")
From 5d784e3bc864fee37c62592c2a437f6c725bb7c4 Mon Sep 17 00:00:00 2001
From: yl-dengxs <1195279222@qq.com>
Date: Sun, 21 Jun 2026 12:09:25 +0800
Subject: [PATCH 8/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0claude.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CLAUDE.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
create mode 100644 CLAUDE.md
diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000..634cdaa
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,71 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## Project Overview
+
+Spring AI Summary 是基于 Spring AI 框架的模块化示例工程集合,用于学习 Spring AI 核心功能。包含聊天、向量数据库、RAG、MCP、Agent 等多个功能模块的示例代码。
+
+## 技术栈
+
+- **Java**: 21
+- **Spring Boot**: 3.3.6
+- **Spring AI**: 1.0.0
+- **构建工具**: Maven 3.6+ (推荐使用 mvnd 加速)
+- **Lombok**: 用于简化 POJO 代码
+
+## 常用命令
+
+```bash
+# 编译整个项目
+mvn clean compile -DskipTests
+
+# 编译单个模块 (如 spring-ai-chat-deepseek)
+mvn clean compile -DskipTests -pl spring-ai-chat/spring-ai-chat-deepseek
+
+# 运行测试
+mvn test -pl
+
+# 打包
+mvn clean package -DskipTests
+```
+
+## 模块结构
+
+```
+spring-ai-summary/
+├── spring-ai-chat/ # 聊天示例 (DeepSeek, Doubao, OpenAI, Qwen, Ollama, 多模型)
+├── spring-ai-vector/ # 向量数据库 (MariaDB, Redis, Milvus)
+├── spring-ai-rag/ # RAG 检索增强生成
+├── spring-ai-mcp/ # MCP 协议 (客户端/服务端 + Nacos 集成)
+├── spring-ai-evaluation/ # 模型评估
+├── spring-ai-chat-memory/ # 对话记忆 (JDBC, 本地存储)
+├── spring-ai-tool-calling/ # 工具调用
+├── spring-ai-agent/ # Agent 模式 (工作流、评估优化、编排)
+└── spring-ai-observability/ # 可观测性 (指标、链路追踪)
+```
+
+## 配置说明
+
+每个子模块在 `src/main/resources/` 下有独立的配置文件 (application.properties 或 application.yml)。API 密钥通过环境变量注入:
+
+```properties
+spring.ai.deepseek.api-key=${spring.ai.deepseek.api-key}
+spring.ai.openai.api-key=${OPENAI_API_KEY}
+```
+
+敏感配置文件 (如 `application-deepseek.properties`) 已被 `.gitignore` 排除。
+
+## 运行示例
+
+1. 配置对应模块的 API 密钥环境变量
+2. 运行模块的 Application 主类 (如 `DsChatApplication`)
+3. 默认端口在各模块配置文件中定义 (通常 8080-8082)
+4. 通过 Actuator 端点监控: `http://localhost:/actuator`
+
+## 学习路径建议
+
+1. `spring-ai-chat` - 聊天应用开发 (必选起点)
+2. `spring-ai-tool-calling` - 工具调用能力
+3. `spring-ai-vector` - 向量数据库集成
+4. `spring-ai-mcp` / `spring-ai-rag` / `spring-ai-agent` - 高级应用模式
\ No newline at end of file
From 43a53554bd10895b1f87610ff1be846e2cc4ffa8 Mon Sep 17 00:00:00 2001
From: yl-dengxs <1195279222@qq.com>
Date: Sun, 21 Jun 2026 12:26:34 +0800
Subject: [PATCH 9/9] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B5=8B=E8=AF=95?=
=?UTF-8?q?=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ai/chat/ollama/util/TestUtils.java | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
create mode 100644 spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/util/TestUtils.java
diff --git a/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/util/TestUtils.java b/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/util/TestUtils.java
new file mode 100644
index 0000000..9146504
--- /dev/null
+++ b/spring-ai-chat/spring-ai-chat-ollama/src/main/java/com/glmapper/ai/chat/ollama/util/TestUtils.java
@@ -0,0 +1,18 @@
+package com.glmapper.ai.chat.ollama.util;
+
+/**
+ * @description:
+ * @author:dxs
+ * @date:2026/6/21 12:24
+ *
+ */
+public class TestUtils {
+ // 编写一个性能很差的方法
+ public static void slowMethod() {
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+}