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

3 阅读3分钟

一、前言

在使用大模型进行开发时,提示词模板是最基础、最常用的功能。 本文以通义千问 + LangChain 为例,用一段最简单的宝宝起名代码,带你彻底搞懂:

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

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


二、环境依赖

先安装必须的包:

pip install langchain langchain-core langchain-community dashscope

三、完整代码

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. 导入模块

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 并初始化模型

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

3. 定义提示词模板

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

这是本文核心

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

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

1. 格式化提示词

prompt_text = prompt.format(last_name="王", gender="女")
  • .format():把参数填入模板,生成最终完整提示词字符串
  • 等价于:
"我的孩子姓王是个女,帮我生成一个名字,简单回答"

2. 流式输出

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

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

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 标准链式写法,现代项目优先用

九、运行效果示例

王雨桐
赵思雅