LangChain基础学习笔记

一、 核心概念:LangChain 到底是什么?

你可以把 LangChain 想象成一套 乐高积木

  • 大模型(LLM) 是积木里的动力马达。
  • 提示词(Prompt) 是控制马达的指令。
  • LangChain 则是各种接口,让你能把马达、齿轮、传感器(工具)轻松地拼在一起。

1. 现代生态系统划分

  • langchain-core: 核心说明书(接口定义)。
  • langchain-openai / langchain-anthropic: 特定品牌的零件(厂商集成)。
  • langgraph: (重点) 复杂的自动化流水线控制中心(状态机)。

二、 基础构建:从对话开始

在基础中,我们几乎只使用 Chat Models

1. 消息模型 (Messages)

对话不再是简单的字符串,而是由不同角色构成的列表:

  • SystemMessage: 给 AI 设定人设(比如你是数学老师)。
  • HumanMessage: 你说的话。
  • AIMessage: AI 的回答。

2. 实践代码:基础调用

python 复制代码
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage

# 1. 初始化模型
model = ChatOpenAI(model="gpt-4o")

# 2. 准备消息
messages = [
    SystemMessage(content="你是一位幽默的编程助手"),
    HumanMessage(content="什么是递归?")
]

# 3. 调用
response = model.invoke(messages)
print(response.content)

三、 LCEL:神奇的管道操作符 |

LCEL 是 LangChain 的灵魂。它让你可以像拼水管一样连接组件。

逻辑流: 用户输入 -> 提示词模板 -> 模型 -> 输出解析器

实践代码:构建一条简单的链

python 复制代码
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# 1. 定义模板 (使用占位符 {topic})
prompt = ChatPromptTemplate.from_template("讲一个关于 {topic} 的冷笑话")

# 2. 定义解析器 (把 AI 返回的消息对象转为纯字符串)
output_parser = StrOutputParser()

# 3. 使用 | 符号连接 (这就是 LCEL)
chain = prompt | model | output_parser

# 4. 运行
result = chain.invoke({"topic": "冰淇淋"})
print(result)

四、 进阶:结构化输出 (Structured Output)

以前我们需要教 AI 怎么写 JSON,现在不需要了!我们定义一个 Python 类(Pydantic),AI 就会乖乖填空。

实践代码:让 AI 返回标准 JSON

python 复制代码
from typing import List
from pydantic import BaseModel, Field

# 1. 定义你想要的数据结构
class Joke(BaseModel):
    setup: str = Field(description="笑话的铺垫")
    punchline: str = Field(description="笑话的梗")
    tags: List[str] = Field(description="笑话的标签")

# 2. 使用structured_output 方法
structured_llm = model.with_structured_output(Joke)

# 3. 直接调用
joke = structured_llm.invoke("讲一个关于程序员的笑话")
print(joke.setup)
print(joke.tags) # 输出将是一个 Python 列表

五、 现代 Agent 的核心:工具调用 (Tool Calling)

这是 AI 能够"执行任务"的关键。比如让 AI 调用搜索接口或计算器。

工具调用的三步走:

  1. 定义工具 : 使用 @tool 装饰器。
  2. 绑定工具: 让 AI 知道有这些工具可用。
  3. 解析调用: AI 决定是否需要用工具。
python 复制代码
from langchain_core.tools import tool

@tool
def multiply(a: int, b: int) -> int:
    """将两个整数相乘。"""
    return a * b

# 绑定工具到模型
model_with_tools = model.bind_tools([multiply])

# AI 会发现它需要调用乘法工具
res = model_with_tools.invoke("3乘5等于多少?")
print(res.tool_calls) # 这里会显示 AI 想要调用 multiply 的意图

六、 架构升级:从 Chain 到 LangGraph

当你的程序变得复杂(比如:AI 写代码 -> 运行报错 -> 自动修复 -> 再运行),简单的线性 | 就不够用了。

  • Chain (LCEL): 像单向传送带,从 A 到 B 。
  • LangGraph: 像交通环岛,可以循环、判断、回退 。

新手建议: 先学好 LCEL,当你发现逻辑里有大量的 if-else 和"循环"时,立刻转向学习 LangGraph。

在基础的 LangChain 中,我们用 | 构造的是线性链

  • Chain (线性链):A ➔ B ➔ C。像是一条单向死胡同,跑完就结束了。AI 如果在 B 环节出错了,它没法跳回 A 重新来。
  • LangGraph (有状态图) :A ➔ B ➔ C ➔ (判断) ➔ 回到 B。它允许循环。AI 可以反复思考、修改错误,直到满意为止。

核心价值: 赋予 AI "持久化记忆""纠错能力"

我们来写一个流程:AI 翻译一段话 -> 检查是否有语法错误 -> 如果有错就重写。

  1. 定义状态 (State)
python 复制代码
from typing import TypedDict, Annotated

# 定义我们要在图中传递的"账本"
class GraphState(TypedDict):
    input_text: str      # 用户输入的原文
    translation: str     # 翻译结果
    error_count: int     # 错误次数
  1. 定义节点 (Nodes/函数)
python 复制代码
# 节点 1: 翻译
def translate_node(state: GraphState):
    print("--- 正在执行翻译 ---")
    # 模拟 AI 翻译逻辑
    return {"translation": "Hello Word", "error_count": state.get("error_count", 0)}

# 节点 2: 检查
def check_node(state: GraphState):
    print("--- 正在检查语法 ---")
    translation = state["translation"]
    # 发现 Word 应该是 World,标记错误
    if "Word" in translation:
        return "retry" # 告诉边:我们需要重试
    return "end"
  1. 构建图 (The Graph)
python 复制代码
from langgraph.graph import StateGraph, END

workflow = StateGraph(GraphState)

# 添加节点
workflow.add_node("translator", translate_node)

# 设置入口
workflow.set_entry_point("translator")

# 添加条件边:根据检查结果决定去向
workflow.add_conditional_edges(
    "translator",
    check_node,
    {
        "retry": "translator", # 如果 check 结果是 retry,回到翻译节点
        "end": END             # 如果结果 OK,结束
    }
)

# 编译成可运行的应用
app = workflow.compile()

LangGraph 的杀手锏功能

  1. 检查点 (Checkpoints / "存档"功能)

LangGraph 可以自动保存每一步的状态。

  • 应用场景:如果 AI 运行到一半断电了,或者你需要让用户确认后再继续(Human-in-the-loop),你可以直接从"存档点"恢复。
  1. 人类介入 (Human-in-the-loop)

你可以设置在某个节点前暂停

  • 例子:AI 准备执行"转账"操作,LangGraph 会停下来,等待人类在后台点一下"同意",AI 才会继续执行。

七、 调试与监控:LangSmith

这是最重要的一点: 如果你看不见 AI 内部发生了什么,你永远调不好程序。

  1. smith.langchain.com 注册账号。

  2. 在代码运行前设置环境变量:

    bash 复制代码
    export LANGCHAIN_TRACING_V2="true"
    export LANGCHAIN_API_KEY="你的API密钥"
  3. 神奇的事情发生了: 你的每一次 invoke 都会变成一个可视化的流程图,你可以清楚地看到 AI 在哪一步耗时最长,或者哪一步的 Prompt 写得不好。

相关推荐
三品吉他手会点灯2 小时前
C语言学习笔记 - 14.C编程预备计算机专业知识 - 本讲内容概述
c语言·笔记·学习
Thanwind2 小时前
从0开始的机器学习之旅(二):监督学习,从线性回归说起
学习·机器学习·线性回归
2501_942326442 小时前
易速乐考,轻松备考
学习·教育电商
菜鸟‍2 小时前
【CVPR 2026】LitePT:更轻、更强的点云 Transformer【论文学习】
深度学习·学习·transformer
斯维赤2 小时前
每天学习一个小算法:归并排序
学习·算法·排序算法
椰羊~王小美2 小时前
实践项目来串联概念(嵌入式、网络、后端、前端、AI)
学习
陈皮糖..2 小时前
27 届运维实习笔记|第三、四周:从流程熟练到故障排查,企业运维实战深化
运维·笔记·sql·nginx·ci/cd·云计算·jenkins
三水不滴3 小时前
SpringAI + SpringDoc + Knife4j 构建企业级智能问卷系统
经验分享·spring boot·笔记·后端·spring
三品吉他手会点灯3 小时前
C语言学习笔记 - 15.C编程预备计算机专业知识 - CPU 内存条 硬盘 显卡 主板 显示器 之间的关系
c语言·笔记·学习