04. 提示词(Prompt)

提示词(prompt)是一种向模型提供的输入。

提示词模板

一个简单的例子

python 复制代码
from langchain import PromptTemplate

# 设置模板template
template = """你是一名精通多门语言,专业的翻译家。你的任务是从{src_lang}翻译到{dst_lang}"""

# 实例化对象prompt
# from_template方法:从模板加载提示词模板(Load a prompt template from a template)
prompt = PromptTemplate.from_template(template)

# prompt对象调用format方法生成提示词
# format使用输入设置模板参数,返回格式化字符串
prompt.format(src_lang = "英语", dst_lang = "中文")

你应该能看到下面的输出

你是一名精通多门语言,专业的翻译家。你的任务是从英语翻译到中文

format函数:使用输入设置提示词(Format the prompt with the inputs),返回格式化的字符串

创建模板

langchian框架中提供基础模板类PromptTemplate,它包含两个参数

  1. input_variables ------------输入变量

  2. template ------------模板

使用{}符号将变量替换到模板中,如PromptTemplate( input_variables = ["name"], template = "My name is {name}"。)

模板的实例化通过模板类实例的format实现。

python 复制代码
# 导入PromptTemplate类
from langchain import PromptTemplate


# 实例化对象multiple_input_prompt
multiple_input_prompt = PromptTemplate(input_variables = ["color", "animal"], 
                template = "a {color} {animal}.")

# 调用format函数,生成提示词
multiple_input_prompt.format(color = "black", animal = "bear")

应该能看到如下输出

a black bear.

聊天提示词模板

聊天模型如GPT,输入一系列消息列表,每条消息都有对应的角色,这个消息列表通常以一定的格式串联,构成模型的输入,也就是提示词。

在OpenAI的Chat Completion API中,聊天消息和assistant,human,system角色关联

langchain提供了一些列模板,更简洁的使用构建和处理提示词。官方文档提醒,在于聊天模型交互时,优先使用这些与聊天相关的模板,有助于提高模型效率。

SystemMessagePromptTemplate,AIMessagePromptTemplate,AssistantMessagePromptTemplate分别构建不同角色的提示词模板。

python 复制代码
from langchain.prompts import (
    ChatPromptTemplate,
    PromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,    
)

from langchain.schema import (
    SystemMessage,
    AIMessage,
    HumanMessage  
)

# system提示词
system_message = "You are a professional translator that translate {src_lang} to {dst_lang}"
# 从system_message中加载提示词模板
system_message_prompt = SystemMessagePromptTemplate.from_template(system_message)

# human提示词是用户输入
human_message = "{user_input}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_message)


chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chat_prompt.format_prompt(
    src_lang = "English",
    dst_lang = "Chinese",
    user_input = "Did you eat in this morning"
).to_messages()

SystemMessage(content='You are a professional translator that translate English to Chinese', additional_kwargs={}), HumanMessage(content='Did you eat in this morning', additional_kwargs={}, example=False)

样本选择器

在开发LLM相关应用中,可能需要从大量样本数据中,选择部分数据包含在提示词中。样本选择器(Example Selector)正是应对这种需求,通常与提示词配合使用。langchain框架封装了基础选择器BaseExampleSelector。

本文以基于长度的样本选择器(输入越长,选择样本越少;输入越短,选择样本越多)

LengthBaseExampleSelector为例,进行演示。

python 复制代码
from langchain.prompts import PromptTemplate
from langchain.prompts import FewShotPromptTemplate
from langchain.prompts.example_selector import LengthBasedExampleSelector

# 样本
examples = [
    {"input":"happy", "output":"sad"},
    {"input":"tall", "output":"short"},
    {"input":"energetic", "output":"lethargic"},
    {"input":"sunny", "output":"gloomy"},
    {"input":"windy", "output":"calm"}
]

# 实例化提示词模板
example_prompt = PromptTemplate(
    input_variables = ["input", "output"],
    template = "Input: {input}\nOutput: {output}"
)

# 实例化样本选择器
example_selector = LengthBasedExampleSelector(
    # 可选的样本数据
    examples = examples,
    # 提示词模板
    example_prompt = example_prompt,
    # 格式化的样本数据的最大长度,通过get_text_length函数统计
    max_length = 25    
)


# 实例化模板
dynamic_prompt = FewShotPromptTemplate(
    example_prompt = example_prompt,
    example_selector = example_selector,
    prefix = "Give the antonym of every input",
    suffix = "Input:{adjective}\nOutput: ",
    input_variables = ["adjective"]
)

print(dynamic_prompt.format(adjective = "big"))

你应该能看到如下输出:

Give the antonym of every input

Input: happy

Output: sad

Input: tall

Output: short

Input: energetic

Output: lethargic

Input: sunny

Output: gloomy

Input: windy

Output: calm

Input: big

Output:

总结:本节介绍Prompt,langchain中提供PromptTemplate和Example Selector两种Prompt。

学习创建简单的模板,聊天模板以及样本选择器事例。

相关推荐
jz_ddk2 小时前
[数学基础] 浅尝向量与张量
人工智能·机器学习·向量·张量
孔明兴汉3 小时前
大模型 ai coding 比较
人工智能
IT研究所4 小时前
IT 资产管理 (ITAM) 与 ITSM 协同实践:构建从资产到服务的闭环管理体系
大数据·运维·人工智能·科技·安全·低代码·自动化
沐曦股份MetaX5 小时前
基于内生复杂性的类脑脉冲大模型“瞬悉1.0”问世
人工智能·开源
power 雀儿5 小时前
张量基本运算
人工智能
陈天伟教授5 小时前
人工智能应用- 人工智能交叉:01. 破解蛋白质结构之谜
人工智能·神经网络·算法·机器学习·推荐算法
政安晨6 小时前
政安晨【人工智能项目随笔】使用OpenClaw的主节点协同子节点撰写大型技术前沿论文的实战指南
人工智能·ai agent·openclaw论文写作·openclaw论文写作经验·ai代理写论文·ai分布式协作·oepnclaw应用
大成京牌6 小时前
2026年京牌政策深度对比,三款优质车型选购推荐榜单探索
人工智能
xuxianliang7 小时前
第154章 “神谕”的低语(AI)
人工智能·程序员创富
geneculture7 小时前
人机互助新时代超级个体(OPC)的学术述评——基于人文学科与数理学科的双重视域
大数据·人工智能·哲学与科学统一性·信息融智学·融智时代(杂志)