creative_studio/backend/app/models/skill_integration.py
2026-01-25 19:27:44 +08:00

316 lines
8.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
完整的数据模型和 API实现 Skills 与 LLM 的深度结合
"""
from pydantic import BaseModel, Field
from typing import List, Optional, Dict, Any, Union
from datetime import datetime
from enum import Enum
# ============================================================================
# Skill 与 LLM 结合的核心模型
# ============================================================================
class SkillTriggerType(str, Enum):
"""Skill 触发类型"""
# LLM 根据 description 自动选择
AUTO = "auto"
# 用户/Agent 显式指定
EXPLICIT = "explicit"
# Agent 工作流固定使用
FIXED = "fixed"
class SkillMetadata(BaseModel):
"""Skill 元数据(用于触发和选择)"""
name: str
# 关键description 用于 LLM 理解何时使用此 Skill
description: str # 应包含:功能、触发条件、使用场景
category: str
tags: List[str]
trigger_type: SkillTriggerType
# 可选的触发关键词(用于精确匹配)
keywords: List[str] = Field(default_factory=list)
# 适用场景(用于 AI 匹配)
use_cases: List[str] = Field(default_factory=list)
# 依赖的其他 Skills
dependencies: List[str] = Field(default_factory=list)
# 权重(用于多 Skill 选择时的排序)
priority: float = 1.0
class SkillReferenceFile(BaseModel):
"""参考文件定义"""
filename: str
filetype: str # md, txt, json, yaml, py, sh
content: str
description: Optional[str] = None
size_bytes: int
class SkillScript(BaseModel):
"""脚本定义"""
filename: str
language: str # python, bash, javascript
code: str
description: str
parameters: Dict[str, Any] = Field(default_factory=dict)
class SkillAsset(BaseModel):
"""资产定义(模板、图标等)"""
filename: str
filetype: str
content: str # base64 或文本
description: str
class SkillStructure(BaseModel):
"""完整的 Skill 结构(符合 skill-creator 标准)"""
# SKILL.md
frontmatter: Dict[str, Any] # YAML frontmatter: name, description
behavior_guide: str # Markdown 内容
# 可选资源
scripts: List[SkillScript] = Field(default_factory=list)
references: List[SkillReferenceFile] = Field(default_factory=list)
assets: List[SkillAsset] = Field(default_factory=list)
# ============================================================================
# AI 生成 Skill 的完整流程
# ============================================================================
class SkillGenerationRequest(BaseModel):
"""
AI 生成 Skill 请求
按照 skill-creator 的完整流程:
Step 1: Understanding - 理解需求
Step 2: Planning - 规划资源
Step 3: Initialize - 生成结构
Step 4: Edit - 用户调整
Step 5: Package - 打包
"""
# Step 1: 用户意图
user_intent: str = Field(
...,
description="用户想要创建的 Skill 的意图描述"
)
use_cases: List[str] = Field(
default_factory=list,
description="具体用例示例,如 ['用户说:帮我写一段古风对话', '用户说:审核这段内容的一致性']"
)
# 可选约束
preferred_category: Optional[str] = None
preferred_tags: Optional[List[str]] = None
trigger_type: SkillTriggerType = SkillTriggerType.AUTO
# 生成选项
include_scripts: bool = False # 是否生成脚本
include_references: bool = False # 是否生成参考文档模板
include_assets: bool = False # 是否生成资产模板
temperature: float = Field(0.7, ge=0, le=1)
class SkillAnalysis(BaseModel):
"""Step 1: 需求分析结果"""
skill_type: str # 如 "对话创作", "内容审核", "文件处理"
core_functionality: str
intended_users: List[str]
key_features: List[str]
suggested_complexity: str # "simple", "medium", "complex"
class SkillPlanning(BaseModel):
"""Step 2: 资源规划结果"""
needs_scripts: bool
suggested_scripts: List[Dict[str, str]] # [{filename, purpose}]
needs_references: bool
suggested_references: List[Dict[str, str]]
needs_assets: bool
suggested_assets: List[Dict[str, str]]
# Degree of freedom 建议
suggested_freedom: str # "high", "medium", "low"
class SkillGenerationResponse(BaseModel):
"""
AI 生成 Skill 的完整响应
包含完整的 skill-creator 流程结果
"""
# Step 1: 分析结果
analysis: SkillAnalysis
# Step 2: 规划结果
planning: SkillPlanning
# Step 3: 完整的 Skill 结构
skill_structure: SkillStructure
# 元数据建议
suggested_metadata: SkillMetadata
# 实现建议
implementation_steps: List[str]
best_practices: List[str]
# 验证结果
validation_passed: bool
validation_warnings: List[str] = Field(default_factory=list)
validation_errors: List[str] = Field(default_factory=list)
# ============================================================================
# Skill 调整/优化请求
# ============================================================================
class SkillRefinementRequest(BaseModel):
"""对已生成的 Skill 进行调整"""
skill_id: str
current_content: str
# 调整需求
refinement_type: str # "optimize", "extend", "fix", "adapt"
refinement_description: str
# 上下文
user_feedback: Optional[str] = None
use_case_update: Optional[str] = None
temperature: float = Field(0.7, ge=0, le=1)
class SkillRefinementResponse(BaseModel):
"""调整后的 Skill"""
updated_structure: SkillStructure
changes_made: List[str]
improvement_suggestions: List[str]
# ============================================================================
# Skill 选择和路由LLM 与 Skills 结合)
# ============================================================================
class SkillSelectionCriteria(BaseModel):
"""Skill 选择条件"""
# 用户意图
user_intent: str
# 上下文信息
context: Dict[str, Any] = Field(default_factory=dict)
# 约束条件
required_category: Optional[str] = None
required_tags: Optional[List[str]] = None
exclude_skills: List[str] = Field(default_factory=list)
# 选择模式
selection_mode: str = "auto" # "auto", "fixed", "hybrid"
class SkillSelectionResult(BaseModel):
"""Skill 选择结果"""
selected_skills: List[SkillMetadata]
selection_reason: str
confidence_scores: Dict[str, float]
alternative_skills: List[SkillMetadata] = Field(default_factory=list)
class SkillExecutionContext(BaseModel):
"""Skill 执行上下文"""
skill_id: str
skill_metadata: SkillMetadata
execution_mode: str # "integrated", "standalone", "chained"
# 上下文数据
user_input: str
context_data: Dict[str, Any] = Field(default_factory=dict)
# 参考文件(已加载)
loaded_references: Dict[str, str] = Field(default_factory=dict)
# 执行参数
temperature: float = 0.7
max_tokens: Optional[int] = None
class SkillExecutionResponse(BaseModel):
"""Skill 执行结果"""
skill_id: str
execution_success: bool
result: str
# 使用的信息
references_used: List[str]
scripts_executed: List[str]
# 反馈信息
execution_time_ms: int
tokens_used: Dict[str, int]
# 建议
improvement_suggestions: List[str] = Field(default_factory=list)
# ============================================================================
# Agent 工作流中的 Skill 配置
# ============================================================================
class AgentWorkflowStep(BaseModel):
"""Agent 工作流步骤"""
step_name: str
step_number: int
# Skill 配置
skill_id: Optional[str] = None # None 表示不使用 Skill
skill_mode: str = "required" # "required", "optional", "conditional"
# 条件(用于 conditional 模式)
condition: Optional[str] = None
# 回退行为
fallback_skill_id: Optional[str] = None
fallback_behavior: Optional[str] = None
class AgentWorkflowConfig(BaseModel):
"""Agent 工作流配置(定义哪些步骤使用哪些 Skills"""
agent_id: str
agent_name: str
# 工作流步骤
steps: List[AgentWorkflowStep]
# 全局配置
default_temperature: float = 0.7
allow_skill_substitution: bool = False
require_all_skills: bool = True
# ============================================================================
# 批量 Skill 操作
# ============================================================================
class BatchSkillOperation(BaseModel):
"""批量 Skill 操作"""
operation: str # "validate", "package", "deploy"
skill_ids: List[str]
options: Dict[str, Any] = Field(default_factory=dict)
class BatchSkillOperationResponse(BaseModel):
"""批量操作结果"""
operation: str
total_skills: int
successful_skills: List[str]
failed_skills: List[Dict[str, str]]
summary: Dict[str, Any]