spring-ai-cli-chatbot
tzolov/spring-ai-cli-chatbot加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这个场景:你是一名应急管理部门的分析员,正在追踪飓风"米尔顿"(Milton)的最新动态。你打开终端,输入一条命令,瞬间与一个经过专业文档训练的 AI 助手展开对话——它能引用权威气象资料作答,还能记住你刚才问过的所有问题。这种体验,正是 spring-ai-cli-chatbot 要演示的核心能力。
这是一个由 Spring AI 官方贡献者 Christian Tzolov 构建的示例项目,用于演示如何将 RAG(检索增强生成) 与 对话记忆(Chat Memory) 结合,在纯命令行环境中实现一个"知识型 AI 助手"。整个项目只有两个 Java 文件,代码量极轻,却完整覆盖了从 PDF 文档解析、向量化存储、语义检索到 LLM 对话的全链路。
Spring AI 是 Spring 生态针对 AI 应用开发推出的框架,旨在将 AI 能力与 Spring 开发者熟悉的编程模型相融合。它不是"又一个调用 OpenAI API 的封装",而是在更高层次上抽象了 AI 应用中的常见模式——向量存储(VectorStore)、聊天记忆(ChatMemory)、文档读取器(DocumentReader)、文本分割器(TextSplitter)等核心组件均有统一抽象,支持在 Ollama、OpenAI、Anthropic Claude、Azure OpenAI 等多模型之间无缝切换。
对于已经在使用 Spring Boot 的团队来说,Spring AI 的吸引力在于:不需要学习新的应用框架,直接沿用 Spring 的依赖注入和配置管理方式,就能接入 AI 能力。本项目就是这一理念的最佳注脚——代码几乎完全是标准的 Spring Boot 写法,唯一"AI 相关"的逻辑就是几行配置和组装。
作者 Christian Tzolov 同时维护着 Spring AI 官方多个模块(如 spring-ai-starter-model-transformers、spring-ai-pdf-document-reader),是 Spring AI 项目的活跃贡献者。项目本身也反映了 Spring AI 框架的演进方向:版本号 2.0.0-SNAPSHOT,使用 Java 21 的虚拟线程(Virtual Threads),展示了前沿技术栈的结合。
项目通过三个阶段完成 RAG 流程:
阶段一:PDF 文档加载与分块
项目在启动时(通过构造函数注入)自动加载 resources/rag/ 目录下的 PDF 文件。使用 PagePdfDocumentReader 逐页读取 PDF 内容,再通过 TokenTextSplitter 按 token 数量进行切分——这是比固定字符数切分更智能的做法,能保证语义单元的完整性。代码中预置了三份维基百科文档(飓风米尔顿、大西洋飓风、热带气旋),演示时可以灵活开关。
阶段二:向量存储
切分后的文本块通过 Spring AI 的 VectorStore 接口存入 Chroma 向量数据库(通过 docker-compose 一键启动)。项目采用 ONNX 格式的 Transformers 嵌入模型(mxbai-embed-large),完全在本地运行,无需依赖外部 API 调用 embedding 接口——这对需要私有化部署或控制成本的场景非常有价值。
阶段三:语义检索 + LLM 生成
用户提问时,RAG 流程由 QuestionAnswerAdvisor 自动编排:先将问题 embedding,在 Chroma 中检索 Top-3 相关文本块,然后将这些块作为上下文注入 LLM 提示词,由 LLM 生成最终回答。整个过程对应用层透明,开发者只需调用 chatClient.prompt().call() 即可。
项目通过 MessageChatMemoryAdvisor 包装 MessageWindowChatMemory,在客户端侧维护一个滑动窗口(最大 500 条消息)。这意味着用户在同一个会话中的多轮对话都能被 LLM "记住",不会出现"你刚才问什么来着"的断层感。相比向量数据库的 RAG 检索,对话记忆更侧重短期上下文,两者结合提供了完整的会话体验。
配置文件中同时保留了 OpenAI(gpt-5-mini-2025-08-07)、Anthropic Claude(claude-sonnet-4-5-20250929)和 Ollama(llama3.2)的配置,通过注释切换即可更换底层 LLM。这种灵活性对于评估不同模型在特定任务(如气象知识问答)上的表现非常有帮助。
mvnw 包装器,无需预装 MavenOPENAI_API_KEY 或 ANTHROPIC_API_KEY(如使用 Ollama 则无需 API Key)# 1. 克隆项目
git clone https://github.com/tzolov/spring-ai-cli-chatbot
cd spring-ai-cli-chatbot
# 2. 设置 API Key(使用 OpenAI 或 Anthropic)
export OPENAI_API_KEY=sk-xxxx
# 或使用 Anthropic
export ANTHROPIC_API_KEY=sk-ant-xxxx
# 3. 启动(docker-compose 自动拉起 Chroma)
./mvnw spring-boot:run
启动后,Spring Boot 的 Docker Compose 支持(spring-boot-docker-compose)会自动拉起 Chroma 容器,无需手动管理。应用进入交互式循环,终端显示彩色提示符,交互体验清晰。
无 Web UI。这是一个纯命令行工具,面向的是开发者调试和技术演示场景。没有 Streamlit、Gradio 或 FastAPI 的 Web 界面。如需在生产环境对外提供服务,需要自行包装 REST API 或接入现有 Web 项目。
Application.java + Config.java)不超过 100 行核心逻辑,可读性极高application.properties 管理,无需修改代码即可切换配置pom.xml 中的 <license /> 和 <developer /> 节点为空,无法确认项目采用何种许可证,商用前需联系作者确认src/test 目录,缺乏单元测试和集成测试,生产引入风险不可控本项目虽然只是一个示例,但折射出 Spring AI 框架的核心价值:让企业级 Java 开发者以最低学习成本接入 AI 能力。在金融、医疗、法律等强监管行业,大量后台系统基于 Spring Boot 构建,如何将 AI 能力安全、合规地集成进去,是一个真实痛点。Spring AI 通过统一抽象,让向量存储和 LLM 调用变得像 JPA 操作数据库一样自然。
从技术趋势看,项目使用 Spring Boot 4.0(4.0.1)、Java 21 虚拟线程和 ONNX 本地 embedding,代表了 2025 年 AI 应用开发的几个方向:本地化 embedding(隐私合规)、多模型灵活切换(成本优化)、轻量化示例(降低上手门槛)。即使你不打算直接使用这个项目,它的代码结构也是理解 Spring AI 编程模型的绝佳起点。
| 维度 | 内容 |
|---|---|
| GitHub | tzolov/spring-ai-cli-chatbot |
| 语言/框架 | Java 21 / Spring Boot 4.0 / Spring AI 2.0 |
| 核心功能 | RAG(PDF → Chroma)+ 对话记忆 + 多 LLM 支持 |
| 部署方式 | Maven 启动(CLI),Docker Compose 支持 Chroma |
| License | 未明确标注,需联系作者确认 |
| 维护状态 | 活跃(2025 年仍有提交),Spring AI 官方贡献者维护 |
| 适用人群 | Spring 开发者、AI 应用入门者、RAG 原理学习者 |