使用Portkey全面掌控Langchain API请求的日志、追踪与监控

94 阅读3分钟

在现代应用开发环境中,处理多个API请求以满足单个用户请求已成为常态。然而,这些请求往往是分散的,不便于整体分析。在这篇文章中,我们将探讨如何使用Portkey在Langchain应用中实现API请求的日志记录、追踪与监控,从而全面掌控用户交互。

引言

在构建应用或代理时,尤其是使用Langchain时,多个API调用是不可避免的。然而,缺乏统一标识的请求,使得分析和调试复杂度增加。Portkey通过将所有嵌入、完成和其他请求关联到一个公共ID,通过日志和追踪,你可以获得用户交互的完整可见性。

主要内容

什么是Portkey?

Portkey是一个强大的API管理工具,能够帮助开发者轻松地管理、监控和优化API调用。它提供了日志、追踪、缓存、重试和标记等功能,增强了应用的生产能力。

开始使用Portkey

首先,我们需要导入所需的库:

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

设置API密钥

确保你在环境变量中设置了OpenAI的API密钥和Portkey的API密钥:

os.environ["OPENAI_API_KEY"] = "..."  # 替换为你的OpenAI API密钥
PORTKEY_API_KEY = "..."  # 替换为你的Portkey API密钥

定义Trace ID

Trace ID用以标识一个用户请求所关联的所有API调用:

TRACE_ID = "uuid-trace-id"  # 可以使用uuid库生成唯一的Trace ID

生成Portkey Header

portkey_headers = createHeaders(
    api_key=PORTKEY_API_KEY, provider="openai", trace_id=TRACE_ID
)

定义Langchain工具和模型

我们将定义简单的数学工具并设置我们的Langchain模型:

from langchain import hub
from langchain_core.tools import tool

@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]

# 使用API代理服务提高访问稳定性
model = ChatOpenAI(
    base_url=PORTKEY_GATEWAY_URL, default_headers=portkey_headers, temperature=0
)

运行代理

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"
    }
)

常见问题和解决方案

  1. API请求失败怎么办?

    Portkey提供自动重试机制,最多可重试5次,使用指数退避策略避免网络过载。

  2. 如何优化响应速度?

    使用Portkey的缓存功能可以显著降低延迟和成本。

总结和进一步学习资源

Portkey为Langchain应用提供了强大的日志及追踪能力,使开发者能够轻松管理和优化API调用。通过本文中介绍的步骤,您可以全面掌握用户交互过程,并通过Portkey的高级功能如缓存和自动重试,提升应用性能。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---