huibao/backend/test_ai_summary.py

101 lines
3.9 KiB
Python
Raw Permalink Normal View History

"""
手动测试单份报告的AI分析调试版
"""
import asyncio
import sys
sys.path.insert(0, ".")
from app.database import AsyncSessionLocal, init_db
from app.models import Report, AnalysisResult
from app.services.ai_analyzer import ai_analyzer
from sqlalchemy import select, delete
from sqlalchemy.orm import selectinload
async def test_single_report():
print("=" * 60)
print("调试AI分析 - 测试单份已提取的报告")
print("=" * 60)
await init_db()
async with AsyncSessionLocal() as db:
# 找一份有提取内容但AI总结为空的报告
stmt = select(Report).where(
Report.is_extracted == True,
Report.analysis_status == "completed"
).options(
selectinload(Report.company),
selectinload(Report.extracted_contents),
selectinload(Report.analysis_results)
).limit(1)
result = await db.execute(stmt)
report = result.scalar_one_or_none()
if not report:
print("❌ 没有找到符合条件的报告")
return
print(f"\n报告: {report.title}")
print(f"公司: {report.company.short_name}")
print(f"提取内容数: {len(report.extracted_contents)}")
print(f"分析结果数: {len(report.analysis_results)}")
# 检查是否有summary类型的分析结果
has_summary = any(r.analysis_type == "summary" for r in report.analysis_results)
print(f"有AI总结: {has_summary}")
if not has_summary and report.extracted_contents:
print("\n→ 尝试生成AI总结...")
# 收集已有的章节分析
section_analyses = [r for r in report.analysis_results if r.analysis_type == "section"]
print(f"已有章节分析: {len(section_analyses)}")
if section_analyses:
# 将章节分析转换为summarize_analyses需要的格式
valid_results = []
for s in section_analyses:
valid_results.append({
"section_name": s.section_name,
"analysis": s.summary,
"success": True
})
company_name = report.company.short_name or report.company.company_name
print(f"调用AI汇总{len(valid_results)} 个章节...")
summary = await ai_analyzer.summarize_analyses(valid_results, company_name, report.title)
print(f"\n汇总结果:")
print(f" success: {summary.get('success')}")
print(f" tokens: {summary.get('tokens', 0)}")
if summary.get("success"):
print(f" summary (前500字): {summary.get('summary', '')[:500]}")
# 保存结果
final_analysis = AnalysisResult(
report_id=report.id,
analysis_type="summary",
section_name="综合分析",
ai_model=ai_analyzer.model,
summary=summary["summary"],
token_count=summary.get("tokens", 0),
is_final=True
)
db.add(final_analysis)
await db.commit()
print("\n✅ AI总结已保存")
else:
print(f"\n❌ 汇总失败")
if "error" in summary:
print(f" 错误: {summary.get('error')}")
else:
print("❌ 没有章节分析,无法生成汇总")
else:
print("\n✅ 报告已有AI总结无需重新生成")
if __name__ == "__main__":
asyncio.run(test_single_report())