# 如何开始使用 LangChain:实用指南 我还记得第一次盯着 LangChain 文档时的感觉,就像走进了一座图书馆,每本书都是用我只懂一半的语言写的。它的前景很诱人——将 LLM 链式连接、添加记忆、工具,并构建实际应用——但现实却是大量的“你好世界”示例,让人摸不着头脑。所以我写这篇文章是为了三个月前的自己。以下是我真正有效的方法。 ## LangChain 到底是什么(以及谁应该关

open-source

# 如何开始使用 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)

)