feat: Add Expert Transformation Agent with multi-expert perspective system
- Backend: Add expert transformation router with 3-step SSE pipeline - Step 0: Generate diverse expert team (random domains) - Step 1: Each expert generates keywords for attributes - Step 2: Batch generate descriptions for expert keywords - Backend: Add simplified prompts for reliable JSON output - Frontend: Add TransformationPanel with React Flow visualization - Frontend: Add TransformationInputPanel for expert configuration - Expert count (2-8), keywords per expert (1-3) - Custom expert domains support - Frontend: Add expert keyword nodes with expert badges - Frontend: Improve description card layout (wider cards, more spacing) - Frontend: Add fallback for missing descriptions with visual indicators 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -131,3 +131,92 @@ class DAGRelationship(BaseModel):
|
||||
source: str # source attribute name
|
||||
target_category: str
|
||||
target: str # target attribute name
|
||||
|
||||
|
||||
# ===== Transformation Agent schemas =====
|
||||
|
||||
class TransformationRequest(BaseModel):
|
||||
"""Transformation Agent 請求"""
|
||||
query: str # 原始查詢 (e.g., "腳踏車")
|
||||
category: str # 類別名稱 (e.g., "功能")
|
||||
attributes: List[str] # 該類別的屬性列表
|
||||
model: Optional[str] = None
|
||||
temperature: Optional[float] = 0.7
|
||||
keyword_count: int = 3 # 要生成的新關鍵字數量
|
||||
|
||||
|
||||
class TransformationDescription(BaseModel):
|
||||
"""單一轉換描述"""
|
||||
keyword: str # 新關鍵字
|
||||
description: str # 與 query 結合的描述
|
||||
|
||||
|
||||
class TransformationCategoryResult(BaseModel):
|
||||
"""單一類別的轉換結果"""
|
||||
category: str
|
||||
original_attributes: List[str] # 原始屬性
|
||||
new_keywords: List[str] # 新生成的關鍵字
|
||||
descriptions: List[TransformationDescription]
|
||||
|
||||
|
||||
class TransformationDAGResult(BaseModel):
|
||||
"""完整 Transformation 結果"""
|
||||
query: str
|
||||
results: List[TransformationCategoryResult]
|
||||
|
||||
|
||||
# ===== Expert Transformation Agent schemas =====
|
||||
|
||||
class ExpertProfile(BaseModel):
|
||||
"""專家檔案"""
|
||||
id: str # e.g., "expert-0"
|
||||
name: str # e.g., "藥師"
|
||||
domain: str # e.g., "醫療與健康"
|
||||
perspective: Optional[str] = None # e.g., "從藥物與健康管理角度思考"
|
||||
|
||||
|
||||
class ExpertKeyword(BaseModel):
|
||||
"""專家視角生成的關鍵字"""
|
||||
keyword: str # 關鍵字本身
|
||||
expert_id: str # 哪個專家生成的
|
||||
expert_name: str # 專家名稱(冗餘,方便前端)
|
||||
source_attribute: str # 來自哪個原始屬性
|
||||
|
||||
|
||||
class ExpertTransformationDescription(BaseModel):
|
||||
"""專家關鍵字的描述"""
|
||||
keyword: str
|
||||
expert_id: str
|
||||
expert_name: str
|
||||
description: str
|
||||
|
||||
|
||||
class ExpertTransformationCategoryResult(BaseModel):
|
||||
"""單一類別的轉換結果(專家版)"""
|
||||
category: str
|
||||
original_attributes: List[str]
|
||||
expert_keywords: List[ExpertKeyword] # 所有專家生成的關鍵字
|
||||
descriptions: List[ExpertTransformationDescription]
|
||||
|
||||
|
||||
class ExpertTransformationDAGResult(BaseModel):
|
||||
"""完整轉換結果(專家版)"""
|
||||
query: str
|
||||
experts: List[ExpertProfile] # 使用的專家列表
|
||||
results: List[ExpertTransformationCategoryResult]
|
||||
|
||||
|
||||
class ExpertTransformationRequest(BaseModel):
|
||||
"""Expert Transformation Agent 請求"""
|
||||
query: str
|
||||
category: str
|
||||
attributes: List[str]
|
||||
|
||||
# Expert parameters
|
||||
expert_count: int = 3 # 專家數量 (2-8)
|
||||
keywords_per_expert: int = 1 # 每個專家為每個屬性生成幾個關鍵字 (1-3)
|
||||
custom_experts: Optional[List[str]] = None # 用戶指定專家 ["藥師", "工程師"]
|
||||
|
||||
# LLM parameters
|
||||
model: Optional[str] = None
|
||||
temperature: Optional[float] = 0.7
|
||||
|
||||
Reference in New Issue
Block a user