在现代应用开发环境中,处理多个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"
}
)
常见问题和解决方案
-
API请求失败怎么办?
Portkey提供自动重试机制,最多可重试5次,使用指数退避策略避免网络过载。
-
如何优化响应速度?
使用Portkey的缓存功能可以显著降低延迟和成本。
总结和进一步学习资源
Portkey为Langchain应用提供了强大的日志及追踪能力,使开发者能够轻松管理和优化API调用。通过本文中介绍的步骤,您可以全面掌握用户交互过程,并通过Portkey的高级功能如缓存和自动重试,提升应用性能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---