【observability】【observability06】使用PostHog和Langfuse分析和调试LlamaIndex应用程序 1. 案例概述本案例展示了如何使用LlamaIndex构建一个RAG检索增强生成应用程序使用Langfuse追踪操作步骤并在PostHog中分析数据。具体来说我们将创建一个关于刺猬护理的聊天应用程序使用Mistral模型处理查询并通过Langfuse和PostHog进行监控和分析。关键组件介绍LangfuseLangfuse是一个开源的LLM工程平台旨在帮助工程师理解和优化用户与语言模型应用的交互。它提供跟踪、调试和改进LLM性能的工具可用于真实世界的用例。Langfuse提供托管云解决方案和本地或自托管部署选项。PostHogPostHog是一个流行的产品分析选择。将Langfuse的LLM分析与PostHog的产品分析相结合可以轻松实现分析用户参与度确定用户与特定LLM功能的交互频率了解他们的整体活动模式关联反馈与行为查看在Langfuse中捕获的用户反馈如何与PostHog中的用户行为相关联监控LLM性能跟踪和分析模型成本、延迟和用户反馈等指标以优化LLM性能LlamaIndexLlamaIndex是一个数据框架旨在将LLM与外部数据源连接。它帮助有效地结构化、索引和查询数据使开发人员更容易构建高级LLM应用程序。2. 技术栈与核心依赖核心依赖库llama-index- LlamaIndex核心库用于构建RAG应用llama-index-llms-mistralai- Mistral AI模型集成llama-index-embeddings-mistralai- Mistral AI嵌入模型集成langfuse- Langfuse客户端用于LLM追踪和分析openinference-instrumentation-llama-index- OpenInference LlamaIndex工具用于自动捕获操作wget- 用于下载数据文件nest_asyncio- 允许同步和异步代码一起使用注意本示例需要Mistral API密钥和Langfuse API密钥才能正常运行。3. 环境配置步骤1安装依赖%pip install llama-index llama-index-llms-mistralai llama-index-embeddings-mistralai nest_asyncio --upgrade %pip install langfuse openinference-instrumentation-llama-index wget步骤2配置API密钥import os # 设置Mistral API密钥 os.environ[MISTRAL_API_KEY] *** # 设置Langfuse API密钥 os.environ[LANGFUSE_PUBLIC_KEY] pk-lf-... os.environ[LANGFUSE_SECRET_KEY] sk-lf-... os.environ[LANGFUSE_HOST] https://cloud.langfuse.com # 欧洲区域 # os.environ[LANGFUSE_HOST] https://us.cloud.langfuse.com # 美国区域步骤3导入必要的库# 确保同步和异步代码可以一起使用 import nest_asyncio nest_asyncio.apply() # 导入并设置LlamaIndex from llama_index.llms.mistralai import MistralAI from llama_index.embeddings.mistralai import MistralAIEmbedding from llama_index.core import Settings # 导入Langfuse相关库 from langfuse import get_client, observe from openinference.instrumentation.llama_index import LlamaIndexInstrumentor # 其他工具 import wget from llama_index.core import SimpleDirectoryReader, VectorStoreIndex4. 案例实现步骤1设置LlamaIndex和Mistral# 定义LLM和嵌入模型 llm MistralAI(modelopen-mixtral-8x22b, temperature0.1) embed_model MistralAIEmbedding(model_namemistral-embed) # 在Settings对象中设置LLM和嵌入模型 Settings.llm llm Settings.embed_model embed_model这里我们使用Mistral的open-mixtral-8x22b模型作为语言模型mistral-embed作为嵌入模型并将它们设置为LlamaIndex的全局默认设置。步骤2初始化Langfusefrom langfuse import get_client langfuse get_client() # 验证连接 if langfuse.auth_check(): print(Langfuse客户端已认证并准备就绪) else: print(认证失败。请检查您的凭据和主机。) # 初始化LlamaIndex工具 LlamaIndexInstrumentor().instrument()我们初始化Langfuse客户端并验证连接然后使用OpenInference LlamaIndex工具自动捕获LlamaIndex操作并将OpenTelemetry (OTel) spans导出到Langfuse。步骤3下载数据import wget # 下载刺猬护理指南PDF url https://www.pro-igel.de/downloads/merkblaetter_engl/wildtier_engl.pdf wget.download(url, ./hedgehog.pdf) # 使用LlamaIndex SimpleDirectoryReader加载PDF hedgehog_docs SimpleDirectoryReader( input_files[./hedgehog.pdf] ).load_data()我们下载一个关于刺猬护理的PDF文件并使用LlamaIndex的SimpleDirectoryReader加载它作为我们RAG应用的数据源。步骤4构建刺猬文档的RAGfrom llama_index.core import VectorStoreIndex # 创建向量索引 hedgehog_index VectorStoreIndex.from_documents(hedgehog_docs) # 创建可查询引擎 hedgehog_query_engine hedgehog_index.as_query_engine(similarity_top_k5) # 查询引擎并打印响应 response hedgehog_query_engine.query(哪些刺猬需要帮助) print(response)我们使用VectorStoreIndex创建刺猬文档的向量嵌入然后将其转换为可查询引擎以便基于查询检索信息。步骤5实现用户反馈可选observe() def hedgehog_helper(user_message): response hedgehog_query_engine.query(user_message) trace_id langfuse.get_current_trace_id() print(response) return trace_id # 调用函数并获取trace_id trace_id hedgehog_helper(我可以把刺猬当作宠物养吗) # 为trace评分例如添加用户反馈 langfuse.create_score( trace_idtrace_id, nameuser-explicit-feedback, value0.9, data_typeNUMERIC, # 可选如果未提供则推断 comment很好知道, # 可选 )我们使用Langfuse的observe()装饰器自动为顶级函数创建trace为任何嵌套函数创建spans。然后使用create_score()方法存储用户反馈如赞/踩或评论这些分数可以在PostHog中进行分析。步骤6在PostHog中查看数据最后我们将PostHog连接到我们的Langfuse账户。步骤如下注册免费的PostHog账户从项目设置中复制项目API密钥和主机在Langfuse仪表板中点击设置并向下滚动到集成部分找到PostHog集成点击配置并粘贴您的PostHog主机和项目API密钥点击启用然后保存Langfuse将开始每天将您的数据导出到PostHog一次。您可以使用仪表板模板快速设置相关洞察分析模型成本、用户反馈和延迟。5. 案例效果通过本示例您可以实现以下效果全面的LLM追踪- 自动捕获LlamaIndex操作的所有步骤包括查询、嵌入、检索和生成用户反馈收集- 使用Langfuse Scores收集用户反馈如赞/踩或评论跨平台分析- 将Langfuse的LLM分析与PostHog的产品分析相结合获得更全面的洞察性能监控- 跟踪和分析模型成本、延迟和用户反馈等指标可视化仪表板- 使用PostHog的仪表板模板可视化LLM指标和用户行为集成架构本示例的集成架构如下LlamaIndex处理查询并生成响应OpenInference LlamaIndex工具自动捕获操作并导出到LangfuseLangfuse收集、存储和分析LLM数据PostHog从Langfuse导入数据提供产品分析和可视化6. 案例实现思路本案例的实现基于以下思路分层集成- 通过多个层次的集成实现端到端的可观测性LlamaIndex处理查询Langfuse捕获LLM数据PostHog提供产品分析自动化追踪- 使用OpenInference LlamaIndex工具自动捕获LlamaIndex操作无需手动添加追踪代码标准化数据模型- 使用OpenTelemetry标准确保数据的一致性和互操作性用户反馈循环- 通过Langfuse Scores收集用户反馈并在PostHog中分析形成反馈循环可视化分析- 利用PostHog的仪表板功能提供直观的数据可视化和分析这种设计使得开发者可以全面了解LLM应用的性能和用户交互从而持续改进应用质量。7. 扩展建议基于本示例您可以考虑以下扩展方向多模型比较- 扩展应用以支持多个LLM模型并在PostHog中比较它们的性能实时监控- 设置实时警报当关键指标如延迟、错误率超过阈值时通知A/B测试- 使用PostHog的A/B测试功能测试不同的提示策略或检索参数自定义评估指标- 实现自定义评估指标如响应相关性、准确性等用户细分- 在PostHog中创建用户细分分析不同用户群体的行为模式成本优化- 基于成本数据优化模型使用和查询策略8. 总结本案例展示了如何使用LlamaIndex、Langfuse和PostHog构建一个全面可观测的RAG应用程序。通过集成这三个平台我们实现了从查询处理到性能监控再到用户行为分析的完整闭环。这种多平台集成的优势在于全面的可观测性- 从技术性能到用户行为的多维度监控数据驱动的优化- 基于实际使用数据和用户反馈持续改进应用灵活的分析能力- 结合LLM专业分析和通用产品分析的优点这种方法为构建高质量、用户友好的LLM应用程序提供了强大的工具和洞察帮助开发者在复杂的LLM应用开发过程中做出明智的决策。