提示词相关

一、提示词模板

目标:

  1. 了解提示词模板的作用
  2. 了解提示词模板的使用方式

介绍

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

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

示例

from langchain_community.llms import tongyi
from langchain.prompts import PromptTemplate
# ==================== 配置 ====================
key = "your key"#替换为个人申请的api_key
llm = tongyi.Tongyi(api_key=key)
# 定义模板
tempalte = '你是一个{role},请用{style}风格回答{question}'
#创建模板对象
prompt_template = PromptTemplate.from_template(tempalte)
#变量填充
filled_prompt = prompt_template.format(role='数学老师',style='通俗易懂',question='勾股定理是什么?')
#模型回答
response = llm.invoke(filled_prompt)
print(response)

二、输出格式化

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)

示例-对象

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)

三、链式调用

目标:

  1. 了解什么是链式调用
  2. 了解如何使用链式调用

介绍

LLMChain是一个核心对象,用于实现基于LLM的链式调用。

它将提示词模板、语言模型以及可选的输出解释器组合在一起,形成一个可重复执行的流程,简化了与LLM的交互。

LLMChain的核心组件:

1.PromptTemplate:

  • 定义提示词的模板,包括占位符,用于动态生成提示词。

2.LLM:

  • 大语言模型,根据提示词生成输出。

3.OutputParser(可选):

  • 用于将LLM的原始文本输出解析为结构化格式。

4.Memory(可选):

  • 可集成上下文记忆,支持对话历史管理。

示例

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-写法进行警告,最终使用了最新的写法
# llm_chain = LLMChain(llm=llm,prompt=prompt,output_parser=output_parser)
#
# #运行链
# response = llm_chain.run({
#     'style':'通俗易懂',
#     'question':'勾股定理是什么'
# })
chain = prompt|llm|output_parser
response = chain.invoke({
    'style':'通俗易懂',
    'question':'勾股定理是什么'
})
print(response)

四、流式输出

对比维度

非流式(普通)

流式(Stream)

返回方式

等待完整回复后一次性返回

生成一个字符就返回一个字符

用户体验

长时间等待后突然看到大段文字

像打字机一样逐字出现

首字延迟

等于总响应时间

极短(几十毫秒)

适用场景

批量处理、自动化

对话交互、实时反馈

示例

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--写法进行警告,最终使用了最新的写法
# llm_chain = LLMChain(llm=llm,prompt=prompt,output_parser=output_parser)
#
# #运行链
# response = llm_chain.run({
#     'style':'通俗易懂',
#     'question':'勾股定理是什么'
# })
chain = prompt|llm
#流式输出
chunks = []
for chunk in chain.stream({
    'style':'通俗易懂',
    'question':'勾股定理是什么'
}):
    chunks.append(chunk)#存储每次的输出结果
    print(chunk,end='',flush=True)
posted @ 2026-06-15 11:15  测试木可  阅读(3)  评论(0)    收藏  举报