Langchain (Python)

Portkey 为任何 Langchain 应用添加核心生产能力。

本指南涵盖了 Python 版本的 Langchain 集成。JS Langchain 集成的文档在 这里

LangChain 是一个用于开发基于语言模型的应用程序的框架。它使得应用程序能够:

  • 具有上下文感知:将语言模型连接到上下文源(提示说明、少量示例、用于基础响应的内容等)

  • 推理:依赖语言模型进行推理(根据提供的上下文来回答、采取什么行动等)

您可以在 这里 找到更多信息。

在使用 Langchain 时,Portkey 可以通过为您的 Langchain 应用添加快速的 AI 网关、可观察性、提示管理等功能,帮助将其投入生产

快速开始集成

安装 Portkey 和 Langchain Python SDK 以开始使用。

pip install -U langchain-core portkey_ai langchain-openai

我们安装了 langchain-core 以跳过可选依赖。如果您更喜欢,也可以安装 langchain

由于 Portkey 完全兼容 OpenAI 签名,您可以通过 ChatOpenAI 接口连接到 Portkey Ai Gateway。

  • base_url 设置为 PORTKEY_GATEWAY_URL

  • 添加 default_headers 以使用 createHeaders 辅助方法来消费 Portkey 所需的头部信息。

现在我们可以初始化模型并更新模型以使用 Portkey 的 AI 网关。

from langchain_openai import ChatOpenAI
from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL

PORTKEY_API_KEY = "..."
PROVIDER_API_KEY = "..." # 添加所使用的 AI 提供商的 API 密钥

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

llm = ChatOpenAI(api_key=PROVIDER_API_KEY, base_url=PORTKEY_GATEWAY_URL, default_headers=portkey_headers)

llm.invoke("What is the meaning of life, universe and everything?")

响应

调用及相应的提示也将显示在 Portkey 日志标签中。

使用虚拟密钥进行多模型操作

Portkey 支持 虚拟密钥,这是一种在安全的保险库中存储和管理 API 密钥的简单方法。让我们尝试使用虚拟密钥进行 LLM 调用。

1. 在您的 Portkey 账户中创建虚拟密钥并复制 ID

让我们尝试为 Mistral 创建一个新的虚拟密钥,如下所示

2. 在 Portkey 头部中使用虚拟密钥

virtual_key 参数设置所使用的 AI 提供者的身份验证和提供者。在我们的案例中,我们使用的是 Mistral 虚拟密钥。

请注意,api_key 可以留空,因为该身份验证将不被使用。

Portkey AI 网关将对 Mistral 的 API 请求进行身份验证,并以 OpenAI 格式返回响应供您使用。

AI 网关扩展了 Langchain 的 ChatOpenAI 类,使其成为调用任何提供者和任何模型的单一接口。

嵌入

通过 Portkey 在 Langchain 中的嵌入与使用 OpenAIEmbeddings 类的聊天模型工作方式相同。让我们尝试使用 OpenAI 的嵌入模型创建一个嵌入。

Langchain 目前仅支持 OpenAI 作为嵌入提供者,因为 Langchain 在内部将文本转换为令牌,然后将其作为输入发送到 API。通过 API 嵌入令牌而不是字符串的方法仅由 OpenAI 支持。

如果您计划使用其他嵌入模型,我们建议直接使用 Portkey SDK 进行嵌入调用。

链接与提示

使各种 Langchain 概念能够集成并同时执行,而 Langchain 支持 提示模板 来构建语言模型的输入。让我们看看这如何与 Portkey 一起工作。

我们将能够在 Portkey 日志仪表板中查看用于调用 OpenAI 的确切提示。

使用高级路由

Portkey AI Gateway 通过配置优先的方法为 Langchain 带来了负载均衡、回退、实验和金丝雀测试等功能。

让我们举一个 例子,假设我们想要将流量在 gpt-4 和 claude-opus 之间以 50:50 的比例进行分配,以测试这两个大型模型。网关的配置将如下所示:

然后我们可以在从 langchain 发出的请求中使用这个配置。

当 LLM 被调用时,Portkey 将根据定义的权重比例将请求分配给 gpt-4claude-3-opus-20240229

您可以在 这里 找到更多配置示例。

代理与追踪

Langchain 的一个强大功能是创建代理。代理工作流的挑战在于提示通常被抽象化,很难了解代理在做什么。这也使得调试变得更加困难。

Portkey 的 Langchain 集成使您能够全面了解代理的运行情况。让我们以一个 流行的代理工作流 为例。

运行此代码将在 Portkey 中产生以下日志。

这非常强大,因为您可以控制和了解代理流,从而识别问题并根据需要进行更新。

Last updated