概述
本教程重点介绍两种基本类型的提示结构:- 单轮提示
- 多轮提示(对话)
我们将使用 OpenAI 的 GPT 模型和 LangChain 来演示这些概念。
目标
了解不同的提示结构对于与 AI 模型进行有效沟通至关重要。单轮提示适用于快速、直接的查询,而多轮提示可实现更复杂、更具有情境感知能力的交互。掌握这些结构可以让 AI 在各种应用中更加灵活、有效地使用。内容概要
1. ** 单轮提示** :与语言模型的一次性交互。 2. ** 多轮提示** :一系列维持上下文的交互。 3. ** 提示模板** :可重复使用的结构,以实现一致的提示。 4. ** 对话链** :在多个交互中维护上下文。实施方案
我们将结合使用 OpenAI 的 API 和 LangChain 库来演示这些提示结构。本教程将包括实际示例和不同提示类型的比较。设置
首先,让我们导入必要的库并设置我们的环境。import os
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from dotenv import load_dotenv
load_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv('OPENAI_API_KEY') # OpenAI API key
# Initialize the language model
llm = ChatOpenAI(model="gpt-4o-mini")
单轮提示
单轮提示是与语言模型的一次性交互。它们由单个输入(提示)组成并生成单个输出(响应)。
single_turn_prompt = "三原色是什么?"
print(llm.invoke(single_turn_prompt).content)
三原色是红色、蓝色和黄色。这些颜色不能通过将其他颜色混合在一起而产生,并且是通过混合产生各种其他颜色的基础。在加色混合(例如光)的情况下,三原色是红色、绿色和蓝色 (RGB)。
现在,让我们使用 PromptTemplate 来创建更加结构化的单轮提示:
structured_prompt = PromptTemplate(
input_variables=["topic"],
template="请对{topic}进行简要说明,并列出其三个主要组成部分。"
)
chain = structured_prompt | llm
print(chain.invoke({"topic": "色彩理论"}).content)
色彩理论是一种框架,用于理解颜色如何相互作用、相互补充以及如何组合以产生各种视觉效果。它在艺术、设计和摄影等领域至关重要,可帮助艺术家和设计师在色彩使用方面做出明智的选择,以唤起情感、传达信息并在作品中创造和谐。
色彩理论的三个主要组成部分是:
- 色轮:显示颜色之间关系的圆形图。它通常包括原色、间色和复色,直观地展示颜色如何组合。
- 色彩和谐:以令人愉悦的方式组合颜色的概念。它涉及使用互补色、类似色和三色等配色方案来创造平衡和视觉趣味。
- 色彩背景:这指的是颜色如何相互作用,以及它们如何根据周围的颜色改变感知。同一种颜色可能会根据其旁边的颜色而显得不同,这会影响情绪和解读。
2. 多轮提示(对话)
多轮提示涉及与语言模型的一系列交互,从而实现更复杂、更具情境感知的对话。conversation = ConversationChain(
llm=llm,
verbose=True,
memory=ConversationBufferMemory()
)
print(conversation.predict(input="你好,我正在学习太空知识。你能告诉我有关行星的知识吗?"))
print(conversation.predict(input="我们太阳系中最大的行星是什么?"))
print(conversation.predict(input="它的大小与地球相比如何?"))
> 进入新的 ConversationChain 链...
格式化后提示:
以下是人类与人工智能之间的友好对话。人工智能很健谈,并根据上下文提供了很多具体细节。如果人工智能不知道问题的答案,它会如实说不知道。
当前对话:
人类:你好,我正在学习太空知识。你能告诉我有关行星的知识吗?
人工智能:
> 链条完成。
当然!行星是围绕恒星运转的迷人天体,在我们的太阳系中,它们围绕太阳运转。我们的太阳系中已发现八颗行星,它们可分为两大类:类地行星和气态巨行星。
类地行星——水星、金星、地球和火星——都是岩石行星,拥有坚硬的表面。
- **水星**是距离太阳最近的行星,其温度变化极大,白天酷热,夜晚寒冷。
- **金星**通常被称为地球的“姊妹行星”,因为它的大小与地球相似,但拥有厚而有毒的大气层,可以吸收热量,使其成为太阳系中最热的行星。
- 我们的家园**地球**因其液态水和维持生命的大气而独一无二。
- **火星**因其富含氧化铁的土壤而被称为红色星球,拥有太阳系中最大的火山和峡谷。
气态巨行星(木星和土星)和冰巨行星(天王星和海王星)要大得多,而且没有像类地行星那样的固体表面。
- **木星**是最大的行星,以其大红斑、比地球还大的巨大风暴和众多卫星而闻名,其中包括太阳系中最大的卫星木卫三。
- **土星**以其由冰和岩石颗粒组成的令人惊叹的环系统而闻名。
- **天王星**的独特之处在于它侧面旋转,并且由于其大气中含有甲烷而呈现蓝色。
- **海王星**是距离太阳最远的行星,它拥有强劲的风,并且由于含有甲烷而呈现蓝色;它拥有太阳系中记录的最快风速。
如果您对任何行星或其他天体特征的更具体信息感兴趣,请随时询问!
> 进入新的 ConversationChain 链...
格式化后提示:
以下是人类与人工智能之间的友好对话。人工智能很健谈,并根据上下文提供了很多具体细节。如果人工智能不知道问题的答案,它会如实说不知道。
当前对话:
人类:你好,我正在学习太空知识。你能告诉我有关行星的知识吗?
AI:当然!行星是围绕恒星运转的迷人天体,在我们的太阳系中,它们围绕太阳运转。我们的太阳系中已发现八颗行星,它们可分为两大类:类地行星和气态巨行星。
类地行星——水星、金星、地球和火星——都是岩石行星,拥有坚硬的表面。
- **水星**是距离太阳最近的行星,其温度变化极大,白天酷热,夜晚寒冷。
- **金星**通常被称为地球的“姊妹行星”,因为它的大小与地球相似,但拥有厚而有毒的大气层,可以吸收热量,使其成为太阳系中最热的行星。
- 我们的家园**地球**因其液态水和维持生命的大气而独一无二。
- **火星**因其富含氧化铁的土壤而被称为红色星球,拥有太阳系中最大的火山和峡谷。
气态巨行星(木星和土星)和冰巨行星(天王星和海王星)要大得多,而且没有像类地行星那样的固体表面。
- **木星**是最大的行星,以其大红斑、比地球还大的巨大风暴和众多卫星而闻名,其中包括太阳系中最大的卫星木卫三。
- **土星**以其由冰和岩石颗粒组成的令人惊叹的环系统而闻名。
- **天王星**的独特之处在于它侧面旋转,并且由于其大气中含有甲烷而呈现蓝色。
- **海王星**是距离太阳最远的行星,它拥有强劲的风,并且由于含有甲烷而呈现蓝色;它拥有太阳系中记录的最快风速。
如果您对任何行星或其他天体特征的更具体信息感兴趣,请随时询问!
人类:我们太阳系中最大的行星是什么?
人工智能:
> 链条完成。
我们太阳系中最大的行星是**木星**。它的直径约为 86,881 英里(139,822 公里),比地球宽 11 倍多!木星主要由氢和氦组成,它具有非常强的磁场和众多卫星——已确认的卫星超过 79 颗,其中最大的四颗被称为伽利略卫星:木卫一、木卫二、木卫三和木卫四。木卫三尤其引人注目,因为它不仅是木星最大的卫星,也是整个太阳系中最大的卫星,甚至比水星还要大!如果您想了解有关木星或其任何卫星的更多信息,请告诉我!
> 进入新的 ConversationChain 链...
格式化后提示:
以下是人类与人工智能之间的友好对话。人工智能很健谈,并根据上下文提供了很多具体细节。如果人工智能不知道问题的答案,它会如实说不知道。
当前对话:
人类:你好,我正在学习太空知识。你能告诉我有关行星的知识吗?
AI:当然!行星是围绕恒星运转的迷人天体,在我们的太阳系中,它们围绕太阳运转。我们的太阳系中已发现八颗行星,它们可分为两大类:类地行星和气态巨行星。
类地行星——水星、金星、地球和火星——都是岩石行星,拥有坚硬的表面。
- **水星**是距离太阳最近的行星,其温度变化极大,白天酷热,夜晚寒冷。
- **金星**通常被称为地球的“姊妹行星”,因为它的大小与地球相似,但拥有厚而有毒的大气层,可以吸收热量,使其成为太阳系中最热的行星。
- 我们的家园**地球**因其液态水和维持生命的大气而独一无二。
- **火星**因其富含氧化铁的土壤而被称为红色星球,拥有太阳系中最大的火山和峡谷。
气态巨行星(木星和土星)和冰巨行星(天王星和海王星)要大得多,而且没有像类地行星那样的固体表面。
- **木星**是最大的行星,以其大红斑、比地球还大的巨大风暴和众多卫星而闻名,其中包括太阳系中最大的卫星木卫三。
- **土星**以其由冰和岩石颗粒组成的令人惊叹的环系统而闻名。
- **天王星**的独特之处在于它侧面旋转,并且由于其大气中含有甲烷而呈现蓝色。
- **海王星**是距离太阳最远的行星,它拥有强劲的风,并且由于含有甲烷而呈现蓝色;它拥有太阳系中记录的最快风速。
如果您对任何行星或其他天体特征的更具体信息感兴趣,请随时询问!
人类:我们太阳系中最大的行星是什么?
AI:我们太阳系中最大的行星是**木星**。它的直径约为 86,881 英里(139,822 公里),比地球宽 11 倍多!木星主要由氢和氦组成,它具有非常强的磁场和众多卫星——已确认的卫星超过 79 颗,其中最大的四颗被称为伽利略卫星:木卫一、木卫二、木卫三和木卫四。木卫三尤其引人注目,因为它不仅是木星最大的卫星,也是整个太阳系最大的卫星,甚至比水星还要大!如果您想了解有关木星或其任何卫星的更多信息,请告诉我!
人类:它的大小与地球相比如何?
人工智能:
> 链条完成。
木星比地球大得多!为了让您更清楚地了解,木星的直径约为 86,881 英里(139,822 公里),而地球的直径约为 7,917.5 英里(12,742 公里)。这意味着木星比地球宽 11 倍以上!
就体积而言,木星内部可以容纳大约 1,300 个地球!此外,木星的质量大约是地球的 318 倍。尽管木星体积巨大、重量巨大,但其密度却远低于地球,因此被归类为气态巨行星。如果您对木星有更多疑问,或者想知道两颗行星之间的重力有何不同,请随时提问!
让我们比较一下单轮和多轮提示如何处理一系列相关问题:
# Single-turn prompts
prompts = [
"法国的首都是哪里?",
"它的人口是多少?",
"这个城市最著名的地标是什么?"
]
print("Single-turn responses:")
for prompt in prompts:
print(f"Q: {prompt}")
print(f"A: {llm.invoke(prompt).content}\n")
# Multi-turn prompts
print("Multi-turn responses:")
conversation = ConversationChain(llm=llm, memory=ConversationBufferMemory())
for prompt in prompts:
print(f"Q: {prompt}")
print(f"A: {conversation.predict(input=prompt)}\n")
单轮响应:
问:法国的首都是哪里?
A:法国的首都是巴黎。
问:它的人口是多少?
答:请问您指的是哪个地点或实体,以便提供人口信息吗?
问:这个城市最著名的地标是什么?
A:为了提供准确的答案,我需要知道您指的是哪个城市。不同的城市有不同的著名地标。您能具体说明一下是哪个城市吗?
多轮响应:
问:法国的首都是哪里?
A:法国首都是巴黎!它以埃菲尔铁塔、卢浮宫和巴黎圣母院等标志性建筑而闻名。巴黎还以其丰富的历史、艺术和文化而闻名。你去过巴黎吗?或者它在你的旅行清单上吗?
问:它的人口是多少?
答:截至我上次更新,巴黎市区人口约为 210 万。但是,如果考虑到更大的都市区,这个数字将上升到 1200 万左右。巴黎是一个充满活力的城市,人口多元化,文化融合。你有没有想过生活在这样一个繁华的城市会是什么样子?
问:这个城市最著名的地标是什么?
答:巴黎最著名的地标无疑是埃菲尔铁塔!它于 1889 年为世界博览会而建,高约 300 米(984 英尺)。埃菲尔铁塔每年吸引数百万游客,从其观景台可以欣赏到城市的壮丽景色。夜晚的灯光也非常美丽,是当地人和游客的浪漫之地。您是否曾在照片中见过埃菲尔铁塔或梦想过参观它?
结论
本教程向您介绍了单轮和多轮提示结构的基础知识。我们已经了解了:- 单轮提示对于快速、孤立的查询很有用。
- 多轮提示在整个对话过程中保持上下文,从而实现更复杂的交互。
- PromptTemplates 可用于创建结构化、可重复使用的提示。
- LangChain 中的对话链有助于管理多轮交互中的上下文。
了解这些不同的提示结构可以让您为各种任务选择最合适的方法,并与 AI 语言模型创建更有效的交互。