ChatOpenAI
OpenAI 是一家人工智能 (AI) 研究实验室。
本指南将帮助您开始使用 ChatOpenAI 聊天模型。有关所有 ChatOpenAI 功能和配置的详细文档,请前往 API 参考。
概述
集成详细信息
类 | 包 | 本地 | 可序列化 | PY 支持 | 包下载 | 包最新 |
---|---|---|---|---|---|---|
ChatOpenAI | @langchain/openai | ❌ | ✅ | ✅ |
模型功能
有关如何使用特定功能的指南,请参见以下表标题中的链接。
工具调用 | 结构化输出 | JSON 模式 | 图像输入 | 音频输入 | 视频输入 | 令牌级流 | 令牌使用情况 | Logprobs |
---|---|---|---|---|---|---|---|---|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ |
设置
要访问 OpenAI 聊天模型,您需要创建一个 OpenAI 帐户,获取 API 密钥,并安装 @langchain/openai
集成包。
凭据
前往 OpenAI 网站 注册 OpenAI 并生成 API 密钥。完成此操作后,设置 OPENAI_API_KEY
环境变量
export OPENAI_API_KEY="your-api-key"
如果您想获得模型调用的自动跟踪,您还可以通过取消以下注释来设置 LangSmith API 密钥
# export LANGCHAIN_TRACING_V2="true"
# export LANGCHAIN_API_KEY="your-api-key"
安装
LangChain ChatOpenAI
集成位于 @langchain/openai
包中
有关安装集成包的一般说明,请参见 此部分。
- npm
- yarn
- pnpm
npm i @langchain/openai
yarn add @langchain/openai
pnpm add @langchain/openai
实例化
现在我们可以实例化我们的模型对象并生成聊天完成
import { ChatOpenAI } from "@langchain/openai";
const llm = new ChatOpenAI({
model: "gpt-4o",
temperature: 0,
// other params...
});
调用
const aiMsg = await llm.invoke([
[
"system",
"You are a helpful assistant that translates English to French. Translate the user sentence.",
],
["human", "I love programming."],
]);
aiMsg;
AIMessage {
"id": "chatcmpl-9rB4GvhlRb0x3hxupLBQYOKKmTxvV",
"content": "J'adore la programmation.",
"additional_kwargs": {},
"response_metadata": {
"tokenUsage": {
"completionTokens": 8,
"promptTokens": 31,
"totalTokens": 39
},
"finish_reason": "stop"
},
"tool_calls": [],
"invalid_tool_calls": [],
"usage_metadata": {
"input_tokens": 31,
"output_tokens": 8,
"total_tokens": 39
}
}
console.log(aiMsg.content);
J'adore la programmation.
链接
我们可以 链接 我们的模型与提示模板,如下所示
import { ChatPromptTemplate } from "@langchain/core/prompts";
const prompt = ChatPromptTemplate.fromMessages([
[
"system",
"You are a helpful assistant that translates {input_language} to {output_language}.",
],
["human", "{input}"],
]);
const chain = prompt.pipe(llm);
await chain.invoke({
input_language: "English",
output_language: "German",
input: "I love programming.",
});
AIMessage {
"id": "chatcmpl-9rB4JD9rVBLzTuMee9AabulowEH0d",
"content": "Ich liebe das Programmieren.",
"additional_kwargs": {},
"response_metadata": {
"tokenUsage": {
"completionTokens": 6,
"promptTokens": 26,
"totalTokens": 32
},
"finish_reason": "stop"
},
"tool_calls": [],
"invalid_tool_calls": [],
"usage_metadata": {
"input_tokens": 26,
"output_tokens": 6,
"total_tokens": 32
}
}
自定义 URL
您可以通过传递 configuration
参数来自定义 SDK 发送请求的基 URL,如下所示
import { ChatOpenAI } from "@langchain/openai";
const llmWithCustomURL = new ChatOpenAI({
temperature: 0.9,
configuration: {
baseURL: "https://your_custom_url.com",
},
});
await llmWithCustomURL.invoke("Hi there!");
configuration
字段还接受官方 SDK 接受的其他 ClientOptions
参数。
如果您在 Azure OpenAI 上托管,请参见 专用页面。
自定义标头
您可以在同一个 configuration
字段中指定自定义标头
import { ChatOpenAI } from "@langchain/openai";
const llmWithCustomHeaders = new ChatOpenAI({
temperature: 0.9,
configuration: {
defaultHeaders: {
Authorization: `Bearer SOME_CUSTOM_VALUE`,
},
},
});
await llmWithCustomHeaders.invoke("Hi there!");
禁用流使用情况元数据
一些代理或第三方提供商提供了与 OpenAI 大致相同的 API 接口,但不支持最近添加的 stream_options
参数来返回流使用情况。您可以使用 ChatOpenAI
通过以下方式禁用流使用情况来访问这些提供商
import { ChatOpenAI } from "@langchain/openai";
const llmWithoutStreamUsage = new ChatOpenAI({
temperature: 0.9,
streamUsage: false,
configuration: {
baseURL: "https://proxy.com",
},
});
await llmWithoutStreamUsage.invoke("Hi there!");
调用微调模型
您可以通过传入相应的 modelName
参数来调用微调的 OpenAI 模型。
这通常采用 ft:{OPENAI_MODEL_NAME}:{ORG_NAME}::{MODEL_ID}
的形式。例如
import { ChatOpenAI } from "@langchain/openai";
const fineTunedLlm = new ChatOpenAI({
temperature: 0.9,
model: "ft:gpt-3.5-turbo-0613:{ORG_NAME}::{MODEL_ID}",
});
await fineTunedLlm.invoke("Hi there!");
生成元数据
如果您需要其他信息,如 logprobs 或令牌使用情况,这些信息将直接在 .invoke
响应中的消息的 response_metadata
字段中返回。
需要 @langchain/core
版本>=0.1.48。
import { ChatOpenAI } from "@langchain/openai";
// See https://cookbook.openai.com/examples/using_logprobs for details
const llmWithLogprobs = new ChatOpenAI({
logprobs: true,
// topLogprobs: 5,
});
const responseMessageWithLogprobs = await llmWithLogprobs.invoke("Hi there!");
console.dir(responseMessageWithLogprobs.response_metadata.logprobs, {
depth: null,
});
{
content: [
{
token: 'Hello',
logprob: -0.0005151443,
bytes: [ 72, 101, 108, 108, 111 ],
top_logprobs: []
},
{
token: '!',
logprob: -0.00004334534,
bytes: [ 33 ],
top_logprobs: []
},
{
token: ' How',
logprob: -0.000035477897,
bytes: [ 32, 72, 111, 119 ],
top_logprobs: []
},
{
token: ' can',
logprob: -0.0006658526,
bytes: [ 32, 99, 97, 110 ],
top_logprobs: []
},
{
token: ' I',
logprob: -0.0000010280384,
bytes: [ 32, 73 ],
top_logprobs: []
},
{
token: ' assist',
logprob: -0.10124119,
bytes: [
32, 97, 115,
115, 105, 115,
116
],
top_logprobs: []
},
{
token: ' you',
logprob: -5.5122365e-7,
bytes: [ 32, 121, 111, 117 ],
top_logprobs: []
},
{
token: ' today',
logprob: -0.000052643223,
bytes: [ 32, 116, 111, 100, 97, 121 ],
top_logprobs: []
},
{
token: '?',
logprob: -0.000012352386,
bytes: [ 63 ],
top_logprobs: []
}
]
}
工具调用
使用 OpenAI 模型进行工具调用与 其他模型 类似。此外,以下指南包含一些特别与 OpenAI 相关的的信息
strict: true
@langchain/openai >= 0.2.6
截至 2024 年 8 月 6 日,OpenAI 在调用工具时支持 strict
参数,该参数将强制模型遵守工具参数模式。点击此处了解更多信息:https://platform.openai.com/docs/guides/function-calling
注意:如果 strict: true
,则工具定义也将被验证,并且将接受 JSON 架构的子集。最重要的是,架构不能包含可选参数(具有默认值的那些参数)。点击此处阅读有关支持的架构类型的完整文档:https://platform.openai.com/docs/guides/structured-outputs/supported-schemas.
import { ChatOpenAI } from "@langchain/openai";
import { tool } from "@langchain/core/tools";
import { z } from "zod";
const weatherTool = tool((_) => "no-op", {
name: "get_current_weather",
description: "Get the current weather",
schema: z.object({
location: z.string(),
}),
});
const llmWithStrictTrue = new ChatOpenAI({
model: "gpt-4o",
}).bindTools([weatherTool], {
strict: true,
tool_choice: weatherTool.name,
});
// Although the question is not about the weather, it will call the tool with the correct arguments
// because we passed `tool_choice` and `strict: true`.
const strictTrueResult = await llmWithStrictTrue.invoke(
"What is 127862 times 12898 divided by 2?"
);
console.dir(strictTrueResult.tool_calls, { depth: null });
[
{
name: 'get_current_weather',
args: { location: 'Hanoi' },
type: 'tool_call',
id: 'call_aB85ybkLCoccpzqHquuJGH3d'
}
]
API 参考
有关所有 ChatOpenAI 功能和配置的详细文档,请访问 API 参考:https://api.js.langchain.com/classes/langchain_openai.ChatOpenAI.html