RAGMCP:基于Spring Boot和Groq的检索增强生成
一个强大的Spring Boot应用程序,使用Groq API(Llama 3)实现Retrieval-Augeded Generation(RAG)进行高速推理。该项目演示了如何构建一个具有文档摄取、矢量搜索和智能查询路由的代理RAG系统。
🚀 特性
- 文件摄入:通过API上传PDF和文本文档。
- 智能分块:自动将文档拆分为可管理的重叠块,以更好地保留上下文。
- 向量搜索:实现余弦相似性搜索以查找最相关的文档部分。
- 代理推理:使用内部代理将用户查询分类为以下类别:
- 总结:生成完整的文档摘要。 - 检索增强生成:使用检索到的上下文回答具体问题。 - 通用:处理没有文档上下文的会话查询。
- Groq集成:利用快速的Groq API(Llama 3 70b)进行推理。
- 内存矢量存储:用于嵌入的简单高效的内存存储(通过Docker提供PostgreSQL pgvector支持)。
🛠️ 技术栈
- 语言:Java 17
- 框架:弹簧靴3.4.2
- AI/LLM:Groq API(Llama 3.3 70b通用型)
- 文档解析:阿帕奇蒂卡
- 构建工具:Maven
- 容器化:Docker和Docker Compose(用于PostgreSQL/pgvector)
📋 先决条件
- Java 17或更高版本
- 梅文
- A. Groq API密钥
⚙️ 配置
应用程序被配置为使用敏感信息的环境变量。在运行之前,您需要设置以下变量:
| 变量 | 描述 | 默认值(如适用) |
|---|---|---|
GROQ_API_KEY | 必需.您的Groq API密钥。 | - |
DB_PASSWORD | 必需PostgreSQL数据库的密码。 | - |
DB_USERNAME | 数据库的用户名。 | ayon |
环境设置
您可以在终端中导出这些:
export GROQ_API_KEY="gsk_..."
export DB_PASSWORD="secret_password"🏃♂️ 如何跑步
- 克隆存储库:
git clone https://github.com/yourusername/ragmcp.git
cd ragmcp- 构建项目:
mvn clean install- 运行应用程序:
mvn spring-boot:run服务器将于启动 http://localhost:8084.
🔌 API终点
1.上传文档
上传要处理和索引的文件(PDF或文本)。
- 统一资源定位符:
POST /docs/upload - 身体:
multipart/form-data
- file:要上传的文件。
示例(cURL):
curl -F "file=@/path/to/document.pdf" http://localhost:8084/docs/upload2.提问
询问有关上传文档的问题。代理将决定是进行总结、搜索还是随意聊天。
- 统一资源定位符:
POST /ask - 身体:原始文本(问题)。
示例(cURL):
curl -X POST -H "Content-Type: text/plain" -d "What is the main conclusion of the document?" http://localhost:8084/ask3.列出文件
返回所有上传文档名称的列表。
- 统一资源定位符:
GET /docs
🏗️ 建筑
- 上传:文件由Apache Tika解析并分成块(1000个字符,200个重叠)。
- 嵌入:每个块都转换为向量嵌入(目前模拟/简化或使用外部服务,具体取决于
EmbeddingService实施)。 - 存储:块和嵌入存储在内存中
VectorDBService. - 询问:
- 这 AgentService 分析输入问题的意图。 - 如果 检索增强生成 被选中, ChunkService 对存储的嵌入执行余弦相似性搜索。 - 检索并输入前5个相关块 ReasoningService 构建一个提示。 - GroqService 向LLM发送最终提示以获取答案。
