UNPKG

knowledge-base-mcp

Version:

知识库MCP服务,基于Dify MCP协议的两步式知识库检索系统

57 lines (56 loc) 2.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createGetKnowledgeDocsTool = createGetKnowledgeDocsTool; /** * 获取知识文档工具 */ const mcp_1 = require("../types/mcp"); const dify_service_1 = require("../services/dify-service"); /** * 创建获取知识文档工具 */ function createGetKnowledgeDocsTool() { return { name: 'get-knowledge-docs', title: '获取知识文档', description: `获取库/工具/组件的知识库文档。您必须先调用 'resolve-knowledge-ids' 才能获得使用此工具所需的确切的知识库ID列表,除非用户在查询中明确提供知识库ID列表。 此工具严格依赖resolve-knowledge-ids的返回结果,确保检索的准确性和一致性。当用户未提供知识库ID列表且未先调用名称解析时,工具将拒绝执行并返回详细的错误指引。`, inputSchema: mcp_1.GetKnowledgeDocsSchema, handler: async (params) => { const { query, datasetIds } = params; if (!datasetIds || datasetIds.length === 0) { throw new Error('需要提供至少一个知识库ID'); } // 获取DifyRepository单例 const difyRepository = dify_service_1.DifyService.getInstance().getRepository(); // 使用找到的知识库ID进行文档检索 const retrieveResults = await difyRepository.retrieveDocuments(query, { datasetIds, topK: 10, }); if (!retrieveResults.records || retrieveResults.records.length === 0) { return { content: [ { type: "text", text: "未找到相关文档或该知识库的文档尚未完成。这可能是因为您使用了无效的知识库ID。要获取有效的知识库ID,请先使用'resolve-knowledge-ids'工具结合您想要检索文档的关键词。", _meta: {} } ] }; } const content = retrieveResults.records.map(record => { return `${record.segment.content}\n\n----------`; }).join('\n\n'); return { content: [ { type: "text", text: content, _meta: {} } ] }; }, }; }