Arize에서 Confident AI로 전환하기
Arize에서 Confident AI로 전환하기
confident-trace로 Arize Phoenix 또는 Arize AX에서 Confident AI로 트레이스를 옮겨요. OpenTelemetry 스팬과 OpenInference 인스트루먼터는 그대로 둬요.
출처: 문서
본문
개요
Phoenix(오픈소스)와 Arize AX는 모두 OpenInference 인스트루먼터를 통해 OpenTelemetry 위에 있어요. confident-trace는 같은 프로바이더로 내보내므로 전환은 호출 하나로 끝나요: register()를 init()으로 바꾸고, 엔트리 포인트에 데코레이터 하나를 추가하고, 지금 내보내는 OpenInference 스팬을 유지하면 돼요. 아래 단계는 차이가 있는 곳에서 Phoenix를 먼저, Arize AX를 그다음 보여줘요.
이 가이드에서 배울 것:
- confident-trace 설치하고 Arize 키들을 하나의
CONFIDENT_API_KEY로 교체해요. - 클라이언트 설정을
init()으로 교체해서 자동 인스트루먼테이션이 스팬을 내보내게 해요. - 엔트리 포인트에 @span 추가해서 모든 트레이스가 이름·입력·출력을 갖게 해요.
- 무엇이 바뀌는지 확인 — 트레이스가 Confident AI에 들어오면: 모든 트레이스의 평가, 프로덕션에서 큐레이션된 데이터셋, 품질 하락 시 알림이에요.
사전 준비
- Project API Key,
CONFIDENT_API_KEY(예:confident_us_proj_...). 여기서 가져오세요. - Python SDK용 Python 3.10+ 또는 TypeScript SDK용 Node.js 22+.
- 기존 Arize 설정. 아래 Before 스니펫은 2026년 9월 기준 Arize 퀵스타트를 따릅니다.
Python용 confident-trace는 PyPI에서 안정 릴리스예요. TypeScript용 confident-trace는 npm에서 알파 릴리스입니다. TypeScript 스니펫은 알파 API를 따릅니다.
전환하기
confident-trace 설치하기
패키지 하나예요. 프로바이더 SDK는 선택적 피어로 남아요. CONFIDENT_API_KEY가 PHOENIX_COLLECTOR_ENDPOINT, PHOENIX_API_KEY, PHOENIX_PROJECT_NAME(Phoenix) 또는 ARIZE_SPACE_ID, ARIZE_API_KEY, ARIZE_PROJECT_NAME(Arize AX)을 대체해요. EU 리전이면 CONFIDENT_OTEL_ENDPOINT=https://eu.otel.confident-ai.com/v1/traces도 설정해요.
pip install confident-trace
export CONFIDENT_API_KEY=...
# replaces PHOENIX_COLLECTOR_ENDPOINT, PHOENIX_API_KEY, PHOENIX_PROJECT_NAME (Phoenix) or ARIZE_SPACE_ID, ARIZE_API_KEY, ARIZE_PROJECT_NAME (Arize AX)
npm install confident-trace
export CONFIDENT_API_KEY=...
# replaces PHOENIX_COLLECTOR_ENDPOINT, PHOENIX_API_KEY, PHOENIX_PROJECT_NAME (Phoenix) or ARIZE_SPACE_ID, ARIZE_API_KEY, ARIZE_PROJECT_NAME (Arize AX)
node --import confident-trace/register dist/index.js
register()을 init()으로 교체하기
트레이서 프로바이더와 수동 인스트루먼터 호출을 버려요. 자동 인스트루먼테이션이 스팬을 내보내요. 기존 OpenInference 스팬은 공유 프로바이더를 통해 내보내집니다.
Python
from phoenix.otel import register
from openai import OpenAI
tracer_provider = register(
project_name="my-app",
auto_instrument=True,
)
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "Hello"}],
)
import os
from arize.otel import register
from openinference.instrumentation.openai import OpenAIInstrumentor
from openai import OpenAI
tracer_provider = register(
space_id=os.environ["ARIZE_SPACE_ID"],
api_key=os.environ["ARIZE_API_KEY"],
project_name=os.environ["ARIZE_PROJECT_NAME"],
)
OpenAIInstrumentor().instrument(tracer_provider=tracer_provider)
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "Hello"}],
)
from confident_trace import init
from openai import OpenAI
init()
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "Hello"}],
)
TypeScript (alpha)
import { register, registerInstrumentations } from "@arizeai/phoenix-otel";
import { OpenAIInstrumentation } from "@arizeai/openinference-instrumentation-openai";
import OpenAI from "openai";
register({ projectName: "my-app" });
const instrumentation = new OpenAIInstrumentation();
instrumentation.manuallyInstrument(OpenAI);
registerInstrumentations({ instrumentations: [instrumentation] });
const client = new OpenAI();
const response = await client.chat.completions.create({
model: "gpt-4.1-mini",
messages: [{ role: "user", content: "Hello" }],
});
import { init } from "confident-trace";
import OpenAI from "openai";
const tracing = init();
const client = new OpenAI();
const response = await client.chat.completions.create({
model: "gpt-4.1-mini",
messages: [{ role: "user", content: "Hello" }],
});
Arize AX에는 검증된 TypeScript 설정 스니펫이 아직 없어요. 위 Python 스니펫이 AX 쪽을 보여줘요. after 코드는 두 제품에서 같아요.
엔트리 포인트에 @span 추가하기
Phoenix와 Arize AX는 퀵스타트에 데코레이터가 없어요. 데코레이터 하나가 트레이스에 이름·입력·출력을 줘요. 기존 OpenInference 스팬은 여전히 내보내집니다.
Python
from confident_trace import span
@span
def answer(question: str) -> str:
return client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": question}],
).choices[0].message.content
TypeScript (alpha)
import { span } from "confident-trace";
const answer = span({ name: "answer" }, async (question: string) => {
const response = await client.chat.completions.create({
model: "gpt-4.1-mini",
messages: [{ role: "user", content: question }],
});
return response.choices[0].message.content;
});
앱을 한 번 실행해 보세요. 트레이스가 몇 초 안에 프로젝트의 Observatory에 나타나요. 나타나지 않으면 같은 프로세스에서 CONFIDENT_API_KEY가 설정됐는지, 앱이 종료 전에 플러시하는지 확인해요.
무엇이 바뀌나요
트레이싱이 시작점이에요. 평가가 성과가 나는 지점이죠. 모든 트레이스가 점수를 받아요. 낮은 점수는 데이터셋 행이 되고, 데이터셋 행은 회귀 테스트가 되며, 다음 릴리스는 실제 프로덕션 실패에 맞춰 출시됩니다.
| Capability | Phoenix (open source) | Arize AX | Confident AI |
|---|---|---|---|
| OpenTelemetry ingestion | Yes | Yes | OTLP over HTTP and gRPC |
| Auto-instrumented providers | OpenInference instrumentors | OpenInference instrumentors | OpenAI, Anthropic, Google GenAI, Bedrock, 5 gateways, 16 frameworks |
| Built-in eval metrics | phoenix.evals, custom evaluators | Custom evaluators | 50+ research-backed metrics through DeepEval |
| Online evals on traces, spans and threads | You run and schedule the job | Yes | Yes |
| Quality-aware alerting on eval scores | No | Slack, PagerDuty, OpsGenie | Email, Slack, Discord, Teams |
| Prompt and use case drift detection | No | Limited | Yes |
| Automatic dataset curation from production | Manual, or by script | Manual | Ingestion tasks, filtered and tagged |
| Multi-turn simulation | No | No | Yes |
| Git-based prompt management | No | No | Branches, PRs, approvals, eval actions |
| Cross-functional workflows, no code | No | No | PMs and QA run evals over HTTP |
| Regression testing and CI gates | No | No | Yes |
| Safety monitoring | No | No | Toxicity, bias, PII on production traffic |
마이그레이션 질문
인스트루먼테이션을 다시 써야 하나요?
아니요. confident-trace는 표준 OTLP로 내보내요. 프레임워크에서 온 기존 OpenTelemetry 스팬이 그대로 내보내집니다.
전환 중에 둘 다 실행할 수 있나요?
네. OpenTelemetry Collector를 두 엔드포인트 모두에 지정하고 전환 전에 일주일 비교해요. CONFIDENT_OTEL_ENDPOINT는 Collector URL을 받아요.
셀프호스팅이 아니라 Phoenix Cloud를 쓰고 있어요. 어느 스니펫을 쓰나요?
Phoenix 스니펫이요. register() 호출은 같아요. 엔드포인트와 API 키만 바뀝니다.
내 Phoenix 데이터셋과 프롬프트는요?
데이터셋은 CSV로 내보내져요. 프롬프트는 Phoenix CLI로 내보냅니다. 마이그레이션 콜에 가져오면 우리가 매핑해 줘요.
$200은 어떻게 받나요?
콜을 예약하세요. 콜 후 조직의 첫 유료 인보이스에 $200 쿠폰을 적용해 드려요. 조직당 보상 하나예요.
TypeScript SDK는 준비됐나요?
Python SDK는 PyPI에서 안정적이에요. TypeScript SDK는 npm에서 알파 릴리스입니다. 이 가이드의 TypeScript 스니펫은 알파 API를 따릅니다.
관련
OpenTelemetry 통합
플랫폼이 읽는 속성 키와 함께, 어떤 SDK나 Collector에서든 OTLP 트레이스를 Confident AI로 보내요.
트레이스에서 테스트 런 만들기
출시 전에 프로덕션 트레이스를 평가된 테스트 런으로 바꿔요.
LLM Observability
모든 트레이스의 평가, 드리프트 감지, 알림, 프로덕션에서 큐레이션된 데이터셋이에요.
GitHub의 confident-trace
Python과 TypeScript용 통합 25개를 가진 OpenTelemetry 네이티브 트레이싱 SDK예요.