LangChain模型
LangChain 将模型分为三大类:语言模型(LLM)、聊天模型(Chat Model) 和嵌入模型(Embedding Model)。了解它们的区别是入门的第一步。
1. 聊天模型(Chat Model)
聊天模型是目前最常用的类型,接受消息列表作为输入,返回一条 AI 消息。GPT-4、Claude、Gemini 等都属于聊天模型。
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
llm = ChatOpenAI(
model="gpt-4o-mini",
temperature=0.7, # 控制随机性,0 最确定,1 最随机
max_tokens=512, # 最大返回 token 数
)
response = llm.invoke("用 Python 实现冒泡排序")
print(response.content)
常用参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
model |
str | 模型名称,如 gpt-4o、gpt-4o-mini |
temperature |
float | 输出随机性,范围 0~2,默认 1 |
max_tokens |
int | 限制返回的最大 token 数 |
timeout |
float | 请求超时时间(秒) |
2. 模型返回值(AIMessage)
invoke() 返回的是一个 AIMessage 对象,包含多个字段:
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
llm = ChatOpenAI(model="gpt-4o-mini")
response = llm.invoke("1 + 1 等于多少?")
print(type(response)) # <class 'langchain_core.messages.ai.AIMessage'>
print(response.content) # 模型回答的文字内容
print(response.response_metadata) # 包含 token 使用量等元数据
通常我们只需要 response.content 来获取文本内容。
3. 批量调用
如果需要同时处理多个问题,可以使用 batch() 方法,它会并发发送请求,效率更高:
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
llm = ChatOpenAI(model="gpt-4o-mini")
questions = [
"Python 的 GIL 是什么?",
"什么是闭包?",
"解释一下装饰器。",
]
responses = llm.batch(questions)
for q, r in zip(questions, responses):
print(f"Q: {q}")
print(f"A: {r.content}\n")
4. 异步调用
在 FastAPI、异步脚本等场景中,使用 ainvoke() 避免阻塞:
import asyncio
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
async def main():
llm = ChatOpenAI(model="gpt-4o-mini")
response = await llm.ainvoke("Python 和 Go 哪个更适合后端开发?")
print(response.content)
asyncio.run(main())
5. 嵌入模型(Embedding Model)
嵌入模型将文本转换为向量(一组数字),用于语义搜索、相似度计算等场景。在 RAG(检索增强生成)中会频繁用到。
from dotenv import load_dotenv
from langchain_openai import OpenAIEmbeddings
load_dotenv()
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
# 将一段文字转成向量
vector = embeddings.embed_query("你好世界")
print(f"向量维度: {len(vector)}") # 1536
print(f"前5个值: {vector[:5]}")
批量转换多段文本:
texts = [
"苹果是一种水果",
"香蕉是黄色的",
"Python 是编程语言",
]
vectors = embeddings.embed_documents(texts)
print(f"共 {len(vectors)} 个向量,每个维度 {len(vectors[0])}")
6. 使用其他模型
LangChain 支持多种模型提供商,只需换一个包和类即可:
使用 Anthropic Claude:
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-3-5-sonnet-20241022")
response = llm.invoke("你好")
print(response.content)
使用本地 Ollama 模型:
from langchain_ollama import ChatOllama
llm = ChatOllama(model="llama3.2")
response = llm.invoke("你好")
print(response.content)
LangChain 的一大优势就是接口统一,无论底层用什么模型,invoke()、stream()、batch() 方法都一样。
总结
ChatOpenAI是最常用的聊天模型接口,temperature控制随机性invoke()单次调用,batch()批量调用,ainvoke()异步调用response.content获取文本内容,response.response_metadata获取元数据OpenAIEmbeddings将文本转为向量,用于语义搜索- LangChain 支持多种模型提供商,接口统一