From b762bf8d93c739e11c7a43346783d293681965e4 Mon Sep 17 00:00:00 2001 From: linyq Date: Thu, 8 May 2025 17:37:07 +0800 Subject: [PATCH] =?UTF-8?q?refactor(app):=20=E9=87=8D=E6=9E=84=E7=94=9F?= =?UTF-8?q?=E6=88=90=E8=A7=A3=E8=AF=B4=E6=96=87=E6=A1=88=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E6=94=AF=E6=8C=81=20deepseek-reasoner=20=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 loguru 库用于日志记录 - 优化 API 请求流程,支持非 JSON 输出的模型- 更新 API 密钥和基础 URL - 修改系统提示语以更符合短视频解说文案的需求 - 优化日志输出,使用 debug 级别记录 token 消耗 - 清理生成的解说文案中的多余字符 - 更新文档生成工具中的日志级别 --- app/services/generate_narration_script.py | 62 +++++++++++++++-------- webui/tools/generate_script_docu.py | 2 +- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/app/services/generate_narration_script.py b/app/services/generate_narration_script.py index 3f50d16..8480682 100644 --- a/app/services/generate_narration_script.py +++ b/app/services/generate_narration_script.py @@ -12,6 +12,7 @@ import json import os import traceback from openai import OpenAI +from loguru import logger def parse_frame_analysis_to_markdown(json_file_path): @@ -184,24 +185,45 @@ def generate_narration(markdown_content, api_key, base_url, model): ) # 使用SDK发送请求 - response = client.chat.completions.create( - model=model, - messages=[ - {"role": "system", "content": "你是一名专业的视频解说文案撰写专家。"}, - {"role": "user", "content": prompt} - ], - temperature=0.7, - response_format={"type": "json_object"}, - ) - - # 提取生成的文案 - if response.choices and len(response.choices) > 0: - narration_script = response.choices[0].message.content - # 打印消耗的tokens - print(response.usage.total_tokens) - return narration_script + if model not in ["deepseek-reasoner"]: + # deepseek-reasoner 不支持 json 输出 + response = client.chat.completions.create( + model=model, + messages=[ + {"role": "system", "content": "你是一名专业的短视频解说文案撰写专家。"}, + {"role": "user", "content": prompt} + ], + temperature=1.5, + response_format={"type": "json_object"}, + ) + # 提取生成的文案 + if response.choices and len(response.choices) > 0: + narration_script = response.choices[0].message.content + # 打印消耗的tokens + logger.debug(f"消耗的tokens: {response.usage.total_tokens}") + return narration_script + else: + return "生成解说文案失败: 未获取到有效响应" else: - return "生成解说文案失败: 未获取到有效响应" + # 不支持 json 输出,需要多一步处理 ```json ``` 的步骤 + response = client.chat.completions.create( + model=model, + messages=[ + {"role": "system", "content": "你是一名专业的短视频解说文案撰写专家。"}, + {"role": "user", "content": prompt} + ], + temperature=1.5, + ) + # 提取生成的文案 + if response.choices and len(response.choices) > 0: + narration_script = response.choices[0].message.content + # 打印消耗的tokens + logger.debug(f"文案消耗的tokens: {response.usage.total_tokens}") + # 清理 narration_script 字符串前后的 ```json ``` 字符串 + narration_script = narration_script.replace("```json", "").replace("```", "") + return narration_script + else: + return "生成解说文案失败: 未获取到有效响应" except Exception as e: return f"调用API生成解说文案时出错: {traceback.format_exc()}" @@ -209,9 +231,9 @@ def generate_narration(markdown_content, api_key, base_url, model): if __name__ == '__main__': text_provider = 'openai' - text_api_key = "sk-lyxttmuwgcmocfmupotkaenxnfofednrqappdrypwtrboang" - text_model = "deepseek-ai/DeepSeek-R1" - text_base_url = "https://api.siliconflow.cn/v1" + text_api_key = "sk-6f7bb9d1cbee4012921268ecfe733851" + text_model = "deepseek-reasoner" + text_base_url = "https://api.deepseek.com" video_frame_description_path = "/Users/apple/Desktop/home/NarratoAI/storage/temp/analysis/frame_analysis_20250508_1139.json" # 测试新的JSON文件 diff --git a/webui/tools/generate_script_docu.py b/webui/tools/generate_script_docu.py index d9f6aed..5f958ba 100644 --- a/webui/tools/generate_script_docu.py +++ b/webui/tools/generate_script_docu.py @@ -376,7 +376,7 @@ def generate_script_docu(params): if script is None: st.error("生成脚本失败,请检查日志") st.stop() - logger.info(f"脚本生成完成") + logger.success(f"剪辑脚本生成完成") if isinstance(script, list): st.session_state['video_clip_json'] = script elif isinstance(script, str):