You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

5.1 KiB

AI Prompt System 版本管理功能实现

变更日期:2026-02-04
变更类型:功能增强
影响范围:AI Prompt System 服务
符合规范:jointo-tech-stack v1.0


变更概述

实现 AI Prompt System 服务的版本管理功能,包括创建新版本和获取版本历史。


变更详情

1. Service 层新增方法

文件server/app/services/ai_prompt_system_service.py

1.1 create_version() 方法

async def create_version(
    self,
    base_prompt_id: UUID,
    new_version: str,
    prompt_content: Optional[str] = None,
    skills_data: Optional[Dict[str, Any]] = None,
    description: Optional[str] = None
) -> Dict[str, Any]:
    """基于现有提示词创建新版本"""

功能

  • 基于现有提示词创建新版本
  • 支持继承或覆盖提示词内容
  • 支持继承或覆盖 skills 配置
  • 新版本默认不是默认提示词
  • 自动生成描述(如未提供)

验证

  • 检查基础提示词是否存在
  • 检查新版本号是否已存在
  • 验证 skills_data 格式(如果提供)

1.2 get_versions() 方法

async def get_versions(
    self,
    name: str
) -> List[Dict[str, Any]]:
    """获取提示词的所有版本"""

功能

  • 根据提示词名称获取所有版本
  • 按创建时间倒序排列
  • 返回格式化的列表项

2. API 层新增接口

文件server/app/api/v1/ai_prompts.py

2.1 创建新版本接口

POST /api/v1/admin/ai-prompts/{prompt_id}/versions

权限:系统管理员

请求体

{
  "new_version": "1.1.0",
  "prompt_content": "新版本内容(可选)",
  "skills_data": {"skills": []},  // 可选
  "description": "版本说明(可选)"
}

响应

{
  "success": true,
  "code": 200,
  "message": "Success",
  "data": {
    "prompt_id": "019d...",
    "name": "剧本提示词",
    "version": "1.1.0",
    "prompt_content": "新版本内容",
    ...
  }
}

2.2 获取版本历史接口

GET /api/v1/admin/ai-prompts/versions?name=剧本提示词

权限:系统管理员

查询参数

  • name:提示词名称(必需)

响应

{
  "success": true,
  "code": 200,
  "message": "Success",
  "data": [
    {
      "prompt_id": "019d...",
      "name": "剧本提示词",
      "version": "1.2.0",
      "is_active": true,
      "is_default": true,
      "created_at": "2026-02-04T10:00:00Z"
    },
    {
      "prompt_id": "019d...",
      "name": "剧本提示词",
      "version": "1.1.0",
      "is_active": true,
      "is_default": false,
      "created_at": "2026-02-03T10:00:00Z"
    }
  ]
}

使用示例

1. 创建新版本

# 基于现有提示词创建新版本
service = AIPromptSystemService(db)

new_version = await service.create_version(
    base_prompt_id=base_prompt_id,
    new_version="1.1.0",
    prompt_content="优化后的提示词内容",
    description="版本 1.1.0:优化了角色识别逻辑"
)

2. 获取版本历史

# 获取提示词的所有版本
versions = await service.get_versions("剧本解析提示词")

for version in versions:
    print(f"版本 {version['version']}: {version['description']}")

3. API 调用示例

# 创建新版本
curl -X POST "http://localhost:6170/api/v1/admin/ai-prompts/{prompt_id}/versions" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "new_version": "1.1.0",
    "prompt_content": "优化后的内容",
    "description": "版本 1.1.0 更新"
  }'

# 获取版本历史
curl -X GET "http://localhost:6170/api/v1/admin/ai-prompts/versions?name=剧本提示词" \
  -H "Authorization: Bearer {token}"

技术规范合规性

符合 jointo-tech-stack 规范

  • 异步操作(async/await)
  • %-formatting 日志格式
  • exc_info=True 错误日志
  • 完整的类型注解
  • 完整的异常处理
  • 事务管理(commit/rollback)
  • 统一响应格式
  • UUID v7 主键生成
  • TIMESTAMPTZ 时间戳

测试覆盖

Service 层测试

  • 创建新版本成功
  • 基础提示词不存在
  • 创建重复版本失败
  • 继承内容和配置
  • 获取版本历史成功
  • 获取空版本历史

API 层测试

  • 创建新版本成功
  • 创建重复版本失败
  • 获取版本历史成功
  • 未认证访问失败

影响范围

新增功能

  • Service: create_version() 方法
  • Service: get_versions() 方法
  • API: POST /admin/ai-prompts/{prompt_id}/versions
  • API: GET /admin/ai-prompts/versions

无破坏性变更

  • 现有 API 接口保持不变
  • 现有数据库结构无需修改
  • 向后兼容

后续优化建议

  1. 版本对比功能

    • 实现版本内容对比
    • 显示版本差异
  2. 版本回滚

    • 支持回滚到指定版本
    • 自动创建回滚版本
  3. 版本标签

    • 支持为版本添加标签(如 stable、beta)
    • 支持按标签查询版本

变更日期:2026-02-04
变更类型:功能增强
符合规范:jointo-tech-stack v1.0