/** * RAG Grounding 服务使用示例 * * 本文件展示了如何在前端应用中使用 RAG Grounding 服务 * 包括基本查询、配置管理、错误处理和性能监控等功能 */ import { queryRagGrounding, testRagGroundingConnection, getRagGroundingConfig, getRagGroundingStats, ragGroundingService, } from '../apps/desktop/src/services/ragGroundingService'; import { RagGroundingQueryOptions, RagGroundingConfig, DEFAULT_RAG_GROUNDING_CONFIG, } from '../apps/desktop/src/types/ragGrounding'; /** * 示例 1: 基本查询 */ async function basicQueryExample() { console.log('=== 基本查询示例 ==='); try { const result = await queryRagGrounding("如何搭配牛仔裤?"); if (result.success && result.data) { console.log('查询成功!'); console.log('回答:', result.data.answer); console.log('响应时间:', result.data.response_time_ms, 'ms'); console.log('使用模型:', result.data.model_used); // 显示 Grounding 来源 if (result.data.grounding_metadata?.sources) { console.log('参考来源:'); result.data.grounding_metadata.sources.forEach((source, index) => { console.log(` ${index + 1}. ${source.title}`); console.log(` 片段: ${source.snippet}`); if (source.relevance_score) { console.log(` 相关性: ${(source.relevance_score * 100).toFixed(1)}%`); } }); } } else { console.error('查询失败:', result.error); } } catch (error) { console.error('系统错误:', error); } } /** * 示例 2: 带配置的查询 */ async function configuredQueryExample() { console.log('=== 配置查询示例 ==='); const customConfig: Partial = { temperature: 0.7, // 降低温度以获得更准确的回答 max_output_tokens: 4096, // 限制输出长度 system_prompt: "你是一个专业的服装搭配顾问,请提供实用的搭配建议。", }; const options: RagGroundingQueryOptions = { sessionId: "fashion-consultation-session", customConfig, includeMetadata: true, }; try { const result = await queryRagGrounding( "我有一条深蓝色牛仔裤,应该搭配什么颜色的上衣?", options ); if (result.success && result.data) { console.log('专业搭配建议:', result.data.answer); console.log('查询耗时:', result.totalTime, 'ms'); } } catch (error) { console.error('配置查询失败:', error); } } /** * 示例 3: 会话式对话 */ async function conversationalExample() { console.log('=== 会话式对话示例 ==='); const sessionId = `conversation-${Date.now()}`; const questions = [ "我想了解春季服装搭配的基本原则", "那么对于职场女性,有什么特别的建议吗?", "如果是参加正式晚宴,应该如何选择服装?" ]; for (let i = 0; i < questions.length; i++) { console.log(`\n问题 ${i + 1}: ${questions[i]}`); try { const result = await queryRagGrounding(questions[i], { sessionId, customConfig: { temperature: 0.8, system_prompt: "你是一个时尚顾问,请基于之前的对话上下文回答问题。" } }); if (result.success && result.data) { console.log(`回答 ${i + 1}:`, result.data.answer.substring(0, 200) + '...'); } } catch (error) { console.error(`问题 ${i + 1} 查询失败:`, error); } // 模拟用户思考时间 await new Promise(resolve => setTimeout(resolve, 1000)); } } /** * 示例 4: 服务状态检查 */ async function serviceStatusExample() { console.log('=== 服务状态检查示例 ==='); try { // 测试连接 const status = await testRagGroundingConnection(); console.log('服务状态:', status.available ? '✅ 可用' : '❌ 不可用'); console.log('最后检查时间:', status.lastChecked.toLocaleString()); if (status.connectionTest) { console.log('连接测试结果:', status.connectionTest); } // 获取配置信息 const config = await getRagGroundingConfig(); console.log('服务配置:'); console.log(' 基础URL:', config.base_url); console.log(' 模型名称:', config.model_name); console.log(' 超时时间:', config.timeout, '秒'); console.log(' 最大重试次数:', config.max_retries); console.log(' 支持区域:', config.regions.join(', ')); } catch (error) { console.error('状态检查失败:', error); } } /** * 示例 5: 性能监控 */ async function performanceMonitoringExample() { console.log('=== 性能监控示例 ==='); // 执行一些查询以生成统计数据 const testQueries = [ "什么是时尚?", "如何选择适合的颜色?", "职场着装有什么要求?" ]; console.log('执行测试查询...'); for (const query of testQueries) { try { await queryRagGrounding(query); } catch (error) { console.error('查询失败:', error); } } // 获取统计信息 const stats = getRagGroundingStats(); console.log('\n性能统计:'); console.log(' 总查询次数:', stats.totalQueries); console.log(' 成功查询次数:', stats.successfulQueries); console.log(' 失败查询次数:', stats.failedQueries); console.log(' 成功率:', `${(stats.successfulQueries / stats.totalQueries * 100).toFixed(2)}%`); console.log(' 平均响应时间:', `${stats.averageResponseTime.toFixed(0)}ms`); console.log(' 最快响应时间:', `${stats.fastestResponseTime}ms`); console.log(' 最慢响应时间:', `${stats.slowestResponseTime}ms`); if (stats.lastQueryTime) { console.log(' 最后查询时间:', stats.lastQueryTime.toLocaleString()); } } /** * 示例 6: 错误处理和重试 */ async function errorHandlingExample() { console.log('=== 错误处理示例 ==='); // 模拟可能失败的查询 const problematicQuery = ""; // 空查询可能导致错误 try { const result = await queryRagGrounding(problematicQuery); if (!result.success) { console.log('查询失败,错误信息:', result.error); // 根据错误类型进行不同处理 if (result.error?.includes('网络')) { console.log('检测到网络错误,建议检查网络连接'); } else if (result.error?.includes('认证')) { console.log('检测到认证错误,建议检查API密钥'); } else { console.log('其他错误,建议稍后重试'); } // 实现简单的重试机制 console.log('尝试重新查询...'); const retryResult = await queryRagGrounding("什么是时尚搭配?"); if (retryResult.success) { console.log('重试成功!'); } else { console.log('重试仍然失败:', retryResult.error); } } } catch (error) { console.error('系统级错误:', error); } } /** * 示例 7: 批量查询处理 */ async function batchQueryExample() { console.log('=== 批量查询示例 ==='); const queries = [ "春季流行色彩有哪些?", "如何搭配小白鞋?", "商务休闲风格的特点是什么?", "如何选择适合的包包?" ]; console.log(`开始处理 ${queries.length} 个查询...`); const results = await Promise.allSettled( queries.map(query => queryRagGrounding(query)) ); results.forEach((result, index) => { console.log(`\n查询 ${index + 1}: ${queries[index]}`); if (result.status === 'fulfilled' && result.value.success) { const data = result.value.data!; console.log('✅ 成功'); console.log('回答:', data.answer.substring(0, 100) + '...'); console.log('响应时间:', data.response_time_ms, 'ms'); } else { console.log('❌ 失败'); if (result.status === 'fulfilled') { console.log('错误:', result.value.error); } else { console.log('异常:', result.reason); } } }); } /** * 主函数 - 运行所有示例 */ async function runAllExamples() { console.log('🚀 RAG Grounding 服务使用示例\n'); try { await basicQueryExample(); await new Promise(resolve => setTimeout(resolve, 2000)); await configuredQueryExample(); await new Promise(resolve => setTimeout(resolve, 2000)); await conversationalExample(); await new Promise(resolve => setTimeout(resolve, 2000)); await serviceStatusExample(); await new Promise(resolve => setTimeout(resolve, 2000)); await performanceMonitoringExample(); await new Promise(resolve => setTimeout(resolve, 2000)); await errorHandlingExample(); await new Promise(resolve => setTimeout(resolve, 2000)); await batchQueryExample(); console.log('\n✅ 所有示例执行完成!'); } catch (error) { console.error('示例执行过程中发生错误:', error); } } // 导出示例函数供外部调用 export { basicQueryExample, configuredQueryExample, conversationalExample, serviceStatusExample, performanceMonitoringExample, errorHandlingExample, batchQueryExample, runAllExamples, }; // 如果直接运行此文件,执行所有示例 if (require.main === module) { runAllExamples(); }