Skip to content

动手实现

Implementation

现在我们已经理解了可观测性在 LLM 系统中的含义,接下来就该在实践中落地了。为此,我们将使用 Opik——一个为 LLM 应用提供追踪与监控工具的开源框架。

Opik 提供了一种轻量级的方式来捕获提示词、模型输出以及完整的执行追踪记录。无论是简单的函数调用、LLM 交互,还是像检索增强生成(RAG)或多步骤智能体(agent)这样更复杂的系统,它都能帮助你调试其中的处理流程。

实现

在接下来的内容中,我们会从一个最简示例开始,逐步深入。

追踪一个简单的 Python 函数

让我们从一个简单的演示开始。假设我们想追踪下面这个简单 Python 函数的所有调用:

llm observability p374 1

为此,Opik 提供了一个功能强大的 @track 装饰器,让追踪一个 Python 函数变得毫不费力。

llm observability p374 2

就是这么简单!

只要用这个装饰器包裹任意函数,就能自动在 Opik 仪表盘(dashboard)中追踪并记录它的执行过程。举例来说,目前我们的仪表盘还什么都没有显示。

llm observability p375 1

如果我们运行上面这段用 @track 装饰器修饰过的代码,然后再打开仪表盘,就会看到这样的内容:

llm observability p375 2

如上图所示,函数运行之后,Opik 会自动在其仪表盘中创建一个默认项目。在这个项目里,你可以查看传入函数的输入、函数产生的输出,以及执行过程中发生的一切细节。

举例来说,打开这个项目后,我们会看到上面这个函数的调用记录,包括输入内容、函数产生的输出,以及生成响应所花费的时间。

llm observability p376 1

此外,如果你像下面这样多次调用这个函数:

llm observability p376 2

仪表盘会展示这个函数的所有调用记录:

llm observability p377 1

打开任意一次具体的调用记录,我们可以以清晰的 YAML 格式查看输入和输出,以及 Opik 追踪到的其他细节:

llm observability p377 2

这种无缝集成让你无需添加任何复杂的样板代码,就能轻松监控和调试自己的工作流程。

用 Opik 追踪 LLM 调用

本节的目的,是展示当输入同时包含文本和图片 URL 时,Opik 是如何记录并监控这类交互的。在深入介绍 Ollama 之前,我们先用 OpenAI 做一个简单的演示。

在 .env 文件中指定好 OpenAI API key 之后,我们把它加载到运行环境中:

llm observability p378 1

接下来,我们会使用 Opik 与 OpenAI 的集成,如下面代码所示,同时导入 OpenAI 库:

llm observability p378 2

接下来,我们用 Opik 的 track_openai 函数包裹 OpenAI 客户端。这样一来,所有与 OpenAI API 之间的交互都会被追踪并记录在 Opik 仪表盘中。此后,通过这个客户端发出的任何 API 调用都会被自动监控,包括它们的输入、输出以及相关的元数据。

llm observability p378 3

接下来,我们按如下方式定义多模态的提示词输入:

llm observability p379 1

最后,我们按如下方式调用 chat completion API:

llm observability p379 2

在这里,我们通过 chat.completions.create 方法发起这次 API 调用:

  • model:指定要使用的 LLM(本例中是 gpt-4o-mini)。
  • messages:提供我们前面定义好的多模态输入。
  • max_tokens:将输出限制在 300 个 token 以内,确保响应保持简洁。同样地,如果我们打开仪表盘,就能看到这次 LLM 调用的输入和输出:

llm observability p380 1

打开这次具体的运行记录,能看到关于这次 LLM 调用的大量细节,比如输入、输出、使用的 token 数量、这次运行产生的成本,等等。

llm observability p380 2

这说明,只要使用 track_openai,每一次调用的输入、输出以及中间细节都会被记录在 Opik 仪表盘中,从而提升可观测性。对于本地运行的 LLM,我们用 Ollama 也能做到同样的事。我们来看看具体怎么做——整个流程和前面几乎一样。这次演示我们同样会用到 Opik 与 OpenAI 的集成,如下面代码所示,同时导入 OpenAI 库:

llm observability p381 1

接下来,我们再次创建一个 OpenAI 客户端,但这次我们将 base_url 指定为 https://localhost:11434/v1

llm observability p381 2

接下来,为了记录客户端发出的所有调用,我们把这个客户端传给 track_openai 方法:

llm observability p382 1

最后,我们按如下方式调用 completion API:

llm observability p382 2

再次打开仪表盘,我们会看到新增了一条记录:

llm observability p382 3

打开最新(最上面)的那条调用记录,我们同样能看到与 OpenAI 那次类似的细节——输入、输出、使用的 token 数量、成本,等等。

llm observability p383 1

是不是很简单?

本站内容仅供学习交流,版权归原作者所有。