很多人看完 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
