Skip to main content

Log, Trace, and Monitor Langchain LLM Calls (记录、跟踪和监控Langchain LLM调用)

当使用Langchain构建应用程序或代理时,您最终会发出多个API调用来满足单个用户请求。然而,当您想要分析这些请求时,这些请求并没有被链接在一起。通过Portkey,来自单个用户请求的所有嵌入、完成和其他请求将被记录和跟踪到一个公共ID,使您能够完全了解用户的交互。

本笔记本将作为一步一步的指南,介绍如何在您的Langchain应用程序中集成和使用Portkey。

首先,让我们导入Portkey、OpenAI和Agent工具

import os

from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.llms import OpenAI
from langchain.utilities import Portkey

在下面粘贴您的OpenAI API密钥。(您可以在此处找到它)

os.environ["OPENAI_API_KEY"] = "<OPENAI_API_KEY>"

获取Portkey API密钥

  1. 此处注册Portkey
  2. 仪表板上,点击左上角的个人资料图标,然后点击"复制API密钥"
  3. 在下面粘贴它
PORTKEY_API_KEY = "<PORTKEY_API_KEY>"  # 在此处粘贴您的Portkey API密钥

设置跟踪ID

  1. 在下面设置您的请求的跟踪ID
  2. 跟踪ID可以对所有源自单个请求的API调用都是相同的
TRACE_ID = "portkey_langchain_demo"  # 在此处设置跟踪ID

生成Portkey头部信息

headers = Portkey.Config(
api_key=PORTKEY_API_KEY,
trace_id=TRACE_ID,
)

像往常一样运行您的代理。唯一的变化是我们现在将上述头部信息包含在请求中。

llm = OpenAI(temperature=0, headers=headers)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(
tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)

# 让我们来测试一下!
agent.run(
"昨天旧金山的最高温度是多少华氏度?这个数字的0.023次方是多少?"
)

Portkey上的日志和跟踪工作原理

日志

  • 通过Portkey发送您的请求可以确保所有请求都会被默认记录
  • 每个请求日志包含时间戳模型名称总成本请求时间请求JSON响应JSON和其他Portkey功能

跟踪

  • 跟踪ID随每个请求一起传递,并在Portkey仪表板上可见
  • 如果需要,您还可以为每个请求设置一个不同的跟踪ID
  • 您还可以将用户反馈附加到跟踪ID上。在此处了解更多信息

高级LLMOps功能 - 缓存、标记、重试

除了日志记录和跟踪之外,Portkey还提供了更多功能,为您现有的工作流程增加了生产能力:

缓存

从缓存中响应以前提供的客户查询,而不是再次将它们发送到OpenAI。匹配完全相同的字符串或语义上相似的字符串。缓存可以节省成本,并将延迟降低20倍。

重试

自动重新处理任何不成功的API请求最多5次。使用指数退避策略,将重试尝试间隔开,以防止网络过载。

功能配置键值(类型)
🔁 自动重试retry_countinteger [1,2,3,4,5]
🧠 启用缓存cachesimplesemantic

标记

使用预定义的标记详细跟踪和审计每个用户交互。

标记配置键值(类型)
用户标记userstring
组织标记organisationstring
环境标记environmentstring
提示标记(版本/ID/字符串)promptstring

包含所有功能的代码示例

headers = Portkey.Config(
# 必填项
api_key="<PORTKEY_API_KEY>",
# 缓存选项
cache="semantic",
cache_force_refresh="True",
cache_age=1729,
# 高级选项
retry_count=5,
trace_id="langchain_agent",
# 元数据
environment="production",
user="john",
organisation="acme",
prompt="Frost",
)

llm = OpenAI(temperature=0.9, headers=headers)

print(llm("黄色的树林中分出两条路"))