概述
本教程探讨了负面提示的概念以及在使用大型语言模型时避免不良输出的技术。我们将重点介绍如何使用 OpenAI 的 GPT 模型和 LangChain 库来实现这些策略。主题
随着人工智能语言模型变得越来越强大,有效地引导其输出至关重要。负面提示使我们能够指定模型响应中不想要的内容,从而帮助优化和控制生成的内容。这种方法在处理敏感话题、确保事实准确性或在输出中保持特定语气或风格时特别有用。内容概要
- 使用反面例子来指导模型
- 在提示中指定排除项
- 使用 LangChain 实现约束
- 评估和改进负面提示
教案
我们首先要设置环境,并安装必要的库。然后,我们将探索不同的负面提示技巧:- 基本反面例子:我们将演示如何提供不良输出的例子来指导模型。
- 明确排除:我们将使用提示,明确说明响应中不应包含的内容。
- 约束实施:使用 LangChain,我们将创建更复杂的提示,对输出强制实施特定的约束。
- 评估和改进:我们将讨论评估负面提示的有效性并不断改进的方法。
在整个教程中,我们将使用实际示例来说明这些概念并提供用于实现的代码片段。
结论
在本教程结束时,您将对负面提示技术有深入的了解,并了解如何应用它们来避免语言模型产生不良输出。这些技能将使您能够为各种应用程序创建更可控、更准确、更合适的 AI 生成内容。设置
首先,让我们导入必要的库并设置我们的环境。import os
import re
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
# Load environment variables
from dotenv import load_dotenv
load_dotenv()
# Set up OpenAI API key
os.environ["OPENAI_API_KEY"] = os.getenv('OPENAI_API_KEY')
# Initialize the language model
llm = ChatOpenAI(model="gpt-4o-mini")
def get_response(prompt):
"""Helper function to get response from the language model."""
return llm.invoke(prompt).content
在[4]中:
1. 使用反面例子
让我们从一个简单的例子开始,即使用反面例子来指导模型的输出。negative_example_prompt = PromptTemplate(
input_variables=["topic"],
template="""请对{topic}进行简要说明。
说明中请勿包含以下任何内容:
- 技术术语或复杂术语
- 历史背景或日期
- 与其他相关主题的比较
说明应简单、直接,并且只关注核心概念。"""
)
response = get_response(negative_example_prompt.format(topic="光合作用"))
print(response)
光合作用是绿色植物、藻类和一些细菌将阳光转化为能量的过程。它们从空气中吸收二氧化碳,从土壤中吸收水分。利用阳光,它们将这些成分转化为葡萄糖,这是一种为生长发育提供能量的糖。作为副产品,它们向空气中释放氧气,这对许多生物来说是必不可少的。
2. 指定排除项
现在,让我们探讨如何明确指定应该从响应中排除的内容。exclusion_prompt = PromptTemplate(
input_variables=["topic", "exclude"],
template="""写一段关于{topic}的简短段落。
重要提示:不要提及或引用与{exclude}相关的任何内容。"""
)
response = get_response(exclusion_prompt.format(
topic="锻炼的好处",
exclude="减肥或身体形象"
))
print(response)
锻炼不仅能改善外表,还能带来诸多益处。定期进行体育锻炼可增强心血管健康、增强肌肉力量、提高灵活性,从而促进整体身体健康。此外,锻炼还能通过释放内啡肽来改善情绪、减轻焦虑和抑郁症状,从而产生幸福感和头脑清醒。锻炼还能改善睡眠质量、提高能量水平、增强认知功能,从而提高日常任务的专注力和效率。归根结底,将锻炼融入日常生活可以培养更健康、更有活力的生活方式。
3. 实施约束
让我们使用 LangChain 创建更复杂的提示,对输出强制执行特定的约束。constraint_prompt = PromptTemplate(
input_variables=["topic", "style", "excluded_words"],
template="""为{topic}写一个{style }描述。
约束:
1.不要使用以下任何词语:{excluded_words}
2. 描述不得超过 100 个字
3. 不要使用类比或隐喻
4. 只关注事实信息"""
)
response = get_response(constraint_prompt.format(
topic="人工智能",
style="技术",
excluded_words="机器人, 类人, 科幻"
))
print(response)
人工智能 (AI) 是指计算机系统对认知过程的模拟。这包括从数据中学习、识别模式、做出决策以及执行通常需要智能的任务的能力。AI 涵盖各种子领域,例如机器学习、自然语言处理和计算机视觉。算法旨在分析大型数据集,使系统能够随着时间的推移提高性能。AI 应用范围从数据分析和图像识别到自主系统和决策支持工具。AI 的开发涉及跨学科技术,包括数学、统计学和计算机编程。
4.评估与改进
为了评估和改进我们的负面提示,我们可以创建一个函数来检查输出是否符合我们的约束。def evaluate_output(output, constraints):
"""评估输出是否满足给定的约束。"""
results = {}
for constraint, check_func in constraints.items():
results[constraint] = check_func(output)
return results
# 定义一些示例约束
constraints = {
"word_count": lambda x: len(x.split()) <= 100,
"no_excluded_words": lambda x: all(word not in x.lower() for word in ["robot", "human-like", "science fiction"]),
"no_analogies": lambda x: not re.search(r"\b(as|like)\b", x, re.IGNORECASE)
}
# 评估之前的输出
evaluation_results = evaluate_output(response, constraints)
print("Evaluation results:", evaluation_results)
# 如果输出不满足所有约束,我们可以改进我们的提示
if not all(evaluation_results.values()):
refined_prompt = constraint_prompt.format(
topic="人工智能",
style="技术性且简洁", # 添加“简洁”控制字数
excluded_words="机器人, 类人, 科幻, 像, 如同" # 添加像和如同避免类比
)
refined_response = get_response(refined_prompt)
print("\n完善的回复:\n", refined_response)
# Evaluate the refined output
refined_evaluation = evaluate_output(refined_response, constraints)
print("\n细化的评估结果:", refined_evaluation)
评估结果:{'word_count': True, 'no_excluded_words': True, 'no_analogies': False}
完善的响应:
人工智能 (AI) 是指计算机系统对认知过程的模拟。它涵盖各种子领域,包括机器学习、自然语言处理和计算机视觉。AI 系统分析数据、识别模式并根据算法做出决策。它们可以执行语音识别、图像分析和预测建模等任务。AI 应用程序用于金融、医疗保健和自主系统等行业,可提高效率并实现高级问题解决能力。AI 的发展依赖于大型数据集、计算能力和复杂的算法,以随着时间的推移提高准确性和性能。
细化评估结果:{'word_count': True, 'no_excluded_words': True, 'no_analogies': False}