SuperAPI AI 工具集

add-ai-integration

编程与开发

查看项目

更新于 10-15 21:52

技能介绍

用途:为 Sentry JavaScript SDK 贡献新的 AI 提供商集成(如 OpenAI、Anthropic、Vercel AI、LangChain),按 SDK 能力选择实现模式。

主要能力与决策:先判断 AI SDK 是否原生支持 OpenTelemetry。支持且自动发出 OTel span(如 Vercel AI)用模式 1:OTel Span Processors;支持但不自动发出用模式 2:OTel Instrumentation(包装客户端)。不支持 OTel 时,若 SDK 提供 hooks/callbacks(如 LangChain)用模式 3:Callback/Hook;否则用模式 4:客户端包装。

代码放置:仅单运行时使用的代码只放对应包,不要放 packages/core/。Node.js 放 packages/node/src/integrations/tracing/{provider}/;Cloudflare 放 packages/cloudflare/src/integrations/tracing/{provider}.ts;浏览器放 packages/browser/src/integrations/tracing/{provider}/;多运行时在 core 共享,运行时各自包装。

Span 层级:gen_ai.invoke_agent 用于父级/管道 span(链、智能体、编排);gen_ai.chat、gen_ai.generate_text 等用于子 span(实际 LLM 调用)。共享工具在 packages/core/src/tracing/ai/:gen-ai-attributes.ts 提供 OTel 语义约定属性常量,必须使用而非硬编码;utils.ts 提供 setTokenUsageAttributes()、getTruncatedJsonString()、truncateGenAiMessages()、buildMethodPath()。只使用 Sentry Gen AI Conventions 中的属性。

流式处理:非流式用 startSpan() 并从响应设置属性;流式用 startSpanManual(),通过异步生成器或事件监听累积状态,设置 GEN_AI_RESPONSE_STREAMING_ATTRIBUTE: true,并在 finally 中调用 span.end()。通过 params.stream === true 检测。Token 累积:子 span 用 setTokenUsageAttributes() 直接设置;父 span(invoke_agent)用事件处理器从子 span 累积。

自动插桩(Node.js 必需):OTel 仅在包被导入时打补丁,未使用则零成本。步骤:在 packages/node/src/integrations/tracing/index.ts 的 getAutoPerformanceIntegrations() 中添加(LangChain 必须最先);OTel 类集成加入 getOpenTelemetryInstrumentationToPreload();从 packages/node/src/index.ts 导出集成函数与选项类型;添加 E2E 测试(Node.js、Cloudflare、Browser 各有对应目录)。

关键规则:遵守 dataCollection.genAI 以记录输入输出消息;设置 SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'auto.ai.{provider}'(仅字母数字、_、.);用 utils.ts 辅助函数截断大数据;父操作用 gen_ai.invoke_agent,子操作用 gen_ai.chat。

检查清单:运行时专属代码只放对应包;按正确顺序加入 getAutoPerformanceIntegrations();OTel 集成加入 getOpenTelemetryInstrumentationToPreload();从相应包索引导出;添加并验证自动插桩的 E2E 测试;只使用 Sentry Gen AI Conventions 属性;JSDoc 注明“默认启用”或“默认不启用”;若自动启用需说明如何禁用;验证 OTel 仅在包导入时打补丁。参考实现:模式 1 见 vercelai/,模式 2 见 openai/,模式 3 见 langchain/。不确定时参照最相似的现有集成。