133 lines
4.6 KiB
Python
133 lines
4.6 KiB
Python
from flask import Flask, render_template, request, redirect, url_for
|
|
import requests
|
|
import json
|
|
from dotenv import load_dotenv
|
|
import os
|
|
|
|
# 加载环境变量
|
|
load_dotenv()
|
|
|
|
app = Flask(__name__)
|
|
|
|
# DeepSeek API 配置
|
|
DEEPSEEK_API_KEY = os.getenv('DEEPSEEK_API_KEY', 'sk-137bb3c986b640ae838d2cd2bfbca1dc')
|
|
DEEPSEEK_API_URL = 'https://api.deepseek.com/v1/chat/completions'
|
|
|
|
def generate_decision_points(workshop):
|
|
"""使用DeepSeek API生成决策要点"""
|
|
# 构建辩论内容的摘要
|
|
debate_summary = "辩论内容:\n"
|
|
for item in workshop['debate_content']:
|
|
debate_summary += f"{item['role']}: {item['opinion']}\n"
|
|
|
|
# 构建系统提示
|
|
system_prompt = f"你是一个决策分析专家,需要基于以下辩论内容,为'{workshop['name']}'工作坊生成全面的决策要点。工作坊目标是:{workshop['goal']}。请从多个角度分析,提取关键决策点,并提供具体的建议。"
|
|
|
|
# 构建请求数据
|
|
data = {
|
|
"model": "deepseek-chat",
|
|
"messages": [
|
|
{"role": "system", "content": system_prompt},
|
|
{"role": "user", "content": debate_summary}
|
|
],
|
|
"temperature": 0.7,
|
|
"max_tokens": 1000
|
|
}
|
|
|
|
# 发送请求
|
|
headers = {
|
|
'Content-Type': 'application/json',
|
|
'Authorization': f'Bearer {DEEPSEEK_API_KEY}'
|
|
}
|
|
|
|
try:
|
|
response = requests.post(DEEPSEEK_API_URL, headers=headers, data=json.dumps(data))
|
|
response.raise_for_status()
|
|
result = response.json()
|
|
decision_points = result['choices'][0]['message']['content']
|
|
return decision_points
|
|
except Exception as e:
|
|
# 错误处理,返回简单的决策要点
|
|
decision_points = []
|
|
for content in workshop['debate_content']:
|
|
decision_points.append(f"{content['role']}: {content['opinion'][:100]}...")
|
|
return "\n".join(decision_points)
|
|
|
|
# 存储工作坊数据的临时字典
|
|
workshops = {}
|
|
|
|
@app.route('/')
|
|
def index():
|
|
return render_template('index.html', workshops=workshops)
|
|
|
|
@app.route('/create', methods=['GET', 'POST'])
|
|
def create_workshop():
|
|
if request.method == 'POST':
|
|
workshop_id = len(workshops) + 1
|
|
workshop_name = request.form['workshop_name']
|
|
workshop_goal = request.form['workshop_goal']
|
|
|
|
workshops[workshop_id] = {
|
|
'name': workshop_name,
|
|
'goal': workshop_goal,
|
|
'roles': [],
|
|
'debate_content': [],
|
|
'decision_points': []
|
|
}
|
|
|
|
return redirect(url_for('configure_roles', workshop_id=workshop_id))
|
|
return render_template('create_workshop.html')
|
|
|
|
@app.route('/workshop/<int:workshop_id>/roles', methods=['GET', 'POST'])
|
|
def configure_roles(workshop_id):
|
|
if workshop_id not in workshops:
|
|
return redirect(url_for('index'))
|
|
|
|
if request.method == 'POST':
|
|
role_name = request.form['role_name']
|
|
role_perspective = request.form['role_perspective']
|
|
|
|
workshops[workshop_id]['roles'].append({
|
|
'name': role_name,
|
|
'perspective': role_perspective
|
|
})
|
|
|
|
if 'add_more' in request.form:
|
|
return redirect(url_for('configure_roles', workshop_id=workshop_id))
|
|
else:
|
|
return redirect(url_for('start_debate', workshop_id=workshop_id))
|
|
|
|
return render_template('configure_roles.html', workshop=workshops[workshop_id], workshop_id=workshop_id)
|
|
|
|
@app.route('/workshop/<int:workshop_id>/debate', methods=['GET', 'POST'])
|
|
def start_debate(workshop_id):
|
|
if workshop_id not in workshops:
|
|
return redirect(url_for('index'))
|
|
|
|
if request.method == 'POST':
|
|
role_index = int(request.form['role_index'])
|
|
role_opinion = request.form['role_opinion']
|
|
|
|
workshops[workshop_id]['debate_content'].append({
|
|
'role': workshops[workshop_id]['roles'][role_index]['name'],
|
|
'opinion': role_opinion
|
|
})
|
|
|
|
return redirect(url_for('start_debate', workshop_id=workshop_id))
|
|
|
|
return render_template('start_debate.html', workshop=workshops[workshop_id], workshop_id=workshop_id)
|
|
|
|
@app.route('/workshop/<int:workshop_id>/results')
|
|
def show_results(workshop_id):
|
|
if workshop_id not in workshops:
|
|
return redirect(url_for('index'))
|
|
|
|
# 使用DeepSeek API生成决策要点
|
|
workshop = workshops[workshop_id]
|
|
decision_points = generate_decision_points(workshop)
|
|
workshop['decision_points'] = decision_points
|
|
|
|
return render_template('results.html', workshop=workshop, workshop_id=workshop_id)
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True) |