LangChain 是一个开源框架,专为开发基于大型语言模型(LLM)的应用程序而设计。它提供了一套完整的工具和抽象层,让开发者能够更轻松地构建复杂的 AI 应用。本文将带你了解 LangChain 的核心概念和基本使用方法。

什么是 LangChain?

LangChain 的核心理念是将语言模型与其他数据源和工具"链接"起来,从而创建更强大、更实用的应用程序。它不仅仅是简单地调用 API,而是提供了一个完整的生态系统来管理提示词、上下文、记忆、数据检索等复杂功能。

安装和基本设置

首先安装 LangChain:

pip install langchain langchain-openai

配置 API 密钥:

import os
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = "your-api-key"
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)

核心组件

1. 模型(Models)

LangChain 支持多种语言模型,包括 OpenAI、Anthropic、HuggingFace 等。你可以轻松切换不同的模型:

from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic

# 使用 OpenAI
openai_llm = ChatOpenAI(model="gpt-4")

# 使用 Anthropic Claude
claude_llm = ChatAnthropic(model="claude-3-sonnet-20240229")

2. 提示词模板(Prompt Templates)

提示词模板让你能够动态生成提示词,避免硬编码:

from langchain.prompts import PromptTemplate

template = """
你是一个专业的{role}。
请回答以下问题:{question}
"""

prompt = PromptTemplate(
    input_variables=["role", "question"],
    template=template
)

formatted_prompt = prompt.format(
    role="Python 程序员",
    question="如何优化代码性能?"
)

3. 链(Chains)

链是 LangChain 的核心概念,它允许你将多个组件串联起来:

from langchain.chains import LLMChain
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate

llm = ChatOpenAI(temperature=0.7)
prompt = PromptTemplate(
    input_variables=["product"],
    template="为{product}写一个创意广告语"
)

chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(product="智能手表")
print(result)

4. 记忆(Memory)

Memory 组件让你的应用能够记住对话历史:

from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain

memory = ConversationBufferMemory()
conversation = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=True
)

conversation.predict(input="你好,我叫张三")
conversation.predict(input="我刚才说我叫什么?")

5. 文档加载器和向量存储

LangChain 可以处理各种文档格式,并将其转换为可搜索的向量:

from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS

# 加载文档
loader = TextLoader("document.txt")
documents = loader.load()

# 分割文本
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(texts, embeddings)

# 搜索相关内容
query = "这个文档讲了什么?"
docs = vectorstore.similarity_search(query)

6. 检索增强生成(RAG)

RAG 是一种强大的模式,结合了信息检索和生成:

from langchain.chains import RetrievalQA

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever()
)

question = "文档中提到的主要观点是什么?"
answer = qa_chain.run(question)
print(answer)

实用案例:构建一个问答机器人

让我们整合以上概念,构建一个简单的文档问答系统:

from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA

# 1. 加载 PDF 文档
loader = PyPDFLoader("company_handbook.pdf")
pages = loader.load()

# 2. 分割文本
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
splits = text_splitter.split_documents(pages)

# 3. 创建向量数据库
vectorstore = Chroma.from_documents(
    documents=splits,
    embedding=OpenAIEmbeddings()
)

# 4. 创建问答链
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-3.5-turbo", temperature=0),
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
    return_source_documents=True
)

# 5. 提问
result = qa_chain({"query": "公司的假期政策是什么?"})
print(result["result"])

高级特性

LangChain 还提供了许多高级功能,包括代理(Agents)可以使用工具和做出决策、回调系统用于监控和日志记录、输出解析器可以结构化 LLM 的输出,以及多种链类型如 MapReduce、Refine 等用于处理长文档。

最佳实践

在使用 LangChain 时,建议注意几个关键点。首先是选择合适的文本分割策略,chunk_size 的大小会影响检索质量。其次要控制 token 消耗,使用更小的模型处理简单任务可以节省成本。另外,实现错误处理和重试机制很重要,因为 API 调用可能失败。最后,缓存常用的向量嵌入和响应可以提高性能。

总结

LangChain 为构建 LLM 应用提供了一个强大而灵活的框架,它降低了开发复杂 AI 应用的门槛,让开发者可以专注于业务逻辑而非底层实现。无论是构建聊天机器人、文档问答系统,还是智能助手,LangChain 都是一个值得尝试的工具。

随着 AI 技术的快速发展,LangChain 也在不断演进。建议定期查看官方文档和社区资源,了解最新的功能和最佳实践。开始你的 LangChain 之旅吧,用它来构建下一代智能应用!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐