集成框架Swiftide

使用 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,请参考以下资源:

这个页面对你有帮助吗?