Spaces:
Build error
Build error
| import gradio as gr | |
| from openai import OpenAI | |
| import os | |
| client = OpenAI(api_key=os.getenv("OPENAI_API_KEY", "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")) | |
| # ==================== 配置区 ==================== | |
| # 替换为你的实际 API Key,建议通过环境变量设置 | |
| # 固定使用 ChatGPT 模型 | |
| MODEL_NAME = "gpt-4o" # 你可以选择 "gpt-4" 或 "gpt-3.5-turbo" 等 | |
| # ==================== 默认 SYSTEM_PROMPT ==================== | |
| SYSTEM_PROMPT = """你是一位资深的扑克类游戏设计专家,拥有丰富的桌游和卡牌游戏开发经验。 | |
| 请根据用户的需求,设计一款创新、有趣、规则清晰的扑克类游戏。 | |
| 要求输出格式如下: | |
| --- | |
| ### 游戏名称 | |
| [创意名称] | |
| ### 核心机制 | |
| - 机制1 | |
| - 机制2 | |
| ### 使用牌组 | |
| [标准扑克 / 自定义牌组 / 其他] | |
| ### 玩家人数 | |
| [N人] | |
| ### 游戏目标 | |
| [胜利条件] | |
| ### 基本规则 | |
| 1. ... | |
| 2. ... | |
| ### 特色亮点 | |
| - 亮点1 | |
| - 亮点2 | |
| --- | |
| 你可以适当提问以明确需求,但一旦开始设计,请确保输出完整且富有创意。 | |
| """ | |
| # ==================== 对话函数 ==================== | |
| def design_poker_game(message, history): | |
| # 构建带系统提示的完整消息链 | |
| messages = [{"role": "system", "content": SYSTEM_PROMPT}] | |
| # 添加历史对话(支持多轮) | |
| for human, assistant in history: | |
| messages.append({"role": "user", "content": human}) | |
| messages.append({"role": "assistant", "content": assistant}) | |
| # 添加当前用户输入 | |
| messages.append({"role": "user", "content": message}) | |
| try: | |
| # 使用 OpenAI 的 ChatGPT API 替换原有的 DashScope 调用 | |
| response = client.chat.completions.create(model=MODEL_NAME, # 使用模型,如 "gpt-3.5-turbo" 或 "gpt-4" | |
| messages=messages, # 消息链 | |
| temperature=0.85, # 增加创意性 | |
| top_p=0.9, | |
| max_tokens=1024) | |
| # 返回生成的内容 | |
| reply = response.choices[0].message.content | |
| return reply | |
| except Exception as e: | |
| return f"💥 调用失败:{str(e)}\n\n请检查 API Key 是否正确,或网络是否通畅。" | |
| # ==================== Gradio 界面配置 ==================== | |
| with gr.Blocks( | |
| theme=gr.themes.Soft(), | |
| title="🃏 扑克游戏创意工坊", | |
| css=""" | |
| .custom-chatbot .avatar-image { | |
| width: 50px !important; | |
| height: 50px !important; | |
| min-width: 50px !important; | |
| min-height: 50px !important; | |
| max-width: 50px !important; | |
| max-height: 50px !important; | |
| border-radius: 50% !important; | |
| border: 2px solid #1976d2 !important; | |
| object-fit: cover !important; | |
| object-position: center !important; | |
| display: flex !important; | |
| justify-content: center !important; | |
| align-items: center !important; | |
| background-color: #f0f0f0 !important; | |
| overflow: hidden !important; | |
| box-shadow: 0 2px 4px rgba(0,0,0,0.1); | |
| } | |
| .custom-chatbot .message { | |
| font-size: 16px; | |
| } | |
| """ | |
| ) as demo: | |
| gr.HTML(""" | |
| <div style="text-align: center; padding: 20px;"> | |
| <h1>🃏 扑克游戏创意工坊 · KOI Lab</h1> | |
| <p style="font-size: 1.1em; color: #555;"> | |
| 与 AI 游戏设计专家对话,快速生成创新扑克类玩法 | |
| </p> | |
| </div> | |
| """) | |
| gr.ChatInterface( | |
| fn=design_poker_game, | |
| chatbot=gr.Chatbot( | |
| height=600, | |
| bubble_full_width=False, | |
| avatar_images=("landlord.png", "bot.png"), | |
| elem_classes="custom-chatbot" # ✅ 绑定样式 | |
| ), | |
| textbox=gr.Textbox( | |
| placeholder="例如:设计一个适合3-5人的派对风格扑克游戏...", | |
| show_label=False | |
| ), | |
| submit_btn="发送", | |
| retry_btn="重新生成", | |
| undo_btn="撤销", | |
| clear_btn="清空对话", | |
| examples=[ | |
| "设计一个融合 bluff(虚张声势)机制的扑克变体", | |
| "做一个适合家庭聚会的轻松扑克游戏", | |
| "结合掷骰子的扑克玩法", | |
| "设计一个带有角色技能的扑克对战游戏", | |
| "做一个每局只有3分钟的快节奏扑克游戏" | |
| ], | |
| description=""" | |
| <strong>💡 使用建议:</strong> | |
| <ul> | |
| <li>描述你想要的风格:派对、策略、家庭、竞技等</li> | |
| <li>指定人数、节奏、是否需要道具</li> | |
| <li>可以要求加入创新机制:角色、技能、行动卡等</li> | |
| </ul> | |
| """ | |
| ) | |
| # ==================== 启动应用 ==================== | |
| if __name__ == "__main__": | |
| demo.launch(share=True) | |