LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt

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提供了几个类和函数来帮助构建和处理提示。

  • Prompt templates提示模板:参数化模型输入
  • Example selectors示例选择器:动态选择要包含在提示中的示例

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

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

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://github.com/zgpeace/pets-name-langchain/tree/feature/textAndChat
  • https://github.com/huangjia2019/langchain/tree/main/03_%E6%A8%A1%E5%9E%8BIO

参考

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

参考

  • https://platform.openai.com/docs/guides/prompt-engineering

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

番外篇之矩阵运算

矩阵的运算代码&#xff08;加减乘除&#xff09;&#xff08;内有注释&#xff09; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #define ROW 10 //定义行 #define COL 10 //定义列 //设置全局变量A矩阵的m代表实际矩阵的行数&#xff0c;n代表实际矩阵的列…

ASO优化之如何测试应用的屏幕截图

截取屏幕截图并上传到应用商店后&#xff0c;我们需要对其进行测试和优化&#xff0c;从而来获得更高的转化率&#xff0c;精美的图片有助于提高应用在商店的安装率。 1、定义目标受众。 战略性地决定测试哪些目标受众&#xff0c;可以通过年龄、性别、地点、兴趣等来定义我们…

[黑马程序员SpringBoot2]——原理篇1

目录&#xff1a; bean的加载方式(—)bean的加载方式(二)bean的加载方式(三)FactoryBeanproxyBeanMethod属性bean的加载方式(四)bean的加载方式(五)bean的加载方式(六)bean的加载方式(七)bean的加载方式(八)bean加载控制&#xff08;编程式)bean加载控制&#xff08;注解式)be…

[ZJCTF 2019]NiZhuanSiWei

虽然有include函数但我们无法直接包含flag因为对file进行了过滤&#xff0c;又看见有反序列化的入口&#xff0c;只是并没有发现可利用的方法&#xff0c;但题目有提示所以尝试将其调出来 php伪协议写入内容 看到file_get_contents函数想到使用data协议&#xff0c;去封装一个…

Hive内置表生成函数

Hive内置UDTF 1、UDF、UDAF、UDTF简介2、Hive内置UDTF 1、UDF、UDAF、UDTF简介 在Hive中&#xff0c;所有的运算符和用户定义函数&#xff0c;包括用户定义的和内置的&#xff0c;统称为UDF&#xff08;User-Defined Functions&#xff09;。如下图所示&#xff1a; UDF官方文档…

远程安全访问JumpServer:使用cpolar内网穿透搭建固定公网地址

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpS…

Python潮流周刊:Twitter 的强敌 Threads 是用 Python 开发的!

&#x1f984;文章&教程 1、聊一聊 Python 和 Golang 的垃圾回收 常见的垃圾回收算法有哪些&#xff0c;它们的优缺点是什么&#xff1f;Python 的垃圾回收机制由什么组成&#xff0c;如何解决内存泄漏问题&#xff1f;Golang 的垃圾回收机制又是怎样的&#xff0c;如何解…

新式的拉式膜片弹簧离合器设计机械设计CAD

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;离合器 获取完整论文报告工程源文件 减震弹簧 摩擦片 膜片弹簧 压盘 轴 扭转减震器 从动盘 离合器 离合器的结构设计 为了达到计划书所给的数据要求&#xff0c;设计时应根据车型的类别、使用要求、制造条件&#xff0c;…

C#,《小白学程序》第四课:数学计算,总和与平均值

程序是 数据 计算 显示。 1 文本格式 /// <summary> /// 《小白学程序》第四课&#xff1a;数学计算 /// 这节课超级简单&#xff0c;就是计算成绩的平均值&#xff08;平均分&#xff09; /// 这个是老师们经常做的一件事。 /// </summary> /// <param name&…

洛谷P1049装箱问题 ————递归+剪枝+回溯

没没没没没没没没没错&#xff0c;又是一道简单的递归&#xff0c;只不过加了剪枝&#xff0c;我已经不想再多说&#xff0c;这道题写了一开始写了普通深搜&#xff0c;然后tle了一个点&#xff0c;后面改成剪枝&#xff0c;就ac了&#xff0c;虽然数据很水&#xff0c;但是不妨…

ruoyi-plus-vue docker 部署

本文以 ruoyi-vue-plus 5.x docker 部署为基础 安装虚拟机 部署文档 安装docker 安装docker 安装docker-compose 配置idea环境 上传 /doicker 文件夹 到服务器&#xff1b;赋值 777权限 chmod -R 777 /docker idea构建 jar 包 利用 idea 构建镜像; 创建基础服务 docker…

力扣 3. 无重复字符的最长子串

题目 题解 方法 public static int lengthOfLongestSubstring(String s) {HashSet<Character> charSet new HashSet<Character>();int i 0,l0,max0;for (int j 0; j < s.length(); j) {while (charSet.contains(s.charAt(j))) {charSet.remove(s.charAt(l…

【JavaEE初阶】Thread 类及常见方法、线程的状态

目录 1、Thread 类及常见方法 1.1 Thread 的常见构造方法 1.2 Thread 的几个常见属性 1.3 启动⼀个线程 - start() 1.4 中断⼀个线程 1.5 等待⼀个线程 - join() 1.6 获取当前线程引用 1.7 休眠当前线程 2、线程的状态 2.1 观察线程的所有状态 2.2 线程状态和状…

硬盘上不小心删除了重要文档?试试这6个成功率高的数据恢复工具!

您是否不小心重新格式化了存储卡或删除了想要保留的照片&#xff1f;最好的照片恢复软件可以提供帮助&#xff01;如果您使用数码相机拍摄的时间足够长&#xff0c;那么当您错误地删除了想要保留的图像、重新格式化了错误的 SD 卡&#xff0c;或者发现您的珍贵照片由于某种莫名…

CFO的GenAI应用指南

CFO应该采取的最重要行动是识别最大的创造价值的机会&#xff0c;然后确保他们获得所需的资金和其他资源。GenAI拥有成为革命性技术的潜力&#xff0c;但它不会改变金融和经济学的基本原则&#xff1a;一家公司必须产生高于资本成本的回报。 技术改变了每一项业务&#xff0c;往…

分布式锁,分布式锁应该具备哪些条件,分布式锁的实现方式有:基于Zookeeper实现、Redis实现、数据库实现

文章目录 分布式锁0-1分布式锁--包含CAP理论模型概述分布式锁&#xff1a;分布式锁应该具备哪些条件&#xff1a;分布式锁的业务场景&#xff1a; 分布式锁的实现方式有&#xff1a;基于Zookeeper - 分布式锁实现思想优缺点基于Redis - 分布式锁实现思想实现思想的具体步骤&…

【LeetCode 热题 HOT 100】题解笔记 —— Day01

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

企业海外分部,如何实现安全稳定的跨境网络互连?

如今&#xff0c;众多企业广泛采取数字化业务系统&#xff0c;如OA、ERP及CRM等&#xff0c;来提升其业务运营效率。同时&#xff0c;私有云与公有云混合架构也逐渐普及化。 具体来说&#xff0c;很多企业选择将研发系统部署在公司本地的私有云环境&#xff0c;以此确保数据安全…

首批!创邻科技入选《图数据库金融应用场景优秀案例》

11月11日&#xff0c;“全球金融科技中心网络年会”在第三届全球金融科技大会暨第五届成方金融科技论坛上成功在京举办。会上&#xff0c;北京前沿金融监管科技研究院发布了基于国际标准组织——国际关联数据基准委员会&#xff08;LDBC&#xff09;的《图数据库金融应用场景优…

路由器DHCP分配IP地址规则

路由器DHCP分配IP地址的机制&#xff1a; 先设置一个IP地址池&#xff0c;假设是192.168.1.100-192.168.1.199一共100个。 来一个请求&#xff0c;看一下是不是以前请求过的地址&#xff0c;如果是&#xff0c;还是返回以前给过的IP&#xff0c;然后将到期时间(有些路由器默认…