🌟 LangChain 30 天保姆级教程 · Day 4|用 LLMChain 把 Prompt 和 LLM 打包成可复用组件!

系列目标 :30 天从 LangChain 入门到企业级部署
今日任务 :理解 Chain 的作用 → 掌握 LLMChain 基础用法 → 构建可复用的 AI 功能模块!


🔗 一、什么是 Chain?为什么需要它?

在 Day 2--3 中,我们这样调用模型:

ini 复制代码
prompt = ChatPromptTemplate.from_template("...")
response = llm.invoke(prompt.format(...))

这虽然能跑通,但存在几个问题:

  • 重复代码多:每次都要拼 prompt + 调用 llm
  • 难以复用:换个任务就要重写一遍
  • 不易测试:逻辑散落在各处

Chain 就是 LangChain 的"函数封装" ------ 它把 输入 → Prompt → LLM → 输出 整个流程打包成一个可调用对象,像函数一样使用!

✅ 今天主角:LLMChain(LangChain 最经典的 Chain 类型)


🧱 二、LLMChain 基础用法(三步走)

步骤 1:准备 LLM(本地或云端)

ini 复制代码
from langchain_ollama import ChatOllama

llm = ChatOllama(model="qwen:7b", temperature=0)

步骤 2:定义 PromptTemplate

ini 复制代码
from langchain_core.prompts import PromptTemplate

template = """
你是一个翻译助手,请将以下英文句子翻译成中文:

英文:{text}
中文:
"""

prompt = PromptTemplate.from_template(template)

💡 注意:这里用 PromptTemplate(非 Chat 版),因为 LLMChain 传统上配合普通 LLM 使用。

如果你用的是 ChatModel(如 ChatOllama),推荐直接用 LCEL 表达式(见下文"现代写法")。

步骤 3:创建并调用 LLMChain

ini 复制代码
from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt)

result = chain.invoke({"text": "Hello, how are you?"})
print(result["text"])  # 输出:你好,你怎么样?

⚠️ 注意:LLMChain 返回的是字典,键为 "text"(由 prompt 决定)。


🆕 三、更推荐的现代写法:LCEL(LangChain Expression Language)

从 LangChain 0.1 开始,官方大力推荐 LCEL 链式表达式(更简洁、更强大):

ini 复制代码
# 不需要 LLMChain!直接用管道符 |
chain = prompt | llm

response = chain.invoke({"text": "Artificial Intelligence is amazing!"})
print(response.content)

✅ 优势:

  • 代码更短
  • 支持流式、异步、批处理
  • 更容易组合多个步骤(如 prompt | llm | parser

📌 结论 :新项目建议优先使用 LCEL(| 运算符),但理解 LLMChain 有助于阅读旧代码。


🛠️ 四、实战:构建一个"产品描述生成器"

用户输入产品关键词,AI 生成一段营销文案。

ini 复制代码
# day4_llmchain_demo.py
from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate

# 1. 初始化模型
llm = ChatOllama(model="qwen:7b", temperature=0.7)

# 2. 定义 ChatPromptTemplate(更自然)
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个电商文案专家,擅长用吸引人的方式描述产品。"),
    ("human", "请为以下产品生成一段 50 字以内的营销文案:{product}")
])

# 3. 构建 Chain(LCEL 方式)
chain = prompt | llm

# 4. 调用
result = chain.invoke({"product": "无线降噪耳机"})
print(result.content)

▶️ 输出示例:

沉浸静谧世界!这款无线降噪耳机,高清音质+持久续航,通勤必备!


🔁 五、如何让 Chain 支持多输入?

比如同时传入 producttone(语气):

makefile 复制代码
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个文案专家。"),
    ("human", "用{tone}的语气,为{product}写一段营销文案。")
])

chain = prompt | llm
result = chain.invoke({
    "product": "智能手表",
    "tone": "幽默风趣"
})
print(result.content)

✅ 只要在模板中使用 {xxx}invoke() 传入同名键即可!


🔄 六、兼容 OpenAI?只需改一行!

javascript 复制代码
# from langchain_openai import ChatOpenAI
# llm = ChatOpenAI(model="gpt-3.5-turbo")

from langchain_ollama import ChatOllama
llm = ChatOllama(model="qwen:7b")

🎯 同一套 Chain 逻辑,无缝切换模型后端!


⚠️ 七、常见问题 & 注意事项

问题 解决方案
LLMChain 报错 not a valid LLM 确保传入的是 BaseLLMBaseChatModel 实例
输出包含多余解释 在 system prompt 中强调"只返回文案,不要其他内容"
中文输出乱码 使用 Qwen、GLM 等中文优化模型
想要 JSON 输出? 结合 PydanticOutputParser(Day 6 讲)

💡 最佳实践

  • 新项目用 prompt | llm(LCEL)
  • 旧项目维护时理解 LLMChain
  • 所有 Chain 都应单元测试!

📦 八、配套代码结构

bash 复制代码
langchain-30-days/
└── day4/
    ├── basic_llmchain.py      # 传统 LLMChain 写法
    ├── modern_lcel.py         # 推荐的 LCEL 写法(主推)
    └── product_copywriter.py  # 产品文案生成器实战

📝 九、今日小结

  • ✅ 理解了 Chain 的作用:封装 AI 工作流
  • ✅ 学会了 LLMChain 基础用法(兼容旧代码)
  • ✅ 掌握了更现代的 LCEL 链式表达式prompt | llm
  • ✅ 实现了可复用的"产品文案生成器"
  • ✅ 支持多变量输入,模型切换无痛
相关推荐
coderlin_6 小时前
langchain 基础
microsoft·langchain
QC·Rex6 小时前
国产大模型应用实践:从 0 到 1 搭建企业级 AI 助手
人工智能·langchain·大语言模型·rag·企业应用·ai 助手
轻舟行77 小时前
langchain从入门到入土 (一)langchain的历程及应用场景
人工智能·python·langchain
m0_488913018 小时前
收藏备用!大厂AI Agent开发岗位解析+小白友好学习路线(程序员必看)
人工智能·学习·langchain·大模型·agent·就业·大模型学习
子夜江寒17 小时前
用 LangChain 构建 LLM 应用:从模型调用到输出解析
langchain
chushiyunen1 天前
langchain实现agent智能体笔记
笔记·langchain
诗酒当趁年华1 天前
langchain核心组件1-智能体
数据库·langchain
飞Link1 天前
LangChain 核心链式架构演进史:从顺序链到企业级路由兜底实战
python·架构·langchain
Timer@1 天前
LangChain 教程 03|快速开始:10 分钟创建第一个 Agent
前端·javascript·langchain