## 引言
构建基于Langchain的应用时,我们经常需要进行多次API调用来完成单个用户请求。然而,在分析这些请求时,它们并未链接在一起。通过Portkey,可以将一个用户请求的所有嵌入、完成及其他请求记录并追踪到一个共同的ID,从而提供对用户交互的完整可视化。
本文将逐步指导您如何在Langchain应用中使用Portkey对LLM调用进行日志记录、追踪和监控。
## 主要内容
### 1. 导入必要的工具
首先,我们需要导入Portkey、OpenAI和Agent工具。
```python
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代理服务提高访问稳定性
2. 配置API密钥
配置OpenAI API密钥
在您的环境中粘贴OpenAI API密钥:
os.environ["OPENAI_API_KEY"] = "..." # 您的OpenAI API密钥
获取Portkey API密钥
在Portkey注册并在仪表板中找到并复制API密钥:
PORTKEY_API_KEY = "..." # 您的Portkey API密钥
3. 设置追踪ID
为您的请求设置追踪ID,这个ID可以在所有来自单个请求的API调用中是相同的:
TRACE_ID = "uuid-trace-id" # 设置追踪ID
4. 生成Portkey请求头
使用以下代码生成Portkey请求头:
portkey_headers = createHeaders(
api_key=PORTKEY_API_KEY, provider="openai", trace_id=TRACE_ID
)
5. 定义提示和工具
定义您要使用的提示和工具。
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]
代码示例
运行您的代理,注意我们将在请求中包含Portkey请求头。
model = ChatOpenAI(
base_url=PORTKEY_GATEWAY_URL, default_headers=portkey_headers, temperature=0
)
# 构建OpenAI工具代理
agent = create_openai_tools_agent(model, tools, prompt)
# 创建AgentExecutor
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代理服务以提高访问的稳定性。
2. 请求失败如何处理?
Portkey支持自动重试机制,通过指数退避策略,最多进行5次重试。
总结和进一步学习资源
Portkey不仅可以记录和追踪请求,还提供了缓存、标记及自动重试的功能,这些功能极大地增强了生产环境的工作流能力。您可以参考以下文档以深入了解:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---