add rag tool
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import { StructuredTool, ToolRunnableConfig } from '@langchain/core/tools';
|
||||
import { z } from 'zod';
|
||||
import { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager';
|
||||
import { getVectorStore } from './vector-store';
|
||||
|
||||
export class KnowledgeBaseTool extends StructuredTool {
|
||||
name = 'search_knowledge_base';
|
||||
description = 'Ищет информацию в базе знаний компании о процессах, оплатах, подаче заявок, правилах и документах УК. Используй этот инструмент для вопросов, требующих специфических знаний о компании.';
|
||||
|
||||
schema = z.object({
|
||||
query: z.string().describe('Поисковый запрос для поиска в базе знаний'),
|
||||
});
|
||||
|
||||
protected async _call(
|
||||
arg: z.infer<typeof this.schema>,
|
||||
runManager?: CallbackManagerForToolRun,
|
||||
parentConfig?: ToolRunnableConfig<Record<string, any>>
|
||||
): Promise<string> {
|
||||
try {
|
||||
const vectorStore = getVectorStore();
|
||||
const retriever = vectorStore.asRetriever({
|
||||
k: 5
|
||||
});
|
||||
|
||||
const relevantDocs = await retriever.getRelevantDocuments(arg.query);
|
||||
|
||||
if (!relevantDocs || relevantDocs.length === 0) {
|
||||
return 'В базе знаний не найдено информации по данному запросу. Возможно, стоит переформулировать вопрос или обратиться к специалисту.';
|
||||
}
|
||||
|
||||
const formattedDocs = relevantDocs.map((doc, index) => {
|
||||
return `Документ ${index + 1}:\n${doc.pageContent}\n`;
|
||||
}).join('\n---\n');
|
||||
|
||||
return `Найдена следующая информация в базе знаний компании:\n\n${formattedDocs}\n\nИспользуй эту информацию для ответа на вопрос пользователя.`;
|
||||
|
||||
} catch (error) {
|
||||
return 'Произошла ошибка при поиске в базе знаний. Попробуйте переформулировать запрос.';
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user