# 如何开始使用 LangChain:实用指南 我还记得第一次盯着 LangChain 文档时的感觉,就像走进了一座图书馆,每本书都是用我只懂一半的语言写的。它的前景很诱人——将 LLM 链式连接、添加记忆、工具,并构建实际应用——但现实却是大量的“你好世界”示例,让人摸不着头脑。所以我写这篇文章是为了三个月前的自己。以下是我真正有效的方法。 ## LangChain 到底是什么(以及谁应该关
# 如何开始使用 LangChain:实用指南
我还记得第一次盯着 LangChain 文档时的感觉,就像走进了一座图书馆,每本书都是用我只懂一半的语言写的。它的前景很诱人——将 LLM 链式连接、添加记忆、工具,并构建实际应用——但现实却是大量的“你好世界”示例,让人摸不着头脑。所以我写这篇文章是为了三个月前的自己。以下是我真正有效的方法。
## LangChain 到底是什么(以及谁应该关注)
LangChain 不是另一个 AI 模型。它是一个框架——可以把它想象成一把瑞士军刀,用于在大型语言模型之上构建应用。你提供模型(OpenAI、Anthropic、本地 Llama 等),LangChain 则提供连接器:链、代理、记忆和工具。它适用于那些希望超越“与 PDF 聊天”的开发者,构建诸如能查询订单的客户支持机器人,或能阅读多个来源并撰写摘要的研究助手。
如果你熟悉 Python,并且曾尝试直接调用 LLM API,那么你就是目标用户。如果你从未写过脚本,LangChain 就像在还不知道离合器是什么之前就学习驾驶手动挡汽车。先从 API 开始,然后再回来。
## 设置:曾经让我困惑的部分
老实说,设置本身很简单,但我浪费了一个小时,因为我没有仔细阅读细则。
**步骤 1:安装**
```bash
pip install langchain langchain-community langchain-openai
```
那个 `langchain-community` 包包含了大部分集成。我最初只安装了 `langchain`,然后纳闷为什么什么都不起作用。
**步骤 2:获取 API 密钥**
你需要一个 LLM 提供商。我用了 OpenAI,因为这是最省事的方法。前往 platform.openai.com,创建一个 API 密钥,并将其设置为环境变量:
```bash
export OPENAI_API_KEY="sk-..."
```
**步骤 3:你的第一个链**
以下是最小化的“我活着”测试:
```python
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
llm = ChatOpenAI(model="gpt-4", temperature=0)
response = llm.invoke([HumanMessage(content="用西班牙语说'你好世界'")])
print(response.content)
```
如果你得到“Hola mundo”,那就成功了。
## 我构建的真实任务(这样你就不用猜测了)
### 任务 1:基于文档的简单问答机器人
我想在不阅读的情况下,询问一份 50 页 PDF 中的问题。经典用例。以下是有效的方法:
```python
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
# 加载和拆分
loader = PyPDFLoader("my_report.pdf")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
docs = text_splitter.split_documents(documents)
# 嵌入和存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(docs, embeddings)
# 创建问答链
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-3.5-turbo", temperature=0),
chain_type="stuff",
retriever=vectorstore.as_retriever()
)
# 提问
answer = qa.run("第 3 部分的关键发现是什么?")
print(answer)
```
**我学到的教训:** `chunk_size` 和 `chunk_overlap` 比你想象的重要得多。太小(低于 500)会导致模型丢失上下文。太大(超过 2000)则会消耗大量 token。对于大多数文档,我最终选择 1000 的块大小和 200 的重叠。
### 任务 2:带记忆的对话代理
简单的问答还不错,但我想要一个能记住我说过的话的聊天。这正是 LangChain 记忆模块的用武之地:
```python
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
memory = ConversationBufferMemory()
conversation = ConversationChain(
llm=ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
)