检索增强生成工具

一个基于Spring Boot和Groq API的检索增强生成(RAG)应用,支持文档上传、向量搜索和智能查询路由。

  • by AYON-ARYAN
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 AYON-ARYAN/LLM-Service-MCP-

使用说明

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)

📋 先决条件

⚙️ 配置

应用程序被配置为使用敏感信息的环境变量。在运行之前,您需要设置以下变量:

变量 描述 默认值(如适用)
GROQ_API_KEY 必需.您的Groq API密钥。 -
DB_PASSWORD 必需PostgreSQL数据库的密码。 -
DB_USERNAME 数据库的用户名。 ayon

环境设置

您可以在终端中导出这些:

export GROQ_API_KEY="gsk_..."
export DB_PASSWORD="secret_password"

🏃‍♂️ 如何跑步

  1. 克隆存储库:

    git clone https://github.com/yourusername/ragmcp.git
    cd ragmcp
    
  2. 构建项目:

    mvn clean install
    
  3. 运行应用程序:

    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/upload

2.提问

询问有关上传文档的问题。代理将决定是进行总结、搜索还是随意聊天。

  • 统一资源定位符: POST /ask
  • 身体:原始文本(问题)。

示例(cURL):

curl -X POST -H "Content-Type: text/plain" -d "What is the main conclusion of the document?" http://localhost:8084/ask

3.列出文件

返回所有上传文档名称的列表。

  • 统一资源定位符: GET /docs

🏗️ 建筑

  1. 上传:文件由Apache Tika解析并分成块(1000个字符,200个重叠)。
  2. 嵌入:每个块都转换为向量嵌入(目前模拟/简化或使用外部服务,具体取决于 EmbeddingService 实施)。
  3. 存储:块和嵌入存储在内存中 VectorDBService.
  4. 询问:
    • 这 AgentService 分析输入问题的意图。
    • 如果 检索增强生成 被选中, ChunkService 对存储的嵌入执行余弦相似性搜索。
    • 检索并输入前5个相关块 ReasoningService 构建一个提示。
    • GroqService 向LLM发送最终提示以获取答案。