ai_member_xiaoxi/memory/2026-06-25-1700.md
2026-06-26 08:00:01 +08:00

19 KiB
Raw Blame History

Session: 2026-06-25 17:00:23 GMT+8

  • Session Key: agent:main:feishu:direct:ou_e63ce6b760ad39382852472f28fbe2a2
  • Session ID: 65bf7bd1-fb56-419f-b300-cee2cfe6cb01
  • Source: feishu

Conversation Summary

assistant: 我再看看每张表里的一些样例数据,方便你理解字段的实际内容: assistant: 好了,以下是两张埋点表的完整数据结构:


📊 埋点数据结构

线上 PostgreSQL vala_bi 库中有两张埋点表:


1. growth_activity_behavior(增长活动行为埋点)

数据量: 38,063 条

字段 类型 说明
id int 自增主键
es_id varchar(255) ES 原始 ID唯一
account_id int 账号 ID=0 为匿名)
account_name varchar(255) 账号名
activity text 活动标识(目前有 90026100 两种)
behavior varchar(255) 行为类型
sub_behavior varchar(255) 子行为类型
source varchar(255) 来源入口
info text 扩展 JSON{"h5_url_parameter":"zz"}
user_id int 设备/会话级 ID
user_name varchar(255) 用户名
created_at timestamp 事件时间

behavior 枚举:

  • H5 购买流程sub: H5 页面曝光时 / 商品切换点击 / 支付成功 / 立即购买按钮点击)
  • 落地页曝光、落地页主按钮点击
  • 获取验证码点击、获取验证码结果
  • 手机号弹窗关闭点击、挽留弹窗按钮点击

source 枚举: homebuttom、course、seasonList、seasonNav、AD、空

索引: created_at、user_id、es_id (唯一)


2. user_behavior_buried_points(端内学习行为埋点)

数据量: 65,549 条

字段 类型 说明
id int 自增主键
burying_point_id int 埋点 ID目前有 10001100
burying_point_name varchar(255) 埋点名称
burying_point_sub_id int 子埋点 ID1~5
burying_point_sub_name varchar(255) 子埋点名称
account_id int 账号 ID
account_name varchar(255) 账号名
character_id int 角色 ID
character_name varchar(255) 角色名
active_time int 事件时间戳(秒)
version_id varchar(255) 客户端版本
step_duration int 步骤耗时(秒)
finish_status varchar(255) 完成状态
season_package_id int 季度包 ID
season_package_name varchar(255) 季度包名
unit_id int 单元 ID
unit_name varchar(255) 单元名
lesson_id int 课时 ID
lesson_name varchar(255) 课时名
component_id int 组件 ID
component_name varchar(255) 组件名
c_type varchar(255) 组件类型(如 core_listening_drag
c_id varchar(255) 组件实例 ID
learning_module_id int 学习模块 ID
learning_module_name varchar(255) 学习模块名
learning_point_id int 知识点 ID
learning_point_name varchar(255) 知识点名
card_id int 卡片 ID
card_name varchar(255) 卡片名
data_version varchar(255) 数据版本
ex2 text 扩展字段 2
ex3 text 扩展字段 3
es_id varchar(255) ES 原始 ID

索引: account_id、character_id、active_time、burying_point_id


总结:

  • growth_activity_behavior → 偏增长侧H5购买漏斗、落地页、验证码等转化行为
  • user_behavior_buried_points → 偏端内学习侧(课程组件级的学习交互行为,粒度到 card 级别)

需要我进一步分析某张表的具体数据分布或字段含义吗? user: [message_id: om_x100b6cfaf809bce0b12c638b6dd832a] 李承龙: 我想看看es库里面的数据结构 assistant: 业务索引不少,我来看看主要的几个索引的字段结构: assistant: 再看看其他几个业务索引的结构: assistant: 好了,全部查完了。以下是 Online ES 库的完整数据结构梳理:


📊 Online ES 数据结构总览

线上 ES 共有 18 个业务索引(排除系统索引),按功能模块分类如下:


一、用户行为埋点类

索引 数据量 说明
user_behavior_buried_points 3741万 (11.6GB) 端内学习行为埋点(组件级)
growth_activity_behavior 4.4万 (14MB) 增长活动行为H5购买漏斗/落地页)
user-audio 496万 (2.7GB) 用户音频交互记录
word_sentence_learn_data 439 (381KB) 单词/句子学习数据

二、LLM/AI 服务日志类

索引 数据量 说明
llm_api_stat 601万 (1GB) LLM API 调用统计token用量/耗时)
llm_roleplayagent_round_log 160万 (6.4GB) 角色扮演对话日志(每轮对话详情)
llm_pron_eval 215万 (1.8GB) 发音评测日志
llm_asr_log 290万 (1.9GB) 语音识别(ASR)日志
llm_realtime_asr_log 125万 (586MB) 实时流式ASR日志
llm_tts_log 284万 (1.7GB) 文本转语音(TTS)日志
llm_image_speaking 62万 (419MB) 看图说话交互日志
llm_ai_tools_log 31万 (279MB) AI 工具调用日志(翻译/图片处理/检测等)
llm_api_error_based_correction 6.7万 (42MB) 纠错API日志
llm_api_writing 9418 (6.4MB) 写作API日志
llm_core_speaking_monologue 590 (940KB) 独白口语练习日志
llm_scene_chat_log 55 (360KB) 场景对话日志
llm_instruction_control_log 3298 (21MB) 指令控制日志

三、其他

索引 数据量 说明
echo_trace-write 3321 (6.7MB) 小葵销售bot会话轨迹日志
vala-user-chat-log 1547 (4.2MB) 用户聊天对话日志
llm_api_knowledge_card_transition 23 (78KB) 知识卡片转换日志
llm_audio_denoise 0 音频降噪(空)
pronunciation_eval_logs 4 (62KB) 旧版发音评测日志(已废弃)

四、核心索引字段详解

1. user_behavior_buried_points3741万条最大业务索引

accountId(long)        - 账号ID
characterId(long)      - 角色ID
buryingPointId(long)   - 埋点ID
buryingPointSubId(long)- 子埋点ID
activeTime(long)       - 事件时间戳
stepDuration(long)     - 步骤耗时
cType(text)           - 组件类型
cId(text)             - 组件实例ID
componentId(long)      - 组件ID
lessonId(long)        - 课时ID
unitId(long)          - 单元ID
seasonPackageId(long)  - 季度包ID
learningModuleId(long) - 学习模块ID
learningPointId(long)  - 知识点ID
cardId(long)          - 卡片ID
courseLevel(keyword)   - 课程等级
finishStatus(text)    - 完成状态
action(keyword)       - 动作
button(keyword)       - 按钮
location(keyword)     - 位置
dataVersion(keyword)  - 数据版本
num1/num2/num3(double)- 数值扩展
ex2~ex6(keyword)      - 字符扩展
versionId(text)       - 客户端版本

2. llm_roleplayagent_round_log160万条AI对话核心

user_id(keyword)       - 用户ID
session_id(keyword)    - 会话ID
config_id(keyword)     - 配置ID
npc_id(keyword)       - NPC ID
current_round(long)    - 当前轮数
round(long)           - 总轮数
user_input(keyword)    - 用户输入
user_text(keyword)     - 用户原文
npc_message(keyword)   - NPC回复
npc_translation(keyword) - NPC翻译
hint_msg(keyword)      - 提示信息
feedback(keyword)      - 语法反馈
grammar_rating(long)   - 语法评分
score(long)           - 总分
score_ratio(float)    - 得分率
task_completed(bool)   - 任务完成
final_completed(bool)  - 最终完成
llm_model(keyword)     - 使用模型
execution_time_ms(float) - 执行耗时
timestamp(long)        - 时间戳
subtask_status(nested) - 子任务完成状态
round_eval_dict(nested)- 每轮评分详情

3. llm_api_stat601万条API统计

api_source(keyword)    - API来源
service_name(keyword)  - 服务名称
input_tokens(long)     - 输入token数
output_tokens(long)    - 输出token数
time_s(float)         - 耗时(秒)
write_time_int(long)   - 写入时间戳
write_time_str(keyword)- 写入时间串

4. echo_trace-write(小葵会话轨迹)

contact_id(keyword)    - 联系人ID
bot_wxid(keyword)      - Bot微信ID
session_id(keyword)    - 会话ID
skill(keyword)        - 当前技能
stage(keyword)        - 当前阶段
step(keyword)         - 当前步骤
data.event(keyword)    - 事件类型
data.current_stage     - 当前阶段
data.current_vars      - 当前变量(手机号/绑定状态/账号信息等)
data.replies(keyword)  - 回复内容
timestamp(date)        - 时间

需要我进一步查看某个具体索引的样例数据,或者按特定维度做分析吗? user: [message_id: om_x100b6cfa8ddf34a8b34f7f9a184e54a] 李承龙: 索引user_behavior_buried_points的字段都有哪些 assistant: user_behavior_buried_points 索引的完整字段列表如下:

字段名 类型 可检索 说明
accountId long 账号ID
accountName text (index:false) 账号名称
action keyword 动作类型
activeTime long 事件时间戳(秒级)
buryingPointId long 埋点ID
buryingPointName text (index:false) 埋点名称
buryingPointSubId long 子埋点ID
buryingPointSubName text (index:false) 子埋点名称
button keyword 按钮标识
cId text (standard) 组件实例ID
cType text (standard) 组件类型(如 core_listening_drag
cardId long 卡片ID
cardName text (standard) 卡片名称
characterId long 角色ID
characterName text (index:false) 角色名称
componentId long 组件ID
componentName text (standard) 组件名称
courseLevel keyword 课程等级(如 L1、L2
dataVersion keyword 数据版本
ex2 keyword 扩展字段2
ex3 keyword 扩展字段3
ex4 keyword 扩展字段4
ex5 keyword 扩展字段5
ex6 keyword 扩展字段6
finishStatus text 完成状态
learningModuleId long 学习模块ID
learningModuleName text (standard) 学习模块名称
learningPointId long 知识点ID
learningPointName text (standard) 知识点名称
lessonId long 课时ID
lessonName text (standard) 课时名称
location keyword 位置标识
num1 double 数值扩展1
num2 double 数值扩展2
num3 double 数值扩展3
seasonPackageId long 季度包ID
seasonPackageName text (standard) 季度包名称
stepDuration long 步骤耗时(秒)
unitId long 单元ID
unitName text (standard) 单元名称
versionId text 客户端版本号

总计 38 个字段,其中:

  • 可精确检索keyword/long/double25 个
  • 全文检索text+standard9 个
  • 不可检索index:false4 个accountName、buryingPointName、buryingPointSubName、characterName

数据量 3741万条,占用 11.6GB。 user: [message_id: om_x100b6cfa8859f8e8b16f7789094ee17] 李承龙: buryingPointName和buryingPointSubName都有哪些 assistant: 由于 buryingPointNameburyingPointSubName 字段是 index: false(不可检索/聚合),我需要通过查文档来获取它们的实际值: assistant: 整理完毕,以下是完整的 buryingPointNameburyingPointSubName 枚举:


buryingPointId → buryingPointName 对照表

buryingPointId buryingPointName 数据量
100 登录创角流程 87万
101 (空) 1.9万
102 (空) 6.3万
103 (空) 40万
200 新手引导流程 2.2万
300 关卡内操作 450万
400 组件内操作 2651万
500 主框架操作 130万
600 收集页操作 12万
700 知识模块操作 6.2万
800 交易相关流程 2.2万
900 (空) 64
1000 (空) 5万
1100 (空) 1.6万
1200 (空) 276万
1300 (空) 69万

buryingPointSubId → buryingPointSubName 对照表

100 - 登录创角流程

subId subName
15 点击启动时
16 点击切换账号时
17 点击选择角色时
19 点击出发时
21 选择性别男
22 选择性别女
23 点击随机按钮时
24 点击键入名字框体时
25 点击选择生日框体时
26 点击下一步时
27 点击上一步时
28~72 (空,后期新增的未命名子埋点)

200 - 新手引导流程

subId subName
1 点击无人机附近地面时
2 点击触发无人机气泡时
3 点击正确选项时
4 点击错误选项时
5 点击轻点后说话按钮时
6 点击发送按钮时
8 点击小喇叭播放语音时
9 点击重试一次按钮时
10 点击解锁手环时

300 - 关卡内操作

subId subName
1 点击气泡触发组件时
2 TimeAction触发组件时
3 点击打开任务板
4 点击关闭任务板
5 点击任务板开始自动寻路时
6 自动寻路触发组件时
9 打开Brainy界面时
10 打开备忘录时
12 点击知识模块时
13 点击知识点时
14 点击下一个问题时
15 点击关闭界面时
16 点击完成时
17 点击开始知识回顾时

400 - 组件内操作最大2651万条

subId subName
1 组件通过时
2 组件失败结果为Fail
3 组件结果为Pass时
4 组件结果为Good时
5 组件结果为Excellent时
6 点击离开时
8 点击下一句时
9 点击播放音频时
10 点击展开释义时
11 点击选项时
12 点击下一句时
13 点击播放音频时
14 点击展开释义时
15 点击查看文本时
19 点击选项时
20 点击提示按钮时
35 点击选项时
36 点击继续时
37 点击收起时
38 点击展开时
39 点击翻译时
40 点击要翻译的句子时
41 点击退出翻译时
42 点击小喇叭时
43 点击开始任务时
44 点击麦克风按钮时
45 点击发送时
46 点击取消发送时
47 点击小喇叭时
50 打开Brainy时
51 关闭Brainy时
52 点击Brainy小喇叭时
53~158 (空,后期新增)

500 - 主框架操作

subId subName
1 点击关卡卡片时
2 点击开始关卡时
3 点击继续关卡时
4 点击查看结算记录列表时
5 点击重新开始时
6 点击继续时
7 点击关闭「是否继续」的二次弹窗时
8 点击下发导航条切换故事时
9 点击下方Story按钮时
10 点击下方Collection按钮时
11 点击学习中心按钮时
12 点击学习模块按钮时
13 点击能力训练按钮时
14 点击单元挑战按钮时
15 点击进入角色信息页面按钮时

600 - 收集页操作

subId subName
1 点击引导高亮的卡牌时
2 点击立刻升级时
3 点击卡牌详情时
4 点击关闭卡牌详情时
5 点击立刻升级时
6 点击购买高光时刻二次确认弹窗确认时
7 点击购买高光时刻二次确认弹窗返回时
8 点击加号时
9 点击减号时
10 点击加号时
11 点击再想想时
12 点击兑换时

700 - 知识模块操作

subId subName
1 点击知识模块页签时
2 点击能力训练页签时
3 点击知识模块卡片时
5 点击知识点时
15 练习中点击选项时
16 练习中点击选好了时
17 练习中点击小喇叭时
18 练习结束点击离开按钮时
19 点击进入挑战按钮时
20 点击离开挑战按钮时
21 离开挑战二次确认点击放弃时
22 离开挑战二次确认点击继续时
23 重新进入挑战点击继续时
24 重新进入挑战点击重新开始时
25 点击选项时
26 点击上一题时
27 点击下一题时
28 点击我不会了跳过时
29 点击麦克风按钮时
30 点击麦克风按钮取消时
31 点击麦克风按钮发送时
32 点击返回主页时
33 点击查看题目时
34 点击选过的题目跳转时

800 - 交易相关流程

subId subName
1 点击 S1 季度包入口时
17 点击「我的订单」入口时
22 点击活动入口「完课福利」时
29 点击主框架底部的 S2 按钮时

900 / 1000 / 1100 / 1200 / 1300

这几个埋点的 buryingPointNameburyingPointSubName 均为空字符串属于较新的埋点尚未在数据中写入名称字段。只有数字ID可区分。


总结: 已命名的核心模块是 100登录创角、200新手引导、300关卡、400组件、500主框架、600收集页、700知识模块、800交易。900~1300 是较新添加的埋点,名称字段为空,需要结合客户端代码才能确认具体含义。 user: [message_id: om_x100b6cfa9e89c4bcb39e400681a27a5] 李承龙: [Replying to: "由于 buryingPointName 和 buryingPointSubName 字段是 index: false不可检索/聚合),我需要通过查文档来获取它们的实际值:"]

查的什么文档 Reply target of current user message (untrusted, for context):

{
  "body": "由于 buryingPointName 和 buryingPointSubName 字段是 index: false不可检索/聚合),我需要通过查文档来获取它们的实际值:"
}

assistant: 抱歉表述不准确。这里说的"查文档"不是指什么外部文档,而是指 直接从 ES 索引中取样本数据document

因为 buryingPointNameburyingPointSubName 这两个字段被设置为 index: false,意味着:

  • 不能对它们做 terms 聚合(无法直接列出所有枚举值)
  • 不能用它们做搜索/过滤

所以我的做法是:按每个 buryingPointId这个字段可聚合分别取一条原始记录ES document从返回的 _source 里读出对应的 buryingPointNameburyingPointSubName 字段值。

本质就是:用可检索的 ID 字段做查询条件 → 取返回的原始文档 → 读里面不可检索的 name 字段。 user: [message_id: om_x100b6cfa94e298b0b20966c5200f3ae] 李承龙: 统计一下埋点id1100子id1有多少用户以及有多少次 assistant: 埋点 ID=1100子 ID=1

  • 总次数: 8,281 次
  • 去重用户数accountId 5,216 人