当前位置:首页 > 4. RAG(检索增强生成)知识库 >
4. RAG(检索增强生成)知识库
RAG(检索增强生成)。
除了将文档嵌入到向量数据库中之外,建立自己的知识库c;就是RAG。当用户提问时,首先从数据库中搜索相关信息,然后将相关信息拼接到用户的问题,然后让模型生成答案。
文档嵌入。
参考文件嵌入,将自己的文档插入数据库。
QuestionAnswerAdvisor。
QuestionAnswerAdvisor。
当用户提出问题时,可以,先向数据库查询相关文件,然后将相关文档拼接到用户的问题,然后让模型生成答案。那就是。RAG。
的实现了。
RAG。
实现过程:
query。
= 用户提问;template。
= 提示词模板。QuestionAnswerAdvisor。
在运行过程中更换模板中的占位符。question_answer_context。
,在向量数据库中替换文档,即。context=template.replace("question_answer_context",查询到的文档)。
。此时的。contextQuery。
=query。
+context。
;contextQuery。
发送给大型模型以获得答案。
正常的提问过程是。query。
=用户提问;query。
发送给大型模型以获得答案。
对比。RAG。
提问过程中可以发现提示词模板和向量数据库查询过程较多。
private。final。VectorStore。vectorStore。;/** * 从向量数据库中找到文档,并将查询文档作为上下文的答案。 * * @param prompt 用户的提问 * @return SSE流响应 */。@GetMapping。(。value。 ="chat/stream/database",produces。 =MediaType。.。TEXT_EVENT_STREAM_VALUE。)。public。Flux。<ServerSentEvent。<String。>>chatStreamWithDatabase。(。@RequestParam。String。prompt。)。{ 。// 1. 定义提示词模板question_answer_context将被在向量数据库中查询的文档取代。String。promptWithContext。 =""" 以下是上下文信息 --------------------- { question_answer_context} --------------------- 给定的上下文和提供的历史信息,而不是事先知识,回复用户的意见。如果答案不在上下文中,告诉用户你不能回答这个问题。如果答案不在上下文中,告诉用户你不能回答这个问题。 """;return。ChatClient。.。create。(。dashScopeAiChatModel。)。.。prompt。(。)。.。user。(。prompt。)。// 2. QuestionAnswerAdvisor将在运行过程中替换模板中的占位符`question_answer_context`,取而代之的是在向量数据库中找到的文档。此时的query=用户提问+替换提示词模板;.。advisors。(。new。QuestionAnswerAdvisor。(。vectorStore。,SearchRequest。.。defaults。(。)。,promptWithContext。)。)。.。stream。(。)。// 3. query发送给大模型以获得答案。.。content。(。)。.。map。(。chatResponse。 ->ServerSentEvent。.。builder。(。chatResponse。)。.。event。(。"message")。.。build。(。)。)。;}。