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"

相关推荐
chaors7 小时前
从零学RAG0x0f:RAG 评估指标提升实战
langchain·llm·ai编程
1941s8 小时前
Google Agent Development Kit (ADK) 指南 第五章:工具集成与自定义
人工智能·python·langchain·agent·adk
在未来等你9 小时前
AI Agent Skill Day 11:RAG Retrieval技能:检索增强生成的技能封装
langchain·知识库问答·向量检索·rag·ai agent·检索增强生成·技能开发
DamianGao10 小时前
MiniMax-M2.7 与 LangChain ToolStrategy 兼容性问题解决
python·langchain
勇往直前plus10 小时前
大模型开发手记(十二):langchain skills(上):讲清楚什么是skills,优势是什么
langchain
JaydenAI13 小时前
[LangChain智能体本质论]中间件装饰器是如何将函数转换成AgentMiddleware的?
python·langchain·ai编程
Cha0DD15 小时前
【由浅入深探究langchain】第四集-(RAG)语义搜索-数据入库
人工智能·ai·langchain
爱编程的小吴15 小时前
LangChain TextSplitter语义分块:告别固定切分,打造高质量RAG文本块
langchain
爱编程的小吴16 小时前
LangChain基础入门:DocumentLoader加载PDF/Markdown文档实战
python·langchain·pdf
java1234_小锋1 天前
基于LangChain的RAG与Agent智能体开发 - 使用LangChain调用聊天大模型
langchain·rag