🌟 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 支持多输入?

比如同时传入 product 和 tone(语气):

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 确保传入的是 BaseLLM 或 BaseChatModel 实例
输出包含多余解释 在 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)
  • ✅ 实现了可复用的"产品文案生成器"
  • ✅ 支持多变量输入,模型切换无痛
相关推荐
狼爷11 小时前
从零用 Java 构建 AI Agent 框架:JavaManus 设计与实现深度解析
后端·langchain·aigc
桃西西呀12 小时前
LangChain 之七:回调与可观测
人工智能·langchain·llm
桃西西呀12 小时前
LangChain 之六:记忆与历史
人工智能·langchain·llm
打工仔折腾 AI14 小时前
把AI Agent托管在家用电脑:UU远程终端与端口映射实测记录
人工智能·后端·python·langchain·ai agent 实战
打工仔折腾 AI16 小时前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
打工仔折腾 AI20 小时前
把 AI Agent 托管到家里电脑:UU远程端口映射与CLI实测记录
人工智能·后端·python·langchain·电脑·ai agent 实战
染指111021 小时前
135.Agent-多Agent框架-LangChain多智能体(SubAgents子代理)
数据库·人工智能·设计模式·langchain·agent·agents
用户31346721435421 小时前
Agent相关 - agent_scratchpad 到底该放哪?一个隐蔽的顺序坑
langchain·llm·agent
逆风飞翔的小叔1 天前
【AI大模型】Langchain 多类型对话消息使用实战操作详解
langchain·langchain 消息类型·langchain 消息使用·langchain 消息详解·langchain 消息·langchain 消息总结
染指11101 天前
134.Agent-多Agent框架-LangChain多智能体
人工智能·中间件·langchain·agents