1. SpringAI RAG核心组件概述
在Spring生态系统中,SpringAI框架为开发者提供了强大的AI集成能力,其中检索增强生成(RAG)功能尤为突出。RAG通过结合信息检索和生成模型,有效解决了大模型幻觉问题,显著提升了回答的准确性和可靠性。
SpringAI的RAG实现基于模块化设计,主要包含以下核心组件:
- QuestionAnswerAdvisor:基础RAG实现,提供开箱即用的问答能力
- RetrievalAugmentationAdvisor:高级RAG框架,支持灵活组合各类处理模块
- 查询转换器(QueryTransformer):优化用户查询,提升检索效果
- 文档检索器(DocumentRetriever):从向量存储中获取相关文档
- 文档后处理器(DocumentPostProcessor):对检索结果进行过滤和优化
这种架构设计使得开发者可以根据具体需求,自由组合不同组件,实现从简单到复杂的各种RAG场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础使用:QuestionAnswerAdvisor
2.1 环境准备与初始化
首先需要添加SpringAI相关依赖:
xml复制<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-advisors-vector-store</artifactId>
</dependency>
初始化向量存储和ChatClient的示例代码:
java复制@Slf4j
@RestController
@RequestMapping("/rag")
public class ReadController {
private final VectorStore vectorStore;
private final ChatClient chatClient;
public ReadController(@Autowired OllamaEmbeddingModel ollamaEmbeddingModel,
@Autowired OllamaChatModel ollamaChatModel) {
this.vectorStore = SimpleVectorStore.builder(ollamaEmbeddingModel).build();
this.chatClient = ChatClient.builder(ollamaChatModel)
.defaultSystem("你是一个知识问答助手,请根据提供的文档进行回答。请输出中文")
.defaultAdvisors(
SimpleLoggerAdvisor.builder().build(),
QuestionAnswerAdvisor.builder(vectorStore)
.searchRequest(SearchRequest.builder()
.similarityThreshold(0.1d)
.topK(2)
.build())
.build())
.build();
// 初始化示例文档
Document doc1 = new Document(
"Spring AI 是 Spring 生态下的 AI 开发框架,支持 RAG、向量存储、大模型集成等功能。",
Map.of("category", "framework", "author", "Spring Team")
);
Document doc2 = new Document(
"检索增强生成(RAG)通过检索外部文档提升大模型回答的准确性,避免幻觉。",
Map.of("category", "technology", "author", "AI Researcher")
);
vectorStore.add(List.of(doc1, doc2));
}
}
2.2 基础问答实现
最简单的问答接口实现:
java复制@GetMapping("test1")
public String test1() {
return chatClient.prompt()
