PokerGameDesigner / poker_designer_gpt.py
Estazz's picture
Upload 13 files
7f37870 verified
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)