PostHog数据分析技能Skill posthog-analytics

这个技能用于通过安全查询PostHog生产数据来调查用户行为、分析指标、检查功能标志状态、调试用户问题等,适用于用户行为分析、功能标志管理、LLM成本监控等场景。关键词:PostHog、数据分析、用户行为、功能标志、A/B测试、LLM分析。

数据分析 0 次安装 0 次浏览 更新于 3/24/2026

posthog-analytics

在调查用户行为、分析指标、检查功能标志状态或调试用户问题时,通过查询PostHog生产数据来使用。

何时激活

当以下任一条件为真时激活此技能:

  • 用户询问分析、指标或用户行为
  • 需要检查用户的功能标志状态
  • 调试用户为何遇到特定问题
  • 调查转化漏斗或用户旅程
  • 查询特定用户或群组的事件
  • 检查仪表板或洞察数据
  • 调查LLM/AI生成成本或性能

开始时宣布

“我正在使用posthog-analytics技能来安全查询PostHog数据。”

安全:加载凭证

关键:永远不要在命令或输出中回显、记录或显示API密钥。

# 安全加载凭证 - 始终使用此模式
set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

永远不要这样做:

# 错误 - 在命令历史中暴露密钥
curl -H "Authorization: Bearer phx_abc123..."

# 错误 - 在输出中暴露密钥
echo "Key: $POSTHOG_READ_ONLY_KEY"

项目

项目ID 名称 用途
104002 生产环境 真实用户数据与分析
118588 本地开发 测试/开发事件

所有生产查询默认使用104002。


快速参考:事件类别

入职与试用事件

事件 描述
onboarding_field_started 用户开始在字段中键入
onboarding_field_completed 用户完成了一个字段
onboarding_step_transition 用户移动到下一步
onboarding_completed 完整入职完成
onboarding_checkpoint_reached 关键里程碑达到
onboarding_phase_completed 第1/2/3阶段完成
onboarding_dropout_risk_detected 用户有放弃风险
trial_started 试用期开始
trial_expired 试用结束未转化
trial_converted_to_paid 用户升级到付费
trial_activation_score_calculated 激活分数计算
trial_churn_risk_detected 高流失风险识别

草稿与联系人事件

事件 描述
drafts_created 电子邮件草稿生成
drafts_creation_failed 草稿生成失败
contact_updated 联系人记录修改
contact_deleted 联系人软删除
contact_scoring_failed 评分管道错误
linkedin_processing_failed LinkedIn数据获取失败

活动事件

事件 描述
campaign_created 新活动创建
campaign_deactivated 活动关闭

账单与订阅

事件 描述
user_cancel_subscription 用户取消
subscription_state_updated 订阅状态改变
trial_conversion_step 转化漏斗步骤

系统与错误

事件 描述
javascript_error_occurred 客户端错误
unhandled_promise_rejection Promise错误
react_query_error 数据获取错误
job_unblocked 后台作业恢复
stale_blocked_jobs_recovered 旧阻塞作业清理
circuit_open 电路断路器打开
ai_fallback AI回退触发

LLM/AI事件

事件 描述
$ai_generation PostHog标准LLM生成事件

LLM事件属性:

  • $ai_trace_id - 唯一追踪标识符
  • $ai_model - 使用的模型 (gpt-5-nano, claude-3-7-sonnet)
  • $ai_provider - 提供商 (openai, anthropic)
  • $ai_input_tokens - 输入令牌计数
  • $ai_output_tokens - 输出令牌计数
  • $ai_total_tokens - 总令牌使用量
  • $ai_latency - 响应时间(秒)
  • $ai_service - 发起调用的服务 (例如, “FocusedDraftGenerationService”)
  • $ai_input - 完整提示 (系统 + 用户)
  • $ai_output - 完整响应

活动模型(过去7天快照):

  • gpt-4o-mini-2024-07-18 - ~22.9k次调用 (批量操作)
  • gpt-5-nano - ~25次调用, ~86k令牌
  • gpt-5-nano-2025-08-07 - ~13次调用
  • claude-3-7-sonnet-20250219 - ~1次调用

仪表板(生产环境)

ID 名称 用途
621660 转化(简化版) 转化漏斗概览
604003 功能采用漏斗 功能使用跟踪
603999 入职健康 入职指标与流失
616469 入职(简化版) 快速入职概览
604000 试用与转化分析 试用转付费漏斗
621843 留存(简化版) 用户留存指标
616440 营销(简化版) 营销分析
374200 AARRR – 海盗指标 获取/激活/留存
388357 trial-duration 使用 试用时长标志使用
313683 onboarding-flow 使用 入职流程标志使用

快速仪表板访问

# 在浏览器中打开仪表板(替换ID)
open "https://us.posthog.com/project/104002/dashboard/604000"

功能标志(实时)

标志键 激活 用途
trial-duration 控制试用时长(返回天数)
payment-integration 启用/禁用支付功能
onboarding-flow 控制入职流程
campaign-creation-tour 显示活动创建导览

代码库也引用:

  • two-stage-drafts - 启用两阶段草稿生成
  • two-stage-shadow-mode - 两阶段推出的影子模式

常见查询模式

验证身份验证

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s "https://us.posthog.com/api/users/@me/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" | jq '{email: .email, org: .organization.name}'

列出仪表板

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s "https://us.posthog.com/api/projects/104002/dashboards/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" | \
  jq -r '.results[] | "\(.id): \(.name)"'

检查功能标志

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s "https://us.posthog.com/api/projects/104002/feature_flags/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" | \
  jq -r '.results[] | "\(.key): active=\(.active)"'

获取用户的功能标志状态

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

USER_ID="user-distinct-id-here"
curl -s -X POST "https://us.posthog.com/api/projects/104002/feature_flags/local_evaluation/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"distinct_id\": \"${USER_ID}\"}" | jq '.'

LLM分析查询

AI生成成本(过去7天)

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "kind": "HogQLQuery",
      "query": "SELECT properties.$ai_model as model, count() as calls, sum(properties.$ai_total_tokens) as total_tokens, avg(properties.$ai_latency) as avg_latency_sec FROM events WHERE event = '\"'\"'$ai_generation'\"'\"' AND timestamp > now() - INTERVAL 7 DAY GROUP BY model ORDER BY total_tokens DESC"
    }
  }' | jq '.results'

按服务的AI调用

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "kind": "HogQLQuery",
      "query": "SELECT properties.$ai_service as service, count() as calls, sum(properties.$ai_total_tokens) as tokens FROM events WHERE event = '\"'\"'$ai_generation'\"'\"' AND timestamp > now() - INTERVAL 7 DAY GROUP BY service ORDER BY tokens DESC"
    }
  }' | jq '.results'

慢AI调用(>5秒)

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "kind": "HogQLQuery",
      "query": "SELECT timestamp, properties.$ai_model as model, properties.$ai_service as service, properties.$ai_latency as latency_sec FROM events WHERE event = '\"'\"'$ai_generation'\"'\"' AND properties.$ai_latency > 5 AND timestamp > now() - INTERVAL 24 HOUR ORDER BY latency_sec DESC LIMIT 20"
    }
  }' | jq '.results'

用户调查查询

用户的最近事件(通过邮箱)

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

EMAIL="user@example.com"
curl -s "https://us.posthog.com/api/projects/104002/persons/?email=${EMAIL}" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" | \
  jq '.results[0] | {distinct_ids, properties}'

用户旅程(最近50个事件)

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

USER_ID="user-distinct-id-here"
curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"query\": {
      \"kind\": \"HogQLQuery\",
      \"query\": \"SELECT timestamp, event, properties FROM events WHERE distinct_id = '${USER_ID}' ORDER BY timestamp DESC LIMIT 50\"
    }
  }" | jq '.results'

试用用户概览

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "kind": "HogQLQuery",
      "query": "SELECT toDate(timestamp) as day, count() as trials_started FROM events WHERE event = '\"'\"'trial_started'\"'\"' AND timestamp > now() - INTERVAL 30 DAY GROUP BY day ORDER BY day DESC"
    }
  }' | jq '.results'

入职分析

入职完成率

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "kind": "HogQLQuery",
      "query": "SELECT count(DISTINCT if(event = '\"'\"'onboarding_field_started'\"'\"', distinct_id, NULL)) as started, count(DISTINCT if(event = '\"'\"'onboarding_completed'\"'\"', distinct_id, NULL)) as completed FROM events WHERE timestamp > now() - INTERVAL 30 DAY"
    }
  }' | jq '.results'

流失风险检测

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "kind": "HogQLQuery",
      "query": "SELECT distinct_id, timestamp, properties FROM events WHERE event = '\"'\"'onboarding_dropout_risk_detected'\"'\"' AND timestamp > now() - INTERVAL 7 DAY ORDER BY timestamp DESC LIMIT 20"
    }
  }' | jq '.results'

每日指标查询

每日活跃用户(过去30天)

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "kind": "HogQLQuery",
      "query": "SELECT toDate(timestamp) as day, count(DISTINCT distinct_id) as users FROM events WHERE timestamp > now() - INTERVAL 30 DAY GROUP BY day ORDER BY day DESC"
    }
  }' | jq -r '.results[] | "\(.[0]): \(.[1]) users"'

事件类型计数(过去7天)

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "kind": "HogQLQuery",
      "query": "SELECT event, count() as count FROM events WHERE timestamp > now() - INTERVAL 7 DAY GROUP BY event ORDER BY count DESC LIMIT 30"
    }
  }' | jq -r '.results[] | "\(.[1]): \(.[0])"'

错误率(过去24小时)

set -a && source /Users/dsifry/Developer/goodtogo/.env && set +a

curl -s -X POST "https://us.posthog.com/api/projects/104002/query/" \
  -H "Authorization: Bearer $POSTHOG_READ_ONLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "kind": "HogQLQuery",
      "query": "SELECT event, count() as count FROM events WHERE event IN ('\"'\"'javascript_error_occurred'\"'\"', '\"'\"'unhandled_promise_rejection'\"'\"', '\"'\"'react_query_error'\"'\"', '\"'\"'drafts_creation_failed'\"'\"', '\"'\"'contact_scoring_failed'\"'\"') AND timestamp > now() - INTERVAL 24 HOUR GROUP BY event ORDER BY count DESC"
    }
  }' | jq '.results'

API功能

端点 描述 示例用途
/api/projects/ 列出项目 验证访问
/api/projects/{id}/dashboards/ 仪表板 查看保存的仪表板
/api/projects/{id}/insights/ 保存的洞察 检索分析
/api/projects/{id}/feature_flags/ 功能标志 检查标志状态
/api/projects/{id}/events/ 原始事件 调试用户动作
/api/projects/{id}/persons/ 用户档案 查找用户
/api/projects/{id}/cohorts/ 用户群组 细分分析
/api/projects/{id}/query/ HogQL查询 自定义分析
/api/users/@me/ 当前用户 验证身份

HogQL快速参考

内容
events 所有捕获的事件
persons 用户档案
groups 群组分析

常见 events 字段:

  • event - 事件名称
  • distinct_id - 用户标识符
  • timestamp - 发生时间
  • properties - 事件属性的JSON对象
  • person_id - 链接到persons表

访问属性:

-- 点号表示法用于简单访问
properties.$ai_model

-- 括号表示法用于特殊字符
properties['$ai_model']

故障排除

Shell变量加载问题

如果 set -a && source .env 不工作(变量在curl中显示为空),直接提取密钥:

# 直接从.env文件提取密钥
KEY=$(grep "^POSTHOG_READ_ONLY_KEY=" /Users/dsifry/Developer/goodtogo/.env | cut -d'=' -f2)

# 在curl中使用
curl -s "https://us.posthog.com/api/projects/104002/dashboards/" \
  -H "Authorization: Bearer ${KEY}" | jq '.'

身份验证不工作

如果您得到 "Authentication credentials were not provided"

  1. 检查密钥是否存在于.env: grep POSTHOG_READ_ONLY_KEY /Users/dsifry/Developer/goodtogo/.env
  2. 验证密钥前缀是 phx_(个人API密钥)
  3. 如果密钥过期/无效,生成新的个人API密钥:
    • 前往 PostHog用户API密钥
    • 创建具有项目104002读取权限的新密钥
    • 使用 POSTHOG_READ_ONLY_KEY=phx_... 更新 .env

错误项目

  • 104002 = 生产环境(真实用户) - 使用此
  • 118588 = 本地开发(仅测试数据)

输出格式化

# 使用jq进行JSON解析
... | jq '.results'

# 使用表格格式列表
... | jq -r '.results[] | "\(.id)\t\(.name)"' | column -t

# 限制大数据集的输出
... | jq '.results[:10]'

验证清单

在完成任何分析查询之前:

  • [ ] 凭证安全加载(命令中无密钥)
  • [ ] 使用正确的项目ID(生产用104002)
  • [ ] 输出格式化和可读
  • [ ] 敏感用户数据适当处理