/** * Dify客户端测试脚本 * * 用于测试Dify API的连接和基本功能 */ import { DifyClient } from '../clients/DifyClient.js'; // 创建客户端实例 const client = new DifyClient(); // 测试知识库ID(测试时会创建) let testDatasetId: string; let testDocumentId: string; /** * 测试1:创建知识库 */ async function testCreateDataset() { console.log('\n========== 测试1:创建知识库 =========='); try { const result = await client.createDataset({ name: '测试知识库 - ' + Date.now(), description: '这是一个测试知识库,用于验证API功能', indexing_technique: 'high_quality', }); testDatasetId = result.id; console.log('✅ 创建成功'); console.log('知识库ID:', result.id); console.log('知识库名称:', result.name); console.log('创建时间:', new Date(result.created_at * 1000).toLocaleString()); } catch (error: any) { console.error('❌ 创建失败:', error.message); throw error; } } /** * 测试2:获取知识库列表 */ async function testGetDatasets() { console.log('\n========== 测试2:获取知识库列表 =========='); try { const result = await client.getDatasets(1, 10); console.log('✅ 获取成功'); console.log(`找到 ${result.total} 个知识库`); if (result.data.length > 0) { console.log('前3个知识库:'); result.data.slice(0, 3).forEach((dataset, index) => { console.log(` ${index + 1}. ${dataset.name} (ID: ${dataset.id})`); console.log(` - 文档数量: ${dataset.document_count}`); console.log(` - 创建时间: ${new Date(dataset.created_at * 1000).toLocaleString()}`); }); } } catch (error: any) { console.error('❌ 获取失败:', error.message); throw error; } } /** * 测试3:获取知识库详情 */ async function testGetDataset() { console.log('\n========== 测试3:获取知识库详情 =========='); try { const result = await client.getDataset(testDatasetId); console.log('✅ 获取成功'); console.log('知识库名称:', result.name); console.log('描述:', result.description); console.log('文档数量:', result.document_count); console.log('索引技术:', result.indexing_technique); } catch (error: any) { console.error('❌ 获取失败:', error.message); throw error; } } /** * 测试4:上传文件并创建文档 */ async function testUploadDocument() { console.log('\n========== 测试4:上传文档 =========='); try { // 创建一个测试文本文件 const testContent = ` # 临床研究测试文档 ## 研究背景 这是一个用于测试Dify API的示例文档。 ## 研究目标 验证以下功能: 1. 文件上传功能 2. 文档索引功能 3. 知识库检索功能 ## 研究方法 使用自动化测试脚本验证API的各项功能。 ## 预期结果 所有测试应该通过,并返回正确的数据。 `.trim(); const testBuffer = Buffer.from(testContent, 'utf-8'); const filename = 'test-document.txt'; console.log('正在上传文档...'); const document = await client.uploadAndProcessDocument( testDatasetId, testBuffer, filename ); testDocumentId = document.id; console.log('✅ 上传成功'); console.log('文档ID:', document.id); console.log('文档名称:', document.name); console.log('处理状态:', document.indexing_status); console.log('字符数:', document.word_count); console.log('Token数:', document.tokens); } catch (error: any) { console.error('❌ 上传失败:', error.message); throw error; } } /** * 测试5:获取文档列表 */ async function testGetDocuments() { console.log('\n========== 测试5:获取文档列表 =========='); try { const result = await client.getDocuments(testDatasetId, 1, 10); console.log('✅ 获取成功'); console.log(`找到 ${result.total} 个文档`); if (result.data.length > 0) { console.log('文档列表:'); result.data.forEach((doc, index) => { console.log(` ${index + 1}. ${doc.name}`); console.log(` - 状态: ${doc.indexing_status}`); console.log(` - 字符数: ${doc.word_count}`); console.log(` - Token数: ${doc.tokens}`); }); } } catch (error: any) { console.error('❌ 获取失败:', error.message); throw error; } } /** * 测试6:知识库检索 */ async function testRetrieveKnowledge() { console.log('\n========== 测试6:知识库检索 =========='); try { const result = await client.retrieveKnowledge( testDatasetId, '研究目标是什么?', { retrieval_model: { search_method: 'semantic_search', top_k: 3, }, } ); console.log('✅ 检索成功'); console.log('查询:', result.query.content); console.log(`找到 ${result.records.length} 条结果`); result.records.forEach((record, index) => { console.log(`\n结果 ${index + 1}:`); console.log(` 文档: ${record.document_name}`); console.log(` 相似度得分: ${record.score.toFixed(4)}`); console.log(` 内容片段: ${record.content.substring(0, 100)}...`); }); } catch (error: any) { console.error('❌ 检索失败:', error.message); // 不抛出错误,因为可能是文档还未完全索引 } } /** * 测试7:删除文档 */ async function testDeleteDocument() { console.log('\n========== 测试7:删除文档 =========='); try { await client.deleteDocument(testDatasetId, testDocumentId); console.log('✅ 删除文档成功'); } catch (error: any) { console.error('❌ 删除文档失败:', error.message); // 不抛出错误,继续后续测试 } } /** * 测试8:删除知识库 */ async function testDeleteDataset() { console.log('\n========== 测试8:删除知识库 =========='); try { await client.deleteDataset(testDatasetId); console.log('✅ 删除知识库成功'); } catch (error: any) { console.error('❌ 删除知识库失败:', error.message); throw error; } } /** * 运行所有测试 */ async function runAllTests() { console.log('========================================'); console.log(' Dify API 客户端测试'); console.log('========================================'); console.log('开始时间:', new Date().toLocaleString()); try { await testCreateDataset(); await testGetDatasets(); await testGetDataset(); await testUploadDocument(); await testGetDocuments(); // 等待5秒让文档完全索引 console.log('\n等待5秒让文档完全索引...'); await new Promise((resolve) => setTimeout(resolve, 5000)); await testRetrieveKnowledge(); await testDeleteDocument(); await testDeleteDataset(); console.log('\n========================================'); console.log('✅ 所有测试通过!'); console.log('========================================'); console.log('结束时间:', new Date().toLocaleString()); } catch (error: any) { console.log('\n========================================'); console.log('❌ 测试失败!'); console.log('========================================'); console.error('错误信息:', error.message); if (error.code) { console.error('错误代码:', error.code); } if (error.status) { console.error('HTTP状态码:', error.status); } process.exit(1); } } // 执行测试 runAllTests();