尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

爆款结构迁移引擎AI创作平台深度技术解析

爆款结构迁移引擎AI创作平台深度技术解析 一、系统概述与架构设计构成了爆款结构迁移引擎——AI创作平台的核心后端服务基于FastAPI框架构建旨在实现从爆款视频样本分析到新主题内容智能生成的完整工作流。系统采用模块化设计思想将视频处理、大语言模型交互、素材缺口分析与补全等核心能力解耦通过标准化的RESTful API对外提供服务。整体架构遵循数据驱动—智能分析—生成优化的逻辑闭环能够处理视频样本的语义提取、爆款结构建模、目标主题适配、内容缺口识别与补全最终生成结构化的视频脚本SVT并支持多版本衍生与人工微调。系统的核心价值在于将爆款内容的隐性结构显性化并通过AI能力实现跨主题的结构迁移大幅降低优质内容的创作门槛。从技术实现来看平台整合了多媒体处理技术、大语言模型LLM推理技术、结构化数据生成技术以及工作流编排能力形成了一套完整的内容智能生产Pipeline。二、核心功能模块详解2.1 基础服务与配置管理2.1.1 FastAPI应用初始化app FastAPI(title爆款结构迁移引擎 - AI创作平台, version1.0.0)应用初始化时定义了服务名称和版本号便于API文档自动生成和服务版本管理。FastAPI基于Starlette和Pydantic构建提供了异步请求处理、类型校验、自动交互式文档Swagger UI和ReDoc等特性非常适合构建AI驱动的后端服务。2.1.2 CORS中间件配置app.add_middleware( CORSMiddleware, allow_origins[*], allow_credentialsTrue, allow_methods[*], allow_headers[*], )跨域资源共享CORS中间件的配置允许前端应用从不同域名访问API服务开发环境下的宽松配置allow_origins[*]便于前后端分离开发。在生产环境中应将其限制为具体的前端域名以提升安全性。2.1.3 核心组件实例化video_processor VideoProcessor() llm_client DoubaoSeed2LiteEngine() gap_engine GapCompletionEngine()系统在启动时实例化了三个核心组件VideoProcessor负责视频文件的解析与特征提取是连接原始视频数据与结构化信息的桥梁DoubaoSeed2LiteEngine封装了对豆包Seed2 Lite大模型的API调用提供文本分析、结构提取、内容生成等NLP能力GapCompletionEngine处理素材缺口的识别与补全逻辑确保生成内容符合爆款结构的叙事逻辑。这种依赖注入式的组件管理使得代码结构清晰便于单元测试和功能扩展。2.1.4 配置状态检查接口/api/config-status端点提供了系统配置的健康检查能力返回火山引擎API密钥、模型端点等关键配置的状态帮助运维人员快速验证服务就绪情况。这种设计在AI服务中尤为重要因为大模型API的可用性直接影响核心功能。2.2 视频样本上传与预处理2.2.1 上传接口实现/api/upload-sample端点处理视频文件的上传与初步处理是整个工作流的入口app.post(/api/upload-sample) async def upload_sample_video(file: UploadFile File(...)): task_id str(uuid.uuid4()) save_path settings.UPLOAD_DIR / f{task_id}_{file.filename} with save_path.open(wb) as buffer: shutil.copyfileobj(file.file, buffer) try: sample_data video_processor.process_sample_video(save_path) return { task_id: task_id, filename: file.filename, sample_data: sample_data, status: processed } except Exception as e: raise HTTPException(status_code500, detailf处理失败: {str(e)})2.2.2 关键技术细节任务ID生成使用uuid.uuid4()生成全局唯一的任务ID用于追踪整个处理流程中的相关数据避免文件命名冲突同时为分布式部署下的任务调度提供支持。文件存储策略利用settings.UPLOAD_DIR获取配置的上传目录符合配置集中管理的最佳实践文件名采用task_id_original_filename的格式既保留了原始文件名信息又确保了唯一性使用shutil.copyfileobj高效复制文件流相比一次性读取文件内容到内存更适合处理大视频文件。异常处理机制通过try-except块捕获视频处理过程中的异常并转换为HTTP 500错误返回给客户端同时保留原始错误信息便于调试。2.2.3 VideoProcessor核心功能推测虽然VideoProcessor的具体实现未给出但基于其功能定位可推断其包含以下核心能力视频解码支持常见视频格式MP4、AVI、MOV等的解码提取音频流和视频帧音频提取将视频中的音频轨道分离为后续ASR自动语音识别做准备语音转文字集成ASR引擎如火山引擎语音识别API将音频转换为时间戳对齐的文本关键帧提取按固定间隔或场景切换点提取视频帧用于视觉内容分析元数据提取获取视频时长、分辨率、码率等基础信息。这些处理步骤将非结构化的视频文件转化为结构化的sample_data为后续的LLM分析提供标准化输入。2.3 爆款结构分析引擎2.3.1 结构分析接口/api/analyze-structure端点接收视频处理后的样本数据调用大模型提取爆款视频的结构化模板app.post(/api/analyze-structure) async def analyze_structure(task_id: str Form(...), sample_data_json: str Form(...)): try: sample_data json.loads(sample_data_json) structure_template await llm_client.analyze_sample_structure(sample_data) print(f[API-DEBUG] 最终准备返回前端的爆款结构: {json.dumps(structure_template, ensure_asciiFalse, indent2)}) raw_llm llm_client.last_raw_llm_output print(f[API-DEBUG] raw_llm_output 有效性: {bool(raw_llm)}, 长度: {len(raw_llm) if raw_llm else 0}) return { task_id: task_id, structure_template: structure_template, raw_llm_output: raw_llm if raw_llm else , status: structure_extracted } except Exception as e: print(f[API-ERROR] 结构分析异常: {e}) raise HTTPException(status_code500, detailf结构分析失败: {str(e)})2.3.2 数据处理流程JSON反序列化将前端传入的sample_data_json字符串解析为Python字典恢复视频处理得到的结构化数据LLM结构分析调用llm_client.analyze_sample_structure方法将样本数据发送给豆包Seed2 Lite模型执行核心的结构分析任务调试信息输出通过print语句输出调试信息包括结构模板的JSON格式和原始LLM输出便于开发阶段的问题定位结果封装返回将结构模板、原始LLM输出等数据打包返回其中raw_llm_output可用于前端展示模型思考过程或进行质量评估。2.3.3 DoubaoSeed2LiteEngine分析能力analyze_sample_structure方法是该端点的核心其实现逻辑可能包含以下关键步骤Prompt工程构建专门的分析提示词指导模型从样本数据中提取关键结构要素例如视频总时长与时长分布叙事段落划分开场、冲突、高潮、结尾等情绪曲线变化关键转折点位置台词风格与句式特点视觉元素与叙事的关联。API调用封装封装火山引擎大模型的API调用细节包括认证API Key、模型端点选择、请求参数配置temperature、max_tokens等、重试机制等。响应解析将LLM返回的自然语言或JSON格式的结果解析为结构化的structure_template确保其包含可预测的数据结构便于后续处理。原始输出缓存通过last_raw_llm_output属性保存原始响应用于调试和分析模型行为。2.3.4 爆款结构模板数据结构基于业务逻辑推测structure_template可能包含以下核心字段这种结构化表示使得抽象的爆款结构可被机器理解和复用是实现结构迁移的基础。2.4 素材缺口识别系统2.4.1 缺口识别接口/api/identify-gaps端点负责对比爆款结构模板与目标主题的现有素材识别需要补充的内容缺口app.post(/api/identify-gaps) async def identify_gaps( task_id: str Form(...), target_topic: str Form(...), new_materials_text: str Form(), structure_template_json: str Form(...) ): try: structure_template json.loads(structure_template_json) gap_analysis await llm_client.generate_material_gap_analysis(target_topic, new_materials_text, structure_template) print(f[API-DEBUG] 素材缺口识别结果: {json.dumps(gap_analysis, ensure_asciiFalse, indent2)}) raw_gap llm_client.last_raw_llm_output print(f[API-DEBUG] raw_gap_output 有效性: {bool(raw_gap)}, 长度: {len(raw_gap) if raw_gap else 0}) return { task_id: task_id, gap_analysis: gap_analysis, raw_gap_output: raw_gap if raw_gap else , status: gaps_identified } except Exception as e: print(f[API-ERROR] 缺口识别失败: {e}) raise HTTPException(status_code500, detailf缺口识别失败: {str(e)})2.4.2 核心参数解析target_topic目标创作主题如新手咖啡制作教程是内容生成的核心指引new_materials_text用户提供的现有素材文本可能包含产品信息、关键卖点、已有文案等structure_template_json之前步骤生成的爆款结构模板作为内容框架的基准。2.4.3 缺口分析逻辑generate_material_gap_analysis方法的实现逻辑可能包含以下步骤素材结构化解析将new_materials_text解析为结构化信息提取关键实体、事实数据、观点主张等结构需求映射遍历structure_template中的每个段落明确其对内容的需求如钩子需要痛点问题解决方案需要具体步骤等匹配度评估对比现有素材与结构需求的匹配程度识别缺失的信息类型缺口分类标记将识别出的缺口进行分类如信息缺口缺少关键事实、数据或背景信息情感缺口缺乏符合段落情绪要求的情感表达逻辑缺口叙事链条不完整缺少过渡或因果关联风格缺口素材语言风格与结构要求的风格不符视觉缺口缺少对应段落的视觉呈现建议。2.4.4 缺口分析结果数据结构推测gap_analysis的典型结构如下这种精细化的缺口分析为后续的内容补全提供了明确的指引确保生成的内容能够严格遵循爆款结构的框架要求。2.5 缺口智能补全引擎2.5.1 补全接口实现/api/complete-gaps端点调用GapCompletionEngine对识别出的缺口进行智能补全app.post(/api/complete-gaps) async def complete_gaps_endpoint( task_id: str Form(...), gap_analysis_json: str Form(...), target_topic: str Form(...) ): try: gap_analysis json.loads(gap_analysis_json) completion_result await gap_engine.complete_gaps(gap_analysis, target_topic) return { task_id: task_id, completion_result: completion_result, status: gaps_completed } except Exception as e: print(f[API-ERROR] 缺口补全失败: {e}) raise HTTPException(status_code500, detailf缺口补全失败: {str(e)})2.5.2 GapCompletionEngine核心逻辑GapCompletionEngine是该端点的核心处理器其内部逻辑可能包含以下模块缺口优先级排序根据缺口类型、所在段落的重要性如钩子段落的缺口优先级高于结尾段落对缺口进行排序确保关键缺口优先得到补全补全策略选择针对不同类型和优先级的缺口采用不同的补全策略LLM生成补全对于创意性内容如情感化表达、故事化案例调用大模型生成原创内容知识库检索补全对于事实性信息如行业数据、产品参数从内置知识库或外部API如搜索引擎检索相关信息规则模板补全对于格式化内容如步骤说明、清单列表使用预定义的模板结合变量填充生成内容一致性校验确保补全内容与目标主题、整体风格保持一致避免逻辑矛盾或风格冲突多源融合将补全内容与用户提供的原始素材进行有机融合形成连贯的整体。2.5.3 补全结果数据结构completion_result可能包含以下关键信息补全引擎的输出填补了从缺口分析到内容生成之间的关键环节使系统具备了端到端的自动化内容生产能力。2.6 SVT结构化视频脚本生成系统2.6.1 SVT生成接口/api/generate-svt端点将补全后的素材与爆款结构模板结合生成最终的结构化视频脚本app.post(/api/generate-svt) async def generate_svt( task_id: str Form(...), structure_template_json: str Form(...), gap_analysis_json: str Form(...), target_topic: str Form(...), version_type: str Form(standard) ): try: structure_template json.loads(structure_template_json) gap_analysis json.loads(gap_analysis_json) svt_json await llm_client.generate_svt_json(structure_template, gap_analysis, target_topic, version_type) return { task_id: task_id, svt_json: svt_json, status: svt_generated } except Exception as e: print(f[API-ERROR] SVT生成失败: {e}) raise HTTPException(status_code500, detailfSVT生成失败: {str(e)})2.6.2 版本类型控制version_type参数支持生成不同风格的脚本版本常见的版本类型可能包括standard标准版平衡信息量与趣味性concise精简版突出核心信息适合短视频平台detailed详细版包含更多背景知识和细节适合教程类内容humorous幽默版增加搞笑元素和段子提升娱乐性professional专业版使用行业术语强调权威性和可信度。2.6.3 SVT数据结构设计SVTStructured Video Script是该系统的核心输出其数据结构需要同时满足叙事逻辑、拍摄指导和后期制作的多方面需求。一个典型的SVT JSON结构可能如下这种高度结构化的脚本格式不仅便于AI生成也方便导演、摄影师、剪辑师等创作人员理解和执行实现了从创意到生产的无缝衔接。2.7 多版本生成与优化2.7.1 多版本生成接口/api/generate-multiple-versions端点基于基础SVT生成多个差异化版本满足不同平台或受众的需求app.post(/api/generate-multiple-versions) async def generate_multiple_versions( task_id: str Form(...), base_svt_json: str Form(...), target_topic: str Form(...) ): try: base_svt json.loads(base_svt_json) versions await gap_engine.generate_multiple_versions(base_svt, target_topic) return { task_id: task_id, versions: versions, status: multiple_versions_generated } except Exception as e: print(f[API-ERROR] 多版本生成失败: {e}) raise HTTPException(status_code500, detailf多版本生成失败: {str(e)})2.7.2 多版本生成策略GapCompletionEngine.generate_multiple_versions方法可能采用以下策略生成差异化版本平台适配抖音/快手版节奏更快钩子更强烈加入更多流行梗和网络用语B站版增加深度解析加入弹幕互动设计使用更年轻化的语言风格小红书版强调精致感和实用性增加图文对照元素突出种草属性YouTube版时长更长结构更完整加入章节标记和卡片互动。受众细分新手友好版简化专业术语增加基础概念解释进阶专业版深入探讨技术细节使用行业标准术语亲子版调整内容难度增加家庭场景元素职场版聚焦办公场景应用强调效率提升。风格变异幽默搞笑版加入段子、反转和夸张表演温情治愈版使用柔和的音乐、暖色调画面和情感化叙事悬疑探秘版设置悬念和谜题逐步揭示答案干货科普版强调信息密度使用图表和数据可视化。A/B测试优化针对同一内容点生成不同表达方式便于后续通过数据反馈优化内容策略。2.7.3 版本差异化管理生成的versions数组可能包含版本元数据和差异化内容多版本生成能力极大地提升了内容的适配性和传播效率是工业化内容生产的重要组成部分。2.8 人工微调接口2.8.1 手动调整接口/api/adjust-manually端点允许用户对AI生成的SVT进行精细化调整平衡AI效率与人类创造力2.8.2 调整机制分析该接口实现了简单的JSON路径覆盖式调整调整数据解析将adjustments_json解析为键值对其中键是SVT中的字段路径值是新的内容递归更新逻辑当前实现仅支持顶层键的直接覆盖更复杂的实现可能需要支持嵌套字段的更新如使用a.b.c路径语法数据一致性维护调整后可能需要触发验证逻辑确保修改后的SVT仍然符合结构规范避免破坏叙事逻辑。2.8.3 典型调整场景用户可能进行的调整包括修改特定段落的台词文本使其更符合品牌调性调整视觉元素的描述替换不符合实际场景的画面建议更改背景音乐或音效选择优化行动号召的文案和呈现方式调整段落时长分配改变整体节奏。这种人机协作模式充分发挥了AI的高效生成能力和人类的审美判断力是AI创作平台的理想交互范式。三、数据结构深度解析3.1 核心数据流转全景系统内的数据流转遵循以下路径视频文件 → VideoProcessor → sample_data → LLM结构分析 → structure_template → 缺口识别 → gap_analysis → 缺口补全 → completion_result → SVT生成 → svt_json → 多版本生成/人工调整 → 最终脚本每个环节都定义了标准化的数据结构确保模块间的松耦合和高内聚。3.2 关键数据结构对比数据结构名称生成阶段核心作用关键字段示例sample_data视频处理存储视频解析结果duration,audio_transcript,key_frames,metadatastructure_template结构分析定义爆款内容框架segments,narrative_pattern,pacing_strategy,style_guidegap_analysis缺口识别标识内容缺失segment_gaps,overall_suggestions,topic_match_scorecompletion_result缺口补全提供缺失内容completed_segments,added_materials,completeness_scoresvt_jsonSVT生成最终脚本输出meta,segments,global_settings,call_to_action3.3 数据验证与类型安全虽然当前代码主要依赖Python的动态类型但在生产环境中建议使用Pydantic模型对所有输入输出数据进行严格校验例如from pydantic import BaseModel from typing import List, Optional class Segment(BaseModel): id: str type: str start_time: float end_time: float text: str visuals: Optional[List[dict]] None class SVT(BaseModel): meta: dict segments: List[Segment] global_settings: dict call_to_action: dict这种强类型定义不仅能提前捕获数据格式错误还能为API文档提供精确的类型信息提升开发体验。四、算法与模型交互逻辑4.1 大模型交互策略系统与大模型的交互集中在DoubaoSeed2LiteEngine类中采用了以下关键策略Prompt模板化为不同任务结构分析、缺口识别、SVT生成设计专用Prompt模板确保模型理解任务目标上下文窗口管理合理控制输入Token数量对长文本进行分段处理或摘要压缩输出格式约束通过Prompt明确要求模型返回JSON格式并进行后处理解析温度参数调节根据任务类型调整temperature参数如创意生成用较高值结构化提取用较低值重试与容错实现API调用失败重试机制处理网络波动或服务限流问题。4.2 爆款结构提取算法结构提取本质是序列标注与模式识别问题算法可能包含以下步骤文本分段基于时间戳和语义相似度将转录文本分割为逻辑段落特征提取为每个段落提取文本特征关键词、情感极性、句式复杂度和时序特征位置、时长占比模式匹配将提取的特征与预定义的爆款模式库进行匹配识别段落类型结构建模基于段落间的时序关系和逻辑关联构建整体叙事结构模型参数优化通过少量标注数据微调模型提升结构识别准确率。4.3 缺口识别算法缺口识别可建模为多维度匹配问题算法流程可能包括需求向量化将结构模板中各段落的内容需求转化为多维特征向量供给向量化将现有素材转化为同维度的特征向量相似度计算使用余弦相似度或欧氏距离计算供需匹配度阈值判断低于预设阈值的维度判定为缺口优先级排序基于段落重要性和缺口严重程度计算综合优先级。4.4 内容生成优化算法为提升生成内容的质量系统可能采用以下优化技术约束解码在生成过程中施加约束确保输出符合SVT的JSON Schema多样性采样在生成多版本时采用Top-p或Top-k采样增加内容多样性奖励模型引导训练专门的奖励模型评估生成内容的质量引导生成过程向高分区域探索人类反馈强化学习RLHF基于人类对生成结果的反馈微调模型提升内容的人类偏好度。五、系统优化与扩展方向5.1 性能优化建议异步处理优化对耗时操作如视频处理、LLM调用实现真正的异步非阻塞处理提升并发能力缓存机制引入缓存常用爆款结构模板、LLM响应结果等减少重复计算和API调用流式响应支持对长文本生成任务实现流式输出提升用户体验批量处理能力支持批量上传视频和批量生成脚本满足工业化生产需求。5.2 功能扩展方向多模态分析增强集成图像识别和视频理解模型直接从视频帧提取视觉特征丰富样本数据维度实时数据接入接入社交媒体趋势数据动态调整爆款结构模板保持内容时效性用户反馈闭环收集用户对生成内容的评价和使用数据持续优化模型和算法协作编辑功能支持多用户同时编辑SVT添加评论和批注提升团队协作效率第三方工具集成对接剪映、Premiere等视频编辑软件实现从脚本到成片的自动化流程。5.3 可靠性与安全性提升输入验证强化对所有用户输入进行严格的格式和内容验证防止恶意攻击错误处理完善细化异常类型提供更友好的错误信息和恢复建议日志系统升级实现结构化日志支持日志级别控制和集中式日志管理权限控制增强添加用户认证和授权机制保护知识产权和数据安全数据备份恢复定期备份任务数据和生成的脚本防止数据丢失。六、总结构建的爆款结构迁移引擎AI创作平台通过整合视频处理、大语言模型和结构化数据生成技术实现了从爆款视频分析到新主题内容生成的完整自动化流程。系统采用模块化设计各功能模块职责明确通过标准化的API进行通信具备良好的可扩展性和可维护性。核心价值在于将隐性的爆款内容规律显性化为可复用的结构模板并通过AI能力实现跨主题的结构迁移大幅降低了优质内容的创作门槛。系统不仅支持全自动化的内容生成还提供了人工微调接口实现了人机协作的最优模式。未来通过引入更先进的多模态分析技术、强化学习优化算法和实时数据反馈机制该系统有望进一步进化成为更智能、更高效的内容创作助手为短视频、在线教育、数字营销等领域带来革命性的生产力提升。源代码import uuid import json import shutil from fastapi import FastAPI, UploadFile, File, Form, HTTPException from fastapi.middleware.cors import CORSMiddleware from .config import settings from .video_processor import VideoProcessor from .llm_client import DoubaoSeed2LiteEngine from .gap_completion import GapCompletionEngine app FastAPI(title爆款结构迁移引擎 - AI创作平台, version1.0.0) app.add_middleware( CORSMiddleware, allow_origins[*], allow_credentialsTrue, allow_methods[*], allow_headers[*], ) video_processor VideoProcessor() llm_client DoubaoSeed2LiteEngine() gap_engine GapCompletionEngine() app.get(/) async def root(): return {message: 爆款结构迁移引擎API服务已成功启动, version: 1.0.0} app.post(/api/upload-sample) async def upload_sample_video(file: UploadFile File(...)): task_id str(uuid.uuid4()) save_path settings.UPLOAD_DIR / f{task_id}_{file.filename} with save_path.open(wb) as buffer: shutil.copyfileobj(file.file, buffer) try: sample_data video_processor.process_sample_video(save_path) return { task_id: task_id, filename: file.filename, sample_data: sample_data, status: processed } except Exception as e: raise HTTPException(status_code500, detailf处理失败: {str(e)}) app.post(/api/analyze-structure) async def analyze_structure(task_id: str Form(...), sample_data_json: str Form(...)): try: sample_data json.loads(sample_data_json) structure_template await llm_client.analyze_sample_structure(sample_data) print(f[API-DEBUG] 最终准备返回前端的爆款结构: {json.dumps(structure_template, ensure_asciiFalse, indent2)}) raw_llm llm_client.last_raw_llm_output print(f[API-DEBUG] raw_llm_output 有效性: {bool(raw_llm)}, 长度: {len(raw_llm) if raw_llm else 0}) return { task_id: task_id, structure_template: structure_template, raw_llm_output: raw_llm if raw_llm else , status: structure_extracted } except Exception as e: print(f[API-ERROR] 结构分析异常: {e}) raise HTTPException(status_code500, detailf结构分析失败: {str(e)}) app.post(/api/identify-gaps) async def identify_gaps( task_id: str Form(...), target_topic: str Form(...), new_materials_text: str Form(), structure_template_json: str Form(...) ): try: structure_template json.loads(structure_template_json) gap_analysis await llm_client.generate_material_gap_analysis(target_topic, new_materials_text, structure_template) print(f[API-DEBUG] 素材缺口识别结果: {json.dumps(gap_analysis, ensure_asciiFalse, indent2)}) raw_gap llm_client.last_raw_llm_output print(f[API-DEBUG] raw_gap_output 有效性: {bool(raw_gap)}, 长度: {len(raw_gap) if raw_gap else 0}) return { task_id: task_id, gap_analysis: gap_analysis, raw_gap_output: raw_gap if raw_gap else , status: gaps_identified } except Exception as e: print(f[API-ERROR] 缺口识别失败: {e}) raise HTTPException(status_code500, detailf缺口识别失败: {str(e)}) app.post(/api/complete-gaps) async def complete_gaps_endpoint( task_id: str Form(...), gap_analysis_json: str Form(...), target_topic: str Form(...) ): try: gap_analysis json.loads(gap_analysis_json) completion_result await gap_engine.complete_gaps(gap_analysis, target_topic) return { task_id: task_id, completion_result: completion_result, status: gaps_completed } except Exception as e: print(f[API-ERROR] 缺口补全失败: {e}) raise HTTPException(status_code500, detailf缺口补全失败: {str(e)}) app.post(/api/generate-svt) async def generate_svt( task_id: str Form(...), structure_template_json: str Form(...), gap_analysis_json: str Form(...), target_topic: str Form(...), version_type: str Form(standard) ): try: structure_template json.loads(structure_template_json) gap_analysis json.loads(gap_analysis_json) svt_json await llm_client.generate_svt_json(structure_template, gap_analysis, target_topic, version_type) return { task_id: task_id, svt_json: svt_json, status: svt_generated } except Exception as e: print(f[API-ERROR] SVT生成失败: {e}) raise HTTPException(status_code500, detailfSVT生成失败: {str(e)}) app.post(/api/generate-multiple-versions) async def generate_multiple_versions( task_id: str Form(...), base_svt_json: str Form(...), target_topic: str Form(...) ): try: base_svt json.loads(base_svt_json) versions await gap_engine.generate_multiple_versions(base_svt, target_topic) return { task_id: task_id, versions: versions, status: multiple_versions_generated } except Exception as e: print(f[API-ERROR] 多版本生成失败: {e}) raise HTTPException(status_code500, detailf多版本生成失败: {str(e)}) app.post(/api/adjust-manually) async def adjust_manually( task_id: str Form(...), svt_json: str Form(...), adjustments_json: str Form(...) ): try: svt_data json.loads(svt_json) adjustments json.loads(adjustments_json) for key, value in adjustments.items(): if key in svt_data: svt_data[key] value return { task_id: task_id, adjusted_svt: svt_data, status: adjusted } except Exception as e: print(f[API-ERROR] 手动调整失败: {e}) raise HTTPException(status_code500, detailf手动调整失败: {str(e)}) app.get(/api/config-status) async def get_config_status(): return { provider: , volcengine_api_key_configured: bool(settings.VOLCENGINE_API_KEY), doubao_seed_2_lite_model_ep_configured: bool(settings.DOUBAO_SEED_2_LITE_MODEL_EP), volcengine_base_url: settings.VOLCENGINE_BASE_URL, ready_to_use: bool(settings.VOLCENGINE_API_KEY and settings.DOUBAO_SEED_2_LITE_MODEL_EP) }
返回列表