ChatGPT学习之旅 (3) Prompt进阶用法
大家好,我是Edison。
上一篇:Hello Prompt
复习Prompt用法
还记得上一篇学到的黄金公式吗?
这里,我们先来复习一下,假如我们想要ChatGPT来扮演一个【私人营养师】为我们给出好的建议,编写一个Prompt如下:
“你是一个私人营养师,帮我推荐一些美味的食谱,要求包括营养有益健康但又简单不费时的食物,适合像我这样即忙碌又考虑成本的人,整体菜肴既健康又经济。”
调教AI之奖惩指令
如果你希望你的孩子达到你理想的行为标准,那么你就需要对他进行教育,如果孩子做得好,我们就需要及时的夸奖,鼓励他变得更好。而如果孩子做得差劲,老是一本正经的胡说八道,我们也需要对他进行一定的惩罚,让孩子知道你的底线。
同理,面对现阶段的AI模型也一样,通过不断地 惩罚 和 奖励 的 反复纠正,AI模型就会形成一套我们所期望的行为标准。
这里,我们再以【旅游攻略】为例,看看如何通过奖惩指令来反复纠正ChatGPT的回答,因为ChatGPT可能会一直一本正经的胡说八道。
第一轮:初步回答
Prompt:
假如你是一名资深导游,我想要去四川省西昌市旅游,预算四千元,旅行人数4大1小,行程3天,乘坐高铁从成都出发,请帮我生成一份3天的旅游攻略。 请注意:1.我不太喜欢行程太紧凑,我喜欢休闲游;2.我喜欢品尝当地的美食,也请推荐一些美食;3.推荐景点时请附上各个景点的价格以及链接;
AI回答:
第二轮:指出错误的地方
第三轮:给予肯定,但要求重新生成第二天计划
总之,感觉大语言模型还是需要把小红书之类的学习一遍,才能更好地生成旅游攻略啊,哈哈。
Prompt生成SQL查询
之前我们说到,在基于文本的生成式AI应用场景中,编码是一个应用比较多的领域。
这里,我们以【创建SQL查询】为例演示一下,看看如何使用Prompt来帮我们声场一个SQL查询。
Prompt1:
你是一个DBA,维护了一张数据表 customers, columns = [CustomerId, FirstName, LastName, Company, Address, City, State, Country, PostalCode],请创建一个SQL查询,以获得所有在弗洛里达州名为Jason的顾客。
Prompt2:
请在上面的SQL查询基础上,按照顾客的Id进行升序排序。
最终生成的SQL查询:
SELECT * FROM customers
WHERE State = 'Florida' AND FirstName = 'Jason'
ORDER BY CustomerId ASC;
Prompt生成C#示例代码
之前在开发过程中,会使用百度谷歌等搜索引擎搜索很多的示例代码,在AIGC时代,我们也可以先问问ChatGPT,看看它是否能帮我们生成一个高质量的示例代码供我们参考使用。
Prompt1:
你是一个上位机开发工程师,请帮我们生成一个使用C#读写西门子S7-1500 PLC数据块数据的示例代码。
要求:
- 使用OPC UA协议和PLC进行通信;
- PLC数据块编号为DB10;
- 使用Windows Form进行数据展现;
AI回答:
当使用C#与西门子S7-1500 PLC进行通信时,可以使用OPC UA协议来实现。以下是一个示例代码,展示了如何使用OPC UA读写PLC数据块数据,并使用Windows Forms进行数据展示: 首先,确保已安装NuGet包 "Opc.UaFx",它提供了OPC UA功能。 csharp
using Opc.UaFx;
using Opc.UaFx.Client; // 创建一个Windows Forms应用程序,例如Form1类 public partial class Form1 : Form
{
private OpcClient opcClient; public Form1()
{
InitializeComponent(); // 创建OPC UA客户端
opcClient = new OpcClient(); // 连接到PLC
opcClient.Connect("opc.tcp://PLC_IP_Address:4840"); // 替换为实际的PLC IP地址 // 订阅数据变化事件
opcClient.SubscribeDataChange("ns=2;s=DB10", HandleDataChange); // 替换为实际的PLC数据块编号 // 启动循环读取数据
ReadDataPeriodically();
} private void HandleDataChange(object sender, OpcDataChangeReceivedEventArgs e)
{
// 处理数据变化事件,更新UI展示
Invoke(new Action(() =>
{
textBox1.Text = e.Item.Value.ToString(); // 替换为实际的UI元素,用于展示PLC数据
}));
} private void ReadDataPeriodically()
{
Task.Run(async () =>
{
while (true)
{
var result = await opcClient.ReadNodeAsync("ns=2;s=DB10.Tag1"); // 替换为实际的PLC数据项路径 if (result.Status.IsGood)
{
// 处理读取的数据 // 更新UI展示
Invoke(new Action(() =>
{
textBox2.Text = result.Value.ToString(); // 替换为实际的UI元素,用于展示PLC数据
}));
} await Task.Delay(1000); // 每秒读取一次数据,根据实际需求调整间隔时间
}
});
} protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e); // 断开与PLC的连接并释放资源
opcClient.Disconnect();
opcClient.Dispose();
}
}
请注意,在上述代码中,需要将"opc.tcp://PLC_IP_Address:4840"替换为实际的PLC IP地址,并将"ns=2;s=DB10"替换为实际的PLC数据块编号。另外,根据需要,可以添加更多的UI元素来展示更多的PLC数据。 这只是一个简单的示例代码,你可以根据自己的需求进行扩展和定制。希望对你有帮助!如果有任何问题,请随时提问。
Prompt2:
很好,如果我不想使用OPC UA协议,而是使用ModBus协议,请重新给我一个示例代码。
AI回答:
如果你想使用Modbus协议与西门子S7-1500 PLC进行通信,可以使用第三方库NModbus来实现。以下是一个示例代码,展示了如何使用C#读写PLC数据块数据并使用Windows Forms进行数据展示: 首先,确保已安装NuGet包 "NModbus",它提供了Modbus功能。 csharp
using System;
using System.Windows.Forms;
using Modbus.Device; // 创建一个Windows Forms应用程序,例如Form1类 public partial class Form1 : Form
{
private ModbusIpMaster modbusMaster; public Form1()
{
InitializeComponent(); // 创建Modbus主站
var ipAddress = "PLC_IP_Address"; // 替换为实际的PLC IP地址
var port = 502; // Modbus默认端口号
modbusMaster = ModbusIpMaster.CreateIp(new System.Net.IPAddress(System.Net.IPAddress.Parse(ipAddress).GetAddressBytes()), port); // 启动循环读取数据
ReadDataPeriodically();
} private void ReadDataPeriodically()
{
Task.Run(async () =>
{
while (true)
{
try
{
ushort startAddress = 0; // 起始地址,根据实际需求修改
ushort numRegisters = 1; // 读取的寄存器数量,根据实际需求修改 // 读取数据
var data = modbusMaster.ReadHoldingRegisters(startAddress, numRegisters); // 处理读取的数据 // 更新UI展示
Invoke(new Action(() =>
{
textBox1.Text = data[0].ToString(); // 替换为实际的UI元素,用于展示PLC数据
}));
}
catch (Exception ex)
{
Console.WriteLine("Error reading data: " + ex.Message);
} await Task.Delay(1000); // 每秒读取一次数据,根据实际需求调整间隔时间
}
});
} protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e); // 关闭Modbus连接并释放资源
modbusMaster.Dispose();
}
}
请注意,在上述代码中,需要将"PLC_IP_Address"替换为实际的PLC IP地址。另外,根据需要,可以添加更多的UI元素来展示更多的PLC数据。 这只是一个简单的示例代码,你可以根据自己的需求进行扩展和定制。希望对你有帮助!如果有任何问题,请随时提问。
通过多轮与ChatGPT的对话,你就可以得到一个较好的示例代码了,可能比查多篇技术博客来得快一丢丢。
Prompt双语混打
对于ChatGPT而言,使用中文获取的效果目前来看是不及英文的,可能也就是70分 和 95分的差距,这几乎是业界的共识。不过,你永远可以相信AI的进化速度。在此基础之上,最优解是情景式混用。加入有助于ChatGPT理解的英文关键词,可以辅助AI理解,生成更准确的回答。
比如,以【编写Python脚本】为例,只要Prompt中提到”不要”两个字,回答几乎是“不要”什么偏来什么。相比之下,使用“Do not”的结果就会稳一些。
Prompt1:
你是一个Python开发者,请帮我写一个python程序,将twitter的<post>抓取后保存为pdf,并将pdf保存到Mac桌面。注意:不要使用Twitter API
Prompt2:
你是一个Python开发者,请帮我写一个python程序,将twitter的<post>抓取后保存为pdf,并将pdf保存到Mac桌面。注意:Do not use Twitter API
可以看到,使用“Do not”的效果比“不要”就要准确得多了。
小结
本篇,我们了解了ChatGPT中的奖惩指令,对于AI回答我们可以通过Prompt对其回答进行反馈,以便AI修正回答完善回答。此外,我们还了解了使用Prompt来获取SQL查询 和 C#示例代码的案例,以及情景式混用中英双语Prompt达到更好的效果,相信会对你有所帮助。
下一篇,我们了解下Prompt的高级使用方式,比如叠加一些实用符号,Markdown介入,生成答案带图片显示等等。
ChatGPT学习之旅 (3) Prompt进阶用法的更多相关文章
- (数据科学学习手札61)xpath进阶用法
一.简介 xpath作为对网页.对xml文件进行定位的工具,速度快,语法简洁明了,在网络爬虫解析内容的过程中起到很大的作用,除了xpath的基础用法之外(可参考我之前写的(数据科学学习手札50)基于P ...
- Django框架学习-Model进阶用法
Model进阶用法 回顾 访问外键 访问多对多关系 更改数据库结构 当处理数据库结构改变时,需要注意到几点: 增加字段 首先在开发环境中: 再到产品环境中: 删除字段 删除多对多字段 删除model ...
- CocoaPods学习系列4——进阶用法
这篇文章,记录一下CocoaPods的进阶用法. 进阶用法主要体现在.podspec文件和Podfile的配置上. .podspec文件的进阶配置 以官方的一个.podspec文件示例细说: Pod: ...
- 我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法
本文参考: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html http://www.blogjava.net/ ...
- 开发了5年android,我开始了go学习之旅
前言 做了近5年的android开发,最近项目也是不怎么忙,空闲的时候总会思考一些事情,不过作为移动开发,我个人觉得很有必要学习后台开发,由于公司是Go语言开发的,了解go语言一段时间后,我发现go语 ...
- Omi框架学习之旅 - 之开篇扯蛋
说实话, 我也不知道Omi是干啥的, 只因此框架是alloyTeam出的, dntzhang写的, 也有其他腾讯大神参与了, 还有一些其他贡献者, 以上我也不太清楚, 当我胡说八嘎. 因其写法有人说好 ...
- AngularJS学习之旅
开篇 最近由于项目上可能需要用到AngularJS,公司将技术学习.调研的任务安排了下来,因此开始了我的AngularJS学习之路. 在这之前没写过技术博客,主要是由于太懒,另外自愧文笔不好,因此一直 ...
- awk分割列-【AWK学习之旅】
---===AWK学习之旅===--- awk 内置分割函数:split,将列按照指定分割符,分割成数组 用法:split(str1,array,"分隔符") 文件内容: [roo ...
- asp.net+mvc+easyui+sqlite 简单用户系统学习之旅—— 摘要
首次接触asp.net开发,希望把自己的学习之旅写下来,一方面做个知识归纳技术总结,另一方面开放到博客中,和大家一起交流学习! asp.net是目前流行的web开发技术之一,是微软旗下开发的基于.ne ...
- Git命令学习之旅——日志和穿梭版本号
在总结了git命令的基础之后,接下来我们看一下基础的一些进阶内容:删除撤销命令.日志查看命令等 既然有加入文件的功能,那么相相应的肯定有移除文件的功能,命令例如以下:git rm [文件名称] 在输入 ...
随机推荐
- Scanner的进阶使用——数字的输入
1.用Scanner输入数字(整数和小数) 1.定义一个整数变量 2.建立扫描器 3.使用if 4.建立电脑接收数据 5.设置else(那么)语法 6.关闭Scanner
- nginx 安装及负载配置
1.官网下载nginx源码包 http://nginx.org/download/nginx-1.8.1.tar.gz 2.上传到opt目录,解压 cd /opt tar -zxvf nginx-1. ...
- 想构建一个Web学习数据库管理系统
有过爬虫的学习基础,凭借兴趣学习到 视频爬取和反向解析那里(没学完). 以及最新出来的技术 分布式多线程.selenium.scrpy 等技术 3 3 防盗链 抓取梨视频(1)_哔哩哔哩_bil ...
- TreeSet的add方法源码分析
一.JDK 1.8 中 TreeSet 的 add 方法源码详细分析 TreeSet 是 Java 集合框架中的一个有序集合类,基于红黑树(TreeMap)实现.TreeSet 的 add 方法用于向 ...
- CF1370C题解
本蒟蒻的第二篇题解,找题归功于教练 题目传送门 这道题目找好了规律很简单: 具体思路: 题目大意: 有一个正整数 nnn.两名玩家轮流操作.每次操作可以执行以下一种: 将 nnn 除以一个 nnn 的 ...
- 『Plotly实战指南』--样式定制基础篇
在数据可视化的世界中,一个精心设计的图表不仅能准确传达信息,还能提升整体的专业性和吸引力. 而Plotly作为Python中强大的可视化库,提供了丰富的样式定制功能,帮助我们轻松实现这一目标. 本文从 ...
- TCP连接(Netty)
启动类增加 public static void main(String[] args) { SpringApplication application = new SpringApplication ...
- 2.7K star!这个汉字工具库让中文处理变得超简单,开发者必备!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 cnchar 是一个功能全面的汉字工具库,提供拼音转换.笔画动画.偏旁查询.成语接龙.语音合 ...
- 25.9K star!AI一键生成高清短视频,这个开源神器让内容创作起飞!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "MoneyPrinterTurbo 是基于AI大模型的全自动短视频生成工具,只需 ...
- 鸿蒙NEXT(四):后台任务的智能调度策略 — 延迟任务管理解析
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...