2026-01-25 19:27:44 +08:00

121 lines
3.0 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.

"""
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: str
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 的说明