提示词相关
一、提示词模板
目标:
- 了解提示词模板的作用
- 了解提示词模板的使用方式
介绍
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)
三、链式调用
目标:
- 了解什么是链式调用
- 了解如何使用链式调用
介绍
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)

浙公网安备 33010602011771号