检索增强生成(RAG)是一种有用的技术,可以克服大型语言模型在长篇内容、事实准确性和上下文感知方面的局限性。
Spring AI通过提供模块化架构来支持RAG,该架构允许您自己构建自定义RAG流,或使用Advisor API使用现成的RAG流。
在概念部分了解有关检索增强生成的更多信息。
Advisors
Spring AI使用Advisor API为常见RAG流提供了开箱即用的支持。
要使用QuestionAnswerAdvisor或RetrievalAugmentationAdvisor,您需要将spring-ai advisers向量存储依赖项添加到您的项目中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-advisors-vector-store</artifactId>
</dependency>
QuestionAnswerAdvisor
矢量数据库存储AI模型不知道的数据。当用户问题被发送到AI模型时,QuestionAnswerAdvisor会查询向量数据库中与用户问题相关的文档。
向量数据库的响应被附加到用户文本中,为AI模型生成响应提供上下文。
假设您已经将数据加载到VectorStore中,您可以通过向ChatClient提供QuestionAnswerAdvisor的实例来执行检索增强生成(RAG)。
ChatResponse response = ChatClient.builder(chatModel)
.build().prompt()
.advisors(new QuestionAnswerAdvisor(vectorStore))
.user(userText)
.call()
.chatResponse();
在此示例中,QuestionAnswerAdvisor将对矢量数据库中的所有文档执行相似性搜索。为了限制搜索的文档类型,SearchRequest采用了一个类似SQL的过滤器表达式,该表达式可在所有VectorStores中移植。
此筛选器表达式可以在创建QuestionAnswerAdvisor时配置,因此将始终应用于所有ChatClient请求,也可以在运行时为每个请求提供。
以下是如何创建阈值为0.8的QuestionAnswerAdvisor实例并返回前6个结果。
var qaAdvisor = QuestionAnswerAdvisor.builder(vectorStore)
.searchRequest(SearchRequest.builder().similarityThreshold(0.8d).topK(6).build())
.build();
Dynamic Filter Expressions
在运行时使用filter_expression顾问上下文参数更新SearchRequest筛选器表达式:
ChatClient chatClient = ChatClient.builder(chatModel)
.defaultAdvisors(QuestionAnswerAdvisor.builder(vectorStore)
.searchRequest(SearchRequest.builder().build())
.build())
.build();
// Update filter expression at runtime
String content = this.chatClient.prompt()
.user("Please answer my question XYZ")
.advisors(a -> a.param(QuestionAnswerAdvisor.FILTER_EXPRESSION, "type == 'Spring'"))
.call()
.content();
FILTER_EXPRESSION参数允许您根据提供的表达式动态过滤搜索结果。
Custom Template
QuestionAnswerAdvisor使用默认模板用检索到的文档来增强用户问题。您可以通过.PromptTemplate()构建器方法提供自己的PromptTemplate对象来自定义此行为。
此处提供的PromptTemplate自定义顾问如何将检索到的上下文与用户查询合并。这与在ChatClient本身上配置TemplateRenderer(使用.templateRender())不同,后者会影响顾问运行前初始用户/系统提示内容的呈现。有关客户端级模板呈现的更多详细信息,请参阅ChatClient提示模板。
自定义PromptTemplate可以使用任何TemplateRenderer实现(默认情况下,它使用基于StringTemplate引擎的S

最低0.47元/天 解锁文章
1155

被折叠的 条评论
为什么被折叠?



