提示词模板是个好东西

提示词模板是个好东西

上回说到,已经搭好了第一个AI环境,让通义模型回答了“夏天吃什么水果”。

但那个写法有个问题:每次问AI问题,都要把完整的指令重新敲一遍。

能不能提前把“套路”定好,每次只换关键词?

提示词模板(Prompt Template),就是干这个的。

一、什么是提示词模板?

LangChain的提示词模板引擎(Prompt Template Engine)是核心组件之一,主要用于构建和管理与大预言模型交互的提示词。

作用: 将用户的输入或动态数据结构化嵌入到预定义的模板中,从而生成适合模型处理的提示词,提升输出的准确性和一致性

比如你每天要给AI发这样的指令:

“你是一个数学老师,请用通俗易懂的风格,解释一下勾股定理是什么。”

第二天你想问物理:

“你是一个物理老师,请用通俗易懂的风格,解释一下牛顿定律是什么。”

只有重要的信息。“学科”和“问题”在变,其他都一样。

那就把它们变成“空位”:

你是一个{role},请用{style}风格回答{question}

每次往里填role=数学老师、style=通俗易懂、question=勾股定理是什么就行了。

二、提示词模板代码实战

python代码(通义模型):

from langchain_community.llms import tongyi
from langchain.prompts import PromptTemplate
#配置API Key(替换成你自己的)
key="your-api-key"llm=tongyi.Tongyi(api_key=key)
# 定义模板 —— 花括号{}里面的就是“空位”
template='你是一个{role},请用{style}风格回答{question}'
# 创建模板对象
prompt_template=PromptTemplate.from_template(template)
# 往空位里填内容
filled_prompt=prompt_template.format(role='数学老师',style='通俗易懂',question='勾股定理是什么?')
# 让AI回答
response=llm.invoke(filled_prompt)
print(response)

输出大概是这样:

“勾股定理就是说,直角三角形的两条直角边的平方和,等于斜边的平方。简单说就是a²+b²=c²...”

下次你想问其他学科,只需要改参数就行。

三、输出格式化

提示词模板解决了“输入”的问题。但AI的输出有时候很随意——有时候给一段话,有时候给列表,有时候给一堆废话。

如果我想让AI每次输出都是JSON格式,方便后续处理呢?

这就需要输出解析器(OutputParser)。

方式一:输出为JSON

from langchain_community.llms import tongyi
from langchain.output_parsers import StructuredOutputParser,ResponseSchema
from langchain.prompts import PromptTemplate
# ==================== 配置 ====================
key = "your key"#替换为个人申请的api_key
llm = tongyi.Tongyi(api_key=key)
#定义输出结构
response_schemas = [
    ResponseSchema(name='name',description='人的姓名',type='string'),
    ResponseSchema(name='age',description='人的年龄',type='integer')
]
#创建输出解析器
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
#创建提示模板,包含格式化指令
template = """你是一个信息提取助手,请从以下文本中提取姓名和年龄,并以JSON格式返回:
文本:{input_text}
{format_instructions}"""
prompt = PromptTemplate(
    template=template,
    partial_variables={"format_instructions":output_parser.get_format_instructions()}
)
#填充输入
input_text = "张三今年25岁,来自北京。"
filled_prompt = prompt.format(input_text=input_text)
#获取响应
response = llm.invoke(filled_prompt)
parsed_output = output_parser.parse(response)
print(parsed_output)

输出:{'name': '张三', 'age': 25}

方式二:输出为自定义对象

如果你想定义更复杂的数据结构,可以用PydanticOutputParser。

from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel,Field
from langchain_community.llms import tongyi
from langchain.prompts import PromptTemplate
# ==================== 配置 ====================
key = "your key"#替换为个人申请的api_key
llm = tongyi.Tongyi(api_key=key)
#定义输出模板,Person对象
class Person(BaseModel):
    name:str = Field(description="name of a person")
    age:int = Field(description="age of a person")
#创建输出解析器
output_parser = PydanticOutputParser(pydantic_object=Person)
#创建提示模板
template = """你是一个信息提取助手,请从以下文本中提取姓名和年龄,并以Person格式返回:
文本:{input_text}
{format_instructions}"""
prompt = PromptTemplate(
    template=template,
    partial_variables={"format_instructions":output_parser.get_format_instructions()}
)
#填充输入
input_text = "张三今年28岁,来自北京。"
filled_prompt = prompt.format(input_text=input_text)
#获取响应
response = llm.invoke(filled_prompt)
parsed_output = output_parser.parse(response)
print(parsed_output)

输出:

name='李四' age=30

这样拿到的就是一个Person对象,可以直接调用.name和.age。

四、链式调用:把一切串起来

链式调用将提示词模板、语言模型以及可选的输出解释器组合在一起,形成一个可重复执行的流程。

在LangChain的新版本中,推荐用LCEL(LangChain Expression Language)来实现。

核心就一个符号:管道符|

chain=prompt|llm|output_parser

输入 → 经过提示词模板 → 交给大模型 → 经过输出解析器 → 得到最终结果。

完整代码如下:

from langchain_community.llms import tongyi
from langchain.output_parsers import StructuredOutputParser,ResponseSchema
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# ==================== 配置 ====================
key = "your key"
#替换为个人申请的api_key
llm = tongyi.Tongyi(api_key=key)
#定义输出结构
response_schemas = [
    ResponseSchema(name='answer',description='问题的答案',type='string'),
    ResponseSchema(name='confidence',description='答案的置信度',type='float')
]
#创建输出解析器
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
#创建提示模板
template = """你是一名数学老师,请用{style}风格回答以下问题,并以JSON格式返回答案和置信度:
问题:{question}
{format_instructions}"""
prompt = PromptTemplate(
    template=template,
    partial_variables={"format_instructions":output_parser.get_format_instructions()}
)
#创建LLMChain
chain = prompt|llm|output_parser
response = chain.invoke({
    'style':'通俗易懂',
    'question':'勾股定理是什么'
})
print(response)

输出:

{'answer': '勾股定理就是直角三角形的两条直角边的平方和等于斜边的平方...', 'confidence': 0.95}

五、流式输出:让AI像人一样回答

流式输出:在用户输入问题后,AI模型边生成边显示响应内容,逐步展示AI的"思考"过程,而不是等所有内容生成后再一次性返回完整答案。

 对比 非流式 流式
 返回方式 等全部想好再一次性返回 生成一个字就返回一个字
 用户体验 干等几秒,突然蹦出一大段 像打字机一样逐字出现
 首字等待 等于总响应时间 极短(几十毫秒)

流式输出在对话场景中特别有用——用户不用傻等,能看到AI在“思考”和“打字”。

完整代码如下:

from langchain_community.llms import tongyi
from langchain.output_parsers import StructuredOutputParser,ResponseSchema
from langchain.prompts import PromptTemplate
# ==================== 配置 ====================
key = "your key"
#替换为个人申请的api_key
llm = tongyi.Tongyi(api_key=key)
#定义输出结构
response_schemas = [
    ResponseSchema(name='answer',description='问题的答案',type='string'),
    ResponseSchema(name='confidence',description='答案的置信度',type='float')
]
#创建输出解析器
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
#创建提示模板
template = """你是一名数学老师,请用{style}风格回答以下问题,并以JSON格式返回答案和置信度:
问题:{question}
{format_instructions}"""
prompt = PromptTemplate(
    template=template,
    partial_variables={"format_instructions":output_parser.get_format_instructions()}
)
#创建LLMChain
chain = prompt|llm
#流式输出
chunks = []
for chunk in chain.stream({
    'style':'通俗易懂',
    'question':'勾股定理是什么'
}):
    chunks.append(chunk)
#存储每次的输出结果
    print(chunk,end='',flush=True)

总结

概念

作用

提示词模板

把重复的指令做成带空位的模板

输出解析器

让AI按固定格式(JSON/对象)输出

链式调用(LCEL)

用 | 把模板+模型+解析器串成流水线

流式输出

AI逐字输出,不用干等

 
posted @ 2026-06-15 11:15  测试木可  阅读(23)  评论(0)    收藏  举报