宣布 LlamaCloud 全面可用(以及我们的 1900 万美元 A 轮融资)!
LlamaIndex

Langfuse 2024-03-18

一键式开源 RAG 可观测性与 Langfuse

这是 Langfuse 团队的客座文章

有许多不同的方法可以使 RAG 适用于特定用例。使用哪种向量存储?采用哪种检索策略?LlamaIndex 使您可以轻松尝试多种方法,而无需同时处理集成、提示和内存的复杂性。

最初,我们在 Langfuse 致力于复杂的 RAG/代理应用,并迅速意识到需要新的可观测性和实验性功能来调整和迭代细节。最终,这些细节对于将一个很酷的东西变成一个对用户和客户都安全的可靠 RAG 应用至关重要。试想一下:如果在您的生产环境 RAG 应用中有一个感兴趣的用户会话,您如何快速查看该会话检索到的上下文是否真正相关,或者 LLM 的响应是否切中要害?

因此,我们开始开发 Langfuse.com (GitHub),以建立一个开源的 LLM 工程平台,其中紧密集成了追踪、提示管理和评估等功能。最初,我们只是解决自己和朋友们的问题。如今,已有超过 1000 个项目依赖 Langfuse,并且在 GitHub 上获得了 2.3k 颗星。您可以自托管 Langfuse,或使用由我们维护的云实例

我们今天非常高兴宣布我们与 LlamaIndex 的新集成。这个功能是我们社区高度期待的,并且符合我们项目专注于与主要应用框架进行原生集成的方向。感谢所有在 Beta 阶段做出贡献和测试的人!

挑战

我们喜欢 LlamaIndex,因为它简洁标准化的接口抽象掉了许多复杂性。让我们来看一个 VectorStoreIndex 和 ChatEngine 的简单示例。

from llama_index.core import SimpleDirectoryReader
from llama_index.core import VectorStoreIndex

documents = SimpleDirectoryReader("./data").load_data()

index = VectorStoreIndex.from_documents(documents)

chat_engine = index.as_chat_engine()

print(chat_engine.chat("What problems can I solve with RAG?"))
print(chat_engine.chat("How do I optimize my RAG application?"))

只需 3 行代码,我们就加载了本地文档,将它们添加到索引中,并用内存初始化了一个 ChatEngine。随后,我们与 chat_engine 进行了有状态的对话。

这对于入门来说非常棒,但我们很快就会遇到一些问题,例如

  • “从索引中实际检索到的上下文是什么来回答问题的?”
  • “聊天内存是如何管理的?”
  • “哪些步骤给整体执行增加了最多的延迟?如何优化?”

一键式开源可观测性来救援

我们集成了 Langfuse,通过全局回调管理器实现了与 LlamaIndex 的一键式集成。

准备

  1. 安装社区包 (pip install llama-index-callbacks-langfuse)
  2. 将 Langfuse 项目设置中的环境变量复制/粘贴到您的 Python 项目中:'LANGFUSE_SECRET_KEY'、'LANGFUSE_PUBLIC_KEY' 和 'LANGFUSE_HOST'

现在,您只需设置全局 langfuse handler

from llama_index.core import set_global_handler

set_global_handler("langfuse")

瞧,只需两行代码,您就能在 Langfuse 中获得 RAG 应用所有方面的详细追踪。这些追踪会自动包含延迟和使用/成本明细。

将多个聊天线程分组到会话中

与许多构建 GenAI/LLM/RAG 应用的团队合作时,我们不断添加更多有助于调试和改进这些应用的功能。一个例子是针对会话应用的会话追踪,以便在完整的消息线程上下文中查看追踪。

要激活它,只需在调用 chat_engine 之前添加一个识别会话的 ID 作为追踪参数即可。

from llama_index.core import global_handler

global_handler.set_trace_params(
  session_id="your-session-id"
)

chat_engine.chat("What did he do growing up?")
chat_engine.chat("What did he do at USC?")
chat_engine.chat("How old is he?")

因此,您可以在 Langfuse Tracing 的会话视图中看到所有这些聊天调用被分组在一起

除了会话,您还可以追踪单个用户或向您的 Langfuse 追踪添加标签和元数据。

追踪更复杂的应用,并使用 Langfuse 的其他功能进行提示管理和评估

此集成使得开始使用追踪变得容易。如果您的应用最终发展到使用自定义逻辑或其他框架/包,所有 Langfuse 集成都是完全互操作的。

我们还构建了其他功能来对提示进行版本控制和协作(langfuse 提示管理),追踪实验,以及评估生产追踪。特别是对于 RAG,我们与 RAGAS 团队合作,可以轻松地在 Langfuse 捕获的追踪上运行他们流行的评估套件(参见操作指南)。

开始使用

最简单的入门方法是按照操作指南并查阅文档

反馈?联系我们

我们很想听取您的任何反馈。欢迎加入我们的社区 Discord,或将您的想法添加到此GitHub 讨论帖中。