当前位置: 首页 > news >正文

【AI】【Java后端】RAG 实战示例:SpringBoot + 向量检索 + LLM 问答系统

下面写一个 RAG 高级功能实战示例,用 SpringBoot + 向量检索 + LLM(大语言模型) 搭建一个问答系统。下面我会给出完整架构、核心代码示例,以及如何运行。


RAG 实战示例:SpringBoot + 向量检索 + LLM 问答系统

一、系统架构概览

用户请求 --> SpringBoot API --> 检索服务(向量数据库) --> LLM生成答案 --> 返回用户

组件说明

  1. SpringBoot

    • 提供 REST API 接口,接收用户问题。

  2. 向量检索服务

    • 使用 Milvus / Weaviate / FAISS 保存文档向量,实现高效语义检索。

  3. 大语言模型(LLM)

    • GPT-4、LLaMA 或开源模型,将检索结果与用户问题组合生成答案。


二、准备工作

  1. 知识库准备

    • 文档分段(每段 100-300 字)

    • 生成向量(Embedding)并存入向量数据库

  2. 依赖配置(Maven)

<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- HTTP Client for LLM API --><dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><version>5.2</version></dependency><!-- JSON parsing --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!-- 向量数据库 SDK, 以 Milvus 为例 --><dependency><groupId>io.milvus</groupId><artifactId>milvus-sdk-java</artifactId><version>2.2.11</version></dependency>
</dependencies>

三、核心代码示例

1. SpringBoot 控制器

@RestController
@RequestMapping("/api/qa")
public class QAController {@Autowiredprivate RAGService ragService;@PostMappingpublic ResponseEntity<String> askQuestion(@RequestBody Map<String, String> payload) {String question = payload.get("question");if (question == null || question.isEmpty()) {return ResponseEntity.badRequest().body("问题不能为空");}String answer = ragService.getAnswer(question);return ResponseEntity.ok(answer);}
}

2. RAG 服务层

@Service
public class RAGService {@Autowiredprivate VectorSearchService vectorSearchService;@Autowiredprivate LLMService llmService;public String getAnswer(String question) {// 1. 向量检索:找出最相关的文档片段List<String> contextDocs = vectorSearchService.search(question, 5);// 2. 生成最终答案String prompt = buildPrompt(question, contextDocs);return llmService.generateAnswer(prompt);}private String buildPrompt(String question, List<String> contextDocs) {StringBuilder sb = new StringBuilder();sb.append("请基于以下文档回答问题:\n");for (String doc : contextDocs) {sb.append(doc).append("\n");}sb.append("问题:").append(question).append("\n回答:");return sb.toString();}
}

3. 向量检索服务示例

@Service
public class VectorSearchService {// Milvus 客户端初始化private final MilvusClient client = new MilvusClient.Builder().withHost("localhost").withPort(19530).build();public List<String> search(String query, int topK) {// 1. 生成 query 向量(使用 OpenAI Embedding API 或其他模型)float[] queryVector = EmbeddingUtil.getEmbedding(query);// 2. 调用 Milvus 检索SearchParam searchParam = SearchParam.newBuilder().withCollectionName("docs").withTopK(topK).withVectors(Collections.singletonList(queryVector)).build();SearchResponse response = client.search(searchParam);// 3. 返回检索到的文档内容List<String> results = new ArrayList<>();response.getResults().forEach(hit -> results.add(hit.getDocumentText()));return results;}
}

4. LLM 调用服务示例

@Service
public class LLMService {private static final String OPENAI_API_KEY = "YOUR_API_KEY";public String generateAnswer(String prompt) {try {HttpPost post = new HttpPost("https://api.openai.com/v1/completions");post.setHeader("Authorization", "Bearer " + OPENAI_API_KEY);post.setHeader("Content-Type", "application/json");ObjectNode json = new ObjectMapper().createObjectNode();json.put("model", "gpt-4");json.put("prompt", prompt);json.put("max_tokens", 500);post.setEntity(new StringEntity(json.toString(), StandardCharsets.UTF_8));CloseableHttpClient client = HttpClients.createDefault();CloseableHttpResponse response = client.execute(post);String res = new BufferedReader(new InputStreamReader(response.getEntity().getContent())).lines().collect(Collectors.joining("\n"));JsonNode node = new ObjectMapper().readTree(res);return node.get("choices").get(0).get("text").asText();} catch (Exception e) {e.printStackTrace();return "生成答案失败";}}
}

四、运行与测试

  1. 启动 SpringBoot 项目

  2. POST 请求测试接口:

curl -X POST http://localhost:8080/api/qa \
-H "Content-Type: application/json" \
-d '{"question": "RAG 高级功能有哪些?"}'
  1. 返回示例:

请基于以下文档回答问题:
...
回答:RAG 高级功能包括多轮检索、动态更新知识库、上下文权重控制、多模态支持、可控生成、事实验证等。

五、进一步优化建议

  1. 缓存热点问题答案:提升 QPS,减少重复检索与生成。

  2. 多模态支持:结合 PDF、图片、表格向量化,实现更复杂问答。

  3. 链式推理:对复杂问题,进行多轮检索和生成。

  4. 生成结果评价:使用模型或规则对生成答案进行可信度评分。


这样就完成了一个 RAG 高级功能实战问答系统 的完整示例。

http://www.dtcms.com/a/398882.html

相关文章:

  • Google Pixel 10 vs iPhone 17
  • 2种方式从springbean中获取bean实例
  • iPhone 无线充电发展历史
  • 做康复医院网站推广普通话手抄报
  • Win版 Visual Studio Code配置C++环境
  • 住房与住房建设部网站中美最新军事新闻最新消息
  • uniapp 项目打包时提示未添加videoplayer模块
  • 深入理解Roo Code中的Temperature参数
  • 四、PyTorch训练分类器教程:小张的CIFAR-10实战之旅
  • Unity-序列帧动画
  • 【每日一问】容性负载和感性负载有什么区别?
  • 做汽车保养的网站上企业信息的网站
  • 4-3〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸文件包含漏洞-A
  • 郑州网站建设国奥大厦南昌营销网站建设
  • 微服务项目->在线oj系统(Java-Spring)----7.0
  • Ant Design Vue Vue3 table 表头筛选重置不清空Bug
  • 【踩坑记录】PyTorch 被误装 CPU 版本导致 CUDA 丢失的解决办法(Windows + Anaconda)
  • 5个问题,帮你选择合适的API测试工具
  • 唐山做网站公司费用郑州做网站哪家好熊掌号
  • 为什么齐次线性方程组的系数行列式为零时有非零解?
  • Cursor Agent模式下面在指定的conda虚拟环境中执行python脚本
  • 福州网站建设加推广怎样把网站打包做百度小程序
  • 元宇宙的工业应用:数字工厂与智能制造
  • C语言程序设计笔记—printf的使用
  • 【UE5】使用虚幻引擎编辑器创建游戏
  • Nginx 部署及配置
  • 服务器建设一个自己的网站奖券世界推广网站
  • 网络编程套接字之UDP
  • 亚马逊做网站发礼物换评价动漫制作专业能选择什么职业
  • 阿里云推出全球首个全模态AI模型Qwen3-Omni,实现文本、图像、音视频端到端处理