SpringAI-第四期:RAG知识库基础
RAG的基础内容,说实话我现在才理解什么是RAG,能说出流程,但是写代码还是不会,主要是我没有Java的基础
3,390字约 12分钟
感谢阅读 ✨
RAG的基础内容,说实话我现在才理解什么是RAG,能说出流程,但是写代码还是不会,主要是我没有Java的基础
Embedding模型将文本转成高维向量
生成的向量存储到向量数据库,支持相似性搜素
相似度搜索:余弦相似度、欧氏距离等
条件搜索
Rank:TopK

提示词组装、上下文融合 等
写了一个documentloader类:
就写了一个LoveAppVectorStoreConfig的类:
这里其实就一个调用,把上面的VectorStore拿出来用QuestionAnswerAdvisor()实现一下就行。
然而我在用的时候其实出现了报错,可能还是版本的原因,一些包出现了冲突,然后用claudecode修改了一下,cc帮我改成了一个更复杂的写法,但是感觉应该功能是一样的。
偷懒了,不想学这个了。。。。
package com.example.aiagent.rag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.document.Document;
import org.springframework.ai.reader.markdown.MarkdownDocumentReader;
import org.springframework.ai.reader.markdown.config.MarkdownDocumentReaderConfig;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Component
@Slf4j
public class LoveAppDocumentLoader {
package com.example.aiagent.rag;
import jakarta.annotation.Resource;
import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.context.annotation.Bean;
import java.util.List;
@org.springframework.context.annotation.Configuration
public class
LoveAppVectorStoreConfig {
@Resource
private LoveAppDocumentLoader loveAppDocumentLoader;
@Bean
VectorStore loveAppVectorStore(EmbeddingModel dashscopeEmbeddingModel) {
SimpleVectorStore simpleVectorStore = SimpleVectorStore.builder(dashscopeEmbeddingModel)
.build();
// 加载文档
List<Document> documents = loveAppDocumentLoader.loadMarkdowns();
simpleVectorStore.add(documents);
return simpleVectorStore;
}
}
//RAG+本地知识库的问答方式
public String doChatWithRag(String message, String chatID){
ChatResponse chatResponse = chatClient.prompt()
.user(message)
.advisors(spec -> spec.param(ChatMemory.CONVERSATION_ID, chatID))
//开启日志
.advisors(new MyLoggerAdvisor())
//启用RAG------------------------------------------------------
.advisors(RetrievalAugmentationAdvisor.builder()
.documentRetriever(VectorStoreDocumentRetriever.builder()
.vectorStore(loveAppVectorStore)
.build())
.build())
//------------------------------------------------------------
.call()
.chatResponse();
String content = chatResponse.getResult().getOutput().getText();
log.info("content:{}", content);
return content;
}