使用 Litefuse 追踪 Swiftide
本指南演示如何将 Litefuse 集成到你的 Swiftide 工作流中,用于监控、调试和评估你的 LLM 应用。
什么是 Swiftide?:Swiftide 是一个用于构建 LLM 应用的 Rust 库。它提供简洁的原语来完成 prompt、构建流式 indexing 与查询流水线,以及创建能够使用工具或调用其他 Agent 的 Agent。它内置了对主流 LLM 与存储提供商的集成、模块化的 API,并对 tracing 与 Litefuse 提供一等支持。文档地址:swiftide.rs。
安装依赖
在 Cargo.toml 添加 Swiftide 时启用 langfuse feature:
swiftide = { version = "0.31", features = ["langfuse", "openai"] }同时添加 tracing-subscriber 以配置 tracing:
tracing-subscriber = "0.3"配置环境变量与 Litefuse 凭证
设置 Litefuse 所需的环境变量。你可以从 Litefuse Cloud 项目设置页面获取这些 Key,或者通过自托管 Litefuse 获取。
export LANGFUSE_PUBLIC_KEY=pk-lf-...
export LANGFUSE_SECRET_KEY=sk-lf-...
# 可选,默认值为 http://localhost:3000
export LANGFUSE_URL=https://litefuse.cloud为 Swiftide 添加 Litefuse instrumentation
Swiftide 已集成 tracing。要将 trace 发送到 Litefuse,请在常规 tracing 层旁边配置 LangfuseLayer。
use tracing::level_filters::LevelFilter;
use tracing_subscriber::{
EnvFilter, Layer as _, layer::SubscriberExt as _, util::SubscriberInitExt as _,
};
use swiftide::langfuse::LangfuseLayer;
let fmt_layer = tracing_subscriber::fmt::layer()
.compact()
.with_target(false)
.boxed();
let langfuse_layer = LangfuseLayer::default()
.with_filter(LevelFilter::DEBUG)
.boxed();
let registry = tracing_subscriber::registry()
.with(EnvFilter::from_default_env())
.with(vec![fmt_layer, langfuse_layer]);
registry.init();配置完成后,任何被 instrument 的 span 或 Swiftide 操作都会上报到 Litefuse。
Hello World 示例
下面是一个启用了 Litefuse 的最小 Swiftide 程序。它会通过 Swiftide 向 OpenAI 发送一个简单的 prompt,并将 trace 记录到 Litefuse。
//! This is an example of using the Litefuse integration with Swiftide.
//!
//! Litefuse is a platform for tracking and monitoring LLM usage and performance.
//!
//! When the feature `langfuse` is enabled, Swiftide can report tracing information,
//! usage, inputs, and outputs to Litefuse.
//!
//! For this to work, you need to set the LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY
//! to the appropriate values. You can also set the LANGFUSE_URL environment variable
//! to overwrite the default URL (http://localhost:3000).
use anyhow::Result;
use swiftide::traits::SimplePrompt;
use tracing::level_filters::LevelFilter;
use tracing_subscriber::{
EnvFilter, Layer as _, layer::SubscriberExt as _, util::SubscriberInitExt as _,
};
#[tokio::main]
async fn main() -> Result<()> {
println!("Hello, Litefuse!");
let fmt_layer = tracing_subscriber::fmt::layer()
.compact()
.with_target(false)
.boxed();
let langfuse_layer = swiftide::langfuse::LangfuseLayer::default()
.with_filter(LevelFilter::DEBUG)
.boxed();
let registry = tracing_subscriber::registry()
.with(EnvFilter::from_default_env())
.with(vec![fmt_layer, langfuse_layer]);
registry.init();
prompt_openai().await?;
Ok(())
}
#[tracing::instrument]
async fn prompt_openai() -> Result<()> {
let openai = swiftide::integrations::openai::OpenAI::builder()
.default_prompt_model("gpt-5")
.build()
.unwrap();
let paris = openai
.prompt("What is the capital of France?".into())
.await?;
println!("The capital of France is {paris}");
Ok(())
}运行该程序后,Litefuse 中会创建一条 trace,包含 prompt 的输入、输出、用量与元数据。
了解更多
要进一步了解 Swiftide,请参考以下资源:
这个页面对你有帮助吗?