UNPKG

shenju-enterprise-search-mcp

Version:
123 lines (103 loc) 3.96 kB
/** * 企业资料检索客户端 - 对接企业知识库API */ const axios = require('axios'); class SearchClient { constructor(apiKey, appId, baseUrl = 'https://api.enterprise-search.example.com/v1') { this.apiKey = apiKey; this.appId = appId; this.baseUrl = baseUrl; console.log(`初始化企业检索客户端, baseUrl: ${baseUrl}, appId: ${appId ? '已设置' : '未设置'}`); this.client = axios.create({ baseURL: this.baseUrl, headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${this.apiKey}` }, // 增加超时设置 timeout: 30000 }); } /** * 执行文档搜索 * @param {string} query 检索查询 * @param {Object} options 额外选项 * @returns {Promise<Object>} API响应 */ async documentSearch(query, options = {}) { try { const filter = options.filter || ''; const limit = options.limit || 10; const includeContent = options.includeContent || false; console.log(`准备调用企业资料检索API, 查询: ${query}, 过滤器: ${filter}`); const requestBody = { query, filter, limit, include_content: includeContent }; // 如果设置了appId,添加到请求中 if (this.appId) { requestBody.app_id = this.appId; } console.log(`发送检索请求: ${this.baseUrl}/search`); const response = await this.client.post('/search', requestBody); console.log(`检索API调用成功, 状态码: ${response.status}, 结果数: ${response.data.results?.length || 0}`); return response.data; } catch (error) { console.error('企业检索API调用失败:', error.message); if (error.response) { console.error('错误状态码:', error.response.status); console.error('错误详情:', JSON.stringify(error.response.data)); console.error('请求URL:', error.config?.url); console.error('请求头:', JSON.stringify(error.config?.headers, (key, value) => { // 隐藏敏感信息 if (key === 'Authorization') return 'Bearer ***'; return value; })); console.error('请求数据:', JSON.stringify(error.config?.data)); throw new Error(`API错误: ${error.response.status} - ${JSON.stringify(error.response.data)}`); } else if (error.request) { console.error('请求已发送但未收到响应', error.request); throw new Error('无法连接到企业检索API服务器'); } else { console.error('请求配置错误:', error.message); throw new Error(`请求配置错误: ${error.message}`); } } } /** * 执行问答检索 * @param {string} question 问题内容 * @param {Object} options 额外选项 * @returns {Promise<Object>} API响应 */ async documentQA(question, options = {}) { try { const filter = options.filter || ''; const includeSources = options.includeSources || true; console.log(`准备调用企业问答API, 问题: ${question}`); const requestBody = { question, filter, include_sources: includeSources }; // 添加appId (如果有) if (this.appId) { requestBody.app_id = this.appId; } console.log(`发送问答请求: ${this.baseUrl}/qa`); const response = await this.client.post('/qa', requestBody); console.log(`问答API调用成功, 状态码: ${response.status}`); return response.data; } catch (error) { console.error('企业问答API调用失败:', error.message); if (error.response) { console.error('错误状态码:', error.response.status); console.error('错误详情:', JSON.stringify(error.response.data || '无详细信息')); } throw error; } } } module.exports = SearchClient;