Skip to content

feat(langfuse): 支持用户自定义attribute上报 - #295

Merged
raychen911 merged 1 commit into
mainfrom
feature/langfuse-custom-attr
Aug 13, 2026
Merged

feat(langfuse): 支持用户自定义attribute上报#295
raychen911 merged 1 commit into
mainfrom
feature/langfuse-custom-attr

Conversation

@weimch

@weimch weimch commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

问题

使用 langfuse 插件上报时,用户在 span 上设置的自定义 attribute 没有携带到最终上报数据中,导致用户无法观测自定义埋点。

解决方案

langfuse 上报时保留用户自定义的 attribute:带 langfuse 前缀的 key 原样透传,其他自定义 key 收进 metadata 便于观测。

问题:使用langfuse插件上报时,用户在span上设置的attribute没有携带到最终上报数据中,导致用户无法观测自定义埋点
解决方案:langfuse上报时保留用户自定义的attribute,带langfuse前缀的原样透传,其他自定义字段收进metadata便于观测
@helloopenworld

Copy link
Copy Markdown
Contributor

AI Code Review

我已审查 pr.diff(仅 opentelemetry.py 一个文件)并结合 _trace.py 中的属性产出方与 tests/langfuse/tracing/test_opentelemetry.py 进行了交叉验证。以下是结论。

发现的问题

⚠️ Warning

  • tests/langfuse/tracing/test_opentelemetry.py:353-541(对应 diff 中 _map_trace_level_attributes / _map_agent_observation_attributes / _map_tool_observation_attributes 的新逻辑):核心特性缺少测试覆盖
    • 本 PR 的核心目标是"保留用户自定义 attribute"(含 langfuse.* 原样透传与其他自定义字段收入 metadata),但现有测试中所有自定义键都带 trpc.python.agent. 前缀(如 custom_fieldextra_fieldcustom_key),没有任何用例验证不带前缀的纯自定义键(如 my.app.metric)被正确收入 metadata,也没有用例验证用户预设的 langfuse.*被原样保留在顶层而不被收入 metadata。这几条路径会在生产链路 on_end 中真实执行,建议补充覆盖,否则后续重构容易回归。

💡 Suggestion

  • trpc_agent_sdk/server/langfuse/tracing/opentelemetry.py:411-420:未知操作回退的 _map_span_observation_attributes 未随本次改动同步更新
    • 本 PR 将其他四个 mapper 统一改为 dict(attributes) 起始并显式 pop("gen_ai.operation.name", None) 以避免路由键泄漏,但该回退分支仍用 span_attrs.update(attributes) 原样透传,会保留 gen_ai.operation.name 且不结构化 metadata。虽不在 diff 改动行内,但属于本次一致性改动的缺口,建议一并处理以保持五个 mapper 行为一致。

总结

整体风险较低:改动是一次结构清晰的属性映射重构,用 dict(attributes) + .pop() 替代原先的白名单式 .get(),逻辑正确,未引入新的异常路径或类型回归(如 gen_ai.usage.*setdefault 与原行为一致)。不存在必须修复的 Critical 问题;主要缺口是核心特性(自定义/langfuse.* 属性保留)的测试覆盖不足,以及回退 mapper 的一致性遗漏。

测试建议

  • 补充用例:传入不带 trpc.python.agent. 前缀的纯自定义键(如 {"my.key": 1}),验证其在 trace/agent/tool/generation 四个 mapper 中都被收入对应 metadata 且值被 str() 化。
  • 补充用例:传入用户预设的 langfuse.user.id / langfuse.trace.metadata 等键,验证其原样保留在顶层结果、且不被重复收入 metadata。

@raychen911
raychen911 merged commit 1bf8510 into main Aug 13, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants