1. 项目概述当大语言模型遇上电影推荐一场关于“个性”的探索最近在捣鼓一个挺有意思的项目核心是想看看我们每个人的“个性”——比如你是更爱冒险还是更保守是喜欢深思熟虑还是凭直觉行事——会如何影响你在一套智能推荐系统里的探索行为。这个系统不是传统的“猜你喜欢”而是用大语言模型驱动的多智能体系统来生成和呈现多样化的电影推荐。简单说我们想搞清楚一个内向的、喜欢分析的人和一个外向的、喜欢新鲜刺激的人面对同一套能提供海量、多元电影建议的AI系统他们的点击、浏览和最终选择会有什么不同这背后不仅仅是推荐算法准不准的问题更是人机交互中“人”的因素如何与“机”的智能相互塑造的过程。如果你对个性化推荐、LLM应用或者多智能体系统感兴趣尤其是想了解如何将心理学特质融入AI系统设计那这个项目的思路和踩过的坑或许能给你一些启发。2. 系统核心架构与设计思路拆解2.1 为什么选择LLM多智能体架构传统的推荐系统无论是协同过滤还是内容过滤本质上是“静态匹配”将用户的历史行为看过、点赞和物品电影的特征类型、演员映射到一个向量空间然后计算相似度。这种方法高效但有两个明显的局限一是容易陷入“信息茧房”越推越窄二是难以解释和引导“探索”行为——系统不知道你为什么不点某个推荐是因为不感兴趣还是因为没看懂描述而大语言模型的出现改变了游戏规则。LLM拥有强大的自然语言理解和生成能力它能“理解”一部电影的剧情梗概、影评甚至文化背景并用人类可读的方式组织推荐理由。但单个LLM智能体更像一个博学的顾问它可能给出一个很好的答案但缺乏“辩论”和“视角竞争”的过程。因此我们引入了多智能体系统。在这个项目中我们设计了多个具有不同“个性”或“职能”的智能体它们共同协作来完成推荐任务。例如探索者智能体它的“个性”是冒险和猎奇负责从电影库中挖掘冷门、高口碑或类型混合的影片。保守者智能体它的“个性”是稳健和安全倾向于推荐与用户历史偏好高度吻合、大众评价稳定的影片。解说者智能体它不直接推荐电影而是负责为其他智能体推荐的电影生成吸引人、且侧重不同角度的描述文案如侧重剧情深度、视觉奇观或情感冲击。这些智能体之间可以通过一个“协调者”进行简单的辩论或投票最终呈现给用户的不是一个列表而是一组带有鲜明视角和理由的推荐选项。这种架构的优势在于多样性内生多样性不再依赖于复杂的数学抽样而是源于不同智能体角色的预设差异。可解释性强每个推荐都附带由智能体生成的、符合其“人设”的理由用户能直观感受到差异。灵活可控通过调整智能体的数量、角色定义即提示词工程可以轻松改变整个系统的推荐风格。2.2 用户个性特征如何量化与接入这是项目的另一个核心挑战。我们不能直接问用户“你是什么性格的人”这既不准确也干扰体验。我们采用了隐式显式结合的方式显式部分轻度在用户初次使用时进行一个非常简短、游戏化的偏好选择。例如展示几组电影海报对让用户快速选择更想看哪一部例如《盗梦空间》vs.《阿甘正传》。这并非严谨的心理测试而是为了获取初始的、粗粒度偏好信号。隐式部分核心主要依赖用户在系统中的交互行为来动态推断和更新其“探索倾向”特征。我们定义了若干维度探索-利用比用户点击“保守者智能体”推荐利用与点击“探索者智能体”推荐探索的频率比例。类型跨越度用户连续观看或点击的电影在类型标签上的差异程度。描述阅读深度用户在点击前停留在电影描述由解说者智能体生成上的平均时长。偏离安全区的幅度用户选择的电影与其历史平均偏好向量之间的余弦相似度变化。这些行为指标会被实时处理形成一个动态的用户画像向量。这个向量并不直接对应心理学上的“大五人格”而是我们系统定义的、用于描述用户在本推荐场景下行为倾向的“操作化特征”。这个特征向量会作为上下文输入到各个智能体的提示词中影响它们生成推荐和描述时的侧重点。例如对于一个近期探索行为活跃的用户“保守者智能体”在生成理由时可能会说“虽然这与您常看的类型略有不同但它的叙事结构非常扎实或许能给您带来稳健的惊喜。”注意这里涉及隐私和伦理设计。所有行为数据仅用于优化本次推荐体验需明确告知用户并获得同意。我们不会生成或存储深度的用户心理档案。3. 多智能体协同推荐的关键实现细节3.1 智能体角色定义与提示词工程智能体的“个性”几乎完全由提示词塑造。这是整个系统的“魔法”发生的地方。写提示词不是简单的指令而是为每个智能体撰写一份详细的“角色说明书”和“工作流程”。以探索者智能体为例其核心提示词结构如下你是一位资深影迷和冒险家你的使命是从电影海洋中为用户挖掘隐藏的珍宝。请遵循以下规则 1. 用户背景{注入动态用户特征如“该用户近期表现出较高的探索意愿”} 2. 当前已知用户偏好{注入用户近期喜欢的电影类型或关键词} 3. 你的任务从提供的电影元数据列表中筛选出3部最符合“探索”精神的电影。选择标准优先级 a) 类型混合或难以定义如科幻黑色喜剧。 b) 来自非主流制片地区或文化背景。 c) 口碑极高如专业影评人评分8但大众知名度较低。 d) 叙事结构或拍摄手法具有实验性。 4. 输出格式严格按JSON输出包含movie_id, title, 以及一个你撰写的、不超过100字的推荐理由。理由必须充满好奇心和感染力避免剧透。保守者智能体的提示词则强调“稳健”、“关联”和“品质保证”其选择标准会优先考虑与用户历史偏好相似度高、票房或流行指数稳定、获奖记录扎实的影片。解说者智能体的提示词更专注于文本改写。它会接收一部电影的基础元数据标题、类型、导演、简短剧情梗概以及一个“解说角度”指令例如“请从‘视觉美学革命’的角度描述这部电影”然后生成一段个性化的描述。实操心得提示词中的细节决定成败。“避免剧透”、“不超过100字”、“严格按JSON输出”这些约束性指令至关重要。初期我们没做严格限制导致LLM生成的回复格式五花八门给后端解析带来了巨大麻烦。另外为用户特征和已知偏好设置清晰的占位符如{user_traits}便于系统动态注入真实数据。3.2 智能体间的协调与决策机制多个智能体“各说各话”之后如何形成最终的用户界面我们采用了一种“竞选-呈现”机制而非简单的投票排名。并行调用用户发起一次推荐请求后系统并行调用“探索者”和“保守者”智能体假设本例中为两个它们分别基于当前用户画像和全局电影库生成自己的推荐列表各3部。去重与合并协调模块接收两份列表首先根据movie_id去重。如果两个智能体推荐了同一部电影这通常是一部“安全区边缘”的佳作我们会将其标记为“共识推荐”。理由增强对于去重后剩下的独特推荐协调模块会调用“解说者智能体”为其生成一个更具吸引力的描述。对于“共识推荐”则会生成一个融合双方视角的描述如“这部作品既保持了您喜爱的扎实叙事又在设定上做出了大胆突破”。前端呈现最终界面并非一个按分数排序的单一列表。我们可能会以不同的板块进行呈现例如“为您精挑细选”共识推荐1-2部“冒险家频道”探索者智能体的独特推荐“经典永流传”保守者智能体的独特推荐 每个板块内的电影顺序可以按该智能体自身的置信度或热度微调但板块本身传达了推荐的逻辑来源鼓励用户根据自己的心态选择浏览哪个板块。这种机制的好处是保留了每个智能体的“声音”将选择权和解释权部分交给了用户而不是用一个黑箱算法替用户做最终决定。这本身也是对用户“探索”行为的一种激励和记录。3.3 电影元数据与向量化处理智能体需要“知识”才能工作。我们准备的电影元数据不止于标题、类型、演员。为了支撑LLM进行深度的理解与比较我们为每部电影构建了丰富的文本档案基础信息标题、导演、主演、上映年份、国家、时长。结构化标签类型、主题如“成长”、“救赎”、“反乌托邦”。文本描述一段200字左右的剧情摘要避免结局、一段由LLM生成的风格化描述如“这是一部充满潮湿 neon 光影的赛博朋克侦探片”。评价整合从专业影评中提取的关键词如“叙事精巧”、“视觉震撼”、“表演细腻”。更重要的是我们使用文本嵌入模型如OpenAI的text-embedding-3-small或开源的BGE模型将每部电影的“综合文本描述”由基础信息风格化描述拼接而成转换为高维向量。这个电影向量库是整个系统的基石它使得快速检索可以根据用户当前偏好向量同样被嵌入到同一空间快速从海量库中召回一批候选电影供各个智能体进行精筛。这比完全依赖LLM从头生成或记忆所有电影要高效、经济得多。计算相似度“偏离安全区的幅度”等用户特征维度就是通过计算用户历史偏好向量与所选电影向量之间的余弦距离来实现的。注意事项嵌入模型的选择至关重要。通用嵌入模型对电影描述可能不够敏感。如果条件允许使用在电影评论文本上微调过的嵌入模型能显著提升相似度计算的质量。初期我们直接用通用模型发现“科幻”和“奇幻”电影常常被混在一起微调后区分度就清晰多了。4. 用户探索行为的追踪与特征更新4.1 定义与埋点哪些行为算“探索”系统需要像一位细心的观察者记录用户与推荐结果的每一次互动。我们在前端设计了详细的埋点曝光哪些推荐板块、哪些电影被展示给了用户。点击用户点击了哪部电影查看详情。深度互动在详情页停留时长、是否播放预告片、是否阅读完整影评。最终决策用户是否将电影加入“想看列表”或直接标记为“已看”。主动反馈极少数的“喜欢”或“不感兴趣”按钮我们刻意弱化了直接评分以减少用户负担。其中“点击”行为是我们的核心分析对象。一次点击并不仅仅是“选择”它包含了丰富的信息用户放弃了哪些曝光项选择了哪一项这项推荐来自哪个智能体探索者还是保守者4.2 动态画像更新算法用户的特征画像不是一成不变的。我们采用了一个基于时间衰减的加权更新算法。核心思想是用户最近的行为比遥远过去的行为更能反映其当前状态。假设我们有用户特征向量 ( U_t ) 在时间 ( t ) 的状态它由多个维度组成如exploration_score探索分数。 当用户在时间 ( t ) 发生一次点击行为时这次行为会生成一个瞬时行为向量 ( A_t )。例如点击了“探索者”推荐的一部冷门科幻片那么 ( A_t ) 在exploration_score维度上会有一个正增量在preference_sci-fi维度上也有增量。更新公式简化为 [ U_{t1} \alpha \cdot U_t (1 - \alpha) \cdot A_t ] 其中( \alpha ) 是衰减因子取值范围在0到1之间。( \alpha ) 越接近1历史记忆越重用户画像变化越缓慢( \alpha ) 越接近0画像对最新行为越敏感。我们为不同的行为类型设定了不同的权重。例如“标记已看”的权重远高于“点击详情”因为前者代表了更强的确认。同时( \alpha ) 本身也可以动态调整例如如果用户连续一周没有活跃那么再次活跃时( \alpha ) 可以暂时调低让系统更快地适应其可能发生变化的兴趣。4.3 探索引导的温和干预一个完全被动适应用户的系统可能会强化用户的固有习惯。我们的系统尝试进行非常温和的、透明的“引导”。例如比例调控如果系统检测到用户的exploration_score持续很低一直点击保守推荐它可能会在下次请求时悄悄给“探索者智能体”的候选池增加一点点权重让一两部更“边缘”但质量极高的电影有机会进入曝光列表。但这绝不意味着用探索推荐完全取代保守推荐。理由措辞对于推荐给保守型用户的探索性电影“解说者智能体”生成的描述会更强调其与用户过往喜好的连接点“虽然题材新颖但导演对人物情感的刻画一如既往地深刻”。板块排序对于高探索倾向用户“冒险家频道”板块可能会在界面上获得更靠前的位置。所有这些干预都是轻微、可解释的。我们的原则是“拓宽选项而非强行扭转”。系统的目标是让用户意识到更多可能性而不是替用户做决定。5. 实际搭建中的挑战与解决方案5.1 性能与成本权衡LLM API的调用策略直接为每个用户、每次请求都用LLM从头生成所有推荐成本极高且延迟大。我们的架构采用了分层处理策略向量召回层快速低成本利用用户当前偏好向量从电影向量库中召回Top-N例如500部候选电影。这一步使用专业的向量数据库如Pinecone, Weaviate或高效的近似最近邻搜索库如FAISS能在毫秒级完成。智能体精筛层按需可控成本将召回到的500部电影的元数据仅文本信息作为上下文连同精心设计的提示词发送给LLM API如GPT-4, Claude 或开源的Llama 3。提示词明确要求LLM只从这500部里挑大大减少了其“胡思乱想”或引用不存在的电影的可能也控制了输入令牌数。结果缓存层对于相同的用户特征向量或非常相似的向量和相同的电影库快照推荐结果可以缓存一段时间。这能有效应对用户短时间内重复刷新或相似用户群体的请求。踩坑实录初期我们曾尝试让LLM直接“想象”或“回忆”电影结果它经常推荐一些根本不存在的电影或者细节错误百出。强制其基于提供的上下文列表工作是保证结果可靠性的关键。另外对于“解说者智能体”由于其输入输出相对标准化可以考虑使用更小、更快的模型如GPT-3.5-Turbo以进一步降低成本。5.2 评估难题如何衡量系统成功推荐系统的传统评估指标如点击率、转化率在这里仍然适用但不够。我们更关心“探索”是否真的发生了。因此我们定义了几个补充指标推荐列表的基尼系数/辛普森多样性指数衡量单次推荐结果中电影在类型、导演、国家等维度上的分布是否足够分散。一个健康的系统应该能在用户愿意接受时提供高多样性的列表。用户探索轨迹的熵值分析一个用户在一段时间内观看电影序列的不可预测性。熵值增加可能意味着探索行为更活跃。长期满意度调查定期如每两周邀请少量活跃用户进行简短问卷问题不是“你喜欢这个推荐吗”而是“近期你是否通过系统发现了让你惊喜的新电影”或“你觉得推荐给你的电影范围是太窄、太宽还是刚刚好”。A/B测试是黄金标准。我们可以将用户随机分为两组对照组使用一个优秀的传统推荐模型如深度矩阵分解。实验组使用我们的LLM多智能体探索系统。 然后比较两组在点击率、观看多样性、长期留存率以及上述探索指标上的差异。这能最有力地证明系统的价值。5.3 提示词的稳定性与幻觉控制LLM的随机性和“幻觉”是生产环境中的噩梦。为了提升稳定性设置低温在调用LLM API时将temperature参数设置为较低值如0.2以减少输出的随机性使结果更可预测。结构化输出强制在提示词中严格要求JSON输出并在后端代码中添加健壮的解析和校验逻辑。如果返回的不是合法JSON则触发重试或降级方案。后处理校验对LLM返回的电影ID在后端与数据库进行校验确保其真实存在。对于“解说者”生成的描述可以设置一个内容安全过滤器避免生成不恰当内容。系统提示词隔离将定义智能体角色的“系统提示词”与每次请求的“用户提示词”包含具体电影列表和用户特征明确分开。这有助于模型更好地保持角色一致性。6. 未来可能的延伸方向这个项目的框架其实可以扩展到很多其他领域。音乐、书籍、新闻、甚至餐厅、旅行目的地的推荐都可以套用“LLM多智能体理解项目用户个性引导探索”这个模式。关键在于如何定义领域内合适的智能体角色例如音乐推荐中的“复古挖掘机”、“独立新声雷达”、“流行风向标”以及如何设计贴合该领域的用户交互行为埋点。另一个延伸方向是让智能体更具“记忆”和“学习”能力。目前智能体之间是相对独立的每次任务都是“从零开始”。未来可以考虑为每个智能体维护一个简单的记忆模块记录它过去给当前用户推荐的成功与失败案例从而在提示词中融入更个性化的经验实现智能体自身的进化。最后关于用户个性特征我们目前使用的是行为衍生的代理特征。一个更大胆的探索是在用户明确同意并确保隐私的前提下尝试将更科学的心理学量表精简版融入初始设置并与后续行为数据相互校准或许能建立更丰富、更立体的用户心智模型让推荐系统不仅懂你的喜好更能理解你偏好背后的原因。这条路需要非常谨慎地处理伦理和隐私问题但无疑是通向更人性化、更贴心智能交互的一个长远方向。