概览
Sentry 是出色的错误追踪与系统监控平台。通过给您的 ModelRiver 请求添加 Sentry 数据跨度 (spans) 与面包屑 (breadcrumbs),您可以捕获 AI 特有错误,并监控延迟。
快速上手
安装对应依赖
Bash
pip install sentry-sdk openaiPython 初始化配置
PYTHON
1import sentry_sdk2from openai import OpenAI3 4sentry_sdk.init(5 dsn="https://YOUR_SENTRY_DSN",6 traces_sample_rate=1.0,7)8 9client = OpenAI(10 base_url="https://api.modelriver.com/v1",11 api_key="mr_live_YOUR_API_KEY",12)错误捕获 (Error capture)
PYTHON
1import sentry_sdk2from openai import OpenAI, APIError, RateLimitError3 4def chat(workflow: str, messages: list) -> str:5 try:6 response = client.chat.completions.create(7 model=workflow,8 messages=messages,9 )10 return response.choices[0].message.content11 12 except RateLimitError as e:13 sentry_sdk.capture_exception(e)14 sentry_sdk.set_context("modelriver", {15 "workflow": workflow,16 "error_type": "rate_limit",17 })18 raise19 20 except APIError as e:21 sentry_sdk.capture_exception(e)22 sentry_sdk.set_context("modelriver", {23 "workflow": workflow,24 "status_code": e.status_code,25 "error_type": "api_error",26 })27 raise性能跨度追踪 (Performance spans)
PYTHON
1import sentry_sdk2from openai import OpenAI3 4def chat_with_tracing(workflow: str, messages: list) -> str:5 with sentry_sdk.start_span(op="ai.chat", description=f"ModelRiver: {workflow}") as span:6 span.set_data("workflow", workflow)7 span.set_data("message_count", len(messages))8 9 response = client.chat.completions.create(10 model=workflow,11 messages=messages,12 )13 14 span.set_data("tokens", response.usage.total_tokens)15 span.set_data("model", response.model)16 span.set_data("finish_reason", response.choices[0].finish_reason)17 18 return response.choices[0].message.content面包屑追踪记录 (Breadcrumbs)
PYTHON
1import sentry_sdk2 3def chat_with_breadcrumbs(workflow: str, messages: list) -> str:4 sentry_sdk.add_breadcrumb(5 category="modelriver",6 message=f"AI request to {workflow}",7 level="info",8 data={"workflow": workflow, "messages": len(messages)},9 )10 11 response = client.chat.completions.create(12 model=workflow,13 messages=messages,14 )15 16 sentry_sdk.add_breadcrumb(17 category="modelriver",18 message=f"AI response from {workflow}",19 level="info",20 data={21 "tokens": response.usage.total_tokens,22 "model": response.model,23 },24 )25 26 return response.choices[0].message.contentNode.js 配置方法
JAVASCRIPT
1import * as Sentry from "@sentry/node";2import OpenAI from "openai";3 4Sentry.init({ dsn: "https://YOUR_SENTRY_DSN", tracesSampleRate: 1.0 });5 6const client = new OpenAI({7 baseURL: "https://api.modelriver.com/v1",8 apiKey: "mr_live_YOUR_API_KEY",9});10 11async function chat(workflow, messages) {12 return Sentry.startSpan({ name: `ModelRiver: ${workflow}`, op: "ai.chat" }, async (span) => {13 try {14 const response = await client.chat.completions.create({15 model: workflow,16 messages,17 });18 19 span.setData("tokens", response.usage.total_tokens);20 return response.choices[0].message.content;21 } catch (error) {22 Sentry.captureException(error, {23 contexts: { modelriver: { workflow } },24 });25 throw error;26 }27 });28}最佳实践指南
- 捕获所有的相关 API 报错: 分别独立去捕获
APIError、RateLimitError和AuthenticationError。 - 为了性能管理增加相关 span: 将 AI 的请求延迟添加到您应用现有的跨段追踪当中。
- 设置面包屑记录: 在发生错误事件之前,流下一段完整的事件痕迹。
- 注入环境上下文: 将工作流名、词块量及模型种类放置于 Sentry 错误参数中。
- 对爆发的事件做相应预警: 在遇到 ModelRiver 异常暴增时使用 Sentry 预设配置发警告。
下一步您可以探究的方向
- Datadog 监控集成: 获取详细的监控指标和数据看板。
- 自带内部观测管控: ModelRiver 本有的原生观测介绍。
- 常规系统报错机制: 各类发生意外问题的参考列表说明册。