使用Portkey进行Langchain API调用的日志、追踪与监控

在使用Langchain构建应用程序或智能体时,常常需要通过多次API调用来完成单个用户请求。然而,当我们希望分析这些请求时,它们往往并没有按预期串联在一起。Portkey提供了一种解决方案,将来自单个用户请求的所有嵌入、完成和其他请求记录并追踪到一个共同的ID中,从而实现用户交互的全面可见性。本文将通过一个逐步指南,讲解如何在Langchain应用中使用Portkey对Langchain LLM调用进行日志记录、追踪和监控。

技术背景介绍

在现代应用中,为了实现智能化的用户交互,通常需要集成多种API调用。当API调用数量较多时,确保每个调用的可追溯性和日志记录完整性就显得尤为重要。Portkey作为一个中间层解决方案,可以帮助开发者在不影响性能的情况下实现这些功能。

核心原理解析

Portkey通过为每个请求分配一个唯一的Trace ID,并在请求中携带这个ID,以便在其服务中记录所有相关信息,如请求时间、响应时间、请求和响应内容等。这样,我们可以在Portkey的仪表盘中轻松追踪每个用户请求的详细情况。

代码实现演示

让我们通过一个代码示例来演示如何使用Portkey对Langchain中的API调用进行监控。首先,我们需要导入Portkey、OpenAI和Langchain工具包:

import os
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_openai import ChatOpenAI
from portkey_ai import PORTKEY_GATEWAY_URL, createHeaders

# 设置OpenAI API Key
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"

# 获取并设置Portkey API Key
PORTKEY_API_KEY = "your-portkey-api-key"

# 设置Trace ID
TRACE_ID = "uuid-trace-id"

# 生成Portkey Headers
portkey_headers = createHeaders(
    api_key=PORTKEY_API_KEY, provider="openai", trace_id=TRACE_ID
)

# 定义用于调用的工具和提示
from langchain import hub
from langchain_core.tools import tool

prompt = hub.pull("hwchase17/openai-tools-agent")

@tool
def multiply(first_int: int, second_int: int) -> int:
    """Multiply two integers together."""
    return first_int * second_int

@tool
def exponentiate(base: int, exponent: int) -> int:
    "Exponentiate the base to the exponent power."
    return base**exponent

tools = [multiply, exponentiate]

# 初始化OpenAI模型,包含Portkey Headers
model = ChatOpenAI(
    base_url=PORTKEY_GATEWAY_URL, default_headers=portkey_headers, temperature=0
)

# 构建OpenAI工具代理
agent = create_openai_tools_agent(model, tools, prompt)

# 创建代理执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 执行调用
agent_executor.invoke(
    {
        "input": "Take 3 to the fifth power and multiply that by thirty six, then square the result"
    }
)

应用场景分析

在使用Portkey进行API调用的场景中,开发者可以通过仪表盘查看每一个请求的详细信息,包括时间、成本、请求和响应内容等。这对于需要高可观测性和可追溯性应用程序的开发者来说是非常有价值的,比如在客户支持、数据分析和AI驱动的决策系统中。

实践建议

  • 在应用上线前,确保每个API调用都附带有效的Trace ID,以便于后续的调试和分析。
  • 充分利用Portkey的缓存、重试和标签功能,提高应用程序的可靠性和性能。
  • 经常监控Portkey的仪表盘,以识别和解决API调用过程中潜在的问题。

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

你可能感兴趣的:(langchain,microsoft,windows,python)