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 支持通过SDK(Python/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_key="your-secret-key", # 替换为实际密钥 public_key="your-public-key", host="https://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-key"@observe() # 自动追踪函数执行def ask_gpt(prompt: str) -> str: """调用GPT模型并返回响应""" response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "user", "content": prompt} ] ) # 记录关键指标 langfuse_context.update_current_observation( input=prompt, output=response.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( name="dify_workflow", id=str(uuid.uuid4()), metadata={"user_question": user_question} ) # 步骤1:知识库检索(模拟) with trace.span(name="knowledge_search") as span1: # 模拟检索耗时 import time time.sleep(0.5) # 假设检索到相关片段 context = "Langfuse是一个开源的可观测性平台..." span1.update(input=user_question, output=context) span1.end() # 步骤2:LLM调用(模拟) with trace.span(name="llm_call") as span2: # 模拟调用GPT prompt = f"根据上下文回答:{context}\n问题:{user_question}" response = "Langfuse可以帮助你追踪AI模型的调用..." span2.update(input=prompt, output=response, level="DEFAULT", metadata={"model": "gpt-3.5-turbo"}) span2.end() # 步骤3:后处理(模拟) with trace.span(name="post_process") as span3: final_answer = f"答案:{response}" span3.update(input=response, output=final_answer) span3.end() # 结束Trace trace.update(output=final_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_at=20, # 积累20条观测后自动发送 flush_interval=10 # 或每10秒检查一次)# 连续记录多个追踪for i in range(30): trace = langfuse.trace(name=f"batch_trace_{i}") trace.update(output=f"result_{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从“黑箱”变为“透明”。