第 8 篇 · 8.1 实验课:把 Langfuse 模式缩小成一个可复用 Infra
学习目标
完成本篇后,你将能够:
- 把 Langfuse 的架构模式抽象成一个小型 event infra。
- 知道每个模块为什么存在,而不是照抄目录。
- 反向理解本 repo 里的 web、shared、worker、Postgres、ClickHouse、Redis、S3 如何组合。
8.1.1 你要学的不是“Langfuse 的所有业务”
初学者看 Langfuse 容易被业务名词淹没:trace、observation、score、eval、prompt、dataset、session。实验课会把这些都暂时压缩成一个通用对象:
event = 外部系统上报的一条可观测记录。
然后只保留 Langfuse 这类平台最重要的 infra 骨架:
这个缩小版能帮助你理解 Langfuse 的大结构:
| Mini infra | Langfuse repo |
|---|---|
| HTTP 入口 | web/src/pages/api/public/ingestion.ts |
| shared contract | packages/shared/src/server/queues.ts、domain Zod |
| raw storage | S3/blob + StorageService |
| job queue | Redis/BullMQ + shared queue class |
| worker | worker/src/app.ts + WorkerManager |
| batch writer | ClickhouseWriter |
| OLAP store | ClickHouse events_full / events_core |
| query builder | EventsQueryBuilder + FilterState |
8.1.2 实验课的阅读方式
每个实验都按四段来讲:
- 目标:你要实现哪种 infra 能力。
- 缩小版设计:如果从零做,最小模块是什么。
- Langfuse 对照:当前 repo 对应哪些文件。
- 检查问题:做完后如何验证设计没有漏掉边界。