Langfuse-开源AI观测分析平台,结合dify工作流

发布时间:2026/7/31 15:16:06
Langfuse-开源AI观测分析平台,结合dify工作流 Langfuse-开源AI观测分析平台结合dify工作流引言为什么需要AI观测分析平台在AI应用开发中尤其是基于大语言模型LLM构建的智能工作流开发者常常面临“黑箱”问题模型输出了什么为什么会这样输出调用成本是多少如何调试异常Langfuse 是一款开源的可观测性平台专门为LLM应用设计。它提供追踪、日志、监控和调试功能帮助开发者理解AI模型的运行行为。而 Dify 则是一个低代码AI工作流平台允许用户通过拖拽方式构建复杂的AI应用。将两者结合可以显著提升AI应用的透明度和可维护性。本文将循序渐进地讲解Langfuse的核心概念并通过代码示例展示如何与Dify工作流集成。## 基础概念Langfuse的核心组件Langfuse 的核心思想是“追踪Tracing”它记录LLM调用的完整生命周期。主要概念包括-Trace追踪代表一次完整的请求链路例如一次用户对话或一个工作流执行。-Span跨度Trace中的子任务比如一次LLM调用、一个数据库查询或一个函数执行。-Observation观测Span内部的具体数据如输入输出、延迟、Token用量、成本等。-Session会话多个Trace的集合用于分析用户交互模式。Langfuse 支持通过SDKPython/JavaScript手动埋点或通过OpenTelemetry协议自动收集数据。## 环境搭建安装与初始化首先我们需要安装Langfuse的Python客户端。推荐使用虚拟环境隔离项目依赖。bashpip install langfuse然后获取Langfuse的项目密钥Project Key和秘密密钥Secret Key。在Langfuse控制台创建一个新项目后会生成这些凭据。初始化客户端python# 1_init_langfuse.pyfrom langfuse import Langfuse# 初始化Langfuse客户端langfuse Langfuse( secret_keyyour-secret-key, # 替换为实际密钥 public_keyyour-public-key, hosthttps://cloud.langfuse.com # 或自托管地址)# 测试连接print(Langfuse 初始化成功)## 中级用法手动追踪LLM调用现在我们模拟一个简单的LLM调用并记录追踪信息。假设我们使用OpenAI的GPT模型。python# 2_track_llm_call.pyimport openaifrom langfuse.decorators import observe, langfuse_context# 设置OpenAI API密钥openai.api_key your-openai-api-keyobserve() # 自动追踪函数执行def ask_gpt(prompt: str) - str: 调用GPT模型并返回响应 response openai.ChatCompletion.create( modelgpt-3.5-turbo, messages[ {role: user, content: prompt} ] ) # 记录关键指标 langfuse_context.update_current_observation( inputprompt, outputresponse.choices[0].message.content, usage{prompt_tokens: response.usage.prompt_tokens, completion_tokens: response.usage.completion_tokens} ) return response.choices[0].message.content# 执行追踪result ask_gpt(用一句话解释什么是Langfuse)print(f模型回答{result})代码解析-observe()装饰器会自动创建一个Span记录函数的执行时间、输入输出。-langfuse_context.update_current_observation()手动补充Token用量和成本数据。- 运行后前往Langfuse控制台即可看到完整的追踪记录。## 高级应用与Dify工作流集成Dify工作流通常包含多个节点如LLM调用、知识库检索、条件判断等。我们可以通过Langfuse的API将整个工作流的执行过程记录为一个Trace。假设我们有一个Dify工作流用于回答用户关于产品文档的问题。工作流包含以下步骤1. 接收用户问题2. 调用知识库检索相关文档片段3. 将片段作为上下文调用LLM生成答案我们可以在每个步骤中手动创建Span并关联到同一个Trace。python# 3_integrate_with_dify.pyfrom langfuse import Langfuseimport uuidlangfuse Langfuse(secret_key..., public_key..., host...)def dify_workflow(user_question: str) - str: 模拟Dify工作流并记录追踪 # 创建一个新的Trace代表整个工作流 trace langfuse.trace( namedify_workflow, idstr(uuid.uuid4()), metadata{user_question: user_question} ) # 步骤1知识库检索模拟 with trace.span(nameknowledge_search) as span1: # 模拟检索耗时 import time time.sleep(0.5) # 假设检索到相关片段 context Langfuse是一个开源的可观测性平台... span1.update(inputuser_question, outputcontext) span1.end() # 步骤2LLM调用模拟 with trace.span(namellm_call) as span2: # 模拟调用GPT prompt f根据上下文回答{context}\n问题{user_question} response Langfuse可以帮助你追踪AI模型的调用... span2.update(inputprompt, outputresponse, levelDEFAULT, metadata{model: gpt-3.5-turbo}) span2.end() # 步骤3后处理模拟 with trace.span(namepost_process) as span3: final_answer f答案{response} span3.update(inputresponse, outputfinal_answer) span3.end() # 结束Trace trace.update(outputfinal_answer) return final_answer# 测试工作流result dify_workflow(Langfuse有什么功能)print(result)关键点- 使用trace.span()创建子任务自动管理开始/结束时间。-trace.update()可以设置整个追踪的最终输出。- 所有Span都会关联到同一个Trace ID便于在Langfuse平台上查看完整工作流。## 进阶技巧自动批量上报在实际生产环境中频繁网络请求可能影响性能。Langfuse支持批量上报将多个观测数据打包后一次性发送。python# 4_batch_report.pyfrom langfuse import Langfuselangfuse Langfuse( secret_key..., public_key..., host..., # 启用批量模式 flush_at20, # 积累20条观测后自动发送 flush_interval10 # 或每10秒检查一次)# 连续记录多个追踪for i in range(30): trace langfuse.trace(namefbatch_trace_{i}) trace.update(outputfresult_{i}) trace.end()# 强制刷新缓存langfuse.flush()print(批量上报完成)配置说明-flush_at缓存中观测数达到此值时触发上报。-flush_interval定时检查缓存避免长时间不触发。- 合理配置可减少API调用次数提升系统吞吐量。## 总结Langfuse 作为开源AI观测分析平台为LLM应用提供了强大的可观测性能力。通过本文的渐进式学习你已掌握1.基础概念Trace、Span、Observation的核心定义。2.环境搭建如何初始化Langfuse客户端。3.手动追踪使用装饰器或上下文管理器记录LLM调用。4.工作流集成将Dify工作流的每个步骤映射为Span形成完整追踪链。5.性能优化批量上报减少网络开销。将Langfuse与Dify结合你不仅能看到工作流的执行结果还能深入分析每个节点的性能、成本和异常从而优化AI应用的准确性和效率。建议在实际项目中持续集成Langfuse让AI从“黑箱”变为“透明”。