本文介绍: LangChain系列文章语言模型提示用户提供的一组指令输入用于指导模型响应,帮助它理解上下文并生成相关和连贯的基于语言输出比如回答问题、完成句子或参与对话。LangChain提供了几个类和函数来帮助构建处理提示提示模板是预定义的配方,用于生成语言模型提示模板可能包括说明、少量示例,以及适用于特定任务的具体背景问题。LangChain提供工具创建使用提示模板。LangChain致力于创建模型无关的模板以便轻松地在不同的语言模型之间重用现有的模板

LangChain系列文章

  1. LangChain 实现给动物取名字
  2. LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
  3. LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄
  4. LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve
  5. LangChain 5易速鲜花内部问答系统
  6. LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型
  7. LangChain 7 文本模型TextLangChain和聊天模型ChatLangChain
  8. LangChain 8 模型Model I/O:输入提示、调用模型、解析输出

在这里插入图片描述

语言模型的提示用户提供的一组指令输入用于指导模型的响应,帮助它理解上下文并生成相关和连贯的基于语言的输出比如回答问题、完成句子或参与对话

LangChain提供了几个类和函数来帮助构建处理提示

提示模板是预定义的配方,用于生成语言模型的提示。

模板可能包括说明、少量示例,以及适用于特定任务的具体背景问题

LangChain提供工具创建使用提示模板。

LangChain致力于创建模型无关的模板,以便轻松地在不同的语言模型之间重用现有的模板。

通常,语言模型期望提示要么是一个字符串,要么一个聊天消息列表

1. ChatPromptTemplate

聊天模型的提示是一系列聊天消息

每条聊天消息都与内容一个称为角色额外参数相关联。例如,在OpenAI Chat Completions API中,聊天消息可以与AI助手、人类或系统角色关联
文件名chat_prompt_template.py代码参考了黄佳老师的课程Demo,如需要知道代码细节请读原文

# 导入Langchain库中的OpenAI模块,该模块提供了与OpenAI语言模型交互功能
from langchain.llms import OpenAI  

# 导入Langchain库中的PromptTemplate模块,用于创建管理提示模板
from langchain.prompts import PromptTemplate  

# 导入Langchain库中的LLMChain模块,它允许构建基于大型语言模型的处理
from langchain.chains import LLMChain  

# 导入dotenv库,用于从.env文件加载环境变量,这对于管理敏感数据如API密钥很有用
from dotenv import load_dotenv  

# 导入Langchain库中的ChatOpenAI类,用于创建和管理OpenAI聊天模型的实例
from langchain.chat_models import ChatOpenAI

# 调用dotenv库的load_dotenv函数加载.env文件中的环境变量
# 这通常用于管理敏感数据,如API密钥
load_dotenv()  

# 创建一个ChatOpenAI实例,配置使用gpt-3.5-turbo模型,
# 设定温度参数为0.7(控制创造性的随机性)和最大令牌数为60(限制响应长度)。
chat = ChatOpenAI(
    model="gpt-3.5-turbo",
    temperature=0.7,
    max_tokens=120
)
# 导入Langchain库中的模板类,用于创建聊天式的提示。
from langchain.prompts import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate
)

# 定义一个系统消息模板,用来设定AI的角色任务这里是起名字专家)。
template = "你是一位起名字专家,负责为专注于{product}的公司起名。"
system_message_prompt = SystemMessagePromptTemplate.from_template(template)

# 定义一个人类消息模板,用来模拟用户提问这里请求公司起名)。
human_template = "请为我们公司起个名字我们专注于{product_detail}。"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

# 将系统消息和人类消息的模板组合一个聊天提示模板。
prompt_template = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

# 使用聊天提示模板生成具体的聊天提示,这里指定产品为“水果”和产品细节为“高端送礼设计”。
prompt = prompt_template.format_prompt(product="水果", product_detail="高端送礼设计").to_messages()

# 使用chat函数需要事先定义)发送生成的提示,获取结果
result = chat(prompt)

# 打印聊天结果
print(result)

运行输出

zgpeaces-MBP at ~/Workspace/LLM/langchain-llm-app ±(feature/textAndChat) ✗ ❯ python chat_prompt_template.py
content='果香珍品'
zgpeaces-MBP at ~/Workspace/LLM/langchain-llm-app ±(feature/textAndChat) ✗ ❯ python chat_prompt_template.py
content='水果佳礼'
zgpeaces-MBP at ~/Workspace/LLM/langchain-llm-app ±(feature/textAndChat) ✗ ❯ python chat_prompt_template.py
content='果香尚礼'

2. Few Shot Prompt

文件名text_prompt_few_shot.py

# 导入Langchain库中的OpenAI模块,该模块提供了与OpenAI语言模型交互功能
from langchain.llms import OpenAI  

# 导入Langchain库中的PromptTemplate模块,用于创建和管理提示模板
from langchain.prompts import PromptTemplate  

# 导入Langchain库中的LLMChain模块,它允许构建基于大型语言模型的处理
from langchain.chains import LLMChain  

# 导入dotenv库,用于从.env文件加载环境变量,这对于管理敏感数据如API密钥很有用
from dotenv import load_dotenv  

# 调用load_dotenv函数加载.env文件中的环境变量
load_dotenv()  


# 使用OpenAI类创建一个名为llm的实例。这个实例配置了用于生成文本的模型参数
# 模型使用的是"text-davinci-003",这是一个高级的GPT-3模型。
# temperature设置为0.8,这决定了生成文本随机性和创造性。
# max_tokens设置为60,限制生成文本最大长度
llm = OpenAI(
    model="text-davinci-003",
    temperature=0.6,
    max_tokens=120
)

samples = [
  {
    "fruit_type": "玫瑰葡萄",
    "occasion": "爱情",
    "ad_copy": "玫瑰,浪漫的象征,是你向心爱的人表达爱意的最佳选择。"
  },
  {
    "fruit_type": "金钻菠萝",
    "occasion": "庆祝",
    "ad_copy": "金钻菠萝,庆祝的完美伴侣,为您的特别时刻增添甜蜜与奢华。"
  },
  {
    "fruit_type": "蜜瓜",
    "occasion": "休闲",
    "ad_copy": "蜜瓜,休闲时光的甜蜜伴侣,让您的闲暇时光更加美好。"
  },
  {
    "fruit_type": "富士苹果",
    "occasion": "健康",
    "ad_copy": "富士苹果健康生活的选择,丰富您的营养,活力每一天。"
  }
]

# 导入PromptTemplate类,用于创建和管理提示模板。
from langchain.prompts import PromptTemplate

# 定义一个提示模板,包括水果类型场景广告文案
# {fruit_type}, {occasion}, 和 {ad_copy} 是占位符,稍后将被替换
template = "水果类型:{fruit_type}n场景:{occasion}n广告文案:{ad_copy}n"

# 创建一个PromptTemplate实例,传入输入变量和模板。
prompt_sample = PromptTemplate(input_variables=["fruit_type", "occasion", "ad_copy"], template=template)

# 使用format方法格式化提示,使用samples列表中的第一个样本数据。
# 假设samples是一个预先定义的包含多个样本列表
print(prompt_sample.format(**samples[0]))

# 导入FewShotPromptTemplate类,用于创建包含多个示例的提示模板。
from langchain.prompts.few_shot import FewShotPromptTemplate

# 创建一个FewShotPromptTemplate实例。
# 使用samples作为示例,prompt_sample作为每个示例的格式,定义输入变量后缀
prompt = FewShotPromptTemplate(
    examples=samples,
    example_prompt=prompt_sample,
    suffix="水果类型:{fruit_type}n场景:{occasion}",
    input_variables=["fruit_type", "occasion"],
)
# 格式化提示,用于生成特定水果类型和场景的广告文案
print(prompt.format(fruit_type="玫瑰葡萄", occasion="爱情"))

# 使用语言模型(如GPT-3)生成文案
result = llm(prompt.format(fruit_type="火龙果", occasion="爱情"))
print(result)

运行

zgpeaces-MBP at ~/Workspace/LLM/langchain-llm-app ±(feature/textAndChat) ✗ ❯ python text_prompt_few_shot.py
水果类型:玫瑰葡萄
场景:爱情
广告文案:玫瑰,浪漫的象征,是你向心爱的人表达爱意的最佳选择。

水果类型:玫瑰葡萄
场景:爱情
广告文案:玫瑰,浪漫的象征,是你向心爱的人表达爱意的最佳选择。


水果类型:金钻菠萝
场景:庆祝
广告文案:金钻菠萝,庆祝的完美伴侣,为您的特别时刻增添甜蜜与奢华。


水果类型:蜜瓜
场景:休闲
广告文案:蜜瓜,休闲时光的甜蜜伴侣,让您的闲暇时光更加美好。


水果类型:富士苹果
场景:健康
广告文案:富士苹果健康生活的选择,丰富您的营养,活力每一天。


水果类型:玫瑰葡萄
场景:爱情

广告文案:火龙果,爱情的最佳象征,让你的爱情更加灿烂耀眼。

在这里插入图片描述

3. 提示工程(Prompt Engineering)

是指在与大型语言模型(如GPT-3或GPT-4)交互时,精心设计输入(即“提示”)的过程,以获得最佳的输出结果。这一过程对于充分利用大型语言模型的能力至关重要。以下是进行有效提示工程的几个关键原则

1. 明确目标

  • 具体目标:在设计提示之前,要明确你想从模型中获取什么类型的信息或响应。
  • 明确指令:确保提示清晰、具体,避免模糊不清的要求。

2. 理解模型的能力和限制

3. 使用清晰、简洁的语言

4. 结构化提示

5. 迭代和调整

6. 利用范例和模板

7. 考虑伦理和偏见

  • 避免偏见设计提示时要意识到潜在的偏见和不准确性。
  • 伦理使用:确保使用模型的方式符合伦理标准,避免伤害和误导。

8. 实验反馈

9. 适应特定用途

通过遵循这些原则可以更有效地利用大型语言模型,提高其在各种任务和应用中的性能和准确性。

在这里插入图片描述

代码

参考

https://python.langchain.com/docs/modules/model_io/

参考

原文地址:https://blog.csdn.net/zgpeace/article/details/134608897

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_18483.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注