Sentry + ModelRiver

捕获 AI 错误,跟踪慢速请求,并监控提供商的故障转移事件:全部在您的 Sentry 项目中进行。

概览

Sentry 是出色的错误追踪与系统监控平台。通过给您的 ModelRiver 请求添加 Sentry 数据跨度 (spans) 与面包屑 (breadcrumbs),您可以捕获 AI 特有错误,并监控延迟。


快速上手

安装对应依赖

Bash
pip install sentry-sdk openai

Python 初始化配置

PYTHON
1import sentry_sdk
2from openai import OpenAI
3 
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_sdk
2from openai import OpenAI, APIError, RateLimitError
3 
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.content
11 
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 raise
19 
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_sdk
2from openai import OpenAI
3 
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_sdk
2 
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.content

Node.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}

最佳实践指南

  1. 捕获所有的相关 API 报错: 分别独立去捕获 APIErrorRateLimitErrorAuthenticationError
  2. 为了性能管理增加相关 span: 将 AI 的请求延迟添加到您应用现有的跨段追踪当中。
  3. 设置面包屑记录: 在发生错误事件之前,流下一段完整的事件痕迹。
  4. 注入环境上下文: 将工作流名、词块量及模型种类放置于 Sentry 错误参数中。
  5. 对爆发的事件做相应预警: 在遇到 ModelRiver 异常暴增时使用 Sentry 预设配置发警告。

下一步您可以探究的方向