LangChain 入门:把大模型“组装”成应用的那套乐高(5分钟用通义千问 + LCEL 跑通 Demo)

LangChain 入门:把大模型"组装"成应用的那套乐高(5分钟用通义千问 + LCEL 跑通 Demo)

目标:5 分钟跑通一个"AI 短文生成器",并在同一套 LCEL 链上,顺手加上 3 种常见扩展:流式输出(streaming)/ 结构化输出(JSON)/ 并行生成(一次出标题+摘要+标签)。

你只要有 DashScope 的 Key,就能复制即跑。


0. 你最终会得到什么?

一个最小可用的"内容生产链":

  • 输入:topic(主题)
  • 输出:一篇短文(Markdown)
  • 扩展 1:边生成边打印(流式)
  • 扩展 2:输出 JSON(便于落库/渲染)
  • 扩展 3:并行一次生成:标题 / 摘要 / 标签 / 正文(更像产品)

1. 先把话说清:LangChain 到底解决啥问题?

只用大模型 API,你很快会遇到 3 类"工程问题":

  1. Prompt 要复用:模板化、参数化、版本管理
  2. 任务不是一步:总结→提炼→格式化→校验
  3. 模型要"接外部能力":查资料(RAG)、调接口、算数、读库、跑工作流

LangChain 的价值就是:把这些能力拆成标准零件(Prompt / Model / Parser / Retriever / Tool / Memory...),再用 LCEL(表达式语言)像搭积木一样拼起来:

prompt | model | parser


2. 核心能力一屏看懂

你要的能力 LangChain 对应积木
统一调用不同大模型 Chat Model / LLM 封装
可维护的提示词 ChatPromptTemplate
多步骤流水线 Chain / LCEL
知识库问答更准 RAG:Retriever + VectorStore + Embeddings
让模型会"用工具" Agent + Tools
多轮对话不断片 Message History / Memory

3. 5 分钟快速跑通(Baseline:短文生成)

3.1 安装

bash 复制代码
pip install -U langchain langchain-core langchain-community dashscope

如果你后续要做 RAG,再装:faiss-cpu / chromadb / langchain-text-splitters 等(先别急,5分钟先跑通)。

3.2 配置环境变量(推荐)

bash 复制代码
export DASHSCOPE_API_KEY="你的Key"

3.3 最小可运行代码:Prompt → Qwen → 文本输出(LCEL)

保存为 main.py

python 复制代码
from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# 1) 模型(通义千问)
llm = ChatTongyi(
    model="qwen-turbo",
    temperature=0.7,
)

# 2) Prompt:system + user
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个写作助理,输出要通俗易懂,尽量给可操作建议。"),
    ("user",
     "请围绕「{topic}」写一篇 180~220 字的中文短文,Markdown 输出。\n"
     "要求:\n"
     "- 先给一句话结论\n"
     "- 再给 3 条要点(列表)\n"
     "- 最后给 1 个落地小例子\n")
])

# 3) 解析器:把 AIMessage -> str
parser = StrOutputParser()

# 4) LCEL:拼链
chain = prompt | llm | parser

if __name__ == "__main__":
    print(chain.invoke({"topic": "什么是 LangChain,以及它解决什么问题"}))

运行:

bash 复制代码
python main.py

到这里,你已经完成了 "可复用 Prompt + 可替换模型 + 可组合链" 的最小闭环。


4. 立刻加 3 个"更像产品"的能力扩展

4.1 扩展 A:流式输出(边生成边打印)

把最后的 invoke 换成 stream:

python 复制代码
for chunk in chain.stream({"topic": "如何用 LangChain 搭一个内容生产链"}):
    print(chunk, end="", flush=True)

你会看到模型逐段输出,更适合做 CLI、Web SSE、前端打字机效果。


4.2 扩展 B:结构化输出(JSON,方便前端渲染/落库)

很多时候你不想要"散文",而是想要字段:title、summary、tags、body。

做法:让模型按 JSON 输出,然后用解析器解析。

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

prompt_json = ChatPromptTemplate.from_messages([
    ("system",
     "你是内容结构化助手。只输出严格 JSON(不要代码块,不要多余文字)。"),
    ("user",
     "围绕「{topic}」生成一份内容结构,JSON schema 如下:\n"
     '{'
     '"title": "string", '
     '"summary": "string(<=80字)", '
     '"tags": ["string","string","string"], '
     '"body_md": "string(Markdown, 180~220字)"'
     '}\n'
     "请严格按 schema 输出。")
])

chain_json = prompt_json | llm | StrOutputParser()

raw = chain_json.invoke({"topic": "LangChain 的 LCEL 是什么"})
data = json.loads(raw)  # 解析成 dict

print("title:", data["title"])
print("tags:", data["tags"])
print("body:", data["body_md"])

好处:后续接数据库/埋点/AB 实验/模板渲染都更自然。


4.3 扩展 C:并行生成(一次输出标题+摘要+标签+正文)

LangChain 的 runnable 支持"并行图"(很适合内容生产、报告生成、批量要素提取)。

python 复制代码
from langchain_core.runnables import RunnableParallel

title_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是标题党克制版助手。"),
    ("user", "给「{topic}」生成一个不夸张但有点击的中文标题(<=18字)。")
])

summary_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是摘要助手。"),
    ("user", "用不超过 80 字总结「{topic}」。")
])

tags_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是标签助手。"),
    ("user", "给「{topic}」生成 3 个中文标签,用逗号分隔。")
])

body_prompt = prompt  # 复用你第3节的短文 prompt

parallel = RunnableParallel({
    "title": title_prompt | llm | StrOutputParser(),
    "summary": summary_prompt | llm | StrOutputParser(),
    "tags": tags_prompt | llm | StrOutputParser(),
    "body_md": body_prompt | llm | StrOutputParser(),
})

out = parallel.invoke({"topic": "用 LangChain 5 分钟跑通 Demo"})
print(out["title"])
print(out["summary"])
print(out["tags"])
print(out["body_md"])

这一步非常"产品化":你可以直接把 out 喂给前端渲染、存草稿箱、做内容推荐特征抽取等。


5. 下一步怎么扩展 LangChain 能力(给你 3 档路线)

Baseline(你已经有了)

  • PromptTemplate / ChatModel / LCEL / streaming / JSON 输出 / 并行

Pro(建议一周内补齐)

  • RAG:给短文加"参考资料来源",避免胡编
  • LangSmith:链路追踪、错误定位、成本统计
  • 评估:同一 topic 多版本生成,A/B 选最优(或用 LLM-as-judge)

Extreme(做成可上线的小产品)

  • Agent + Tools:联网检索 / 读数据库 / 调企业 API
  • Memory:把用户偏好、写作风格沉淀到对话历史
  • LangServe/LangGraph:服务化 + 工作流编排 + 可观测性

6. 常见坑(你跑不起来时优先看这几条)

  • DASHSCOPE_API_KEY 没生效:确认终端里 echo $DASHSCOPE_API_KEY 有值
  • 依赖版本冲突:直接 pip install -U langchain langchain-core langchain-community dashscope
  • 输出 JSON 解析失败:让模型"只输出 JSON、不要代码块",并在 prompt 里强调"严格 JSON"

相关推荐
蛇皮划水怪7 小时前
深入浅出LangChain4J
java·langchain·llm
、BeYourself9 小时前
LangChain4j 流式响应
langchain
、BeYourself9 小时前
LangChain4j之Chat and Language
langchain
qfljg11 小时前
langchain usage
langchain
kjkdd14 小时前
6.1 核心组件(Agent)
python·ai·语言模型·langchain·ai编程
渣渣苏19 小时前
Langchain实战快速入门
人工智能·python·langchain
小天呐19 小时前
01—langchain 架构
langchain
香芋Yu1 天前
【LangChain1.0】第九篇 Agent 架构设计
langchain·agent·架构设计
kjkdd1 天前
5. LangChain设计理念和发展历程
python·语言模型·langchain·ai编程
ASKED_20191 天前
Langchain学习笔记一 -基础模块以及架构概览
笔记·学习·langchain