208 lines
6.1 KiB
Python
208 lines
6.1 KiB
Python
"""
|
||
Skill 数据模型
|
||
|
||
Skill 是平台的核心概念:可配置的行为指导单元
|
||
"""
|
||
from pydantic import BaseModel, Field
|
||
from typing import Optional, Dict, Any, List
|
||
from datetime import datetime
|
||
|
||
|
||
class SkillTool(BaseModel):
|
||
"""Skill 工具定义(仅内置 Skill 支持)"""
|
||
name: str
|
||
description: str
|
||
script: str # 脚本文件名
|
||
parameters: Dict[str, Dict[str, Any]] = Field(default_factory=dict)
|
||
|
||
|
||
class SkillConfig(BaseModel):
|
||
"""Skill 配置"""
|
||
# 风格预设
|
||
preset: Optional[str] = None
|
||
|
||
# 可调节参数
|
||
parameters: Dict[str, Dict[str, Any]] = Field(default_factory=dict)
|
||
|
||
# 权重配置
|
||
weights: Optional[Dict[str, float]] = None
|
||
|
||
|
||
class Skill(BaseModel):
|
||
"""Skill 模型"""
|
||
id: str
|
||
name: str
|
||
version: str = "1.0.0"
|
||
author: str = "未知"
|
||
|
||
# 类型:builtin 或 user
|
||
type: str = "user"
|
||
|
||
# 核心内容 - 行为指导
|
||
behavior_guide: str = "" # 直接影响 Agent 行为
|
||
|
||
# 配置
|
||
config: SkillConfig = Field(default_factory=SkillConfig)
|
||
|
||
# 提示词模板(可选)
|
||
template: Optional[str] = None
|
||
|
||
# 工具定义(仅内置 Skill)
|
||
tools: Optional[List[SkillTool]] = None
|
||
|
||
# 元数据
|
||
category: str = "通用"
|
||
tags: List[str] = Field(default_factory=list)
|
||
visibility: str = "private" # private 或 public
|
||
|
||
# 文件路径(用于内部追踪)
|
||
file_path: Optional[str] = None
|
||
|
||
# 时间戳
|
||
created_at: Optional[datetime] = None
|
||
updated_at: Optional[datetime] = None
|
||
|
||
|
||
class SkillCreate(BaseModel):
|
||
"""创建 Skill 请求"""
|
||
id: Optional[str] = None # ID 可选,不传则自动生成
|
||
name: str
|
||
content: str # Markdown 格式的完整 Skill 内容
|
||
category: str = "通用"
|
||
tags: List[str] = Field(default_factory=list)
|
||
|
||
|
||
class SkillUpdate(BaseModel):
|
||
"""更新 Skill 请求"""
|
||
name: Optional[str] = None
|
||
content: Optional[str] = None
|
||
category: Optional[str] = None
|
||
tags: Optional[List[str]] = None
|
||
|
||
|
||
class SkillConfigUpdate(BaseModel):
|
||
"""更新 Skill 配置请求"""
|
||
preset: Optional[str] = None
|
||
parameters: Optional[Dict[str, Dict[str, Any]]] = None
|
||
weights: Optional[Dict[str, float]] = None
|
||
|
||
|
||
class SkillTestRequest(BaseModel):
|
||
"""测试 Skill 请求"""
|
||
test_input: str
|
||
context: Optional[Dict[str, Any]] = None
|
||
temperature: float = 0.7
|
||
|
||
|
||
class SkillTestResponse(BaseModel):
|
||
"""测试 Skill 响应"""
|
||
skill_id: str
|
||
skill_name: str
|
||
response: str
|
||
usage: Optional[Dict[str, int]] = None
|
||
|
||
|
||
class SkillGenerateRequest(BaseModel):
|
||
"""AI 生成 Skill 请求"""
|
||
description: str = Field(..., description="用户对想要创建的 Skill 的描述")
|
||
category: Optional[str] = None
|
||
tags: Optional[List[str]] = None
|
||
temperature: float = Field(0.7, ge=0, le=1)
|
||
|
||
|
||
class SkillGenerateResponse(BaseModel):
|
||
"""AI 生成 Skill 响应"""
|
||
suggested_id: str
|
||
suggested_name: str
|
||
skill_content: str
|
||
category: str
|
||
suggested_tags: List[str]
|
||
explanation: str # AI 对生成的 Skill 的说明
|
||
|
||
|
||
# ============================================================================
|
||
# 新增:文档驱动的 Skill 生成模型
|
||
# ============================================================================
|
||
|
||
class DocFetchRequest(BaseModel):
|
||
"""文档获取请求"""
|
||
url: str = Field(..., description="文档 URL")
|
||
selector: Optional[str] = Field(None, description="CSS 选择器(可选)")
|
||
|
||
|
||
class GitHubDocFetchRequest(BaseModel):
|
||
"""GitHub 文档获取请求"""
|
||
repo_url: str = Field(..., description="GitHub 仓库 URL")
|
||
docs_path: str = Field("README.md", description="文档路径")
|
||
|
||
|
||
class SkillGenerateFromDocsRequest(BaseModel):
|
||
"""基于文档生成 Skill 请求"""
|
||
skill_name: str = Field(..., description="Skill 名称")
|
||
description: Optional[str] = Field(None, description="Skill 描述(可选)")
|
||
category: Optional[str] = Field(None, description="分类")
|
||
tags: Optional[List[str]] = Field(None, description="标签")
|
||
# 文档来源
|
||
doc_urls: List[str] = Field(default_factory=list, description="文档 URL 列表")
|
||
github_repos: List[GitHubDocFetchRequest] = Field(default_factory=list, description="GitHub 仓库列表")
|
||
uploaded_references: Dict[str, str] = Field(default_factory=dict, description="用户上传的 references {文件名: 内容}")
|
||
# 生成选项
|
||
temperature: float = Field(0.7, ge=0, le=1, description="LLM 温度")
|
||
include_doc_summary: bool = Field(True, description="是否包含文档摘要")
|
||
|
||
|
||
class SkillGenerateFromDocsResponse(BaseModel):
|
||
"""基于文档生成 Skill 响应"""
|
||
success: bool
|
||
preview_id: str = Field(..., description="预览 ID(用于后续保存)")
|
||
skill_content: str = Field(..., description="生成的 SKILL.md 内容")
|
||
skill_name: str
|
||
suggested_id: str
|
||
category: str
|
||
tags: List[str]
|
||
doc_summary: Optional[str] = Field(None, description="文档摘要")
|
||
references_count: int = Field(0, description="生成的 reference 文件数")
|
||
explanation: str
|
||
|
||
|
||
class SkillPreviewRequest(BaseModel):
|
||
"""Skill 预览请求"""
|
||
skill_content: str
|
||
skill_name: str
|
||
category: Optional[str] = None
|
||
tags: Optional[List[str]] = None
|
||
|
||
|
||
class SkillPreviewResponse(BaseModel):
|
||
"""Skill 预览响应"""
|
||
preview_id: str
|
||
skill_content: str
|
||
parsed_metadata: Dict[str, Any]
|
||
validation_warnings: List[str] = Field(default_factory=list)
|
||
word_count: int
|
||
estimated_tokens: int
|
||
|
||
|
||
class SkillSaveFromPreviewRequest(BaseModel):
|
||
"""从预览保存 Skill 请求"""
|
||
preview_id: str
|
||
skill_id: str = Field(..., description="要保存的 Skill ID")
|
||
skill_content: str
|
||
references: Optional[Dict[str, str]] = Field(None, description="要保存的 references")
|
||
|
||
|
||
class SkillRefineRequest(BaseModel):
|
||
"""AI 调整 Skill 请求"""
|
||
skill_content: str
|
||
refinement_prompt: str = Field(..., description="调整提示词")
|
||
temperature: float = Field(0.7, ge=0, le=1)
|
||
|
||
|
||
class SkillRefineResponse(BaseModel):
|
||
"""AI 调整 Skill 响应"""
|
||
success: bool
|
||
refined_content: str
|
||
changes_summary: str
|
||
original_length: int
|
||
new_length: int
|