一、前言
在使用大模型进行开发时,提示词模板 是最基础、最常用的功能。
本文以通义千问 + 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 KeyPromptTemplate: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:把模板 和模型直接连成一条调用链- 内部自动完成:
- 模板接收参数
- 自动 format
- 传给模型
- 返回结果
chain.invoke({...}):直接传入参数字典,一行调用
七、两种方法对比(总结)
| 方式 | 写法 | 优点 | 适用场景 |
|---|---|---|---|
| format + stream | 手动拼接,循环输出 | 灵活、可控、流式展示 | 界面实时输出、聊天界面 |
| prompt|model|invoke | 链式调用,简洁 | 代码极简、易读、易维护 | 业务逻辑、后台接口、批量调用 |
八、核心知识点(必看)
PromptTemplate作用:把提示词参数化{参数名}是占位符,用format或invoke传参stream用于流式输出,体验更好prompt | model是 LangChain 标准链式写法,现代项目优先用
九、运行效果示例
王雨桐
赵思雅