@aix/棱镜
LLM 跟踪 SDK 用于 亚历克斯 ——用零摩擦来收集LLM痕迹.
支助 维塞尔 AI SDK, (中文(简体) ), 开放AI, (中文(简体) ), 安东尼和人工追踪.
安装
npm install @auix/prism
同伴依赖关系( 仅安装您使用的) :
ai(>= 6.0.0) +@ai-sdk/provider(>=2.0.0)-为AI SDK集成openai(>=4.0.0)-为OpenAI集成@anthropic-ai/sdk(>=0.30.0) – 为人类融合
快速启动
AI SDK(建议)
prismAISDK 包住任何AI SDK模型,并自动捕捉到痕迹,符号用法,耐久性,以及工具调用. 它在内部创建了根追踪和返回 { model, end }数字 :
import { AuixPrism, prismAISDK } from "@auix/prism";
import { openai } from "@ai-sdk/openai";
import { generateText } from "ai";
const tracer = new AuixPrism({ apiKey: "your-api-key" });
const traced = prismAISDK(tracer, openai("gpt-4o"), {
name: "my-chat",
tags: ["production"],
endUserId: "[email protected]",
metadata: { threadId: "t_123" },
});
const { text, usage } = await generateText({
model: traced.model,
prompt: "Hello!",
});
// Token usage is captured automatically from spans — just call end():
await traced.end();
// Or pass explicit values to override:
await traced.end({
output: text,
totalTokens: usage.totalTokens,
inputTokens: usage.inputTokens,
outputTokens: usage.outputTokens,
});
多步工具使用被正确处理——每个LLM调用在根痕下会变成一个子跨,而符号使用会自动相加:
import { streamText, stepCountIs } from "ai";
const traced = prismAISDK(tracer, openai("gpt-4o"), {
name: "agent",
tags: ["chat"],
});
const result = streamText({
model: traced.model,
prompt: "What's the weather?",
tools: { /* ... */ },
stopWhen: stepCountIs(6),
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk);
}
await traced.end();
开放AI
prismOpenAI 返回跟踪的代理客户端 chat.completions.create 电话:
import { AuixPrism, prismOpenAI } from "@auix/prism";
import OpenAI from "openai";
const tracer = new AuixPrism({ apiKey: "your-api-key" });
const client = prismOpenAI(tracer, new OpenAI(), {
name: "my-chat",
tags: ["production"],
});
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "Hello!" }],
});
安东尼
prismAnthropic 返回跟踪的代理客户端 messages.create 电话:
import { AuixPrism, prismAnthropic } from "@auix/prism";
import Anthropic from "@anthropic-ai/sdk";
const tracer = new AuixPrism({ apiKey: "your-api-key" });
const client = prismAnthropic(tracer, new Anthropic(), {
name: "my-chat",
tags: ["production"],
});
const response = await client.messages.create({
model: "claude-sonnet-4-20250514",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello!" }],
});
手动追踪
为了充分控制微量结构:
import { AuixPrism } from "@auix/prism";
const tracer = new AuixPrism({ apiKey: "your-api-key" });
const trace = tracer.startTrace({
name: "rag-pipeline",
metadata: { userId: "u_123" },
});
const span = trace.startSpan({
name: "vector-search",
type: "retrieval",
input: { query: "How do I reset my password?" },
});
span.end({ output: { results: 5 }, status: "completed" });
trace.end({ output: "Here's how to reset...", status: "completed" });
await tracer.destroy();
API 密码
new AuixPrism(config)
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
apiKey | string | 所需经费 | 您的 auix API 密钥 |
baseUrl | string | "https://api.auix.dev" | API 终点 |
sessionId | string | —— 说 | 在会话下组追踪 |
transport | (events) => Promise<void> | —— 说 | 自定义运输( 通过 HTTP) |
onFlushError | (error) => void | —— 说 | 重试失败时调用 |
prismAISDK(tracer, model, options?)
回返 { model, end }编辑 model 是一个包裹的AI SDK模型。 打电话 end(opts?) 在一代完成最终确定根痕后.
| 选项 | 类型 | 说明 |
|---|---|---|
name | string | 追踪名称( 模式ID 的默认值) |
tags | string[] | 过滤标记 |
metadata | Record<string, unknown> | 任意元数据 |
endUserId | string | 终端用户标识符 |
prismOpenAI(tracer, client, options?)
返回代理的 OpenAI 客户端 。 与 prismAISDK 加号 parentTraceId 为了在已有的痕迹下筑巢.
prismAnthropic(tracer, client, options?)
返回代理的 Anthropic 客户端。 与 prismOpenAI。 。 。 .
tracer.startTrace(options)
回返a TraceHandle 手动追踪.
trace.startSpan(options)
创建一个孩子跨度. type 可能会是 "llm", (中文(简体) ), "tool", (中文(简体) ), "retrieval",或 "custom"。 。 。 .
tracer.destroy()
Flushes 等待事件,并停止背景计时器. 追踪完毕就叫这个.
许可证
专有——见 自由主义。 。 。 .