Skip to content

langlibai66/TokenDance

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MomentCard

一个面向抖音信息流场景的 AI 卡片原型项目。

MomentCard 试图回答一个问题:如果 AI 不是一个需要用户主动打开、输入和等待的工具,而是一张在信息流里“刷到即成立”的内容卡片,它应该如何理解用户此刻真正需要什么?

本项目对应赛道三「AI 体验:刷到懂你的瞬间」,核心方向是:基于用户原始搜索与交互数据沉淀 Profile Skills,再由实时事件触发,生成用户此时此刻最可能需要的信息流 AI 卡片

我们以搜索行为识别高意图需求,以自然刷视频行为补全偏好证据,以实时事件作为触发器,在“用户画像 × 当前事件 × 即时意图”的交叉点上实现精准推送,满足用户当下需求。

核心动机

传统信息流推荐主要依赖用户刷视频时的停留、点赞、完播、互动等行为。但这些信号并不总能代表用户在某个具体时刻的真实需求。

例如,用户停留在一个美食视频上,可能只是被画面吸引;看完一个旅行视频,也不代表他马上需要行程安排。普通刷视频行为更适合判断长期兴趣,但很难直接说明“此刻需要什么”。

MomentCard 的核心判断是:

真正能产生“刚好懂你”的信息流体验,不应该只根据用户喜欢什么内容,而应该根据用户在某个事件发生时最可能需要什么信息。

因此,本项目不以传统推荐算法为中心,而是把重点放在:

  • 用用户搜索记录锚定高意图需求。
  • 用搜索结果中的视频点击、停留、跳出等行为细化垂直画像。
  • 用自然信息流观看行为作为偏好佐证,而不是主触发依据。
  • 用天气、节气、时间、地点、近期焦虑等事件触发卡片生成。
  • 用 LLM 与 skill-like 画像单元完成 demo 级推荐与生成。

方案概述

MomentCard 的推荐逻辑不是“预测用户会点哪条视频”,而是:

原始搜索与交互数据
        ↓
LLM 抽取意图、偏好、约束和证据
        ↓
沉淀为 Profile Skill
        ↓
实时事件触发相关 Profile Skill
        ↓
生成一张信息流 AI 卡片
        ↓
用户在刷到时直接理解并轻量互动

这里的 Profile Skill 不是传统意义上的推荐标签,也不是单纯的 LLM 工具能力,而是一种可被事件触发调用的用户画像单元。它既记录用户可能关心什么,也记录这个画像应在什么事件下生效、有哪些行为证据、生成卡片时应该遵守什么约束。

Profile Skill Store

Profile Skill Store 是本项目的核心设计。

普通画像可能只会保存:

{
  "likes": ["美食", "羊肉", "火锅"]
}

但 MomentCard 更关注事件下的即时需求,因此画像应该被组织成类似下面的结构:

{
  "skill_id": "cold_weather_food_intent",
  "name": "冷天饮食即时需求画像",
  "activation": {
    "events": ["降温", "立冬", "晚饭前"],
    "min_confidence": 0.7
  },
  "evidence": [
    {
      "type": "search",
      "query": "天冷吃什么",
      "weight": 0.9
    },
    {
      "type": "searched_video_watch",
      "tags": ["羊肉汤", "涮羊肉", "饺子馅"],
      "weight": 0.8
    },
    {
      "type": "feed_watch",
      "tags": ["家常菜", "热汤"],
      "weight": 0.4
    }
  ],
  "profile": {
    "current_need": "冷天晚饭想要暖身、低决策成本的食物方案",
    "likes": ["羊肉", "热汤", "饺子", "家常做法"],
    "avoids": ["复杂菜谱", "纯外卖推荐"]
  },
  "card_contract": {
    "style": "直接给方案,不暴露搜索记录",
    "actions": ["换个馅", "生成买菜清单", "不吃羊肉"]
  }
}

这种结构有几个特点:

  • 可解释:每个画像都有原始行为证据。
  • 可触发:画像不会随时生效,而是在特定事件下被激活。
  • 可更新:用户对卡片的点击、跳过、反馈可以继续写回原始交互数据。
  • 可生成:卡片生成时不只知道用户偏好,还知道语气、限制和交互入口。

事件强绑定

本项目强调事件是推荐成立的前提。没有事件,用户画像只是长期偏好;有了事件,画像才会变成“此时此刻”的需求。

当前优先考虑的事件类型包括:

  • 天气事件:降温、下雨、大风、炎热、湿冷。
  • 节气事件:立冬、冬至、小寒、清明、端午等。
  • 时间事件:晚饭前、睡前、通勤前、周末上午。
  • 地点事件:用户途经商圈、地铁站、菜市场、健身房、学校附近。
  • 近期焦虑事件:用户反复搜索睡眠、减脂、考试、消费决策等问题。

例如,立冬当天降温,且用户近期搜索过“天冷吃什么”“羊肉汤做法”“饺子馅推荐”,系统才适合生成一张饮食卡片。卡片前台不需要解释“因为你搜过这些”,而是直接呈现:

立冬这一顿,吃点热乎的

羊肉白菜饺子 + 紫菜蛋花汤

暖身 / 好买菜 / 30 分钟能做

[换个馅] [生成买菜清单] [不吃羊肉]

Demo 技术路线

本项目 demo 不采用传统推荐算法的召回、排序和模型训练流程,而是使用 LLM 与 skill-like 数据结构完成原型验证。

推荐流程分为五步:

  1. 记录原始数据 保存用户搜索、搜索结果点击、视频停留、跳过、收藏、轻量反馈等关键行为。

  2. 抽取 Profile Skill LLM 从原始行为中抽取用户的垂直意图、偏好、规避项、证据权重和适用事件。

  3. 监听当前事件 读取天气、节气、时间、地点、近期重复搜索等上下文。

  4. 匹配并生成卡片 LLM 判断哪些 Profile Skill 被当前事件触发,并按卡片生成约束输出结构化卡片。

  5. 前端信息流展示 前端只消费结构化卡片数据,不在组件里硬编码复杂分析逻辑。

可视化物料

项目答辩和文档中使用的 GPT-Image-2 架构图 prompt 已整理在:

工程分工

仓库当前包含两个主要工程:

TokenDance/
├─ douyin-base/        # Vue 3 + Vite 前端展示工程
├─ flow_agent/         # Python 数据分析与卡片生成工程
├─ dataset/            # demo 数据集
├─ index.html          # GitHub 展示用静态原型入口
├─ styles.css
├─ script.js
└─ README.md

flow_agent

flow_agent 负责数据处理、LLM 调用和结构化结果生成,适合承载:

  • 原始用户搜索与交互日志。
  • Profile Skill 抽取与更新。
  • 当前事件上下文读取。
  • 卡片生成与导出。

建议的数据文件包括:

flow_agent/data/raw_user_events.jsonl
flow_agent/data/profile_skills.json
flow_agent/data/current_events.json
flow_agent/output/ai_feed_cards.json

douyin-base

douyin-base 负责移动端信息流展示,适合承载:

  • 抖音式上下滑推荐流。
  • AI 卡片在推荐流中的沉浸式呈现。
  • 卡片内部轻量交互。
  • 用户反馈写回或 mock 写回。

前端建议读取:

douyin-base/public/data/ai_feed_cards.json

推荐场景

当前 demo 优先做三个强事件场景,不考虑复杂赛事推荐。

1. 立冬 / 降温饭点卡

用户行为锚点:

  • 搜索“天冷吃什么”
  • 搜索“羊肉汤做法”
  • 在搜索结果中长看“涮羊肉蘸料”“饺子馅推荐”
  • 自然信息流中对“家常菜”“热汤”内容有停留

事件触发:

  • 立冬
  • 当天降温
  • 晚饭前

卡片价值:

  • 直接给出一顿饭的组合。
  • 提供换馅、买菜清单、不吃羊肉等轻互动。

2. 下雨通勤卡

用户行为锚点:

  • 搜索“附近地铁站”
  • 搜索“雨天通勤穿什么”
  • 长看低成本通勤、打车省钱相关内容

事件触发:

  • 下雨
  • 通勤时间
  • 用户靠近地铁站或办公区

卡片价值:

  • 直接给出通勤方案、出门提醒和轻量备选。

3. 消费纠结卡

用户行为锚点:

  • 连续搜索“电动牙刷怎么选”
  • 搜索品牌对比、测评、价格区间
  • 在搜索结果中长看横评视频,但未形成明确选择

事件触发:

  • 连续多天搜索同一类消费决策问题
  • 用户再次刷到相关内容

卡片价值:

  • 把多步搜索压缩成一张决策卡。
  • 直接给出“更适合你的选择”和关键理由。

卡片设计原则

信息流卡片必须在刷到瞬间成立,因此前端呈现应遵守:

  • 直接给结果:不要先问用户要不要查看推荐。
  • 不暴露监控感:不直接展示“因为你搜索过……”。
  • 一眼可理解:标题、主建议、三条以内理由。
  • 交互足够轻:最多 2-3 个动作按钮。
  • 用完即走:不强迫跳转完整工具页。
  • 可反馈更新:用户点“不吃羊肉”“换一个”等反馈可写回画像。

隐私与体验边界

这个方向需要避免“过度懂你”的不适感。demo 中应通过产品表达控制边界:

  • 前台只呈现自然建议,不暴露具体搜索记录。
  • 单次搜索不直接形成强画像,需要结合时间衰减和多证据置信度。
  • 自然刷视频行为只作为佐证,不作为强触发。
  • 敏感意图需要弱化表达,避免推断过度。
  • 用户反馈应能快速修正 Profile Skill。

如何运行

根目录提供一个零依赖静态原型,可以直接打开:

index.html

前端展示工程:

cd douyin-base
npm install
npm run dev

数据分析工程:

cd flow_agent
uv sync
uv run pytest

项目定位

MomentCard 不是一个传统推荐系统 demo,也不是一个普通 AI 聊天工具。它想验证的是:

能否把用户搜索与交互行为沉淀成可调用的 Profile Skills,并在现实事件发生时生成一张用户刷到即理解、即满足、即互动的信息流 AI 卡片。

这也是本项目对赛题“刷到懂你的瞬间”的核心回答。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors