Langfuse · 查询、视图与会话
本页覆盖:列表与详情、过滤、聚合、视图预设、导出、会话视图。每条事实链到固定提交(f75c661d)。回到 Langfuse 总览。
4. 查询:列表、详情、树/时间线/图、过滤语法、排序分页、聚合
4.1 tRPC 与 v3/v4 双路径
- tRPC 根路由注册了
traces、sessions、users、scores、models、events等(web/src/server/api/root.tsL77,permalink、web/src/server/api/root.tsL90,permalink)。 - 许多路由有成对的 v3 与 v4 过程:如
sessions.all与sessions.allFromEvents(web/src/server/api/routers/sessions.tsL197,permalink、web/src/server/api/routers/sessions.tsL260,permalink)。 users路由同样成对:all与allFromEvents(web/src/server/api/routers/users.tsL139,permalink)。scores路由也有allFromEvents(web/src/server/api/routers/scores.tsL212,permalink)。- v4 的主入口是
events路由:all(分页)、listCursor(游标)、countAll、filterOptions、metadataValues、byTraceId、getAgentGraphData等(web/src/features/events/server/eventsRouter.tsL134,permalink、web/src/features/events/server/eventsRouter.tsL215,permalink、web/src/features/events/server/eventsRouter.tsL496,permalink)。 events.all先应用评论过滤,再调getEventList,传入page与limit(web/src/features/events/server/eventsRouter.tsL159-L168,permalink)。events.listCursor固定按startTime DESC排序,用cursor翻页(web/src/features/events/server/eventsRouter.tsL242-L249,permalink)。getTraceById在写入模式不是events_only时读旧traces表,否则读 events 聚合(packages/shared/src/server/repositories/events.tsL1217-L1223,permalink)。- 该函数标了
@deprecated,新用途应直接用getTraceByIdFromEventsTable(packages/shared/src/server/repositories/events.tsL1213,permalink)。 - 单条 Trace 的 Observation 读取默认上限来自
LANGFUSE_MAX_OBSERVATIONS_PER_TRACE(packages/shared/src/server/repositories/events.tsL428-L429,permalink)。 hasAnyTracingData先看项目的hasTraces标记,未命中再查 ClickHouse(packages/shared/src/server/repositories/events.tsL1300-L1312,permalink)。
4.2 详情:树、时间线、图
- 详情路由是
/project/[projectId]/traces/[traceId](web/src/pages/project/[projectId]/traces/[traceId].tsxL9,permalink)。 - 桌面布局是左侧导航加右侧
TracePanelDetail(web/src/features/traces/components/Trace.tsxL294,permalink)。 - 移动端 tab 是 Tree、Timeline、Graph、Info(
web/src/features/traces/components/Trace.tsxL305,permalink)。 - 树用
@tanstack/react-virtual做虚拟滚动(web/src/features/traces/components/VirtualizedTree.tsxL87,permalink)。 - 时间线组件在
TraceTimelineDense,详情页引入TraceTimelineCompact(web/src/features/traces/components/Trace.tsxL27,permalink)。 - Graph 视图不可用时回退到 tree(
web/src/features/traces/components/TracePanelNavigationHeader/TracePanelNavigationHeader.tsxL150,permalink)。 - 图数据由
getAgentGraphData提供:v3 在traces路由,v4 在events路由(web/src/server/api/routers/traces.tsL684,permalink、web/src/features/events/server/eventsRouter.tsL536,permalink)。 - 图渲染用 ELK 算布局、HTML 节点叠在 SVG 边上、d3-zoom 管视口(
web/src/features/trace-graph-view/README.mdL3,permalink)。 - 图支持 LangGraph 元数据转换(
web/src/features/trace-graph-view/README.mdL13,permalink)。
4.3 过滤语法
- 过滤状态
FilterState是类型化条件列表,类型包括datetime、string、number、stringOptions、arrayOptions、stringObject、numberObject、booleanObject、null、positionInTrace(packages/shared/src/interfaces/filters.tsL4-L29,permalink)。 - 字符串操作符有
=、contains、does not contain、starts with、ends with、is not empty(packages/shared/src/interfaces/filters.tsL6-L13,permalink)。 - 数组操作符有
any of、none of、all of(packages/shared/src/interfaces/filters.tsL16,permalink)。 - 另有全文匹配操作符
matches,只支持 input、output、metadata(packages/shared/src/interfaces/filters.tsL34,permalink、packages/shared/src/server/queries/clickhouse-sql/fts.tsL16,permalink)。 - 过滤条件在 URL 里用竖线分隔编码,值里的竖线会被转义(
packages/shared/src/features/filters/filterQueryEncoding.tsL26,permalink)。 - 内存过滤有
InMemoryFilterService,用于自动化触发条件匹配(packages/shared/src/server/automations.tsL34,permalink)。 - 排序状态是
{ column, order: ASC | DESC }(packages/shared/src/interfaces/orderBy.tsL3,permalink)。 - 前端有自然语言过滤:
naturalLanguageFilter.createCompletion,自托管部署里不可用(web/src/features/natural-language-filters/server/router.tsL45,permalink)。
4.4 query-ast
query-ast是基于 Kysely 的 ClickHouse 编译器,强制注入租户条件project_id = {projectId}(packages/shared/src/server/query-ast/README.mdL12,permalink)。- 注入通过插件
TenancyInjectionPlugin实现,缺projectId时抛错(packages/shared/src/server/query-ast/tenancy.tsL67,permalink)。 - 唯一入口是
compileClickhouseQuery(query, ctx)(packages/shared/src/server/query-ast/README.mdL23,permalink)。 - 目前仓储层只有
environments.ts调用了它(packages/shared/src/server/repositories/environments.tsL4,permalink)。 - 其他仓储仍用手写 SQL 与
event-query-builder(packages/shared/src/server/queries/clickhouse-sql/event-query-builder.tsL1358,permalink)。
4.5 排序、分页、聚合
- v3 列表用
page+limit;v4 有listCursor的游标分页(web/src/features/events/server/eventsRouter.tsL215,permalink)。 - 公共 API v1 的
GET /api/public/traces用page/limit(web/src/pages/api/public/traces/index.tsL158,permalink)。 - 公共 API v2 的 observations 用
cursor/limit,并支持fields字段组与expandMetadata(web/src/pages/api/public/v2/observations/index.tsL60,permalink、web/src/pages/api/public/v2/observations/index.tsL29,permalink)。 - 公共 API v3 的 scores 用
cursor(web/src/pages/api/public/v3/scores/index.tsL8,permalink)。 - 公共 API 的 Trace 字段组是
core、io、scores、observations、metrics(packages/shared/src/server/repositories/traces.tsL1512-L1516,permalink)。 - 聚合走第 8 节的 Dashboard/Metrics 查询引擎(聚合函数
sum/avg/count/max/min/p50/p75/p90/p95/p99/histogram/uniq,见packages/shared/src/features/query/types.tsL4-L18,permalink)。 - 时间粒度
granularities含auto、minute、hour、day、week、month和5m…1w(packages/shared/src/features/query/types.tsL194-L211,permalink)。
5. 表格视图预设、列配置、批量导出、批量操作
5.1 视图预设与列配置
- Postgres 表
TableViewPreset存视图预设,含filters、columnOrder、columnVisibility、searchQuery、orderBy(packages/shared/prisma/schema.prismaL1704-L1727,permalink)。 - 预设在
(projectId, tableName, name)上唯一(packages/shared/prisma/schema.prismaL1727,permalink)。 - 预设的
tableName枚举含traces、observations、observations-events、scores、sessions、session-detail、datasets、experiments、users等(packages/shared/src/domain/table-view-presets.tsL5-L18,permalink)。 DefaultView记录每个视图的默认预设;userId为空表示项目级默认,非空表示用户级默认(packages/shared/prisma/schema.prismaL1731-L1753,permalink)。viewId不加外键,允许前端定义的系统预设(以__langfuse_开头)(packages/shared/prisma/schema.prismaL1743,permalink)。- tRPC 路由
TableViewPresets提供create、update、updateName、delete、getByTableName、getById(web/src/server/api/routers/tableViewPresets.tsL28,permalink、web/src/server/api/routers/tableViewPresets.tsL139,permalink)。 - 路由注册在
root.ts(web/src/server/api/root.tsL123,permalink)。 - 列可见性由 hook
useColumnVisibility管理,存储键是传入的localStorageKey,基于useLocalStorage(web/src/features/column-visibility/hooks/useColumnVisibility.tsL3,permalink、web/src/features/column-visibility/hooks/useColumnVisibility.tsL24,permalink)。 - Session 详情页也有预设:
session-detail-presets.ts和ModernSessionSaveViewDialogContent.tsx(路径存在,见web/src/features/sessions/session-detail-presets.tsL1,permalink)。
5.2 批量导出
- Postgres 表
BatchExport记录导出任务:status、query、format、url、expiresAt、log(packages/shared/prisma/schema.prismaL1435-L1457,permalink)。 - 导出状态有
QUEUED、PROCESSING、COMPLETED、FAILED、CANCELLED(packages/shared/src/features/batchExport/types.tsL14-L20,permalink)。 - 导出格式有
JSON、CSV、JSONL(packages/shared/src/features/batchExport/types.tsL22-L26,permalink)。 - 可导出的表由
BatchTableNames定义:scores、sessions、traces、observations、events、datasets、dataset_run_items、dataset_items、audit_logs(packages/shared/src/interfaces/tableNames.tsL6-L16,permalink)。 - tRPC
batchExport提供create、cancel、downloadUrl、all(web/src/features/batch-exports/server/batchExport.tsL86,permalink、web/src/features/batch-exports/server/batchExport.tsL163,permalink、web/src/features/batch-exports/server/batchExport.tsL182,permalink、web/src/features/batch-exports/server/batchExport.tsL256,permalink)。 create把任务放进BatchExportQueue,任务名BatchExportJob(web/src/features/batch-exports/server/batchExport.tsL143-L145,permalink)。- Worker 用
getDatabaseReadStreamPaginated分页读数据,再经streamTransformations[format]转换(worker/src/features/batchExport/handleBatchExportJob.tsL218,permalink、worker/src/features/batchExport/handleBatchExportJob.tsL251,permalink)。 - 结果通过
uploadFileBuffered流式上传到对象存储(worker/src/features/batchExport/handleBatchExportJob.tsL295-L298,permalink)。 - 下载链接过期后不可用;过期判断用
expiresAt,旧记录有兜底(web/src/features/batch-exports/server/batchExport.tsL33-L41,permalink)。 - 公共 API 没有批量导出端点。无。已搜索:
web/src/pages/api/public/顶层目录(含traces、observations、scores、sessions、metrics、otel等,没有 export 相关目录)。
5.3 批量操作
- Postgres 表
BatchAction记录批量操作:actionType、tableName、status、query、config、totalCount、processedCount、failedCount(packages/shared/prisma/schema.prismaL1459-L1484,permalink)。 BatchActionType只有create和delete(packages/shared/src/features/batchAction/types.tsL11-L14,permalink)。- 具体动作
ActionId有:trace-delete、score-delete、dataset-delete、trace-add-to-annotation-queue、session-add-to-annotation-queue、observation-add-to-annotation-queue、observation-add-to-dataset、observation-run-batched-evaluation、experiment-compare(packages/shared/src/features/batchAction/types.tsL24-L35,permalink)。 - 批量操作的状态有
QUEUED、PROCESSING、COMPLETED、FAILED、PARTIAL(packages/shared/src/features/batchAction/types.tsL16-L22,permalink)。 - 前端通过
TableSelectionManager、TableActionMenu、TableActionDialog选择行并触发操作(web/src/features/table/components/TableSelectionManager.tsxL1,permalink、web/src/features/table/components/TableActionMenu.tsxL1,permalink)。 - 服务端在
createBatchActionJob.ts创建任务(web/src/features/table/server/createBatchActionJob.tsL1,permalink)。 - Worker 入口是
handleBatchActionJob,按动作分发到processAddToQueue、processAddObservationsToDataset、processBatchedObservationEval、processDeleteDatasets、processTraceDeleteBatchAction(worker/src/features/batchAction/handleBatchActionJob.tsL187,permalink,同目录文件名见worker/src/features/batchAction/processAddToQueue.tsL1,permalink)。 - 设置页有批量操作列表:
BatchActionsSettingsPage(web/src/features/batch-actions/components/BatchActionsSettingsPage.tsxL1,permalink);服务端batchActionRouter提供byId和all(web/src/features/batch-actions/server/batchActionRouter.tsL16,permalink、web/src/features/batch-actions/server/batchActionRouter.tsL55,permalink)。
6. Session 视图与 User 视图
6.1 Session
- Session 不是独立实体。它由 Trace 或 Observation 行上的
session_id聚合而成(events_full的session_id列:packages/shared/clickhouse/migrations/canonical/0039_create_events_full.up.sqlL19,permalink;布隆索引:packages/shared/clickhouse/migrations/canonical/0039_create_events_full.up.sqlL104,permalink)。 - Postgres 的
TraceSession只存bookmarked、public、environment,主键(id, projectId)(packages/shared/prisma/schema.prismaL501-L514,permalink)。 - tRPC
sessions路由有列表(all、allFromEvents)、计数(countAll、countAllFromEvents)、指标(metrics、metricsFromEvents)、筛选项(filterOptions、filterOptionsFromEvents)(web/src/server/api/routers/sessions.tsL197,permalink、web/src/server/api/routers/sessions.tsL463,permalink)。 - 详情有
byIdWithScores、byIdWithScoresFromEvents、tracesFromEvents、observationsForTraceFromEvents、observationFullIOFromEvents(web/src/server/api/routers/sessions.tsL706,permalink、web/src/server/api/routers/sessions.tsL774,permalink、web/src/server/api/routers/sessions.tsL980,permalink)。 - Session 可收藏和公开:
bookmark、publish(web/src/server/api/routers/sessions.tsL1008,permalink、web/src/server/api/routers/sessions.tsL1048,permalink)。 - v4 的 Session 列表服务是
getSessionsTableFromEvents,指标服务是getSessionsWithMetricsFromEvents(packages/shared/src/server/services/sessions-ui-table-events-service.tsL135,permalink、packages/shared/src/server/services/sessions-ui-table-events-service.tsL162,permalink)。 - 页面路由:列表
/project/[projectId]/sessions,详情/project/[projectId]/sessions/[sessionId](web/src/pages/project/[projectId]/sessions/index.tsxL1,permalink、web/src/pages/project/[projectId]/sessions/[sessionId].tsxL1,permalink)。 - 详情页组件有
SessionDetailPage、ModernSession、ModernSessionSidebar、SessionReviewWorkspace(web/src/features/sessions/SessionDetailPage.tsxL1,permalink、web/src/features/sessions/ModernSession.tsxL1,permalink、web/src/features/sessions/SessionReviewWorkspace.tsxL1,permalink)。 - Session 内相邻 Trace 间隔超过 5 分钟算「空闲间隔」(
web/src/features/sessions/sessionIdleGap.tsL1,permalink)。 - Session 详情页的评论与标注共用同一个评审面板(
web/src/features/sessions/README.mdL3,permalink)。 - 公共 API:
GET /api/public/sessions与GET /api/public/sessions/[sessionId](web/src/pages/api/public/sessions/index.tsL13,permalink、web/src/pages/api/public/sessions/[sessionId].tsL14,permalink)。 - 这两个公共端点在
events_only下返回 404(web/src/pages/api/public/sessions/index.tsL21,permalink、web/src/pages/api/public/sessions/[sessionId].tsL24,permalink;404 行为见web/src/features/public-api/server/createAuthedProjectAPIRoute.tsL166,permalink)。
6.2 User
- User 同样不是独立实体,来自
user_id列(packages/shared/clickhouse/migrations/canonical/0039_create_events_full.up.sqlL18,permalink)。 - Postgres 里没有 User 业务表给被观测的终端用户用。已搜索:
packages/shared/prisma/schema.prisma的 model 列表,只有登录用户User,没有终端用户表。 - tRPC
users路由有hasAny、all、metrics、byId及对应的*FromEvents(web/src/server/api/routers/users.tsL43,permalink、web/src/server/api/routers/users.tsL198,permalink)。 - v4 用户读取函数有
getUsersFromEventsTable、getUserMetricsFromEventsTable(packages/shared/src/server/repositories/events.tsL3038,permalink、packages/shared/src/server/repositories/events.tsL3122,permalink)。 - 页面:
/project/[projectId]/users与/users/[userId];组件UsersTable、UserDetailPage(web/src/pages/project/[projectId]/users/index.tsxL1,permalink、web/src/features/users/UserDetailPage.tsxL1,permalink、web/src/features/users/UsersTable.tsxL1,permalink)。 - 公共 API 没有 users 端点。无。已搜索:
web/src/pages/api/public/顶层目录列表(无users),以及全文搜索api/public/users(web/src下无匹配)。