feat: 添加多Agent决策工作坊项目\n\n- 实现多角色AI代理辩论系统\n- 添加Streamlit交互界面\n- 包含4个专业角色:技术专家、商业分析师、用户体验师、风险顾问\n- 支持实时辩论过程和智能决策要点生成\n- 添加完整的项目文档和依赖配置

This commit is contained in:
音布鲁格 2026-01-09 01:27:23 +08:00
commit 7a5498efb7
4 changed files with 422 additions and 0 deletions

13
.gitignore vendored Normal file
View File

@ -0,0 +1,13 @@
.env
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
env/
venv/
.venv/
.env.local
.env.development.local
.env.test.local
.env.production.local

143
README.md Normal file
View File

@ -0,0 +1,143 @@
# 多 Agent 决策工作坊
🤖 **决策智囊团** - 基于AI的多角色辩论辅助决策平台
## 项目简介
这是一个为团队决策者、产品经理和战略规划师设计的AI辅助决策平台。通过4个专业AI代理技术专家、商业分析师、用户体验师、风险顾问的多角度辩论帮助用户全面分析复杂问题并生成结构化决策要点。
## 核心功能
### 🎯 多角色AI代理辩论
- **技术专家** - 技术可行性、实现难度分析
- **商业分析师** - 市场机会、商业模式评估
- **用户体验师** - 用户需求、易用性分析
- **风险顾问** - 风险识别、不确定性评估
### 🔄 实时辩论过程展示
- 可视化展示代理间的辩论流程
- 实时显示论点、论据和推理过程
- 支持辩论过程的交互控制
### 📊 智能决策要点生成
- 自动总结关键观点和共识
- 生成结构化决策建议
- 提供风险评估和行动方案
## 快速开始
### 环境要求
- Python 3.8+
- DeepSeek API密钥
### 安装步骤
1. 克隆项目
```bash
git clone <repository-url>
cd multi_agent_decision_workshop
```
2. 安装依赖
```bash
pip install -r requirements.txt
```
3. 配置环境变量
创建 `.env` 文件并添加:
```env
DEEPSEEK_API_KEY=your_deepseek_api_key_here
```
4. 运行应用
```bash
streamlit run app.py
```
5. 打开浏览器访问 `http://localhost:8501`
## 使用指南
### 基本流程
1. **输入决策问题** - 在左侧面板输入需要分析的决策问题
2. **开始辩论** - 点击"开始辩论"按钮激活AI代理
3. **观察辩论** - 实时观看4个专业角色的观点碰撞
4. **生成总结** - 辩论结束后生成结构化决策要点
5. **制定计划** - 基于共识制定具体行动计划
### 决策模板
系统内置常见决策模板:
- 产品功能优先级排序
- 技术方案选择评估
- 市场进入策略分析
- 团队资源分配决策
## 技术架构
### 前端
- **Streamlit** - 快速原型开发框架
- **实时更新** - 辩论过程的动态展示
- **响应式设计** - 适配不同屏幕尺寸
### 后端
- **DeepSeek API** - AI对话能力支持
- **多代理协调** - 角色间的对话管理
- **内容分析** - 辩论内容的智能处理
### 数据流
1. 用户输入 → 问题解析
2. 代理激活 → 角色分配
3. 多轮辩论 → 观点碰撞
4. 内容分析 → 决策生成
5. 结果展示 → 用户反馈
## 项目结构
```
multi_agent_decision_workshop/
├── app.py # 主应用文件
├── requirements.txt # 项目依赖
├── README.md # 项目说明
└── .env # 环境变量配置
```
## 开发计划
### Phase 1: MVP版本 ✅
- [x] 基础Streamlit界面
- [x] 单个AI代理对话功能
- [x] 简单的辩论流程控制
### Phase 2: 功能完善 🔄
- [ ] 辩论过程可视化优化
- [ ] 更多专业角色代理
- [ ] 辩论内容深度分析
### Phase 3: 高级功能 📈
- [ ] 自定义角色配置
- [ ] 辩论过程导出功能
- [ ] 决策历史记录
## 贡献指南
欢迎提交Issue和Pull Request
### 开发环境设置
1. Fork项目仓库
2. 创建功能分支
3. 提交代码变更
4. 创建Pull Request
## 许可证
MIT License
## 联系方式
- 项目主页: [GitHub Repository]
- 问题反馈: [Issues]
- 功能建议: [Discussions]
---
*让AI成为您的决策智囊团助力更明智的商业决策*

263
app.py Normal file
View File

@ -0,0 +1,263 @@
"""
Agent 决策工作坊 - 主应用
基于DeepSeek API的多角色AI代理辩论系统
"""
import streamlit as st
import os
from openai import OpenAI
from dotenv import load_dotenv
import asyncio
import json
from typing import List, Dict, Any
from datetime import datetime
# 加载环境变量
load_dotenv()
class MultiAgentDecisionWorkshop:
def __init__(self):
"""初始化多代理决策工作坊"""
self.client = OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com"
)
# 定义4个专业角色代理
self.agents = {
"技术专家": {
"role": "system",
"content": "你是一位资深技术专家,擅长从技术可行性、实现难度、技术风险等角度分析问题。你的观点务实、注重细节。"
},
"商业分析师": {
"role": "system",
"content": "你是一位经验丰富的商业分析师,擅长从市场机会、商业模式、投资回报等商业角度分析问题。你的观点注重商业价值。"
},
"用户体验师": {
"role": "system",
"content": "你是一位专业的用户体验设计师,擅长从用户需求、易用性、用户体验等角度分析问题。你的观点以用户为中心。"
},
"风险顾问": {
"role": "system",
"content": "你是一位谨慎的风险顾问,擅长识别潜在风险、评估不确定性、提出风险缓解方案。你的观点保守但务实。"
}
}
def initialize_debate(self, question: str) -> Dict[str, Any]:
"""初始化辩论话题"""
return {
"question": question,
"rounds": 0,
"max_rounds": 3,
"current_speaker": "技术专家",
"debate_history": [],
"start_time": datetime.now()
}
def get_agent_response(self, agent_name: str, debate_context: str) -> str:
"""获取单个代理的回应"""
try:
response = self.client.chat.completions.create(
model="deepseek-chat",
messages=[
self.agents[agent_name],
{
"role": "user",
"content": f"辩论话题:{debate_context}\n\n请从你的专业角度发表观点,并回应其他代理的论点。"
}
],
temperature=0.7,
max_tokens=500
)
return response.choices[0].message.content
except Exception as e:
return f"{agent_name}暂时无法回应:{str(e)}"
def conduct_debate_round(self, debate_state: Dict[str, Any]) -> Dict[str, Any]:
"""进行一轮辩论"""
current_speaker = debate_state["current_speaker"]
# 构建辩论上下文
context = f"问题:{debate_state['question']}\n"
if debate_state["debate_history"]:
context += "之前的讨论:\n"
for entry in debate_state["debate_history"][-3:]: # 只取最近3条
context += f"{entry['speaker']}{entry['content']}\n"
# 获取当前发言者的回应
response = self.get_agent_response(current_speaker, context)
# 更新辩论历史
debate_state["debate_history"].append({
"speaker": current_speaker,
"content": response,
"timestamp": datetime.now().strftime("%H:%M:%S")
})
# 切换到下一个发言者
agent_names = list(self.agents.keys())
current_index = agent_names.index(current_speaker)
next_index = (current_index + 1) % len(agent_names)
debate_state["current_speaker"] = agent_names[next_index]
debate_state["rounds"] += 1
return debate_state
def generate_decision_summary(self, debate_history: List[Dict]) -> str:
"""生成决策要点总结"""
try:
# 构建辩论内容摘要
debate_content = "辩论记录:\n"
for entry in debate_history:
debate_content += f"{entry['speaker']}{entry['content']}\n"
response = self.client.chat.completions.create(
model="deepseek-chat",
messages=[
{
"role": "system",
"content": "你是一位专业的决策顾问,擅长从多角度辩论中提取关键观点、识别共识与分歧,并生成结构化的决策建议。"
},
{
"role": "user",
"content": f"请基于以下辩论记录,生成决策要点总结:\n\n{debate_content}\n\n请提供:\n1. 关键观点汇总\n2. 主要共识领域\n3. 重要分歧点\n4. 风险评估\n5. 行动建议"
}
],
temperature=0.5,
max_tokens=800
)
return response.choices[0].message.content
except Exception as e:
return f"总结生成失败:{str(e)}"
def main():
"""主应用函数"""
st.set_page_config(
page_title="多 Agent 决策工作坊",
page_icon="🤖",
layout="wide"
)
st.title("🤖 多 Agent 决策工作坊")
st.markdown("### 通过AI代理的多角度辩论助力智能决策")
# 初始化工作坊
if "workshop" not in st.session_state:
st.session_state.workshop = MultiAgentDecisionWorkshop()
if "debate_state" not in st.session_state:
st.session_state.debate_state = None
if "debate_in_progress" not in st.session_state:
st.session_state.debate_in_progress = False
# 侧边栏 - 控制面板
with st.sidebar:
st.header("控制面板")
# 决策问题输入
question = st.text_area(
"请输入决策问题:",
placeholder="例如:我们应该开发一个新的移动应用吗?",
height=100
)
# 开始辩论按钮
if st.button("🚀 开始辩论", type="primary", use_container_width=True):
if question.strip():
st.session_state.debate_state = st.session_state.workshop.initialize_debate(question)
st.session_state.debate_in_progress = True
st.rerun()
else:
st.warning("请输入决策问题")
# 辩论控制按钮
if st.session_state.debate_in_progress:
col1, col2 = st.columns(2)
with col1:
if st.button("⏭️ 下一轮", use_container_width=True):
if st.session_state.debate_state["rounds"] < st.session_state.debate_state["max_rounds"]:
st.session_state.debate_state = st.session_state.workshop.conduct_debate_round(
st.session_state.debate_state
)
st.rerun()
else:
st.session_state.debate_in_progress = False
st.rerun()
with col2:
if st.button("⏹️ 结束辩论", use_container_width=True):
st.session_state.debate_in_progress = False
st.rerun()
st.markdown("---")
st.markdown("### 参与代理")
for agent_name in st.session_state.workshop.agents.keys():
st.markdown(f"- {agent_name}")
# 主内容区
col1, col2 = st.columns([2, 1])
with col1:
st.header("辩论过程")
if st.session_state.debate_state:
# 显示辩论进度
progress = min(st.session_state.debate_state["rounds"] / st.session_state.debate_state["max_rounds"], 1.0)
st.progress(progress, text=f"辩论进度:{st.session_state.debate_state['rounds']}/{st.session_state.debate_state['max_rounds']}")
# 显示辩论历史
for entry in st.session_state.debate_state["debate_history"]:
with st.chat_message("user", avatar=f"👤"):
st.markdown(f"**{entry['speaker']}** ({entry['timestamp']})")
st.write(entry["content"])
# 显示当前状态
if st.session_state.debate_in_progress:
st.info(f"🔄 等待 {st.session_state.debate_state['current_speaker']} 发言...")
else:
st.success("✅ 辩论已完成!")
# 生成总结
if st.button("📊 生成决策总结"):
with st.spinner("正在生成决策要点..."):
summary = st.session_state.workshop.generate_decision_summary(
st.session_state.debate_state["debate_history"]
)
st.session_state.summary = summary
if "summary" in st.session_state:
st.markdown("### 决策要点总结")
st.write(st.session_state.summary)
else:
st.info("👆 请在左侧输入决策问题并开始辩论")
with col2:
st.header("决策助手")
# 快速决策模板
st.markdown("### 快速决策模板")
templates = [
"产品功能优先级排序",
"技术方案选择评估",
"市场进入策略分析",
"团队资源分配决策"
]
for template in templates:
if st.button(template, use_container_width=True):
st.session_state.debate_state = st.session_state.workshop.initialize_debate(template)
st.session_state.debate_in_progress = True
st.rerun()
st.markdown("---")
st.markdown("### 使用说明")
st.markdown("""
1. 输入决策问题
2. 点击开始辩论
3. 观察AI代理的多角度分析
4. 生成决策要点总结
5. 基于共识制定行动计划
""")
if __name__ == "__main__":
main()

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
streamlit>=1.28.0
openai>=1.0.0
python-dotenv>=1.0.0