
本系列博客基于一个真实可运行的电商评论舆情分析项目FastAPI LangGraph PostgreSQL Vue3从架构、LLM 工程化、稳定性、数据工程、异步任务、预警通知到前端契约逐步拆解大模型应用落地的每个工程细节。一、痛点开场很多大模型项目止步于能返回一段文本——调一个 API、拼一段 prompt、把结果打印出来就算做完了。但一个真正能被业务长期使用的系统需要把模型放进由数据、流程、权限、容错、任务、观测组成的完整闭环里评论从哪里来、怎么清洗、怎么分析、结果怎么落库、低置信度怎么办、风险怎么预警、报告怎么生成每一步都有工程问题。这篇用一张架构图讲清楚我的电商舆情分析系统如何把原始评论变成运营可执行的风险结论。二、系统定位面向电商运营、品牌和客服团队输入CSV/Excel 评论文件多平台导出列名千奇百怪输出情感分析结果、问题聚类、风险预警、周期报告、可视化看板核心承诺模型输出结构化、可校验LLM 不可用时系统不瘫痪低置信度结果进入人工复核三、整体架构┌─────────────────────────────────────────────────────────┐ │ 前端 Vue3 TypeScript看板/导入/聚类/预警/报告 │ │ Axios → /api/v1JWT 认证Pinia 登录态 │ └──────────────────────────┬──────────────────────────────┘ │ HTTP JWT ┌──────────────────────────▼──────────────────────────────┐ │ FastAPI 应用层backend/api/v1 │ │ auth / ingestion / sentiment / clustering / alert │ │ report / pipeline / opinion / review / tasks │ │ 依赖注入get_current_user、AsyncSessionLocal │ └──────────────────────────┬──────────────────────────────┘ │ 调用 ┌──────────────────────────▼──────────────────────────────┐ │ LangGraph 编排层backend/agents/* │ │ ingestion → sentiment → clustering → alerting → reporting │ │ 每个阶段State / nodes / graph / prompts 四件套 │ └──────────────┬──────────────────────┬───────────────────┘ │ │ ┌──────────────▼─────────────┐ ┌─────▼───────────────────┐ │ LLM 层backend/core │ │ PostgreSQL 事实层 │ │ LLMFactory 统一模型工厂 │ │ reviews / analyses │ │ 结构化输出 熔断 │ │ import_batches │ │ 词典规则降级 │ │ alert_events │ └────────────────────────────┘ │ report_records │ └─────────────────────────┘四、五阶段数据流整个系统可以拆成四段、五个 LangGraph 阶段1. 接入层评论导入parse_file → normalize → dedup → save_batchparse_file解析 CSV/Excel自动探测 UTF-8/GBK 编码normalize把评论内容/内容/comment等别名统一成 canonical 字段评分、时间容错解析用户名脱敏dedup内存 set 预去重 计算 SHA-256 指纹save_batch平台/商品解析(tenant_id, fingerprint)唯一约束幂等落库2. 事实层落库清洗后的评论写入reviews导入批次写入import_batches。核心设计原则原始事实和模型结果分开存模型可以重跑事实不丢。3. 分析层情感分析load_pending → analyze_batch → confidence_gate → save_analysisLLM 结构化输出优先Pydantic Schema 约束模型不可用时降级词典规则结果标记model_nameheuristic置信度 0.75 进入人工复核队列HITL4. 决策层聚类 → 预警 → 报告聚类LLM 聚类降级 TF-IDF KMeans输出主题/簇大小/情感分布/根因预警负面率阈值、突增检测、敏感词三类规则命中写alert_events并推送飞书/钉钉报告聚合统计生成日报/周报/月报落库report_records五、多租户设计JWT 携带tenant_id所有核心 SQL 显式带租户条件评论指纹包含租户(tenant_id, platform, product, 正文)做 SHA-256业务表alert_events、report_records都有tenant_id列# 所有查询的固定套路rowsawaitsession.execute(text(SELECT ... FROM reviews WHERE tenant_id:t AND ...),{t:current_user[tenant_id],...})注意这是应用层隔离生产还需要 Repository 统一注入租户 数据库 RLS 双保险。六、项目目录结构backend/ ├── api/v1/ # HTTP 边界auth/ingestion/sentiment/clustering/alert/report/pipeline/opinion/review/tasks ├── agents/ # 各阶段 LangGraphingestion/sentiment/clustering/alerting/reporting/opinion │ └── name/ # state.py nodes.py graph.py prompts.py ├── core/ # llm_factory / opinion_pipeline / scheduler / config / logger / exceptions ├── schemas/ # 跨层领域模型ReviewAnalysis 等 ├── db/ # migrations.py dao/DAO 层 ├── tasks/ # 异步任务manager.py workers.py ├── notifications/ # 飞书/钉钉 Webhook 通知器 └── mcp_server/ # 评论导入 MCP 工具 frontend/ ├── src/api/ # Axios client 业务接口封装 ├── src/stores/ # Pinia 登录态 ├── src/views/opinion/ # 看板/导入/聚类/预警/报告页面 └── src/router/ # 路由守卫七、关键技术选型理由组件选择理由后端框架FastAPI异步 I/O、Pydantic 校验、自动 OpenAPI 文档流程编排LangGraph多阶段有状态工作流便于扩展 checkpoint/人工介入数据库PostgreSQL事务 JSONB 租户隔离一把抓LLM 接入LangChain DeepSeek兼容 OpenAI 协议init_chat_model统一初始化前端Vue3 TS Element Plus中后台生态成熟ECharts 图表向量库Milvus可选只在相似评论检索有明确收益时引入八、诚实边界当前版本是可运行的业务原型不是完全生产级异步任务是进程内内存实现多进程不共享、重启丢失趋势图仍是模拟数据RBAC 未完整落地Milvus 是演示级接入这些都会在后续系列文章里逐个展开。九、总结一个 LLM 舆情系统的核心不是模型多强而是数据 → 流程 → 容错 → 决策的闭环是否完整。本文是系列第一篇下一篇讲最核心的工程点LLM 结构化输出——如何让模型稳定返回可落库的 JSON而不是解析 JSON 地狱。下一篇预告《LLM 结构化输出实战Pydantic Function Calling 告别解析 JSON 地狱》