mixvideo-v2/examples/rag-optimization-usage.ts

223 lines
7.5 KiB
TypeScript

/**
* RAG检索优化使用示例
* 展示如何使用新的RAG配置优化功能
*/
import { RagGroundingConfig, DEFAULT_RAG_GROUNDING_CONFIG } from '../apps/desktop/src/types/ragGrounding';
import { RagConfigOptimizer } from '../apps/desktop/src/utils/ragConfigOptimizer';
import { queryRagGrounding } from '../apps/desktop/src/services/ragGroundingService';
/**
* 示例 1: 使用预定义优化场景
*/
async function scenarioBasedOptimization() {
console.log('=== 场景化优化示例 ===');
const baseConfig = DEFAULT_RAG_GROUNDING_CONFIG;
// 高召回率场景 - 适用于需要更多参考信息的查询
const highRecallConfig = RagConfigOptimizer.applyScenario(
baseConfig,
RagConfigOptimizer.SCENARIOS.HIGH_RECALL
);
console.log('高召回率配置:', {
max_retrieval_results: highRecallConfig.max_retrieval_results,
relevance_threshold: highRecallConfig.relevance_threshold,
include_summary: highRecallConfig.include_summary
});
const result = await queryRagGrounding(
"请详细介绍各种牛仔裤的搭配方案",
{ customConfig: highRecallConfig }
);
if (result.success) {
console.log('检索到更多相关信息:', result.data?.grounding_metadata?.sources?.length);
}
}
/**
* 示例 2: 自动优化配置
*/
async function autoOptimization() {
console.log('=== 自动优化示例 ===');
const queries = [
"牛仔裤配什么上衣?", // 简单查询 -> 快速响应模式
"请详细分析不同场合下牛仔裤的搭配技巧,包括颜色、款式、配饰等方面", // 复杂查询 -> 深度搜索模式
"有哪些适合春季的牛仔裤搭配方案?", // 列举查询 -> 高召回率模式
"比较直筒牛仔裤和紧身牛仔裤的搭配区别" // 比较查询 -> 高召回率模式
];
for (const query of queries) {
const optimizedConfig = RagConfigOptimizer.autoOptimize(query, DEFAULT_RAG_GROUNDING_CONFIG);
console.log(`查询: "${query}"`);
console.log('自动优化配置:', {
max_retrieval_results: optimizedConfig.max_retrieval_results,
relevance_threshold: optimizedConfig.relevance_threshold
});
const result = await queryRagGrounding(query, { customConfig: optimizedConfig });
if (result.success) {
console.log(`检索结果数量: ${result.data?.grounding_metadata?.sources?.length || 0}`);
console.log(`响应时间: ${result.totalTime}ms\n`);
}
}
}
/**
* 示例 3: 基于反馈的动态调整
*/
async function feedbackBasedOptimization() {
console.log('=== 反馈优化示例 ===');
let currentConfig = DEFAULT_RAG_GROUNDING_CONFIG;
const query = "夏季牛仔裤搭配建议";
// 第一次查询
let result = await queryRagGrounding(query, { customConfig: currentConfig });
console.log('初始查询结果数量:', result.data?.grounding_metadata?.sources?.length || 0);
// 模拟用户反馈:结果太少
currentConfig = RagConfigOptimizer.adjustBasedOnFeedback(currentConfig, 'too_few_results');
console.log('调整后配置 (结果太少):', {
max_retrieval_results: currentConfig.max_retrieval_results,
relevance_threshold: currentConfig.relevance_threshold
});
// 第二次查询
result = await queryRagGrounding(query, { customConfig: currentConfig });
console.log('调整后查询结果数量:', result.data?.grounding_metadata?.sources?.length || 0);
// 模拟用户反馈:结果不相关
currentConfig = RagConfigOptimizer.adjustBasedOnFeedback(currentConfig, 'irrelevant_results');
console.log('再次调整后配置 (结果不相关):', {
max_retrieval_results: currentConfig.max_retrieval_results,
relevance_threshold: currentConfig.relevance_threshold
});
// 第三次查询
result = await queryRagGrounding(query, { customConfig: currentConfig });
console.log('最终查询结果数量:', result.data?.grounding_metadata?.sources?.length || 0);
}
/**
* 示例 4: 领域特定过滤器
*/
async function domainSpecificFiltering() {
console.log('=== 领域过滤示例 ===');
const baseConfig = DEFAULT_RAG_GROUNDING_CONFIG;
// 应用时尚领域过滤器
const fashionConfig: RagGroundingConfig = {
...baseConfig,
search_filter: RagConfigOptimizer.createDomainFilter('fashion'),
max_retrieval_results: 25,
relevance_threshold: 0.4
};
console.log('时尚领域配置:', {
search_filter: fashionConfig.search_filter,
max_retrieval_results: fashionConfig.max_retrieval_results
});
const result = await queryRagGrounding(
"职场穿搭建议",
{ customConfig: fashionConfig }
);
if (result.success) {
console.log('领域过滤后的结果数量:', result.data?.grounding_metadata?.sources?.length || 0);
}
}
/**
* 示例 5: 性能对比测试
*/
async function performanceComparison() {
console.log('=== 性能对比示例 ===');
const query = "牛仔裤搭配技巧";
const configs = [
{ name: '默认配置', config: DEFAULT_RAG_GROUNDING_CONFIG },
{ name: '快速响应', config: RagConfigOptimizer.applyScenario(DEFAULT_RAG_GROUNDING_CONFIG, RagConfigOptimizer.SCENARIOS.FAST_RESPONSE) },
{ name: '高召回率', config: RagConfigOptimizer.applyScenario(DEFAULT_RAG_GROUNDING_CONFIG, RagConfigOptimizer.SCENARIOS.HIGH_RECALL) },
{ name: '深度搜索', config: RagConfigOptimizer.applyScenario(DEFAULT_RAG_GROUNDING_CONFIG, RagConfigOptimizer.SCENARIOS.DEEP_SEARCH) }
];
for (const { name, config } of configs) {
const startTime = Date.now();
const result = await queryRagGrounding(query, { customConfig: config });
const endTime = Date.now();
console.log(`${name}:`, {
检索数量: result.data?.grounding_metadata?.sources?.length || 0,
: `${endTime - startTime}ms`,
: {
max_results: config.max_retrieval_results,
threshold: config.relevance_threshold
}
});
}
}
/**
* 示例 6: 配置解释和建议
*/
function configurationGuidance() {
console.log('=== 配置指导示例 ===');
const scenarios = Object.entries(RagConfigOptimizer.SCENARIOS);
scenarios.forEach(([key, scenario]) => {
const config = RagConfigOptimizer.applyScenario(DEFAULT_RAG_GROUNDING_CONFIG, scenario);
const explanation = RagConfigOptimizer.getConfigExplanation(config);
console.log(`${scenario.name}:`);
console.log(` 描述: ${scenario.description}`);
console.log(` 配置说明: ${explanation}`);
console.log(` 适用场景: ${getUseCaseExamples(key)}\n`);
});
}
function getUseCaseExamples(scenarioKey: string): string {
const examples = {
HIGH_RECALL: "复杂查询、研究分析、需要全面信息的场景",
HIGH_PRECISION: "精确匹配、专业咨询、质量优于数量的场景",
BALANCED: "日常对话、一般性查询、大多数应用场景",
FAST_RESPONSE: "实时聊天、快速问答、移动端应用",
DEEP_SEARCH: "学术研究、详细分析、专业报告生成"
};
return examples[scenarioKey as keyof typeof examples] || "通用场景";
}
// 运行示例
async function runAllExamples() {
try {
await scenarioBasedOptimization();
await autoOptimization();
await feedbackBasedOptimization();
await domainSpecificFiltering();
await performanceComparison();
configurationGuidance();
} catch (error) {
console.error('示例运行失败:', error);
}
}
// 导出示例函数
export {
scenarioBasedOptimization,
autoOptimization,
feedbackBasedOptimization,
domainSpecificFiltering,
performanceComparison,
configurationGuidance,
runAllExamples
};