当我们在复杂的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调用的性能和稳定性进行评估,以及在应用开发阶段进行详细的调试和优化。
实践建议
- 定期检查日志和性能指标:使用Infino可以帮助开发者及时识别性能瓶颈。
- 务实设置回调:在生产环境中保持回调处理器的设置简洁,以减少对系统性能的影响。
- 敏感数据管理:注意对传输数据进行适当的加密和权限管理,以保护用户隐私。
如果遇到问题欢迎在评论区交流。
—END—