1. 项目背景与核心问题
去年春节前,我团队接到一个有趣的需求:为某社交平台开发智能祝福语生成功能。产品经理的原话是"要让用户感觉每句祝福都像量身定制的"。我们最初尝试用传统NLP模板生成,结果用户反馈"像群发的拜年短信"——这正是大多数祝福场景的痛点。
问题的本质在于:模板生成的祝福语缺乏个性化关联。当用户输入"给程序员同事的新年祝福"时,系统只会机械组合"新年快乐"+"代码无bug"这类固定搭配。这种"词库拼贴"方式既无法理解接收者的特质,也不能结合具体场景(如年终总结会 vs 团建活动)。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术方案选型
2.1 为什么选择RAG架构
传统方案存在三个致命缺陷:
- 模板库扩展成本高:新增100种职业就需要人工编写数万条模板
- 上下文感知弱:无法结合"去年一起加班赶项目"这类具体记忆
- 表达同质化:相同输入永远输出相同祝福语
我们最终采用RAG(检索增强生成)架构,核心优势在于:
- 动态检索:从向量库匹配最相关的祝福语素材
- 生成控制:用检索结果约束LLM的输出方向
- 冷启动友好:即使没有用户历史数据,也能基于基础向量库生成合理结果
2.2 系统架构设计
整套系统分为三个核心模块:
mermaid复制graph TD
A[用户输入] --> B[向量检索模块]
B --> C[LLM生成模块]
C --> D[情感增强模块]
(注:实际开发中我们使用Milvus向量库+GPT-3.5 Turbo,情感增强模块采用自定义的prompt engineering策略)
3. 关键实现细节
3.1 向量库构建的陷阱
初期我们直接使用公开祝福语数据集构建向量库,结果出现典型问题:
- 语义稀释:"前程似锦"在毕业、升职、新年等场景都被检索到
- 特征冲突:"早日脱单"同时出现在情人节和光棍节语料中
解决方案是采用场景维度隔离:
- 建立多级标签体系(节日类型/关系类型/场合正式度)
- 使用sentence-transformer生成向量时,将标签信息作为前缀:
python复制# 错误做法 text_embedding = model.encode("心想事成")
