YAOTU INSIGHTS

AI中台落地数字公关行业:Infoseek架构设计与实战复盘

AI中台落地数字公关行业:Infoseek架构设计与实战复盘
数字公关行业做AI中台乍一听是风马牛不相及的两个概念可真把Infoseek这个项目做下来我才意识到AI中台恰恰是解决数字公关行业一堆陈年烂账的最佳工具。我在某公司主导这个项目的架构设计与落地最大的感受是这个行业的业务链路比大多数互联网业务都要长数据源杂、格式乱、实时性要求高还要跟复杂的媒体生态打交道。一套架构合理的AI中台能把原来靠人肉堆出来的舆情监测、媒体分析、内容发布压成一条自动化的流水线。这篇文章会从Infoseek的立项背景、架构分层、关键模块实现、数据工程与模型服务、生产环境稳定性这几个维度完整复盘。不写PPT式的架构图也不堆概念只讲我们实际怎么设计、怎么选型、怎么写代码、怎么排故障。适合正在做AI平台、自然语言处理、数据工程相关项目的工程师也适合想了解中台化改造到底怎么落地的技术团队负责人参考。1. 立项背景数字公关为什么需要AI中台1.1 行业痛点数据分散、响应慢、效果难量化数字公关的业务核心是舆情监测、媒体关系管理、内容发布与效果评估。听起来不复杂但实际运作起来每个环节都有各自的“历史包袱”而且这些包袱不是靠多招几个人就能解决的它们本质上都是数据处理和分析的问题。先说舆情监测。公关团队需要从新闻门户、社交媒体、垂直社区、短视频评论区等多个渠道采集信息。每个渠道的数据格式都不一样有的是标准JSON接口有的是抓HTML页面有的干脆就是截图需要OCR处理。更麻烦的是数据质量参差不齐重复信息、垃圾广告、水军评论混杂在一起直接喂给NLP模型做情感分析准确率根本没法看。再说媒体关系。传统的媒体关系维护基本靠Excel表格加通讯录记者擅长的报道领域、历史发稿偏好、合作亲密度这些信息全都散落在各个公关人员的大脑中。一个人离职整个客户关系网络就断了一截。这种知识资产没有沉淀成系统数据是数字公关行业最被低估的问题。我们花在媒体关系维护上的精力远超外界的想象但产出的价值很难度量也很难传承。最后是内容发布。从新闻稿到社交媒体短文案内容形态差异极大撰写工作量也完全不同。品牌方经常要求“同一事件、多渠道适配发布”这个需求背后是大量重复劳动。一个活动下来公关顾问要手动改写十几个渠道的文案版本每个版本还要符合对应平台的语气和格式规范效率极低。Infoseek立项的直接契机是某一次大型品牌危机事件。当时我们靠人工监测舆情从发现负面信息到出具完整分析报告花了将近12个小时。对公关行业来说这个响应速度意味着品牌已经错过了最佳处理窗口。所以公司下决心做一套AI中台把数据采集、分析、决策辅助、内容生成、发布追踪整条链路打通。项目代号定名Infoseek含义是“在信息海洋里找到方向”。1.2 方案对比自研中台 vs 采购外部服务立项之后第一个争论就是“自己造还是买”。市面上确实有现成的舆情监测SaaS和内容管理工具但深入调研下来发现三个硬伤。第一数据源不可控。第三方服务的数据覆盖范围是它的优势也是风险新闻渠道可能缺漏、媒体分类逻辑跟我们的业务认知对不上出了问题连排查入口都没有。更难受的是平台升级时规则变动不可预期直接影响下游分析的一致性。第二定制化成本高。公关业务高度依赖“怎么界定事件”“怎么判断媒体层级”“怎么衡量传播效果”这些业务逻辑非常微妙通用产品很难贴合实际工作流。采购一套SaaS看起来便宜但要在上面做定制开发费用和时间往往比自研还高。第三也是最重要的一点——数据资产归属问题。舆情数据、媒体画像数据、历史案例数据是公关公司最核心的资产。放在别人的SaaS平台上等于把家底交给了竞争对手。这个角度一摆出来自研就成了唯一合理的选择。技术团队当时的共识是哪怕初期的投入大一点也要把这套平台握在自己手里。技术选型上我们采用了一个偏保守的组合Python做算法生态服务层用Java/Go基础设施跑K8s。理由是Python在NLP领域的工具链最成熟模型迭代效率最高而服务层需要高并发、高稳定性Java/Go更合适。虽然看起来是“两套技术栈”增加了团队负担但实际上算法团队和工程团队的边界也借此划清了协作反而更顺畅。2. 总体架构六层模型与核心链路2.1 分层设计总览Infoseek的整体架构按功能边界分成六层从下往上依次是基础设施层、数据接入层、数据加工层、智能分析层、业务服务层、应用展示层。每层之间通过明确的标准接口交互规则是禁止跨层调用。这个约束一开始执行起来很痛苦尤其是算法团队总想绕过业务服务层直接写数据后来靠代码评审机制才逐步形成习惯架构也确实因此保持了干净。基础设施层跑在K8s集群上。由于客户数据敏感度高我们没有把数据放到公共云环境而是用通用硬件搭建了私有化的基础环境保证数据不出域。集群划分了dev、staging、prod三个环境用命名空间和资源配额做隔离不同环境的模型服务可以独立发布、独立回滚。这套环境隔离机制在后期迭代频繁时帮了大忙。数据接入层负责对接所有外部数据源。这里有一个关键的设计决策业务服务不允许直接调外部API所有数据统一收口到一个数据接入网关。这个网关负责协议适配、频率限制、鉴权管理、数据格式标准化。无论上游数据源怎么变下游模型和服务只面对一种统一的数据结构。网关层还承担了采集资源的调度避免多个模块重复抓取同一数据源。数据加工层负责清洗、去重、实体识别、事件聚类产出的是“干净的语义化数据”。一条舆情记录在这里会被标注出发文账号、内容主题、涉及品牌、情感倾向、传播路径等结构化字段。这一层是所有模型服务的地基加工质量直接决定上层分析的准确性。智能分析层是“AI中台”这个名字含义最集中的体现承载了情感分析、事件聚类、媒体关系图谱、传播路径分析、内容生成、效果预测等模型服务。设计上这层完全不感知业务细节只提供“输入数据、输出结论”的标准接口。模型之间不做直接调用统一通过服务网关走标准协议这样单个模型升级替换时不影响其他模块。业务服务层负责面向公关业务场景做编排。比如“危机预警工单”就是由舆情监测、事件聚类、风险等级评估三个模型服务组合而成的。业务规则比如负面占比超过阈值就触发预警放在这层但业务层完全不关心背后的模型怎么实现。应用展示层是给公关顾问和客户看的界面包括舆情大屏、媒体关系工作台、内容中心、报告生成器等这一层做得很薄核心逻辑都在下层。2.2 核心链路从数据接入到业务输出拿危机预警场景举例完整的数据链路是外部数据源 → 数据接入网关 → 消息队列 → 流式计算清洗 → 语义化标注 → 向量化 → 舆情服务判定 → 触发告警 → 生成分析简报 → 推送到工作台这条链路里最容易被忽视的是消息队列和流式计算框架的配合。我之前做过的一些项目里很多人直接把接入网关的数据写进数据库靠定时任务去扫。后果就是舆情发现永远有延迟而且数据库压力巨大。用消息队列做削峰缓冲让流式计算做实时清洗才能把从数据产生到触发告警的端到端延迟控制在秒级。实时链路的另一侧是离线链路。每天凌晨离线任务把当天的全量数据回放一遍重新计算更精细的特征指标产出日级报告。实时和离线共用一套数据源通过统一的事件时间戳对齐。这里想强调一个经验AI中台项目里实时链路和离线链路一定要从一开始分开设计不要图省事全走实时。因为离线链路容忍小时级延迟却能做更深的计算两个通道各司其职才是正解。实时链路保证“快”离线链路保证“准”两条腿走路才不会瘸。3. 关键技术模块的实现与踩坑3.1 舆情监测多源采集与实时NLP流水线舆情监测是Infoseek最早启动、也是踩坑最多的模块。这个模块要解决的核心问题是从海量、异构、高噪音的数据源里实时识别出与品牌相关的舆情事件并判断情感倾向和风险等级。整个模块的数据流可以拆成采集和NLP流水线两部分来看。数据采集层面我们给每种数据源设计了一套独立的采集适配器。新闻门户类用RSS加HTML解析社交媒体类走官方开放接口论坛类用结构化解析。适配器输出的数据结构统一为source_id、source_type、content、author、publish_time、url、raw_metadata。这个统一结构是后面所有下游逻辑的基础定协议时多花一天后面省一个月。采集频率是需要细心设计的参数。最开始所有数据源统一5分钟采集一次结果冷门论坛的采集完全没意义热门新闻门户的5分钟粒度又漏掉突发消息。后来改成动态调度采集频率由过去24小时的数据产出量决定热门源缩短到1分钟冷门源放宽到30分钟。这个改动让采集资源利用率提升了大约40%同时突发消息的发现速度也明显改善。NLP流水线的标准流程是文本清洗 → 分句 → 实体识别 → 事件判定 → 情感分析 → 标签化。文本清洗看起来简单藏了很多坑。公关语料里大量出现“#话题#”“【标题】”这类特征符号还有各种URL。我们的清洗规则里有二十多条正则正则的优先级顺序直接影响效果。比如必须先处理URL再处理HTML标签否则URL里的参数会被当成正文保留下来。这个顺序问题我们在联调阶段反复踩最后写成了单元测试用例固定下来。情感分析我们对比过多种方案。最早的版本用情感词典匹配效果太粗糙公关语境里的反讽和对比句式完全识别不出来。后来换成预训练语言模型微调用的是中文RoBERTa权重训练数据来自历史舆情工单的人工标注结果前后标了大概8000条样本覆盖十几个行业事件类型。这里有一个容易犯的错误直接拿通用情感分析模型套到公关场景。通用模型对“股价下跌”会判成负面但对公关语境里常见的“官方回应”“企业声明”这些中性内容经常误判。我们最终在通用模型基础上增加了“事件-品牌-情感”三元组结构让模型判断情感时能结合事件对象。比如“某品牌被投诉”和“某品牌回应投诉”是两个完全不同的事件情感倾向也不一样。3.2 媒体关系图谱知识图谱的构建与查询媒体关系图谱是Infoseek最有“中台味道”、也最具业务价值的模块。它把记者、媒体机构、品牌方、报道主题之间的关系建模成知识图谱支撑媒体推荐、关系亲密度计算、投放效果预测这些上层应用。对整个平台来说这个模块是知识沉淀的核心载体也是最能体现差异化能力的部分。图谱构建分三步。第一步是实体抽取。从历史稿库、媒体通讯录、发稿记录里用NER模型抽取记者名、媒体名、主题词、品牌名。这里没有一上来就上大模型而是规则加传统NER模型组合因为记者的称呼方式相对固定“某报记者某某”“XX周刊记者”这些模式用正则能覆盖八九成剩下的模糊情况再靠模型兜底。第二步是关系构建。实体间关系包括“隶属于”“报道过”“合作过”“关注领域”等类型。关系的建立一部分靠显式数据发稿记录里稿子的归属一部分靠隐式推导一篇深度稿里同时出现记者和某品牌就建立一条“报道过”关系。隐式推导需要设置置信度阈值起初阈值设得太低导致大量误报关系调了两版才稳定。第三步是存储与查询。我们选图数据库而不是关系型数据库因为媒体关系的查询模式天然是“从记者出发找它报道过的品牌再找跟这个品牌合作的媒体机构”这种多跳查询。这种查询用SQL写关联要join七八张表性能差到没法用。图数据库的查询语言表达这种模式就直观得多一个典型查询长这样MATCH (j:Journalist)-[:REPORTED_ON]-(b:Brand)-[:SERVES]-(m:MediaOutlet) WHERE b.name 某品牌 RETURN j.name, m.name, count(*) AS co_occurrence ORDER BY co_occurrence DESC LIMIT 20这个查询能实时返回跟某品牌关联最紧密的记者和媒体名单公关团队做活动邀约时直接拿名单定向沟通替代了过去靠经验翻通讯录的原始方式。图谱构建最大的问题是数据稀疏。头两三个月实体和关系数量少查询结果没有参考价值。解决方法是把历史项目数据全部回灌同时接入公开的行业媒体目录做种子数据。这里有一条经验图谱类项目不要等数据攒够了再上线应该设计成“边跑边长”的模式——图谱持续更新业务查询基于当前快照越用越准。如果一开始就追求完整项目往往会死在漫长的等待期里。3.3 智能内容生成RAG与模板引擎的融合内容生成模块解决“同一事件、多渠道适配发布”的需求走了一条渐进路线没有一上来就追求全AI生成。第一版是纯模板引擎。预置新闻稿、社交短文案、视频脚本三类模板通过变量填充实现批量产出。这个方案最大的优点是可控性强模板写死之后生成结果完全可预期不存在幻觉风险缺点也很明显——写出来的内容千篇一律不同品牌的稿子换个名字就是同一篇完全没有策略差异和表达层次。第二版引入检索增强生成RAG。把公司历史上积累的优质稿件、品牌调性文档、媒体投放风格指南全部向量化存储。生成时先从向量库检索相关参考再交给大模型改写既解决了模板引擎“没灵性”的问题又有参考资料兜底幻觉概率明显降低。实现层面我们用一个通用的中文Embedding模型做向量化向量数据库选用支持过滤检索的方案索引上按媒体类型和品牌标识建了过滤字段。检索的TopK设置为8生成时把检索结果和用户需求一起拼进Prompt核心逻辑用伪代码表示# 伪代码示例RAG生成流程 from vector_db import VectorStore from llm_service import LLMClient def generate_copy(brand, event_desc, media_type): store VectorStore(indexbrand_corpus) refs store.search( queryevent_desc, filters{brand: brand, media_type: media_type}, top_k8 ) prompt build_prompt( system你是资深公关文案参考以下历史稿件风格不得虚构事实。, references[r.content for r in refs], taskevent_desc ) return LLMClient.generate(prompt, temperature0.3)Prompt里有两个参数值得说一下。temperature设成0.3是为了保证生成内容稳定可控公关文案不同于创意写作事实准确性优先。RAG检索结果直接拼进Prompt是最简单的做法如果参考文档太长还需要增加重排环节把最相关的3到4篇排到最前面。踩过的坑是向量检索偶尔会召回语义相似但事实无关的文档。比如用户要写“新品发布会”的稿子检索结果可能召回一篇“年度总结”里同样提到该品牌的文章生成时就把不相关信息混进去了。对策是在检索环节加一路关键词过滤做一次“语义检索关键词再筛选”的二次校验实测生成质量提升非常明显。这个教训也印证了前面那句话RAG不是把文本扔进向量库就完事召回质量直接决定生成质量。4. 数据工程与模型服务实战4.1 数据管道从原始语料到训练样本AI中台里算法模型只是冰山一角训练数据从哪来才是最头疼的。Infoseek的数据管道一开始非常原始——从数据库导出人工打标签用脚本切分训练集、验证集、测试集。一两百条样本还能忍样本量过千之后彻底失控标注质量和进度都跟不上模型迭代节奏。后来搭了一套半自动标注平台核心设计是“机器预标注人工修正”。模型先对未标注样本给出预测和置信度标注员只处理置信度低的样本置信度高的直接入库。标注效率提升了大约三倍同时持续收集难例用于模型迭代。平台还记录了每一条标注的操作日志溯源时能查到是谁、在什么时候、基于什么上下文做的标注决定这对标注质量的持续改进很关键。特征工程方面第一版情感分析模型只用了文本本身效果一般。后来加入发布账号粉丝量、历史发帖情感倾向、发布时间段、内容长度这些元特征模型准确率提升明显。这里想强调一个观念NLP模型的输入不只有文本把业务场景里的元数据合理编码成特征往往比换一个更大的模型更有效。模型再大没有业务特征context的支撑也是“看不见行业”的通用模型。训练流程上我们固定使用基于Python生态的深度学习框架数据集用版本化存储管理。每个训练任务的模型产物、超参数、训练数据版本都记录下来好处是模型出了问题能迅速定位是哪批数据或哪个超参导致的不用靠猜。这套训练管理机制从第一天就建立到后期模型数量增长到十几个时维护成本低得让人庆幸当初的决定。4.2 模型部署推理服务的性能调优模型服务化是我负责的部分。Infoseek有十几个模型服务覆盖情感分析、实体识别、事件聚类、内容生成等多个方向。最开始每个模型单独部署一个服务自治性确实好但很快暴露出资源浪费的问题。后来做了两件事。第一把可以合并的模型按推理链路整合——实体识别和情感分析在NLP流水线里是先后执行的就合并成一个服务内部串联省掉一次HTTP调用的开销。第二给模型服务加自动扩缩容策略按队列积压量触发扩容高峰期自动拉起副本闲时缩到最小副本。扩容不能只看CPU要看真实处理能力所以我们用“队列积压数”作为扩缩容的触发信号比纯资源指标更贴合业务。推理性能调优最有效的三个手段是模型量化、批处理、结果缓存。模型量化把FP32权重转成FP16甚至INT8推理延迟降低一半以上精度损失在可接受范围。批处理把多个请求合并到一次GPU执行吞吐量提升明显。结果缓存针对短时间内的重复查询同一个事件被多个用户同时查看舆情分析结果几分钟内不变直接命中缓存。这三个手段组合下来单机吞吐量提升了近三倍。服务接口设计遵循一个原则返回结构化结果而非原始文本。情感分析接口返回的不只是negative/positive标签而是带置信度、关键语句索引、涉及品牌实体等字段。这样下游业务服务可以自由组合这些字段不用再爬回文本里解析。接口契约先定义清楚前后端并行开发才不用等来等去。5. 稳定性与安全生产环境必须过的坎5.1 高可用架构与容灾数字公关系统的稳定性要求比一般业务系统更特殊越是重大危机时刻系统越不能宕机而重大危机恰恰是流量最高的时刻。所以高可用方案必须提前规划核心系统全部多副本部署数据库用主从加半同步复制消息队列做了跨可用区容灾。这些基础工作看似无趣但在真正的压力场景里它们决定了系统的生死。容量规划的经验尤其重要。舆情监测服务的容量不能按平均值估必须按峰值估。我们测算过一次大型品牌危机事件带来的舆情数据量是日常的5到10倍。如果按日常流量的2倍规划容量事故发生时系统必然被打爆。设计原则是核心链路按最大可能峰值预留非核心链路允许降级降载。这套原则在几次压测中反复验证最终定格为容量规划的默认基线。降级策略同样关键。系统过载时优先保障数据采集不丢数据——即使分析服务跟不上原始数据也必须完整落库分析延迟可以事后补算数据一旦丢掉就永远找不回来了。这个“采集优先、分析可降级”的优先级策略在几次真实的压力测试中挽救了系统。运维团队一开始觉得这个策略“太保守”后来看到异常流量场景里采集通道稳如磐石才意识到顺序设计是深思熟虑过的。5.2 常见问题速查表Infoseek这一年多的开发和运维过程中我们积累了不少问题排查经验。有些问题是模型层面的有些是数据链路层面的还有些纯粹是架构设计埋下的雷。我把典型的几类问题整理成一张速查表对做类似中台项目的团队应该会有直接参考价值现象可能原因排查思路舆情数据延迟超过1分钟消息队列消费者堆积、下游NLP服务过载查看消费者lag指标检查推理服务队列积压情况情感分析结果明显异常清洗规则误伤、模型版本未更新回放原始文本走单条调试对比标注结果知识图谱查询超时查询缺少索引、关系数据膨胀用查询计划分析性能瓶颈对热点节点建索引生成内容包含不实信息RAG召回无关文档、Prompt约束不足检查向量检索结果增加关键词再筛选服务重启后响应变慢缓存穿透、预热机制缺失增加启动预热任务提前加载热点数据跨天统计口径不一致实时与离线链路时间戳对齐问题统一事件时间戳取数逻辑增加对账任务表格里最想提醒大家的是第一行舆情数据延迟90%的情况不是单点故障而是链路中某个消费者处理不过来。排查时不要只盯一个环节要从数据接入到分析输出的整条链路逐个排查。我见过太多团队在某一台机器上折腾半天结果问题出在另一个环节的队列深度上。全链路监控指标从一开始就要打通否则事后追查的成本高得离谱。6. 写在最后一些个人的经验和建议Infoseek做下来我最大的体会是AI中台的价值不在单个模型的精度而在整条链路的稳定性和业务适配度。模型再强数据进不来、结果出不去一切都是空谈。所以这类项目里架构设计和数据工程的分量比算法本身更重。算法是放大器架构和数据的质量和稳定性才是底数。另一个经验是AI中台项目一定要让业务人员全程参与。Infoseek的媒体关系图谱和内容生成模块如果没有公关团队从业务角度持续反馈方向会跑偏得很远。技术团队和业务团队每周做一次例行评审让业务人员直接看模型产出的实际样例听他们讲“这里不对”“那里缺失”这种反馈远比盯指标曲线有用。模型指标漂亮但业务不买单等于白做。最后分享一个小技巧复杂度高的中台项目上线节奏应该按模块拆分不要搞一刀切的大版本发布。我们的做法是每个核心模块独立灰度上线先在小流量客户群体内跑两周确认稳定后全面放开。这样即使某个模块出了问题影响面也可控。这个节奏看起来慢实际上因为每个模块都稳整体反而比激进发布更快到达稳定状态。如果后续扩展这个平台我认为两个方向最有价值一是把媒体关系图谱和内容生成打通做到“知道该联系谁也知道该说什么”的闭环推荐二是引入更细粒度的传播效果归因分析让AI中台不只是辅助执行还能直接指导公关预算分配。这些设想已经排进Infoseek的路线图后面有进展我再单独写文章分享。