sunpayus/app.py

133 lines
4.6 KiB
Python
Raw Normal View History

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)