LangChain学习笔记day01
LangChain学习笔记day01
引言:LangChain 是什么
LangChain 是一个用于构建大模型应用的开发框架,核心能力包括:
- 统一大模型调用接口(可切换 OpenAI / DeepSeek / 本地模型)
- Prompt 模板系统(PromptTemplate / ChatPromptTemplate)
- 文档加载与处理(Loader + Text Splitter)
- 工具与 Agent 系统(搜索、数据库、API调用等)
- LCEL(LangChain Expression Language)链式编排能力
1. 选择接入大模型的方式
API 模型
langchain-openai + deepseek API
- 云端大模型性能更佳
- deepseek token价格较低,且 API 兼容 openai API 调用
本地模型
Ollama + langchain-ollama
- 不依赖网络,不消耗token
- 适用于调试数据
2. 环境搭建
① 创建项目
- pycharm 创建项目
git init初始化仓库- 配置 .gitignore
uv init初始化依赖管理
② 安装依赖
uv add langchain langchain-openai langchain-ollama python-dotenv
- langchain:核心框架(Prompt / Chain / Agent)
- langchain-openai:OpenAI / DeepSeek 等 API 适配
- langchain-ollama:本地模型接入
- python-dotenv:读取
.env环境变量
③ 配置API Key
创建.env文件,将从deepseek官网创建的api_key以键值对形式填入
OPENAI_API_KEY=xxx
④ 加载环境变量
from dotenv import load_dotenv
load_dotenv()
3. Hello World(LangChain 基础流程)
(1) 导入组件
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
PromptTemplate(核心)
作用
延迟填充变量的 Prompt 模板系统
示例
from langchain_core.prompts import PromptTemplate
template = """
以下是一段信息:{information}
请总结:
"""
prompt = PromptTemplate(
input_variables=["information"],
template=template
)
information = "LangChain是一个框架"
template中的 {information} 是个占位符,用于给一个名叫“information”的变量占位;
input_variables是个变量清单,用于声明这个template需要一个叫“information”的变量;
最外部的information为实际数据;
其中template和input_variables中的“information”必须同名,而实际数据不一定要命名为“information”,它与前二者之间的映射关系在chain执行时通过参数字典构建。
f-string vs PromptTemplate
| 类型 | 特点 |
|---|---|
| 模板占位符,运行时填充 | |
| f-string | 定义时立即替换,无法托管 |
| PromptTemplate | 延迟绑定(用于LLM) |
ChatOpenAI
作用
将大模型 API 封装为 LangChain 可调用对象(Runnable)
示例
model = ChatOpenAI(
model="...",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
# api_key="...",
# base_url="...",
# organization="...",
# other params...
)
(2) 编写PromptTemplate
game1 = "鸣潮"
game2 = "原神"
template = "请简要告诉我游戏{game}主要讲了一个什么样的故事。"
prompt_template = PromptTemplate(
input_variables=["game"],
template=template
)
(3) 实例化大模型
llm = ChatOpenAI(
model="deepseek-v4-flash",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
base_url="https://api.deepseek.com",
# api_key="...",
# organization="...",
# other params...
)
(4) 创建链式调用
chain = prompt_template | llm
response1 = chain.invoke(input={"game": game1})
print(response1.content)
response2 = chain.invoke(input={"game": game2})
print(response2.content)
⭐LangChain Expression Language(LCEL)
作用
通过"|"连接多个 Runnable 组件,"|"左侧组件的输出将转化为右侧组件的输入,以此形成一条可执行流水线(Runnable Chain)
示例
chain = prompt | llm | tools | ...
执行chain
result = chain.invoke(input={"information": information})
- chain:可执行流水线(Runnable Chain)
- chain.invoke(...):运行该链
- input={"information": information}:参数字典,左侧key对应PromptTemplate 里的变量,右侧value对应外部定义的变量
- result:返回结果,其内容取决于chain的最后一个组件
执行逻辑
① 输入 dict
② 填充 PromptTemplate
③ 发送给 Chain
④ 返回结果
(5)主要代码及运行结果
代码
def main():
game1 = "鸣潮"
game2 = "原神"
template = "请简要告诉我游戏{game}主要讲了一个什么样的故事。"
prompt_template = PromptTemplate(
input_variables=["game"],
template=template
)
llm = ChatOpenAI(
model="deepseek-v4-flash",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
base_url="https://api.deepseek.com",
# api_key="...",
# organization="...",
# other params...
)
chain = prompt_template | llm
response1 = chain.invoke(input={"game": game1})
print(response1.content)
response2 = chain.invoke(input={"game": game2})
print(response2.content)
运行结果
《鸣潮》的故事发生在一个被神秘灾难“悲鸣”摧毁又重生的末世世界。玩家扮演的是失去记忆的“漂泊者”,在苏醒后踏上寻找自我、对抗名为“残像”的怪物、并揭开世界背后真相的旅程。核心冲突围绕着掌握特殊力量“共鸣”的“共鸣者”与旧世界的统治者“鸣式”之间的争斗展开,主角还将面临关于世界毁灭与循环的深层抉择。
《原神》的主线故事围绕一对来自世界之外的双子旅行者展开。他们本要离开提瓦特大陆,却被一位神秘的“天理”维系者拦截,其中一人被带走。你扮演的空或荧(另一位双子)在沉睡了五百年后苏醒,为了寻找失散的亲人,踏上了穿越七国的旅途。
在这个过程中,你将结识拥有神之眼、能操控元素力的各色伙伴,帮助每个国家解决危机(如蒙德的龙灾、璃月的魔神骚动、稻妻的眼狩令等),并逐渐发现提瓦特大陆隐藏的真相:这是一个被“天理”统治、坎瑞亚古国被覆灭、世界循环往复的棋盘。剧情核心是旅行者的寻亲之旅与对抗天理、揭开世界真相的史诗。
目前故事已推进至第五个国家枫丹(水之国),但七国的主线仍未完结,寻找亲人的旅途还在继续。
posted on 2026-06-22 18:39 AQHuiguang 阅读(4) 评论(0) 收藏 举报
浙公网安备 33010602011771号