feat: Add external expert sources (Wikidata SPARQL + ConceptNet API)

- Add expert_cache.py: TTL-based in-memory cache (1 hour default)
- Add expert_source_service.py: WikidataProvider and ConceptNetProvider
  - Wikidata SPARQL queries for occupations with Chinese labels
  - ConceptNet API queries for occupation-related concepts
  - Random selection from cached pool
- Update schemas.py: Add ExpertSource enum (llm/wikidata/conceptnet)
- Update ExpertTransformationRequest with expert_source and expert_language
- Update router: Conditionally use external sources with LLM fallback
  - New SSE events: expert_source, expert_fallback
- Update frontend types with ExpertSource

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-04 11:42:48 +08:00
parent baea210109
commit 43785db595
5 changed files with 524 additions and 22 deletions

View File

@@ -230,6 +230,8 @@ export interface ExpertTransformationDAGResult {
results: ExpertTransformationCategoryResult[];
}
export type ExpertSource = 'llm' | 'wikidata' | 'conceptnet';
export interface ExpertTransformationRequest {
query: string;
category: string;
@@ -237,6 +239,8 @@ export interface ExpertTransformationRequest {
expert_count: number; // 2-8
keywords_per_expert: number; // 1-3
custom_experts?: string[]; // ["藥師", "工程師"]
expert_source?: ExpertSource; // 專家來源 (default: 'llm')
expert_language?: string; // 外部來源語言 (default: 'zh')
model?: string;
temperature?: number;
}