wd666/report/report_generator.py

144 lines
3.9 KiB
Python
Raw Permalink Normal View History

2026-01-07 11:02:05 +08:00
"""
报告生成器 - 汇总辩论内容并生成决策报告
"""
from typing import List
from orchestrator.debate_manager import SpeechRecord
from utils.llm_client import LLMClient
class ReportGenerator:
"""决策报告生成器"""
def __init__(self, llm_client: LLMClient = None):
self.llm_client = llm_client or LLMClient()
def generate_report(
self,
topic: str,
speeches: List[SpeechRecord],
context: str = ""
) -> str:
"""
生成决策报告
Args:
topic: 讨论议题
speeches: 所有发言记录
context: 背景信息
Returns:
str: Markdown 格式的决策报告
"""
# 构建发言摘要
speeches_text = self._format_speeches(speeches)
system_prompt = """你是一位专业的决策分析师,擅长汇总多方观点并生成结构化的决策报告。
你的任务是根据多位专家的讨论生成一份清晰可操作的决策报告
报告格式要求
1. 使用 Markdown 格式
2. 结构清晰重点突出
3. 提炼核心要点不要罗列原文
4. 给出明确的建议和下一步行动"""
user_prompt = f"""## 讨论议题
{topic}
{f"## 背景信息" + chr(10) + context if context else ""}
## 专家讨论记录
{speeches_text}
## 你的任务
请生成一份决策报告包含以下部分
### 📋 议题概述
1-2句话总结讨论的核心问题
### ✅ 支持观点汇总
列出支持该决策的主要理由注明来源角色
### ❌ 反对/风险观点汇总
列出反对意见和风险点注明来源角色
### 🔑 关键决策要点
3-5个需要重点考虑的因素
### 💡 建议与下一步行动
给出明确的建议以及具体的下一步行动项
### ⚖️ 决策框架
提供一个简单的决策框架或检查清单帮助做出最终决策
"""
return self.llm_client.chat(
system_prompt=system_prompt,
user_prompt=user_prompt,
max_tokens=2048
)
def _format_speeches(self, speeches: List[SpeechRecord]) -> str:
"""格式化发言记录"""
formatted = []
current_round = 0
for speech in speeches:
if speech.round_num != current_round:
current_round = speech.round_num
formatted.append(f"\n### 第 {current_round} 轮讨论\n")
formatted.append(
f"**{speech.emoji} {speech.agent_name}**:\n{speech.content}\n"
)
return "\n".join(formatted)
def generate_report_stream(
self,
topic: str,
speeches: List[SpeechRecord],
context: str = ""
):
"""流式生成决策报告"""
speeches_text = self._format_speeches(speeches)
system_prompt = """你是一位专业的决策分析师,擅长汇总多方观点并生成结构化的决策报告。"""
user_prompt = f"""## 讨论议题
{topic}
{f"## 背景信息" + chr(10) + context if context else ""}
## 专家讨论记录
{speeches_text}
## 你的任务
请生成一份决策报告包含以下部分
### 📋 议题概述
1-2句话总结讨论的核心问题
### ✅ 支持观点汇总
列出支持该决策的主要理由注明来源角色
### ❌ 反对/风险观点汇总
列出反对意见和风险点注明来源角色
### 🔑 关键决策要点
3-5个需要重点考虑的因素
### 💡 建议与下一步行动
给出明确的建议以及具体的下一步行动项
### ⚖️ 决策框架
提供一个简单的决策框架或检查清单
"""
for chunk in self.llm_client.chat_stream(
system_prompt=system_prompt,
user_prompt=user_prompt,
max_tokens=2048
):
yield chunk