# AiCodeHelper **Repository Path**: czy0821/aigc ## Basic Information - **Project Name**: AiCodeHelper - **Description**: 实现一个AI编程小助手(实践使用 LangChain4j 完成),可以帮助用户答疑解惑,并且给出编程学习的指导建议,比如: 编程学习路线 项目学习建议 程序员求职指南 程序员常见面试题 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-08 - **Last Updated**: 2025-12-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI 编程学习小助手 - 后端服务 ## 1. 项目简介 AI 编程学习小助手是一个智能问答后端服务,旨在为编程学习者提供个性化、高质量的指导和解答。项目利用大语言模型(LLM)的能力,并结合**检索增强生成(RAG)**技术,从本地知识库中检索相关信息,为用户生成精准、可靠的回答。 与直接调用通用大模型不同,本项目通过 RAG 技术,将模型的回答范围限定在预设的知识库内(例如:特定编程语言的学习路线、知名博主的求职建议等),从而有效避免了模型“幻觉”问题,保证了回答的专业性和时效性。 **应用场景**: - **编程入门指导**: 提供清晰的编程语言学习路线。 - **项目实战建议**: 根据知识库内容,给出具体的项目学习方法。 - **求职面试准备**: 解答常见的程序员面试题,分享求职经验。 **最终效果**: ![实践结果:AI小助理](./images/AI-CODER.png) ## 2. 技术选型 | 技术领域 | 技术/框架 | 说明 | | --- | --- | --- | | **核心框架** | Spring Boot 3 | 用于快速构建独立的、生产级的 Spring 应用。 | | **AI 框架** | Langchain4j | 简化大语言模型应用的开发,提供服务编排、RAG 等能力。 | | **大语言模型** | 阿里云通义千问 (Dashscope/Qwen) | 作为项目核心的智能大脑。 | | **Web 框架** | Spring WebFlux | 采用响应式编程模型,实现与客户端的流式通信(SSE)。 | | **数据持久化** | InMemoryEmbeddingStore | 用于在内存中存储文档向量,实现快速检索。 | | **构建工具** | Maven | 项目管理和依赖构建工具。 | | **开发语言** | Java 21 | | ## 3. 核心功能 - **智能问答与对话**: - 支持与 AI 进行多轮对话,通过 `@MemoryId` 管理对话历史,实现有上下文的交流。 - **流式响应 (Streaming)**: - 基于 Spring WebFlux 和 Server-Sent Events (SSE),将 AI 生成的回答以流的形式实时推送给前端,显著提升了用户体验。 - **检索增强生成 (RAG)**: - **动态知识库**: 项目启动时会自动加载 `src/main/resources/docs/` 目录下的 Markdown 文档作为知识库。 - **文档处理**: 对文档进行切割、向量化,并存入向量存储中。 - **智能检索**: 当用户提问时,系统会先从知识库中检索最相关的内容片段,再将其与用户问题一同提交给大模型,生成更精准的回答。 - **安全防护**: - 内置了简单的输入护栏(Input Guardrail),用于过滤不安全或不相关的内容。 ## 4. 系统架构 本项目遵循经典的分层架构,逻辑清晰,易于扩展。 **核心处理流程**: 1. **请求入口**: 客户端通过 HTTP 请求访问 `AiController`,该控制器采用 SSE 协议与客户端建立长连接。 2. **服务编排**: `AiController` 调用 `AiCodeHelperService`。这是一个使用 Langchain4j 注解定义的 AI 服务接口,负责定义 AI 的行为和提示词(Prompt)。 3. **RAG 流程**: - 如果启用了 RAG,`ContentRetriever` 会介入。 - 它将用户问题向量化,并在 `EmbeddingStore`(向量数据库)中进行相似度搜索,找出最相关的文档片段。 4. **与 LLM 交互**: `AiCodeHelperService` 将系统提示、检索到的知识片段和用户问题整合后,发送给大语言模型(通义千问)。 5. **响应回传**: 大模型以流的形式返回结果,数据流经 `AiCodeHelperService` 和 `AiController`,最终通过 SSE 连接实时传输给客户端。 ## 5. 快速开始 **环境准备**: - Java 21 - Maven 3.8+ **本地运行**: 1. 克隆项目到本地: ```bash git clone cd ai-code-helper-backend ``` 2. 配置大模型 API Key: - 复制 `src/main/resources/application.yml` 并重命名为 `application-local.yml`。 - 在 `application-local.yml` 中填入你的阿里云 Dashscope API Key。 ```yaml langchain4j: dashscope: chat-model: api-key: "sk-your-api-key" embedding-model: api-key: "sk-your-api-key" ``` 3. 运行项目: - 通过 IDE 直接运行 `AiCodeHelperBackendApplication` 的 `main` 方法。 - 或使用 Maven 命令: ```bash ./mvnw spring-boot:run ``` 4. 服务启动后,API 将在 `http://localhost:8081/api` 上可用。 ## 6. 项目亮点 (面试重点) - **RAG 的完整实践**: - 本项目完整实现了 RAG 的核心流程,包括**文档加载、文本分割、向量化、存储和检索**。这不仅解决了通用大模型知识陈旧和“幻觉”的问题,还展示了将外部知识与 LLM 结合的工程能力。 - **可扩展性**: `RagConfig.java` 中的设计是模块化的,可以轻松替换 `DocumentLoader` 来接入不同的数据源(如网页、PDF、数据库),或更换 `EmbeddingStore` 来对接专业的向量数据库(如 Chroma, Milvus)。 - **响应式流式 API**: - 采用 Spring WebFlux 和 Reactor 来构建异步、非阻塞的流式 API,这是现代高并发服务的一个重要特征。 - 相比传统的“一次性”返回,流式 API 提供了**更快的首字节响应时间**和**更优的用户体验**,尤其适合 AI 对话场景。 - **面向接口的 AI 服务设计**: - 通过 Langchain4j 的声明式注解(如 `@SystemMessage`, `@UserMessage`),将 AI 的能力封装在 `AiCodeHelperService` 接口中。这种设计使得 AI 逻辑与业务代码分离,**代码更清晰,易于测试和维护**。 - 当需要调整 AI 的行为时,通常只需修改 `system-prompt.txt` 或服务接口的注解,而无需改动核心业务逻辑。 - **多轮对话记忆管理**: - 利用 Langchain4j 提供的 `@MemoryId` 注解,以极低的成本实现了多轮对话的上下文记忆功能,展示了对会话管理和状态保持的理解。