360 Secure SkillHub
360 安全技能中心

Insight Engine

该 Skill 通过 Python 收集并统计 Langfuse 追踪、网关日志、Git 提交和评分数据,再将结构化数据包交给大模型解读,最终写入 Notion 形成日报、周报或月报;支持本地试运行和仅输出数据包模式。

nissan
nissan
热度 60.02
最近更新 2026-05-18 12:10:09
分类:数据依赖:代码执行 / 读写文件 / 第三方 API / 内部调用大模型应用场景:报告撰写 / 数据处理 / 摘要总结 / 工作流

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add insight-engine
Metadata
name
insight-engine
version
1.0.4
metadata
{"openclaw":{"emoji":"🔬","requires":{"bins":["python3","ollama"],"env":["ANTHROPIC_API_KEY","NOTION_API_KEY"]},"primaryEnv":"ANTHROPIC_API_KEY","network":{"outbound":true,"reason":"Calls Anthropic API for statistical interpretation of pre-computed data. Writes reports to Notion API. Raw data analysis is local Python — no raw logs leave the machine."},"security_notes":"All LLM API calls are made using the user's own API keys to providers they have accounts with. Notion writes go to the user's own Notion workspace. Raw operational data (logs, traces) is analysed locally in Python before a structured summary packet is sent to the LLM — no raw logs are transmitted."}}
description
Logs/metrics → Python statistics → LLM interpretation → Notion reports. Use when: generating daily/weekly/monthly operational insights from AI system logs, producing data-driven Notion reports from Langfuse traces and gateway logs, setting up a cron-based insight pipeline, building a citation-enforcing analyst that refuses to make claims without specific data. Pattern: collect raw data → compute stats in Python → feed structured packet to LLM → write to Notion.

Last used: 2026-03-24 Memory references: 18 Status: Active

insight-engine

Data-driven insights from operational logs: collect → stats → LLM interpretation → Notion.

Architecture

collect (Python stats only)
  ├── Langfuse OTEL traces/scores/observations
  ├── OpenClaw/gateway logs
  ├── Git activity
  └── Control plane scores
↓
build_*_data_packet()  ← all stats computed in Python before LLM call
↓
call_claude(system_prompt, structured_json)  ← LLM interprets, doesn't compute
↓
write_*_reflection() → Notion

See references/architecture.md for full design rationale.

Quick start

# Install deps
pip install anthropic requests pyyaml

# Configure
cp scripts/config/analyst.yaml.example config/analyst.yaml
# Edit config/analyst.yaml — set langfuse URL, notion IDs, model choices

# Dry run (local Ollama, no Notion write)
python3 scripts/src/engine.py --mode daily --dry-run

# Print data packet + prompt to stdout (for agent consumption, no API calls)
python3 scripts/src/engine.py --mode daily --data-only

# Live run
python3 scripts/src/engine.py --mode daily
python3 scripts/src/engine.py --mode weekly
python3 scripts/src/engine.py --mode monthly

Required env vars

ANTHROPIC_API_KEY=sk-ant-...    # Anthropic API key
NOTION_API_KEY=secret_...       # Notion integration token
LANGFUSE_BASE_URL=http://localhost:3100   # Langfuse server URL
LANGFUSE_PUBLIC_KEY=pk-lf-...   # Langfuse public key
LANGFUSE_SECRET_KEY=sk-lf-...   # Langfuse secret key
NOTION_ROOT_PAGE_ID=<uuid>      # Root Notion page for reports
NOTION_DAILY_DB_ID=<uuid>       # Notion database for daily entries

Or configure in config/analyst.yaml.

Key design principles

  1. Stats before LLM — Python computes all numbers. The LLM interprets, doesn't aggregate.
  2. Citation-enforcing prompts — System prompts require every claim to cite a specific number.
  3. No hallucinated trends — < 7 data points → report "insufficient data (n=X)"
  4. Dry-run mode — Uses local Ollama (free) to preview output; skip Notion write.
  5. Data-only mode — Outputs the full data packet + prompts for agent/subagent use.

Cron setup (LaunchAgent example)

<!-- ~/Library/LaunchAgents/com.yourname.insight-engine-daily.plist -->
<key>StartCalendarInterval</key>
<dict>
  <key>Hour</key><integer>23</integer>
  <key>Minute</key><integer>0</integer>
</dict>
<key>ProgramArguments</key>
<array>
  <string>/usr/bin/python3</string>
  <string>/path/to/insight-engine/scripts/src/engine.py</string>
  <string>--mode</string><string>daily</string>
</array>

Extending to new data sources

Add a collector in scripts/src/collectors/:

  1. Create my_source.py with a fetch_*() function returning a plain dict
  2. Import and call it in build_daily_data_packet() in engine.py
  3. Reference the new key in prompts/daily_analyst.md under "Data sources"

See also

  • references/architecture.md — full design rationale and layer descriptions
  • scripts/prompts/daily_analyst.md — system prompt with citation rules
  • scripts/config/analyst.yaml.example — config template