Spaces:
Runtime error
Runtime error
| from openai import OpenAI | |
| from typing import Optional, Dict, Any | |
| import streamlit as st | |
| # 定義可用的 OpenAI 模型 | |
| OPENAI_MODELS = { | |
| "gpt-4o": "GPT-4o", | |
| "gpt-4o-mini": "GPT-4o-mini", | |
| "o1-mini": "o1-mini", | |
| "o3-mini": "o3-mini" | |
| } | |
| def refine_transcript( | |
| raw_text: str, | |
| api_key: str, | |
| model: str = "o3-mini", | |
| temperature: float = 0.5, | |
| context: Optional[str] = None | |
| ) -> Optional[Dict[str, Any]]: | |
| """ | |
| 使用 OpenAI 優化轉錄文字 | |
| Args: | |
| raw_text: 原始文字 | |
| api_key: OpenAI API 金鑰 | |
| model: 使用的模型名稱 | |
| temperature: 創意程度 (0.0-1.0) | |
| context: 背景資訊 | |
| """ | |
| client = OpenAI(api_key=api_key) | |
| try: | |
| # 準備 API 參數 | |
| system_prompt = ( | |
| "你是一個專業的文字編輯,負責將文字轉換成正確的繁體中文並修正語法錯誤。" | |
| "請保持原意,但確保輸出是優美的繁體中文。" | |
| ) | |
| if context: | |
| system_prompt += f"\n\n背景資訊:{context}" | |
| params = { | |
| "model": model, | |
| "messages": [ | |
| { | |
| "role": "system", | |
| "content": system_prompt | |
| }, | |
| { | |
| "role": "user", | |
| "content": f"請將以下文字轉換成繁體中文,並修正語法和標點符號:\n\n{raw_text}" | |
| } | |
| ] | |
| } | |
| # 只有 gpt-4o 和 gpt-4o-mini 支援 temperature | |
| if model.startswith("gpt-4"): | |
| params["temperature"] = temperature | |
| # 第一步:修正並轉換為繁體中文 | |
| correction_response = client.chat.completions.create(**params) | |
| corrected_text = correction_response.choices[0].message.content | |
| # 第二步:結構化整理(使用相同的參數設定) | |
| params["messages"] = [ | |
| { | |
| "role": "system", | |
| "content": ( | |
| "你是一個專業的文字編輯,負責整理和結構化文字內容。" | |
| "請以繁體中文輸出,並確保格式清晰易讀。" | |
| ) | |
| }, | |
| { | |
| "role": "user", | |
| "content": ( | |
| "請幫我整理以下文字,並提供:\n" | |
| "1. 重點摘要\n" | |
| "2. 關鍵字列表\n" | |
| "3. 主要論點或重要資訊\n\n" | |
| f"{corrected_text}" | |
| ) | |
| } | |
| ] | |
| summary_response = client.chat.completions.create(**params) | |
| summary_text = summary_response.choices[0].message.content | |
| # 計算總 token 使用量 | |
| total_input_tokens = ( | |
| correction_response.usage.prompt_tokens + | |
| summary_response.usage.prompt_tokens | |
| ) | |
| total_output_tokens = ( | |
| correction_response.usage.completion_tokens + | |
| summary_response.usage.completion_tokens | |
| ) | |
| return { | |
| "corrected": corrected_text, | |
| "summary": summary_text, | |
| "usage": { | |
| "total_input_tokens": total_input_tokens, | |
| "total_output_tokens": total_output_tokens, | |
| "model": model | |
| } | |
| } | |
| except Exception as e: | |
| print(f"文字優化失敗:{str(e)}") | |
| return None | |
| def convert_to_traditional_chinese( | |
| text: str, | |
| api_key: str, | |
| model: str = "o3-mini" | |
| ) -> str: | |
| """將文字轉換為繁體中文""" | |
| client = OpenAI(api_key=api_key) | |
| response = client.chat.completions.create( | |
| model=model, | |
| temperature=0.1, # 使用較低的溫度以確保準確轉換 | |
| messages=[ | |
| { | |
| "role": "system", | |
| "content": "你是一個專業的繁簡轉換工具,請將輸入文字轉換成繁體中文,保持原意不變。" | |
| }, | |
| { | |
| "role": "user", | |
| "content": text | |
| } | |
| ] | |
| ) | |
| return response.choices[0].message.content | |
| # Example usage with elevenlabs_stt: | |
| # raw_transcript = transcribe_audio(...)['text'] | |
| # refined = refine_transcript( | |
| # raw_text=raw_transcript, | |
| # api_key="OPENAI_API_KEY", | |
| # temperature=0.5 | |
| # ) |