你好,我是方可乐。
一个正在深耕AI编程的30+的AI应用开发工程师。
用AI编程开发过Web应用网站,浏览器插件,微信小程序,AI智能体,RAG系统。
关注公众号&添加微信:ThinkFun666
领取【AI编程资料包】
去年6月份,我做了一个连自己都觉得疯狂的决定:裸辞,All in AI。
现在已经换赛道成功,继续在工作中探索。
今天继续分享langchain的用法,今天讲一个比较核心的内容:链(Chain)。
链解决了什么问题?
-
1. 避免手工拼接
-
• 如果不用链,你得写:Prompt → 调 LLM → 拿输出 → 再写 Prompt → 再调 LLM …… -
• 麻烦、容易出错。 -
• 链自动把上一步的结果,交给下一步。
-
2. 流程化
-
• 应用不是“一问一答”,而是一个 多步骤的工作流。 -
• 链就是把这些步骤串起来,像流水线一样。
-
3. 可扩展
-
• 你今天用简单链做周报。 -
• 明天可以加一个链:调用数据库 → 取数据 → 生成报告。 -
• 不用推翻重写,直接在链里插步骤就行。
你让AI助手给你写周报,它要先总结,再列计划;
你做智能客服,它要先理解问题,再查知识库,再生成回复。
如果你没有链,你得一层层手写逻辑,把输入和输出自己拼来拼去,代码到最后又臭又长,可读性很差主要是。
下面上代码之前,先给大家说明一下。
在langchain中,有旧版和新版两种写法,简单地说,就是旧版好理解,新版更简洁。
下面我们具体来看看,老规矩,上代码。
新建文件08_chain_old.py
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
load_dotenv()
# 初始化 LLM(旧版API示例,不使用流式输出)
llm = ChatOpenAI(
model="deepseek-chat",
base_url="https://api.deepseek.com/v1",
api_key=os.getenv("deepseek_api_key")
)
#定义Prompt
combined_prompt = PromptTemplate.from_template(
"""
基于以下工作内容,完成两个任务,并直接输出:
1) 用一句话写工作总结。
2) 列出3-5条下周计划,用列表。
要求:简洁;不要提供多个版本;只输出正文。
工作内容:{work_content}
"""
)
#定义链
chain = LLMChain(llm=llm, prompt=combined_prompt, output_key="result")
work_content = "本周完成了LangChain学习,包括基础调用、记忆管理、流式输出等功能"
res = chain.invoke({"work_content": work_content})
print("=== 最终结果 ===")
print(res["result"])
新建文件08_chain_new.py
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
load_dotenv()
# 初始化 LLM(新版LCEL示例,不使用流式输出)
llm = ChatOpenAI(
model="deepseek-chat",
base_url="https://api.deepseek.com/v1",
api_key=os.getenv("deepseek_api_key")
)
print("用一次调用同时完成:总结 → 下周计划\n")
# 定义Prompt
combined_prompt = ChatPromptTemplate.from_template(
"""
基于以下工作内容,完成两个任务,并直接输出:
1) 用一句话写工作总结。
2) 列出3-5条下周计划,用列表。
要求:简洁;不要提供多个版本;只输出正文。
工作内容:{work_content}
"""
)
# 定义链:Prompt -> LLM -> 输出解析器
parser = StrOutputParser()
chain = combined_prompt | llm | parser
work_content = "本周完成了LangChain学习,包括基础调用、记忆管理、流式输出等功能"
result = chain.invoke({"work_content": work_content})
print("=== 最终结果 ===")
print(result)
仔细对比下来,核心区别就是。
旧版写法:
chain = LLMChain(llm=llm, prompt=prompt, output_key="result")
新版写法:
parser = StrOutputParser()
chain = prompt | llm | parser
说实话,用习惯了新版是真香。
用好链,能够很优雅地把 AI 的多步骤流程化,解决重复拼接、流程管理、可扩展性这些问题。
下一课我们就来看看 如何把链和记忆、流式输出组合起来,打造一个真正能连续思考工作的智能体。
对AI应用开发感兴趣的同学,欢迎加微信申请入群交流学习。
想要学习AI应用开发的同学,可以参照我的代码跑起来,举一反三,一天一个脚印的进步,我相信,会足够坚实。
接下来100天,我会记录从Java程序员到AI应用开发工程师的完整转型路:每一个困惑、每一次突破、每一个真实瞬间。
当前是26/100。
如果你也想了解AI应用开发到底是什么,如果你也在考虑转型但还在犹豫,那就跟着我的记录,一起探索。
继续折腾中,有问题随时交流 🤝
微信号:ThinkFun666
我的免费AI编程交流群,欢迎加入讨论AI编程玩法(加我微信,说明需求和来意,申请入群)
推荐阅读:
我就喜欢干这种傻事!为什么转型AI应用开发,我不建议你直接从看书开始学起?

