使用Infino监控LangChain与OpenAI模型的调用

当我们在复杂的AI应用环境中处理OpenAI和LangChain模型调用时,监控API调用的性能和日志信息是非常重要的。Infino作为一个可扩展的遥测存储,能够有效地处理日志、指标和跟踪信息。本篇文章将介绍如何利用Infino来监控OpenAI和ChatOpenAI模型的调用,包括统计输入的提示(prompt)、输出响应、延迟、错误以及消耗的tokens数量。

技术背景介绍

Infino是一个专为观察性解决方案设计的可扩展遥测存储系统,能够存储和处理日志、指标和跟踪信息。它可以作为一个独立的观察性工具,或作为更大观察性堆栈中的存储层使用。本文将展示如何在调用OpenAI和ChatOpenAI模型时,通过Infino进行详细的调用跟踪。

核心原理解析

Infino通过其回调处理器(InfinoCallbackHandler)捕获和记录调用OpenAI和LangChain模型的详细信息。这些信息包括每次调用的提示和响应、延迟、错误情况和消耗的tokens数量。通过这些数据,可以绘制性能图表,进一步分析API调用的效率和质量。

代码实现演示

首先,我们需要初始化环境并安装必要的依赖:

%pip install --upgrade --quiet  infinopy matplotlib tiktoken langchain langchain-openai langchain-community

然后,我们将开始Infino服务并初始化客户端:

from infinopy import InfinoClient

# 启动Infino Docker服务
!docker run --rm --detach --name infino-example -p 3000:3000 infinohq/infino:latest

# 创建Infino客户端
client = InfinoClient()

接下来,我们读取一组问题数据,并开始调用LangChain OpenAI进行问答测试:

from langchain_community.callbacks.infino_callback import InfinoCallbackHandler
from langchain_openai import OpenAI

# 初始化Infino回调处理器以记录指标信息
handler = InfinoCallbackHandler(
    model_id="test_openai", model_version="0.1", verbose=False
)

# 创建OpenAI LLM
llm = OpenAI(temperature=0.1)

接下来,创建代码循环调用OpenAI模型并记录结果:

questions = [
    "In what country is Normandy located?",
    "When were the Normans in Normandy?",
    # 更多问题...
]

for question in questions:
    print(question)
    llm_result = llm.generate([question], callbacks=[handler])
    print(llm_result)

在完成调用后,我们使用matplotlib创建性能图表:

import json
import datetime as dt
import matplotlib.dates as md
import matplotlib.pyplot as plt

def plot(data, title):
    data = json.loads(data)
    timestamps = [item["time"] for item in data]
    dates = [dt.datetime.fromtimestamp(ts) for ts in timestamps]
    y = [item["value"] for item in data]

    plt.rcParams["figure.figsize"] = [6, 4]
    plt.subplots_adjust(bottom=0.2)
    plt.xticks(rotation=25)
    ax = plt.gca()
    xfmt = md.DateFormatter("%Y-%m-%d %H:%M:%S")
    ax.xaxis.set_major_formatter(xfmt)
    
    plt.plot(dates, y)
    plt.xlabel("Time")
    plt.ylabel("Value")
    plt.title(title)
    plt.show()

response = client.search_ts("__name__", "latency", 0, int(time.time()))
plot(response.text, "Latency")

最后,我们停止Infino服务:

!docker rm -f infino-example

应用场景分析

使用Infino进行监控的应用场景包括但不限于:在生产环境中对AI模型调用进行实时监控,对API调用的性能和稳定性进行评估,以及在应用开发阶段进行详细的调试和优化。

实践建议

  1. 定期检查日志和性能指标:使用Infino可以帮助开发者及时识别性能瓶颈。
  2. 务实设置回调:在生产环境中保持回调处理器的设置简洁,以减少对系统性能的影响。
  3. 敏感数据管理:注意对传输数据进行适当的加密和权限管理,以保护用户隐私。

如果遇到问题欢迎在评论区交流。

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值