【Agent智能体项目实战五】LangChain 提示词模板(PromptTemplate)极简实战:两种调用方式详解

一、前言

在使用大模型进行开发时,提示词模板 是最基础、最常用的功能。

本文以通义千问 + LangChain 为例,用一段最简单的宝宝起名代码,带你彻底搞懂:

  • 什么是 PromptTemplate
  • 如何定义带参数的提示词
  • format 手动调用
  • LCEL 链式调用(prompt | model
  • 流式输出与普通调用

全程只解析你给出的代码,不额外扩展,保证原汁原味、一看就会。


二、环境依赖

先安装必须的包:

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

三、完整代码

python 复制代码
import os
from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi

# 设置 dashscope api key
os.environ["DASHSCOPE_API_KEY"] = "sk-你的API_KEY"
model = Tongyi(model="qwen-max")

# 方法一
prompt = PromptTemplate.from_template(
    "我的孩子姓{last_name}是个{gender},帮我生成一个名字,简单回答"
)

# 调用.format方法,传入参数
prompt_text = prompt.format(last_name="王", gender="女")

# 使用stream方法流式输出
for chunk in model.stream(input=prompt_text):
    print(chunk, end="", flush=True)

# 方法二
chain = prompt | model
res = chain.invoke({"last_name": "赵", "gender": "女"})
print(res)

四、逐行代码解析

1. 导入模块

python 复制代码
import os
from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
  • os:用于设置环境变量,存放 API Key
  • PromptTemplate:LangChain 最基础提示词模板类,用于做参数化提示
  • Tongyi:通义千问大模型封装,属于 langchain-community

2. 设置 API Key 并初始化模型

python 复制代码
os.environ["DASHSCOPE_API_KEY"] = "sk-你的API_KEY"
model = Tongyi(model="qwen-max")
  • 将通义千问的 API Key 写入环境变量,供模型调用
  • Tongyi(model="qwen-max") 初始化大模型,使用qwen-max版本

3. 定义提示词模板

python 复制代码
prompt = PromptTemplate.from_template(
    "我的孩子姓{last_name}是个{gender},帮我生成一个名字,简单回答"
)

这是本文核心

  • PromptTemplate.from_template():从字符串创建提示模板
  • {last_name}{gender}参数占位符,后续可动态传入
  • 好处:提示词结构固定,只变参数,便于复用、维护

五、方法一:format + stream 手动调用

1. 格式化提示词

python 复制代码
prompt_text = prompt.format(last_name="王", gender="女")
  • .format():把参数填入模板,生成最终完整提示词字符串

  • 等价于:

    "我的孩子姓王是个女,帮我生成一个名字,简单回答"

2. 流式输出

python 复制代码
for chunk in model.stream(input=prompt_text):
    print(chunk, end="", flush=True)
  • model.stream()流式调用,逐字返回结果
  • 优点:不用等全部生成完,实时输出,体验更流畅
  • end=""flush=True 保证字一个接一个打出,不换行、不卡顿

六、方法二:LCEL 链式调用(推荐)

python 复制代码
chain = prompt | model
res = chain.invoke({"last_name": "赵", "gender": "女"})
print(res)

这是 LangChain 现代标准写法

  • prompt | model:把模板模型直接连成一条调用链
  • 内部自动完成:
    1. 模板接收参数
    2. 自动 format
    3. 传给模型
    4. 返回结果
  • chain.invoke({...}):直接传入参数字典,一行调用

七、两种方法对比(总结)

方式 写法 优点 适用场景
format + stream 手动拼接,循环输出 灵活、可控、流式展示 界面实时输出、聊天界面
prompt|model|invoke 链式调用,简洁 代码极简、易读、易维护 业务逻辑、后台接口、批量调用

八、核心知识点(必看)

  1. PromptTemplate 作用:把提示词参数化
  2. {参数名} 是占位符,用 formatinvoke 传参
  3. stream 用于流式输出,体验更好
  4. prompt | model 是 LangChain 标准链式写法,现代项目优先用

九、运行效果示例

复制代码
王雨桐
赵思雅
相关推荐
Fzuim4 小时前
从 LLM 接口到 Agent 接口:AI 融合系统的架构演进与未来趋势分析报告
人工智能·ai·重构·架构·agent·runtime
后端小肥肠11 小时前
OpenClaw实战|从识图到公众号内容自动化,我跑通了完整链路
人工智能·aigc·agent
用户479492835691511 小时前
你不知道的 Claude Code:一行 Fetch 背后的双模型架构
agent·claude
用户479492835691512 小时前
MCP VS SKILLS:你以为你懂了,其实没有
agent·mcp
小超同学你好13 小时前
Langgraph 18. Skill 四种形态 —— Inline / File-based / External / Meta(含代码示例)
人工智能·语言模型·langchain
无风听海14 小时前
深入解析 LangGraph Checkpoint
langchain·checkpoint
swipe14 小时前
为什么 RAG 一定离不开向量检索:从文档向量化到语义搜索的工程实现
前端·llm·agent
mCell14 小时前
Harness 工程:不是新词,而是 Agent 工程终于被讲明白了
agent·ai编程·claude
倾颜16 小时前
我把本地 AI Chat 项目重构了一遍:用 LangChain.js + Ollama + Streamdown 搭了一个最小可扩展架构
langchain·llm·next.js