许多 LLM 提供商接受与 OpenAI API 相同格式的请求。要将这些提供商的调用追踪到 LangSmith,请构造一个指向提供商 base URL 的 OpenAI 客户端,然后用 wrap_openai / wrapOpenAI.
使用 wrap_openai / wrapOpenAI 进行直接的 API 调用。使用 @traceable 当你需要追踪调用周围的应用程序逻辑或为每次调用设置元数据时。
wrap_openai / wrapOpenAI | @traceable / traceable | |
|---|---|---|
| Token 追踪 | 自动 | 需要 run_type="llm" |
| 运行类型 | LLM(自动设置) | 默认使用 Chain |
| 追踪内容 | API 调用 | 包装它的函数 |
| 元数据 | 仅客户端级别 (Python);客户端级别或按调用 (TypeScript) | 通过 langsmith_extra |
设置
pip install langsmith openai
npm install langsmith openai
追踪 API 调用
from langsmith import wrappers
client = wrappers.wrap_openai(
openai.OpenAI(
base_url="https://<provider-base-url>/v1",
api_key=os.environ["PROVIDER_API_KEY"],
)
)
completion = client.chat.completions.create(
model="<provider-model-name>",
messages=[{"role": "user", "content": "Hello!"}],
)
print(completion.choices[0].message.content)
const client = wrapOpenAI(
new OpenAI({
baseURL: "https://<provider-base-url>/v1",
apiKey: process.env.PROVIDER_API_KEY!,
})
);
const completion = await client.chat.completions.create({
model: "<provider-model-name>",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(completion.choices[0].message.content);
添加元数据
Python
传递 tracing_extra 包装客户端时。该元数据适用于使用该客户端进行的所有调用。
from langsmith import wrappers
client = wrappers.wrap_openai(
openai.OpenAI(
base_url="https://<provider-base-url>/v1",
api_key=os.environ["PROVIDER_API_KEY"],
),
tracing_extra={"metadata": {"environment": "production"}},
)
TypeScript
将选项作为第二个参数传递给 wrapOpenAI 以设置客户端级别的元数据,或传递 langsmithExtra 按调用设置。
const client = wrapOpenAI(
new OpenAI({
baseURL: "https://<provider-base-url>/v1",
apiKey: process.env.PROVIDER_API_KEY!,
}),
{ metadata: { environment: "production" } }
);
// Per-call metadata
const completion = await client.chat.completions.create(
{
model: "<provider-model-name>",
messages: [{ role: "user", content: "Hello!" }],
},
{ langsmithExtra: { metadata: { request_id: "abc123" } } }
);
相关指南
某些提供商有专门的使用 @traceable 或原生回调的设置指南。这些方法在函数级别进行追踪,而不是直接包装客户端,或与提供商自己的 SDK 和路由层集成。