LangChain 基础使用:从入门到实战

很多人看完 LangChain 文档还是不知道怎么用。这篇不聊概念,直接从代码出发。

环境准备

pip install langchain langchain-openai

你需要准备一个 OpenAI API Key,换成国内模型也行,思路一样。

1. LLM 调用:最基础的玩法

LangChain 给 LLM 调用提供了统一接口:

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4", api_key="your-key")
response = llm.invoke("用一句话解释什么是 LangChain")
print(response.content)

三行代码,完成第一次调用。

2. Prompt 模板:别再手动拼字符串

写 LLM 应用最烦的就是 Prompt 拼装。LangChain 的 PromptTemplate 帮你管起来:

from langchain_core.prompts import PromptTemplate

template = PromptTemplate.from_template(
    "请帮我写一篇关于{topic}的{length}字简介"
)

prompt = template.invoke({"topic": "Python", "length": 200})
response = llm.invoke(prompt)

模板的好处是 Prompt 和代码分离,改 Prompt 不用动逻辑。

3. Chain:把多个步骤串起来

单个 LLM 调用的场景有限。LangChain 的价值在于把多个步骤串联成链:

from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=template)
result = chain.invoke({"topic": "LangChain", "length": 300})

这就是 Chain——把输入一层层传递,最后出结果。

4. 对话历史管理

做聊天机器人必须处理历史消息。LangChain 的 ChatMessageHistory 帮你管:

from langchain_core.chat_history import InMemoryChatMessageHistory

history = InMemoryChatMessageHistory()
history.add_user_message("你好,我是小明")
history.add_ai_message("你好小明,有什么可以帮你的?")

messages = history.messages
response = llm.invoke(messages)

每次把 history 传进去,模型就能理解上下文了。

5. 输出解析:拿到结构化数据

LLM 返回的是文本,想拿结构化结果需要解析器:

from langchain_core.output_parsers import StrOutputParser

parser = StrOutputParser()
result = parser.invoke(response)

配合 Chain 用:

chain = template | llm | parser

| 这个管道操作符是 LangChain Expression Language 的核心,把组件串联起来。

6. 实战:做一个简单的读书笔记助手

来一个完整的例子:根据书名自动生成读书笔记。

from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser

llm = ChatOpenAI(model="gpt-4", api_key="your-key")

template = PromptTemplate.from_template(
    "你是一个读书笔记助手。请为《{book}》写一份简短笔记,"
    "包括:核心观点、关键章节、读后感想。"
)

parser = StrOutputParser()
chain = template | llm | parser

result = chain.invoke({"book": "人类简史"})
print(result)

核心代码就这么点。

7. 调试技巧

开发时想看 Chain 内部发生了什么:

from langchain_core.tracers import ConsoleCallbackHandler

chain.invoke(
    {"book": "思考,快与慢"},
    config={"callbacks": [ConsoleCallbackHandler()]}
)

ConsoleCallbackHandler 会打印每个步骤的输入输出,定位问题很好用。

8. 几个避坑提醒

别在生产环境用 InMemoryChatMessageHistory。 重启就没了,正式项目用 Redis 或者数据库存历史。

Model、Prompt、Chain、Memory,把这几个核心概念摸透,LangChain 就理解了七成。

官方文档的 Quickstart 值得过一遍。 最新的 Expression Language 写法比旧版简洁很多,建议从一开始就用新写法。

上手最快的方式就是找个具体需求,把代码敲一遍。

文章摘自:https://www.cnblogs.com/chenjinhai/p/19843462