Appearance
OpenAI 模型集成
OpenAI 是 LangChain 支持的主要模型提供商之一,提供了多种强大的语言模型,如 GPT-3.5、GPT-4 等。本节将详细介绍如何在 LangChain 中集成 OpenAI 的各种模型。
安装依赖
首先,需要安装 OpenAI 相关的依赖包:
bash
pip install langchain-openai配置 API 密钥
使用 OpenAI 模型需要配置 API 密钥。可以通过以下方式设置:
- 环境变量:设置
OPENAI_API_KEY环境变量 - 直接传递:在初始化模型时直接传递 API 密钥
示例:设置环境变量
bash
# Linux/Mac
export OPENAI_API_KEY="your-api-key"
# Windows
set OPENAI_API_KEY=your-api-key语言模型(LLMs)
OpenAI 的语言模型是最基本的模型类型,接受文本输入并生成文本输出。
初始化语言模型
python
from langchain_openai import OpenAI
# 方式 1:使用环境变量中的 API 密钥
llm = OpenAI()
# 方式 2:直接传递 API 密钥
llm = OpenAI(api_key="your-api-key")
# 配置模型参数
llm = OpenAI(
model_name="gpt-3.5-turbo-instruct", # 模型名称
temperature=0.7, # 温度参数,控制输出的随机性
max_tokens=1000, # 最大生成 tokens 数
top_p=1.0, # 控制生成的多样性
frequency_penalty=0.0, # 频率惩罚
presence_penalty=0.0 # 存在惩罚
)使用语言模型
python
# 生成文本
response = llm("What is LangChain?")
print(response)
# 批量生成
responses = llm.generate(["What is LangChain?", "How to use LangChain?"])
for i, result in enumerate(responses.generations):
print(f"Response {i+1}: {result[0].text}")聊天模型(Chat Models)
聊天模型专门用于对话场景,接受消息列表作为输入并生成消息作为输出。
初始化聊天模型
python
from langchain_openai import ChatOpenAI
# 方式 1:使用环境变量中的 API 密钥
chat_model = ChatOpenAI()
# 方式 2:直接传递 API 密钥
chat_model = ChatOpenAI(api_key="your-api-key")
# 配置模型参数
chat_model = ChatOpenAI(
model_name="gpt-4", # 模型名称
temperature=0.7, # 温度参数
max_tokens=1000, # 最大生成 tokens 数
top_p=1.0, # 控制生成的多样性
frequency_penalty=0.0, # 频率惩罚
presence_penalty=0.0 # 存在惩罚
)使用聊天模型
python
from langchain.schema import HumanMessage, SystemMessage, AIMessage
# 发送消息
messages = [
SystemMessage(content="You are a helpful assistant"),
HumanMessage(content="What is LangChain?"),
AIMessage(content="LangChain is a framework for building LLM applications."),
HumanMessage(content="Can you give me an example?")
]
response = chat_model(messages)
print(response.content)
# 批量生成
responses = chat_model.generate([
[
SystemMessage(content="You are a helpful assistant"),
HumanMessage(content="What is LangChain?")
],
[
SystemMessage(content="You are a helpful assistant"),
HumanMessage(content="How to use LangChain?")
]
])
for i, result in enumerate(responses.generations):
print(f"Response {i+1}: {result[0].text}")嵌入模型(Embedding Models)
嵌入模型用于将文本转换为向量表示,常用于语义搜索和知识检索。
初始化嵌入模型
python
from langchain_openai import OpenAIEmbeddings
# 方式 1:使用环境变量中的 API 密钥
embeddings = OpenAIEmbeddings()
# 方式 2:直接传递 API 密钥
embeddings = OpenAIEmbeddings(api_key="your-api-key")
# 配置模型参数
embeddings = OpenAIEmbeddings(
model="text-embedding-3-small", # 模型名称
chunk_size=1000 # 批处理大小
)使用嵌入模型
python
# 生成单个文本的嵌入
text = "LangChain is a framework for building LLM applications"
embedding = embeddings.embed_query(text)
print(f"Embedding vector length: {len(embedding)}")
print(f"First 10 values: {embedding[:10]}")
# 生成多个文本的嵌入
texts = [
"LangChain is a framework for building LLM applications",
"OpenAI provides powerful language models",
"Embeddings are used for semantic search"
]
embeddings_list = embeddings.embed_documents(texts)
for i, emb in enumerate(embeddings_list):
print(f"Embedding {i+1} length: {len(emb)}")流式输出
OpenAI 模型支持流式输出,可以实时获取生成的文本。
语言模型的流式输出
python
from langchain_openai import OpenAI
# 初始化语言模型
llm = OpenAI()
# 流式输出
for chunk in llm.stream("Write a short story about a robot learning to paint."):
print(chunk, end="", flush=True)聊天模型的流式输出
python
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage
# 初始化聊天模型
chat_model = ChatOpenAI()
# 流式输出
messages = [
SystemMessage(content="You are a helpful assistant"),
HumanMessage(content="Write a short story about a robot learning to paint.")
]
for chunk in chat_model.stream(messages):
print(chunk.content, end="", flush=True)函数调用
OpenAI 的某些模型(如 GPT-4)支持函数调用,可以让模型根据需要调用外部函数。
示例:使用函数调用
python
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage, AIMessage, FunctionMessage
from langchain.tools import BaseTool
from typing import Optional, Type
from pydantic import BaseModel, Field
# 定义工具输入模式
class WeatherInput(BaseModel):
location: str = Field(description="城市名称")
# 创建自定义工具
class WeatherTool(BaseTool):
name = "get_weather"
description = "获取指定城市的天气信息"
args_schema: Type[BaseModel] = WeatherInput
def _run(self, location: str) -> str:
# 模拟天气 API 调用
return f"{location} 的当前温度是 25°C,天气晴朗"
# 初始化聊天模型
chat_model = ChatOpenAI(model_name="gpt-4")
# 定义工具
weather_tool = WeatherTool()
tools = [weather_tool]
# 定义工具模式
工具模式 = [
{
"type": "function",
"function": {
"name": weather_tool.name,
"description": weather_tool.description,
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市名称"
}
},
"required": ["location"]
}
}
}
]
# 发送消息
messages = [
SystemMessage(content="You are a helpful assistant. Use the get_weather tool to get weather information when needed."),
HumanMessage(content="北京的天气怎么样?")
]
# 获取模型响应
response = chat_model(messages, tools=工具模式)
print("Model response:", response)
# 处理函数调用
if response.additional_kwargs.get("tool_calls"):
tool_call = response.additional_kwargs["tool_calls"][0]
location = tool_call["function"]["arguments"]
import json
location = json.loads(location)["location"]
# 调用工具
tool_result = weather_tool.run(location)
print("Tool result:", tool_result)
# 发送工具结果给模型
messages.append(response)
messages.append(FunctionMessage(content=tool_result, name=tool_call["function"]["name"]))
# 获取最终响应
final_response = chat_model(messages)
print("Final response:", final_response.content)总结
OpenAI 提供了多种强大的语言模型,LangChain 提供了简洁的接口来集成这些模型。通过本文的介绍,您应该已经了解了如何在 LangChain 中使用 OpenAI 的语言模型、聊天模型和嵌入模型,以及如何使用流式输出和函数调用等高级功能。
在实际应用中,您可以根据具体需求选择合适的模型和参数,构建功能强大的 LLM 应用。