langchain的官方地址: LangChain
API的地址: LangChain Python API Reference — 🦜🔗 LangChain documentation(这里面可以看到不同厂家的大模型在langchain该如何去调用其api和langchain提供的封装功能的api接口)
学习langchain需要注意的几个点:
- LangChain 也是一套面向大模型的开发框架(SDK)
- LangChain 是 AGI 时代软件工程的一个探索和原型
- 学习 LangChain 要关注接口变更
langchain主要由三部分构成:
- Build:使用 LangChain 构建应用
- Run:使用 LangGraph Platform 大规模运行
- Manage:使用 LangSmith 管理 LLM 性能
langchain和langgraph:
- LangChain: LLM 构建的可组合框架
- LangGraph:可控代理工作流的编排框架。
langchain的核心主件
1. 模型 I/O 封装
- LLMs:大语言模型
- Chat Models:一般基于 LLMs,但按对话结构重新封装
- PromptTemple:提示词模板
- OutputParser:解析输出
2. 数据连接封装
- Document Loaders:各种格式文件的加载器
- Document Transformers:对文档的常用操作,如:split(分割)、filter(过滤)、translate(翻译)、extract metadata(提取元数据)等
- Text Embedding Models:文本向量化表示,用于检索等操作
- Vectorstores:(面向检索的)向量的存储
- Retrievers:向量的检索
3. 对话历史管理
- 对话历史的存储、加载与剪裁
4. 架构封装
- Chain(链):实现一个功能或者一系列顺序功能组合
- Agent(工具):根据用户输入,自动规划执行步骤,自动选择每步需要的工具,最终完成用户指定的功能
- Tools:调用外部功能的函数,例如:调 Google 搜索、文件 I/O、Linux Shell 等
- Toolkits:操作某软件的一组工具集,例如:操作数据库、操作 Gmail 等
内容分析
- 模型 I/O 封装:
- 涉及大语言模型(LLMs)、对话模型(Chat Models)、提示词模板(PromptTemple)和输出解析(OutputParser)。
- 数据连接封装:
- 包括文档加载、转换、文本向量化、向量存储和检索等功能。
- 对话历史管理:
- 管理对话历史的存储、加载和剪裁。
- 架构封装:
- 通过 Chain 和 Agent 实现功能组合和自动化任务执行,支持调用外部工具和操作特定软件。

LangChain 相关资源链接
- 功能模块:https://python.langchain.com/docs/get_started/introduction
- API 文档:LangChain Python API 参考 — 🦜🔗 LangChain 文档
- 三方组件集:https://python.langchain.com/docs/integrations/platforms/
- 官方应用案例:Use cases | 🦜️🔗 LangChain
- 调试部署等指导:Debugging | 🦜️🔗 LangChain
以下是代码的一些操作:
第一节: 模型 I/O 封装
- 把不同的模型统一封装成一个接口,方便更换模型而不用重构代码。
1.1 模型 API:LLM vs. ChatModel
- LLM:大语言模型
- ChatModel:基于 LLM 的对话模型
安装依赖
pip install --upgrade langchain
pip install -U langchain-deepseek
pip install --upgrade langchain-community
1.1.1 DeepSeek 模型封装
# 导入模型
from langchain_deepseek import ChatDeepSeek
# 初始化 deepseek 模型,需要提前为设置deepseek的api_key全局环境,
# 具体如何设置可到langchain官网API文档查看,提供了各个大模型的设置方法
llm = ChatDeepSeek(model="deepseek-reasoner")
if __name__ == "__main__":
response = llm.invoke("你是谁") # 调用模型
print(response.content)

1.1.2 多轮对话 Session 封装
from langchain.schema import (
AIMessage, # 等价于 OpenAI 接口中的 assistant role
HumanMessage, # 等价于 OpenAI 接口中的 user role
SystemMessage # 等价于 OpenAI 接口中的 system role
) # 导入模型
from deepseek import llm
# 定义多轮对话消息
if __name__ == "__main__":
messages = [
SystemMessage(content="你是同欣AI的课程助理。"), # 设定助手的角色。
HumanMessage(content="我是学员,我叫大拿。"), # 用户输入,介绍自己
AIMessage(content="欢迎!"), # 助手的回复
HumanMessage(content="我是谁") # 用户的提问
]
# 调用模型进行多轮对话
ret = llm.invoke(messages)
print(ret.content)

- Format:展示了如何将变量x 和 y 插入到模板字符串中,生成具体的句子。
- 示例:"Does foo like bar, and why?"。
- Predict:使LLM(大语言模型)或 Chat Model(对话模型)进行预测。
- Parse:输出需要格式的内容(如json)
1.2.1 Prompt 模板封装
创建PromptTemplate类模板
#从 langchain.prompts 模块导入 PromptTemplate 类
from langchain.prompts import PromptTemplate
# 创建 PromptTemplate 对象
template = PromptTemplate.from_template("给我讲个关于{subject}的笑话")
#使用 PromptTemplate.from_template 方法创建一个模板,模板中包含一个变量 {subject}
if __name__ == '__main__':
# 打印模板
print("===Templates==")
print(template)
# 格式化模板并打印
print("===Prompts==")
print(template.format(subject='小明'))
使用模板
from deepseek import llm
if __name__ == '__main__':
# 通过 Prompt 调用 LLM
#使用template.format(subject='小明') 格式化提示词模板,生成具体的提示词。
#调用llm.invoke 方法,将格式化后的提示词传递给模型,获取模型的响应。
ret = llm.invoke(template.format(subject='小明'))
# 打印输出
print(ret.content)
创建ChatPromptTemplate类模板
from langchain.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
from deepseek import llm
if __name__ == '__main__':
#使用ChatPromptTemplate.from_messages 创建一个多角色提示词模板。 #包含两条消息: #SystemMessagePromptTemplate:系统消息,定义助手的角色和名字。 #HumanMessagePromptTemplate:用户消息,定义用户的查询。
template = ChatPromptTemplate.from_messages(
[
SystemMessagePromptTemplate.from_template("你是{product}的客服助手。你的名字叫{name}"),
HumanMessagePromptTemplate.from_template("{query}"),
]
)
# 格式化提示词
prompt = template.format_messages(
product="同欣AI研究院",
name="大吉",
query="你是谁"
)
# 使用 template.format_messages 格式化提示词模板,传入具体的参数
# 打印格式化后的提示词
print(prompt)
# 调用 LLM
ret = llm.invoke(prompt)
# 打印模型输出
print(ret.content)

3. MessagesPlaceholder 把多轮对话变成模板
定义ChatPromptTemplate类模板
from langchain.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
MessagesPlaceholder,
)
# 定义用户消息模板
human_prompt = "Translate your answer to {language}."
human_message_template = HumanMessagePromptTemplate.from_template(human_prompt)
# 定义 ChatPromptTemplate
chat_prompt = ChatPromptTemplate.from_messages(
[
# 使用 MessagesPlaceholder 占位符,表示多轮对话历史
# MessagesPlaceholder是一个占位符,用于在模板中插入多轮对话历史。
# variable_name="history"指定了占位符的变量名,后续可以通过 history 变量传入多轮对话历史。
MessagesPlaceholder(variable_name="history"),
# 添加用户消息模板
human_message_template
]
)
传入多轮历史对话形成多轮对话模板并调用大模型生成对话
from langchain_core.messages import AIMessage, HumanMessage
from deepseek import llm
from messages_placeholder import chat_prompt
if __name__ == '__main__':
# 定义用户消息和 AI 消息(历史对话)
human_message = HumanMessage(content="Who is Elon Musk?")
ai_message = AIMessage(
content="Elon Musk is a billionaire entrepreneur, inventor, and industrial designer"
)
# 格式化提示词,加传入历史对话和参数
messages = chat_prompt.format_prompt(
# 对 "history" 和 "language" 赋值
history=[human_message, ai_message],
language="中文"
)
# 打印格式化后的消息
print(messages.to_messages())
# 调用 LLM
result = llm.invoke(messages)
print(result.content)

以上都是一些写死的Prompt模板,下面我们来看如何从文件中加载提示词模板
1.2.2 从文件加载 Prompt 模板
from langchain.prompts import PromptTemplate
# 从文件加载 Prompt 模板
# 传入文件的路径和编码格式
template = PromptTemplate.from_file("../prompt/example_prompt_template", encoding='utf-8')
# 打印模板
print("===Template===")
print(template)
# 格式化模板并打印
print("===Prompt===")
print(template.format(topic='黑色幽默'))# 传入参数

后续还会继续更新。
Langchain快速入门