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"

相关推荐
龙腾亚太4 小时前
如何有效整合文本、图像等不同模态信息,提升模型跨模态理解与生成能力
langchain·多模态·dify·具身智能·智能体·vla
Coder_Boy_5 小时前
基于SpringAI的智能平台基座开发-(五)
java·人工智能·spring boot·langchain·springai
工藤学编程5 小时前
零基础学AI大模型之LangChain Tool工具
人工智能·langchain
JH灰色5 小时前
【大模型】-LlamaIndex框架(与LangChain区别)
数据库·langchain
沛沛老爹6 小时前
从Web开发到AI应用——用FastGPT构建实时问答系统
前端·人工智能·langchain·rag·advanced-rag
Coder_Boy_14 小时前
SpringAI与LangChain4j的智能应用-(理论篇2)
人工智能·spring boot·langchain·springai
Coder_Boy_14 小时前
SpringAI与LangChain4j的智能应用-(理论篇3)
java·人工智能·spring boot·langchain
Coder_Boy_15 小时前
基于SpringAI的智能平台基座开发-(六)
java·数据库·人工智能·spring·langchain·langchain4j
xhxxx15 小时前
传统工具调用太痛苦?LangChain 一键打通 LLM 与真实世界
前端·langchain·llm