你好,LangChain:当编程遇见大语言模型

欢迎来到《从零到一:LangChain 实战派修炼手册》的第一篇!如果你是一位每天与代码打交道的软件开发者,但又从未亲手触碰过大语言模型(LLM)或者 LangChain,那么这篇开篇文章就是专门为你准备的。我们将从你最熟悉的编程场景出发,一步步踏入这个正在重新定义"编程"二字的新世界。


一、从一个熟悉的故事讲起:函数调用

1.1 你熟悉的程序世界

在过去的编程生涯里,你一定写过数不清的函数。拿下面这个来说:

python 复制代码
def get_weather(city: str) -> str:
    """返回指定城市的天气,逻辑完全由你掌控"""
    if city == "北京":
        return "晴朗,32°C"
    elif city == "上海":
        return "多云,28°C"
    else:
        return "暂无该城市数据"

这一切都尽在掌握之中。你给这个函数一个确定的输入 "北京",它就会立刻返回一个你事先定义好的、可预期的输出 "晴朗,32°C"。每一次调用都像执行一条铁律,从不逾矩。程序的边界清晰,逻辑可推导,你手握方向盘,车子就必定沿着柏油路前行。

这种确定性的美,正是传统软件开发的基础。我们习惯了编写精确的指令,让机器按照算法和规则一步步执行。但接下来要登场的这位"朋友",会彻底翻转这种认知。

1.2 大语言模型带来的范式转移

如果说传统函数是一台计算器,那么大语言模型(LLM)就像一个知识广博、偶尔还会信口开河的"黑盒朋友"。它不再像函数那样只给你死板的返回值,而是像真人一样,能跟你对话、讲故事、写代码,甚至编造一段并不存在的历史。

我们来做一个小小的思维实验。如果你对着上面那个 get_weather 函数问:

"今天心情怎么样?"

程序十有八九会直接报错,因为你的输入根本不在它预定义的范围之内。它不理解"心情",也不理解你的意图,它只是一段僵硬的规则。

但如果把这句话丢给一个 LLM,你可能会得到:

"哈哈,作为一个AI,我没有真正的情绪,但能帮你解答问题,我今天心情好得就像刚给代码跑通了所有测试一样!"

你瞧,同样的输入,函数给你的是错误,LLM 给你的却是一段富有诗意和温度的回应。这就是两者最本质的区别。

这个转变背后,其实隐藏着一次深刻的编程范式迁移:从"逻辑编程"到"意图编程"

在传统世界里,你是用条件判断、循环和数据结构,一丝不苟地告诉计算机如何做 。而在 LLM 的世界里,你不再精确控制输出生成的每一个步骤,而是通过一段自然语言提示词(Prompt),向模型表达你想要什么 。模型自己会去理解意图,然后组织出答案。方向盘还在你手里,但车子已经有了一定的"自主思考"能力。你不再需要编写琐碎的逻辑,只需要学会与智能体沟通

这就好比你从造轮子,一跃变成了指挥一个技艺高超但又不太靠谱的万能工匠。怎样和它高效地"说话",就成了一门新的手艺。而 LangChain 恰恰就是为这门手艺打造的工作台。


二、LangChain 是什么:一个面向 LLM 的"操作系统"

2.1 一个问题引发的思考

单用 LLM 的 API 做一次简单的问答,确实不算太难。但如果我们把需求升级一下:如何用 LLM 写一本小说?

你会发现事情立马变得棘手起来:

  • 你需要记住之前写了什么情节、人物说过哪些话,管理长达数万字的对话历史
  • 你需要把草稿保存到文件,再将修改后的文本读出来,涉及文件读写
  • 你可能想让模型模仿某个作家的风格,并在不同章节统一控制。
  • 你甚至可能想让模型在某个情节需要时,主动去搜索相关资料。

这些需求堆在一起,直接靠手撸 API 调用会变成一场噩梦。你很快会发现自己淹没在各种拼接字符串、手动管理消息数组、处理异常和重复代码的泥潭里。LLM 的能力虽然强大,但让它稳定地为复杂应用服务,仍然需要一个好用的框架。

2.2 LangChain 的诞生与角色

这就是 LangChain 登场的原因。我们可以用这样一个比喻来理解它:如果 LLM 的原始 API 是"裸机编程",那么 LangChain 就是面向 LLM 应用开发的"操作系统"

想象你正在编程,直接操作 CPU 和内存(裸机),虽然理论上无所不能,但每一次都要手动管理中断、分配地址,效率极低。操作系统(比如 Windows 或 macOS)的出现,为你提供了文件管理、进程调度、复制粘贴等高级抽象,让你从繁杂的底层细节中解放出来,专注于创造。

LangChain 扮演的正是这样一个角色。它把调用 LLM 时那些高频、重复的工作封装成了一套清晰、可组合的组件,让你可以像搭积木一样构建 LLM 应用。你不再需要一遍遍手动拼接请求体,也不再需要从头实现对话记忆,LangChain 已经为你准备好了。

2.3 LangChain 的核心能力一览(预告)

在后面的文章中,我们会逐一深入实践中这些能力。现在,不妨先快速看一眼 LangChain 这个"操作系统"到底提供了哪些核心模块:

  • 管模型:统一的模型接口

    无论是 OpenAI 的 GPT-4,还是 Meta 的开源模型 Llama,LangChain 都为你抽象了一层统一的调用方式。切换模型就像换个插件,底层变动不影响上层逻辑。

  • 管流程:链式调用与工作流编排

    你可以把多个模型调用、数据处理步骤像链条一样串联起来,形成一条自动化的"流水线"。提示词处理、模型调用、输出解析一气呵成。

  • 管记忆:记忆管理

    让 LLM 记住之前聊过什么。LangChain 提供了多种记忆机制,帮你自动裁剪、合并对话历史,让你的应用能进行多轮连贯对话。

  • 管工具:工具与外部世界交互

    让 LLM 能够像调用函数一样使用搜索引擎、计算器、数据库等外部工具,从"只会说话"变成"能干活"。

这些能力组合在一起,让 LangChain 成为开发者手中一把可塑性极强的瑞士军刀。接下来,我们就用最小的成本,亲手跑通第一个 LangChain 程序,让它跟我们说声"Hello World"。


三、Hello World:用 5 行代码感受 LangChain

3.1 准备环境

在动手之前,我们需要先把必要的工具安装好。打开你熟悉的终端,执行:

bash 复制代码
pip install langchain langchain-openai

这会在你的 Python 环境中安装 LangChain 核心库以及 OpenAI 的专用集成。

要让程序真正连通到大语言模型,你还需要一个 OpenAI API Key。你可以到 OpenAI 的官方网站注册账号并获取。拿到密钥后,最安全的做法是把它设置成环境变量,而不是硬编码在代码里:

bash 复制代码
# macOS / Linux 下执行
export OPENAI_API_KEY="sk-你的密钥"

# Windows PowerShell 下执行
$env:OPENAI_API_KEY="sk-你的密钥"

这样一来,LangChain 就能在运行时自动读取这个密钥,而你的代码里完全不会出现敏感信息。

3.2 你的第一个 LangChain 程序

万事俱备,让我们用 5 行核心代码,完成这次意义非凡的第一次握手。

python 复制代码
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage

# 1. 实例化一个聊天模型,就像是接通了一位随时待命的"智能朋友"
chat = ChatOpenAI(model="gpt-3.5-turbo")

# 2. 构造一条"人类身份"的消息,表达我们想说的话
message = HumanMessage(content="用一句话介绍 Python 之美")

# 3. 把消息传给模型,拿到它的回复
response = chat.invoke([message])

# 4. 将回复的内容打印出来
print(response.content)

别急着复制粘贴,我们来逐行品味一下这段代码的"意图",而不是它的语法:

  • 我们先是创建了一个可以沟通的对象 chat,它代表一个使用了 gpt-3.5-turbo 模型的智能体。
  • 然后我们用 HumanMessage 封装了一句我们想说的话,就像写好一张便签,上面贴着"这是用户说的"。
  • 接着调用 invoke 把这张便签递过去,模型便开始分析、生成,最终返还一个响应对象
  • 这个对象里有很多元信息,而我们最想要的其实是 response.content,它就是模型返回的那句人话。

点击运行,带着点仪式感。如果一切顺利,你会看到类似这样的输出:

Python 之美在于它用简洁优雅的语法,让开发者能够专注于解决问题本身,而不是和语言细节纠缠。

恭喜!你已经正式踏入了 LangChain 的大门。这种感觉,就像你第一次用 print("Hello World") 向编程世界打了声招呼。如今,你向智能世界也发出了第一声问候。

3.3 不止于此,我们还能更简单

上面的代码已经足够简单,但 LangChain 还能将其进一步抽象。等我们学会了提示词模板和链(Chain)之后,同样的需求甚至可以写成这样充满想象空间的形式:

python 复制代码
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser

# 准备好模型、提示词模板和一个最简单的链
model = ChatOpenAI(model="gpt-3.5-turbo")
prompt = ChatPromptTemplate.from_template("请用一句话介绍 {topic} 之美")
chain = prompt | model | StrOutputParser()

# 像调用函数一样,输入话题,直接输出结果
result = chain.invoke({"topic": "Python"})
print(result)

短短几行,就清晰地表达了一条"接收话题 → 组装提示词 → 调用模型 → 解析输出"的流水线。这正是 LangChain 赋予我们的能力:把 AI 的智能,编织进应用中,就像调用一个普通函数那样自然。当你发现 AI 变得可控、可编程时,一个全新的世界就真的打开了。


四、系列总结与下篇预告

今天,我们完成了一次温柔的破冰之旅。你带走了三个最重要的认知:

  1. LLM 不是普通函数,它带来了从"逻辑编程"到"意图编程"的范式转变。
  2. LangChain 是面向 LLM 的"操作系统",它的核心职责就是帮你管模型、管流程、管记忆、管工具。
  3. 你亲手写出了第一个 LangChain 程序,用真实代码验证了这个新范式。

但在整篇文章当中,我们一直把"模型"当成一个抽象的概念来讨论。你可能还在想:这个"模型"到底是什么?它和我们嘴上常说的 AI 有什么不同?LLM 和 Chat Model 又是什么关系?

下篇文章,我将用一个生活化的奇妙比喻,为你揭开"模型"这只巨兽的神秘面纱,深入探究它的内在构成。让我们从语言的源头出发,真正读懂它的能力与边界。

咱们下一篇见!

相关推荐
奔跑中的小象3 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南3 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang4 小时前
LangGraph 状态机实战
人工智能
刹那芳华19924 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作4 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门4 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜4 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟4 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦4 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能
阿里云云原生5 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能