用 Rust 构建的 LLM 应用监控解决方案,融合 DataDog 和 PostHog 能力,提供生产级可观测性。
Laminar 是一个为 AI agents 专门打造的开源可观测性平台。
OpenTelemetry 原生的强大追踪 SDK - 仅需一行代码即可自动追踪 Vercel AI SDK、Browser Use、Stagehand、LangChain、OpenAI、Anthropic、Gemini 等框架。
用纯英文描述你想追踪的 agent 的任何行为(例如"agent 陷入循环") Laminar 读取每次 agent 运行并在发生时通过 Slack 通知你。
不含意见的、可扩展的 SDK 和 CLI,用于在本地或 CI/CD 管道中运行评估。 用于可视化评估结果和比较结果的 UI。
使用 SQL 查询追踪、spans、指标和事件 让你的编码 agent 根据追踪结果调查和调试问题
强大的仪表板构建器,支持追踪、指标和事件,以及自定义 SQL 查询。
用于快速数据标注和为评估创建数据集的自定义数据渲染 UI。
使用 Rust 编写 🦀
查看完整文档此处。
开始使用的最快最简单的方法是通过我们的托管平台 -> laminar.sh
Laminar 非常容易在本地自托管。快速开始,克隆仓库并使用 docker compose 启动服务:
git clone https://github.com/lmnr-ai/lmnr
cd lmnr
docker compose up -d
这将启动一个轻量级但功能完整的堆栈版本。这对于快速启动或轻量级使用很好。你可以在浏览器中访问 http://localhost:5667 的 UI。
你还需要正确配置 SDK,使用 baseUrl 和正确的端口。参见自托管指南。
对于生产环境,我们建议使用我们的托管平台或运行 docker compose -f docker-compose-full.yml up -d。
前端 AI 功能(chat-with-trace、SQL-with-AI)和服务器端 AI workers 需要一个 LLM provider。在仓库根目录的 .env 文件中配置一个。
选择以下提供商设置之一。LLM_MODEL_SMALL|MEDIUM|LARGE 是可选的 — 未设置时应用每个提供商的默认值。LLM_DEFAULT_HEADERS_JSON 对于任何需要静态标头的提供商或网关都是可选的。
# 对于任何需要静态标头的提供商/网关都是可选的
# LLM_DEFAULT_HEADERS_JSON='{"X-Gateway-Tenant":"tenant"}'
# 选项 A: Gemini
LLM_PROVIDER=gemini
LLM_API_KEY=your_gemini_key
# 选项 B: OpenAI(或任何兼容 OpenAI 的网关,如 LiteLLM、OpenRouter、vLLM)
LLM_PROVIDER=openai
# LLM_BASE_URL=http://localhost:4000 # 可选,用于兼容 OpenAI 的网关
LLM_API_KEY=your_openai_key
# 选项 C: AWS Bedrock(Anthropic Claude)。使用 AWS 凭证而不是 LLM_API_KEY。
LLM_PROVIDER=bedrock
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
AWS_REGION=us-east-1
默认情况下,Laminar 使用公共 schema。要针对不同的 schema(例如在共享 Postgres 实例中与其他服务一起部署时),为前端和应用服务器都设置相同的值:
POSTGRES_SCHEMA=laminar
# 如果 schema 已预先配置或数据库角色缺少 CREATE 权限,设置为 false。
# POSTGRES_CREATE_SCHEMA=true
schema 被应用为连接 search_path,因此所有表、外键和迁移都针对它。当设置了非公共 schema 时,前端还跟踪该 schema 内的迁移(<schema>.__drizzle_migrations)而不是共享 drizzle schema。注意,在同一数据库中与另一个 Drizzle 管理的服务一起运行 Laminar 可能仍需要手动干预,因为 Drizzle 的迁移日志是按 schema 版本化的。
自托管部署收集匿名使用遥测。要退出,在你的 .env 中设置 LAMINAR_TELEMETRY_DISABLED=true。
有关本地运行和构建 Laminar 或了解更多关于 docker compose 文件的信息,请遵循《贡献指南》中的指南。
首先,创建一个项目并生成一个项目 API 密钥。然后,
npm add @lmnr-ai/lmnr
它将安装 Laminar TS SDK 和所有 instrumentation 包(OpenAI、Anthropic、LangChain 等)
要开始追踪 LLM 调用,只需添加
import { Laminar } from '@lmnr-ai/lmnr';
Laminar.initialize({ projectApiKey: process.env.LMNR_PROJECT_API_KEY });
要追踪函数的输入/输出,使用 observe 包装器。
import { OpenAI } from 'openai';
import { observe } from '@lmnr-ai/lmnr';
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const poemWriter = observe({name: 'poemWriter'}, async (topic) => {
const response = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: `write a poem about ${topic}` }],
});
return response.choices[0].message.content;
});
await poemWriter();
首先,创建一个项目并生成一个项目 API 密钥。然后,
pip install --upgrade 'lmnr[all]'
它将安装 Laminar Python SDK 和所有 instrumentation 包。参见所有 instruments 列表
要开始追踪 LLM 调用,只需添加
from lmnr import Laminar
Laminar.initialize(project_api_key="<LMNR_PROJECT_API_KEY>")
要追踪函数的输入/输出,使用 @observe() 装饰器。
import os
from openai import OpenAI
from lmnr import observe, Laminar
Laminar.initialize(project_api_key="<LMNR_PROJECT_API_KEY>")
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
@observe() # 标注所有你想追踪的函数
def poem_writer(topic):
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": f"write a poem about {topic}"},
],
)
poem = response.choices[0].message.content
return poem
if __name__ == "__main__":
print(poem_writer(topic="laminar flow"))
要了解更多关于 instrumenting 你的代码的信息,查看我们的客户端库。