跳转至

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-4ogpt-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:

pip install langchain-anthropic
from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(model="claude-3-5-sonnet-20241022")
response = llm.invoke("你好")
print(response.content)

使用本地 Ollama 模型:

pip install langchain-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 支持多种模型提供商,接口统一

评论