Skip to content

014-code/ai-agent-bac

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 

Repository files navigation

AI HerbMind - AI中医大师

项目简介

AI Agent BAC 是一个基于 Spring AI 和 Vue 3 构建的智能体应用平台,包含 AI 中医大师AI 超级智能体 两大核心功能模块。项目采用前后端分离架构,后端基于 Spring Boot 3.5.5 + Spring AI 框架,前端基于 Vue 3 + Vite 构建,提供完整的 AI 聊天机器人解决方案。

本项目集成了先进的 RAG(检索增强生成)技术,支持向量数据库存储与检索,接入通义千问大语言模型,同时兼容本地 Ollama 模型部署。项目还实现了 MCP(Model Context Protocol)协议支持,可灵活扩展多种工具调用能力。

平台特色在于将传统中医知识与现代 AI 技术深度融合,通过向量检索技术实现中医经典文献的智能问答,为用户提供专业的中医养生指导服务。

核心功能

AI 中医大师

AI 中医大师模块提供专业的中医养生咨询服务,基于预置的中医经典文献库,包括中医基础知识、体质辨识、经典方剂、常见问题解答等内容。该模块采用 RAG 技术,能够根据用户问题检索相关中医知识,生成专业、准确的中医养生建议。系统内置九种体质辨识算法,可根据用户描述的症状、生活习惯、形体特征等进行个性化体质判定,并提供针对性的调理方案。中医大师以和蔼可亲的专家形象出现,言语温和亲切,既具专业严谨性,又有长者关怀之情。

AI 超级智能体

AI 超级智能体模块是一个功能强大的通用 AI 助手,具备多种工具和功能扩展能力。该模块基于 ReAct(Reasoning and Acting)智能体架构,能够自主推理、决策并调用各类工具完成任务。系统集成了 MCP 协议支持,可动态加载和管理外部工具插件,实现与第三方系统的无缝对接。超级智能体支持流式响应输出,通过 SSE(Server-Sent Events)技术实现实时对话效果,为用户提供流畅的交互体验。

技术特性

项目具备多项先进技术特性。在对话能力方面,支持同步和异步两种调用模式,流式响应基于 SSE 技术实现实时输出,聊天历史通过文件存储机制实现持久化保存。在检索增强方面,采用 PgVector 向量数据库存储文档向量,使用 HNSW 索引算法优化检索性能,支持批量文档处理,单次最多可处理 10000 篇文档。在模型支持方面,默认使用通义千问 qwen-plus 模型,同时兼容本地 Ollama 部署的 gemma3:1b 模型,灵活适应不同部署场景需求。

技术架构

后端技术栈

后端基于 Spring Boot 3.5.5 构建,使用 Java 21 开发,主要依赖包括 Spring AI 框架、Spring WebFlux 响应式编程支持、PostgreSQL 数据库及 PgVector 向量扩展。项目采用模块化设计,主要包含以下几个核心包结构:com.mashang.bac.web.advisor 包提供增强型顾问组件,包括禁止词过滤等功能;com.mashang.bac.web.agent 包实现智能体核心逻辑,包含 BaseAgent、ReActAgent、ToolCallAgent 等实现;com.mashang.bac.web.app 包封装具体应用服务,如 Manus、TcmApp 等;com.mashang.bac.web.config 包提供配置类定义;com.mashang.bac.web.controller 包实现 REST 接口;com.mashang.bac.web.service 包包含业务逻辑实现。

前端技术栈采用 Vue 3.3.4 框架,配合 Vue Router 4.2.4 实现路由管理,状态管理使用 Pinia 2.1.6,网络请求基于 Axios 1.5.0,Markdown 渲染使用 Marked 16.2.1,构建工具为 Vite 4.4.9。项目目录结构清晰,src/api 存放接口配置,src/components 存放公共组件(如 MarkdownRenderer),src/router 存放路由定义,src/stores 存放状态管理,src/views 存放页面视图。

架构设计特点

系统采用分层架构设计,从上到下依次为 Controller 层负责接口入口、Service 层处理业务逻辑、Agent 层实现智能体决策、Invoke 层封装模型调用。数据流采用 RAG 流程:用户输入首先经过禁止词过滤,然后由 Agent 分析意图,决定是直接回答还是检索知识库;若需检索,则调用向量数据库进行相似度搜索,将检索结果与用户问题一起发送给大语言模型生成最终回答。响应式设计采用 SSE 技术实现流式输出,提升用户体验。

项目结构

ai-agent-bac/
├── ai-agent-font/                 # 前端项目目录
│   ├── src/
│   │   ├── api/                   # API接口配置
│   │   │   └── chat.js            # 聊天API封装
│   │   ├── components/            # 公共组件
│   │   │   └── MarkdownRenderer.vue  # Markdown渲染组件
│   │   ├── router/                # 路由配置
│   │   │   └── index.js           # 路由定义
│   │   ├── stores/                # 状态管理
│   │   │   └── chat.js            # 聊天状态管理
│   │   ├── views/                 # 页面视图
│   │   │   ├── Home.vue           # 主页(应用选择)
│   │   │   ├── ManusApp.vue       # AI超级智能体页面
│   │   │   └── TcmApp.vue         # AI中医大师页面
│   │   ├── App.vue                # 根组件
│   │   ├── main.js                # 应用入口
│   │   └── style.css              # 全局样式
│   ├── index.html                 # HTML模板
│   ├── package.json               # 项目依赖配置
│   ├── vite.config.js             # Vite构建配置
│   └── README.md                  # 前端项目说明
│
├── bac/                           # 后端项目目录
│   ├── src/main/
│   │   ├── java/com/mashang/bac/
│   │   │   ├── BacApplication.java           # 启动类
│   │   │   └── web/
│   │   │       ├── advisor/                  # 顾问组件
│   │   │       │   ├── MyAdvisor.java
│   │   │       │   └── ProhibitedWordAdvisor.java
│   │   │       ├── agent/                    # 智能体实现
│   │   │       │   ├── BaseAgent.java
│   │   │       │   ├── ReActAgent.java
│   │   │       │   └── ToolCallAgent.java
│   │   │       ├── app/                      # 应用服务
│   │   │       │   ├── Manus.java
│   │   │       │   └── TcmApp.java
│   │   │       ├── chatmemory/               # 聊天记忆管理
│   │   │       │   ├── FileBasedChatMemory.java
│   │   │       │   └── InMemoryChatMemory.java
│   │   │       ├── config/                   # 配置类
│   │   │       │   ├── ChatClientConfig.java
│   │   │       │   ├── CorsConfig.java
│   │   │       │   └── JsonConfig.java
│   │   │       ├── controller/               # 控制器
│   │   │       │   └── AiController.java
│   │   │       ├── dto/                      # 数据传输对象
│   │   │       │   └── DashScopeImageResponse.java
│   │   │       ├── exception/                # 异常处理
│   │   │       │   ├── BusinessException.java
│   │   │       │   ├── GlobalExceptionHandler.java
│   │   │       │   └── ThrowUtils.java
│   │   │       ├── invoke/                   # AI模型调用
│   │   │       │   ├── LangChainAiInvoke.java
│   │   │       │   ├── OllamaAiInvoke.java
│   │   │       │   └── SpringAiAiInvoke.java
│   │   │       ├── rag/                      # RAG相关
│   │   │       │   ├── MyKeywordEnricher.java
│   │   │       │   ├── MyTokenTextSplitter.java
│   │   │       │   └── TcmAppDocumentLoader.java
│   │   │       ├── service/                  # 业务服务
│   │   │       │   ├── BasicChatService.java
│   │   │       │   ├── DocumentSearchService.java
│   │   │       │   ├── QueryTransformService.java
│   │   │       │   └── RagChatService.java
│   │   │       └── utils/                    # 工具类
│   │   │           ├── QwenImage.java
│   │   │           ├── ResultTUtil.java
│   │   │           ├── RowsTUtil.java
│   │   │           └── ToolRegistration.java
│   │   └── resources/
│   │       ├── document/                     # 知识库文档
│   │       │   ├── 中医体质辨识.md
│   │       │   ├── 中医基础知识.md
│   │       │   ├── 中医常见问题解答.md
│   │       │   └── 中医经典方剂.md
│   │       ├── prohibited/                   # 禁止词库
│   │       │   └── prohibited-words.txt
│   │       ├── prompts/                      # 提示词模板
│   │       │   └── system-message.st
│   │       ├── application.yml               # 应用配置
│   │       └── mcp-servers.json              # MCP服务器配置
│   ├── image-search-mcp/                     # MCP图像搜索模块
│   ├── pom.xml                              # Maven配置
│   └── ...
│
└── README.md                               # 项目说明文档

环境要求

后端环境

后端项目需要以下运行环境支持:Java 21 或更高版本,Maven 3.6+ 构建工具,PostgreSQL 15+ 数据库且已安装 PgVector 扩展插件。数据库需要预先创建并配置好连接信息,包括数据库名称、用户名和密码。向量数据库插件 PgVector 的安装可参考其官方文档进行配置。若需要使用本地模型,还需安装 Ollama 服务并启动 gemma3:1b 模型。

前端环境

前端项目需要 Node.js 16+ 版本和 npm 7+ 包管理器。建议使用 pnpm 作为包管理器以获得更好的依赖管理体验。开发环境推荐使用 VS Code 或 IntelliJ IDEA 作为代码编辑器,并安装 Vue 3 语法支持插件。

快速开始

1. 克隆项目

首先克隆项目代码到本地:

git clone https://github.com/014-code/ai-agent-bac.git
cd ai-agent-bac

2. 后端部署

进入后端目录并构建项目:

cd bac

确保已正确配置 src/main/resources/application.yml 中的数据库连接信息和其他配置项。主要配置项包括:spring.datasource.url(数据库连接地址)、spring.datasource.username(数据库用户名)、spring.datasource.password(数据库密码)、spring.ai.dashscope.api-key(通义千问 API Key)、app.chat-memory.dir(聊天记忆存储目录)等。

配置完成后,执行 Maven 构建命令:

./mvnw clean package -DskipTests

或者在 Windows 环境下:

mvnw.cmd clean package -DskipTests

构建成功后,运行应用程序:

java -jar target/bac-0.0.1-SNAPSHOT.jar

后端服务启动后,默认监听 8101 端口,API 根路径为 /api。可通过访问 http://localhost:8101/api/swagger-ui.html 查看 API 文档(已集成 Knife4j Swagger UI)。

3. 前端部署

进入前端项目目录:

cd ai-agent-font

安装项目依赖:

npm install

或者使用 pnpm:

pnpm install

启动开发服务器:

npm run dev

开发服务器启动后,默认在 http://localhost:5173 端口运行。打开浏览器访问该地址即可使用系统。

构建生产版本:

npm run build

构建产物将生成在 dist 目录下,可部署到 Nginx 或其他 Web 服务器。

配置说明

后端配置(application.yml)

后端配置文件位于 bac/src/main/resources/application.yml,主要配置项说明如下:

数据库配置部分需配置 PostgreSQL 数据库连接信息,包括数据库地址、用户名和密码。系统使用 PgVector 向量数据库存储文档向量,支持 HNSW 索引类型,维度设置为 1536,距离类型为余弦相似度。

AI 模型配置部分需配置通义千问 API Key,模型名称默认为 qwen-plus。若使用本地 Ollama 模型,需配置 base-url(默认 http://localhost:11434)和模型名称(默认 gemma3:1b)。

MCP 配置部分定义外部工具服务器的连接方式,支持 stdio 和 SSE 两种模式。默认使用 stdio 模式连接本地 MCP 服务器,配置文件位于 mcp-servers.json

应用配置部分包括服务器端口(默认 8101)、Servlet 上下文路径(默认 /api)、聊天记忆存储目录等参数。

前端配置

前端项目主要配置位于 src/api/chat.js 文件中,包含 API 请求的基础地址和接口路径。Vite 构建配置位于项目根目录的 vite.config.js 文件中,可根据需要调整开发服务器端口、代理配置等参数。

API 接口

AI 聊天接口

系统提供以下核心接口用于 AI 对话功能:

同步聊天接口GET /api/ai/tcm_app/chat/sync,参数包括 message(用户消息)和 chatId(会话 ID),返回字符串类型的完整回答。

SSE 流式聊天接口GET /api/ai/tcm_app/chat/sse,参数包括 message 和 chatId,返回 ServerSentEvent 格式的流式响应,支持实时推送回答内容。

SSE 文本流接口GET /api/ai/tcm_app/chat/sset,参数包括 message 和 chatId,返回纯文本流格式的响应。

详细 API 文档可在启动后访问 http://localhost:8101/api/swagger-ui.html 查看。

知识库管理

系统内置中医知识库,包含以下文档文件,位于 bac/src/main/resources/document/ 目录:

中医体质辨识.md 文档详细介绍了九种体质的分类标准、特征描述和辨识方法,每种体质包含形体特征、心理特征、常见表现、发病倾向等维度的说明,并提供针对性的养生调理建议。

中医基础知识.md 文档涵盖阴阳学说、五行学说、脏腑学说等核心理论,是中医理论体系的基础内容,可用于回答用户关于中医基础概念的咨询。

中医常见问题解答.md 文档整理了常见的中医问题和专业解答,涵盖养生保健、疾病防治、饮食调理等方面的话题。

中医经典方剂.md 文档收录了经典中药方剂的组成、功效、主治和用法等信息,可用于推荐调理方案时参考。

知识库文档支持动态更新,修改文档内容后系统会自动重新加载向量索引。

常见问题

数据库连接失败

若启动时出现数据库连接错误,请检查 application.yml 中的数据库连接信息是否正确,包括数据库地址、端口、用户名和密码。确保 PostgreSQL 服务已启动,且已正确安装 PgVector 扩展插件。可使用以下 SQL 命令检查 PgVector 是否已安装:

SELECT * FROM pg_extension WHERE extname = 'vector';

若返回空结果,需先安装 PgVector 插件。

向量检索无结果

若知识库检索功能返回空结果,可能是向量索引未正确构建。请检查文档目录 document/ 下是否存在 Markdown 文件,以及文件编码是否为 UTF-8。确保向量数据库中有对应的向量数据,可通过数据库查询工具检查 vector_store 表中的数据记录。

前端请求超时

若前端页面出现请求超时提示,请检查后端服务是否正常运行,以及 API 地址配置是否正确。开发环境下可使用浏览器开发者工具查看网络请求详情,确认请求URL和响应状态码。

SSE 连接断开

SSE 流式连接可能因网络问题或服务端超时而断开。前端已实现自动重连机制,若需手动调整超时时间,可在 application.yml 中配置 ServerSentEvent 超时参数。

许可证

本项目基于 MIT 许可证开源,您可以自由使用、修改和分发本项目的代码,但需保留原始版权声明。

贡献指南

欢迎为本项目贡献代码或提出改进建议。您可以通过以下方式参与:提交 Bug 报告或功能建议、 Fork 本项目并提交 Pull Request、完善文档或翻译、分享使用经验。若您有任何问题或建议,请在项目 Issue 页面留言。

About

AI Agent BAC 是一个基于 Spring AI 和 Vue 3 构建的智能体应用平台,包含 AI 中医大师 和 AI 超级智能体 两大核心功能模块

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors