← 文章列表
LLM

Langfuse

2025-11-03 · — views

在大語言模型(LLM)應用快速發展的時代,如何有效地監控、評估和改進 AI 系統成為了開發者面臨的重要挑戰。Langfuse 作為一個專為 LLM 應用設計的可觀測性和實驗平台,為開發團隊提供了全面的解決方案。

什麼是 Langfuse?

Langfuse 是一個開源的 LLM 工程平台,專注於幫助開發者構建可靠、可測量的 AI 應用。它結合了以下核心功能:

🔍 可觀測性(Observability)

  • Trace 追蹤:完整記錄 LLM 應用的執行流程,包括輸入、輸出、延遲和成本
  • 實時監控:監控應用性能指標、API 使用情況和錯誤率
  • Debug 支援:快速定位和診斷生產環境中的問題

📊 評估與實驗(Evaluation & Experimentation)

  • Dataset 管理:建立和管理測試資料集,支援版本控制
  • 實驗框架:系統化地比較不同模型、提示詞和參數配置
  • 評估指標:整合多種評估方法,量化模型表現

💰 成本分析(Cost Analytics)

  • 使用量追蹤:精確統計 token 消耗和 API 呼叫次數
  • 成本控制:設定預算警告,避免意外的高額費用
  • 效能優化:識別成本高但效果有限的操作

🤝 團隊協作(Team Collaboration)

  • 共享儀表板:團隊成員可以共同查看和分析數據
  • 角色管理:靈活的權限控制系統
  • 註釋功能:為重要的 trace 添加標記和註解

Langfuse 的核心價值

1. 生產環境準備度

傳統的 LLM 開發往往缺乏生產環境的可見性。Langfuse 提供:

  • 完整的請求生命週期追蹤
  • 性能瓶頸識別
  • 異常行為檢測

2. 數據驅動的改進

通過系統化的數據收集和分析:

  • 量化不同版本的改進效果
  • 識別用戶行為模式
  • 基於真實數據做決策

3. 開發效率提升

  • 快速實驗迭代
  • 自動化評估流程
  • 簡化部署和監控

實戰演示:使用 Langfuse 和 DeepEval 構建評估系統

接下來,我們將展示如何結合 LangfuseDeepEval 構建一個完整的 LLM 評估系統。這個示例展示了如何對文本分析任務進行系統化評估。

核心組件說明

1. Azure OpenAI 整合

首先,我們需要建立 DeepEval 與 Azure OpenAI 的橋接:

class AzureOpenAI(DeepEvalBaseLLM):
    """Custom Azure OpenAI LLM for DeepEval integration."""
    
    def __init__(self, model):
        self.model = model

    def load_model(self):
        return self.model

    def generate(self, prompt: str) -> str:
        chat_model = self.load_model()
        return chat_model.invoke(prompt).content

    async def a_generate(self, prompt: str) -> str:
        chat_model = self.load_model()
        res = await chat_model.ainvoke(prompt)
        return res.content

    def get_model_name(self):
        return "Custom Azure OpenAI Model"

這個類別允許我們在 DeepEval 框架中使用 Azure OpenAI 服務。

2. 實驗系統初始化

class LangfuseDeepEvalExperiment:
    """整合 Langfuse Dataset 和 DeepEval 的實驗系統."""
    
    def __init__(self):
        # 設置 Langfuse 連接
        self.public_key = os.getenv("LANGFUSE_PUBLIC_KEY")
        self.secret_key = os.getenv("LANGFUSE_SECRET_KEY") 
        self.host = os.getenv("LANGFUSE_HOST")
        
        # 初始化客戶端
        self.langfuse = get_client()
        
        # 設置 Azure OpenAI
        self.azure_openai = AzureChatOpenAI(
            azure_deployment="your-deployment-name",
            azure_endpoint="https://your-resource.openai.azure.com/",
            api_version="2024-02-15-preview",
            api_key="your-api-key",
            temperature=0.0,
            max_tokens=1000
        )

3. 自定義評估指標

使用 DeepEval 的 GEval 建立評估指標:

def create_deepeval_metrics(self) -> List:
    """創建 DeepEval 評估指標."""
    from deepeval.test_case import LLMTestCaseParams
    
    text_analysis_metric = GEval(
        name="Text Analysis Quality",
        criteria="""
        Evaluate the quality of text analysis based on:
        1) Analysis provides clear, concise explanation within 100 words
        2) Key insights are well-structured and relevant
        3) Language is professional and easy to understand
        4) Conclusions are well-supported by the content
        """,
        evaluation_params=[
            LLMTestCaseParams.INPUT, 
            LLMTestCaseParams.ACTUAL_OUTPUT
        ],
        threshold=0.7,
        model=self.deepeval_model,
        verbose_mode=True
    )
    
    return [text_analysis_metric]

4. 任務執行函數

定義實際的分析任務:

def text_analysis_task(self, *, item, **kwargs):
    """Text analysis task function for Langfuse experiment."""
    try:
        # 從 Langfuse dataset item 獲取輸入
        item_input = item.input
        
        # 創建分析輸入物件
        analysis_input = {
            'case_id': item_input.get('case_id', f'task_item'),
            'content': item_input.get('content', ''),
            'metadata': item_input.get('metadata', {}),
            'analysis_type': item_input.get('analysis_type', 'general')
        }
        
        # 執行文本分析
        analysis_result = perform_text_analysis(analysis_input)
        return analysis_result
        
    except Exception as e:
        return {
            "error": str(e), 
            "summary": "Analysis failed", 
            "key_insights": []
        }

5. 評估器函數

將分析結果轉換為 DeepEval 可處理的格式:

def deepeval_evaluator(self, *, input, output, metadata, **kwargs):
    """DeepEval evaluator function for Langfuse experiment."""
    from langfuse import Evaluation
    
    try:
        # 處理輸入格式
        item_input = input.input if hasattr(input, 'input') else input
        
        # 構建評估用的測試案例
        analysis_type = item_input.get('analysis_type', 'general')
        content_length = len(item_input.get('content', ''))
        
        input_query = f"Analyze the following content (Type: {analysis_type}, Length: {content_length} chars)"
        actual_output = json.dumps(output, ensure_ascii=False, indent=2)
        
        # 創建 DeepEval TestCase
        test_case = LLMTestCase(
            input=input_query,
            actual_output=actual_output,
            retrieval_context=[f"Text analysis for {analysis_type} content"]
        )
        
        # 執行評估
        metrics = self.create_deepeval_metrics()
        evaluation_results = evaluate([test_case], metrics)
        
        # 提取分數
        score = self.extract_score_from_results(evaluation_results)
        
        return Evaluation(
            name="deepeval_text_analysis_quality",
            value=score,
            comment=f"DeepEval assessment completed with score: {score}"
        )
        
    except Exception as e:
        return Evaluation(
            name="deepeval_text_analysis_quality",
            value=0.0,
            comment=f"Evaluation failed: {str(e)}"
        )

6. 運行完整實驗

最後,整合所有組件運行實驗:

def run_deepeval_experiment(self, dataset_name: str, experiment_name: str):
    """運行 DeepEval 實驗 - 使用 Langfuse SDK."""
    try:
        # 獲取 dataset
        dataset = self.get_dataset(dataset_name)
        
        # 使用 Langfuse SDK 運行實驗
        result = dataset.run_experiment(
            name=experiment_name,
            description=f"DeepEval text analysis evaluation - {datetime.now()}",
            task=self.text_analysis_task,
            evaluators=[self.deepeval_evaluator],
            max_concurrency=1,  # 控制並發避免 API 限制
            metadata={
                "evaluation_framework": "deepeval",
                "model": "gpt-4.1",
                "evaluation_type": "text_analysis",
                "experiment_timestamp": datetime.now().isoformat()
            }
        )
        
        print(f"✅ Experiment completed!")
        print(f"🌐 View results at: {self.host}")
        return result
        
    except Exception as e:
        print(f"❌ Error running experiment: {e}")
        raise

實驗結果分析

運行實驗後,您將在 Langfuse 儀表板中看到:

📊 性能指標

  • 每個測試案例的評估分數
  • 平均處理時間
  • 成功率統計

🔍 詳細追蹤

  • 完整的輸入輸出記錄
  • 評估過程的詳細日誌
  • 錯誤和異常的堆疊追蹤

💡 改進建議

  • 識別表現較差的測試案例
  • 分析失敗模式
  • 優化提示詞和參數

最佳實踐建議

1. 數據集設計

  • 包含多樣化的測試案例
  • 確保數據品質和標註準確性
  • 定期更新和擴充測試集

2. 評估指標選擇

  • 結合自動化和人工評估
  • 設計領域特定的評估標準
  • 使用多個互補的指標

3. 實驗管理

  • 清晰的命名規範
  • 詳細的實驗文檔
  • 版本控制和回滾機制

4. 監控和警告

  • 設置關鍵指標的閾值警告
  • 定期檢查成本和性能趨勢
  • 建立異常檢測機制

結論

Langfuse 為 LLM 應用開發提供了強大的工具集,從開發階段的實驗到生產環境的監控,涵蓋了完整的生命週期。通過與 DeepEval 等評估框架的整合,開發者可以建立起系統化、數據驅動的 AI 應用改進流程。

在快速變化的 AI 領域,可觀測性不僅僅是 nice-to-have,而是 must-have。Langfuse 幫助團隊在這個充滿挑戰和機遇的時代,構建更可靠、更透明的 AI 系統。