在构建使用Langchain的应用或代理时,通常会为了满足单个用户请求而进行多次API调用。然而,这些请求在分析时并没有自动关联在一起。因此,Portkey的引入为我们提供了全新的解决方案,它可以将来自单个用户请求的所有嵌入、完成以及其他请求统一记录并追踪到一个公共ID上,从而实现用户交互的全面可视化。本文将通过一个详细的分步指南,演示如何在Langchain应用中使用Portkey来记录、追踪和监控Langchain LLM调用。
技术背景介绍
在现代应用开发中,特别是涉及自然语言处理的应用,为了实现复杂的功能,往往需要进行多次API调用。为了监控这些调用并进行后续分析,开发者需要一种高效的方式将这些请求进行日志记录和追踪。Portkey提供了这样一个平台,能够为我们自动管理这些请求。
核心原理解析
Portkey通过分配一个通用的Trace ID,将多个API调用与单个用户请求关联起来。这样,你就可以在Portkey仪表板上看到完整的调用链路,实现深入的分析和性能优化。
代码实现演示
以下是如何在Langchain应用中集成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密钥
os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # 替换为你的OpenAI API密钥 PORTKEY_API_KEY = "your-portkey-api-key" # 替换为你的Portkey API密钥 -
设置Trace ID
TRACE_ID = "uuid-trace-id" # 设置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] -
运行代理
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还提供了缓存、重试、标记等高级功能,以进一步增强应用的稳定性和响应速度。
实践建议
- 利用缓存功能:减少重复调用,从而降低延迟和成本。
- 使用重试策略:提升请求的成功率,尤其是在网络不稳定的情况下。
- 多用Portkey仪表板:通过可视化的方式追踪和分析用户请求和响应过程。
如果遇到问题欢迎在评论区交流。
—END—

534

被折叠的 条评论
为什么被折叠?



