Skip to content

迭代

  • 对ChatGPT第一次回答的答案就采用的情况是很少的
  • 我们需要一个良好的迭代过程来持续改进我们的提示
  • 一个优秀的提示工程师不在于知道多少优秀的提示词,而是这个提示的方式方法,流程之类

基本的迭代过程:

迭代过程图

  1. 提示词清楚明确
  2. 分析结果为何不符合预期
  3. 改善提示词
  4. 重复上述过程

准备工作

python
! pip install --upgrade openai
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Collecting openai
  Downloading openai-0.27.6-py3-none-any.whl (71 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.9/71.9 kB 3.3 MB/s eta 0:00:00
[?25hRequirement already satisfied: requests>=2.20 in /usr/local/lib/python3.10/dist-packages (from openai) (2.27.1)
Collecting aiohttp
  Downloading aiohttp-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 22.4 MB/s eta 0:00:00
[?25hRequirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from openai) (4.65.0)
Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai) (2.0.12)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai) (3.4)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai) (2022.12.7)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.20->openai) (1.26.15)
Collecting async-timeout<5.0,>=4.0.0a3
  Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting aiosignal>=1.1.2
  Downloading aiosignal-1.3.1-py3-none-any.whl (7.6 kB)
Collecting yarl<2.0,>=1.0
  Downloading yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (268 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 268.8/268.8 kB 24.1 MB/s eta 0:00:00
[?25hCollecting multidict<7.0,>=4.5
  Downloading multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (114 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 114.5/114.5 kB 12.5 MB/s eta 0:00:00
[?25hCollecting frozenlist>=1.1.1
  Downloading frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (149 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 149.6/149.6 kB 15.4 MB/s eta 0:00:00
[?25hRequirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->openai) (23.1.0)
Installing collected packages: multidict, frozenlist, async-timeout, yarl, aiosignal, aiohttp, openai
Successfully installed aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 frozenlist-1.3.3 multidict-6.0.4 openai-0.27.6 yarl-1.9.2
python
import os
os.environ['OPENAI_API_KEY'] = '<your openai api key>'
python
import openai

def get_completion(prompt, model="gpt-3.5-turbo"):
  messages = [{"role": "user", "content": prompt}]
  response = openai.ChatCompletion.create(
      model=model,
      messages=messages,
      temperature=0
  )
  return response.choices[0].message["content"]

尝试生成一个个人博客主页

python
from IPython.display import display, HTML
python
prompt = f"""
请生成一个简洁、现代化的个人博客主页,其中包含如下内容:
<博客标题>: 'justin3go的个人博客'
<博客站长个人介绍>: '坚持深耕技术领域的T型前端程序员'
<博客内容简介第一部分>:'博客--和大家平常见到的常规博客一样,可能偶尔一个小时或半天的时间去研究并输出的一小块知识,相对来说更多带有自己的思考和理解...'
<博客内容简介第二部分>:'笔记--更多则是自己平常通过视频教程、文档等学习做的笔记了,相对博客来说分类更加明确,整体更加系统,但更多是初次接触某个领域所做的笔记...'
<博客图片使用的图片链接>:'https://oss.justin3go.com/justin3goAvatar.png'
"""

res = get_completion(prompt)
display(HTML(res))
python
prompt = f"""
请生成一个简洁、现代化的个人博客主页,其中包含如下内容:
<博客标题>: 'justin3go的个人博客'
<博客站长个人介绍>: '坚持深耕技术领域的T型前端程序员'
<博客内容简介第一部分>:'博客--和大家平常见到的常规博客一样,可能偶尔一个小时或半天的时间去研究并输出的一小块知识,相对来说更多带有自己的思考和理解...'
<博客内容简介第二部分>:'笔记--更多则是自己平常通过视频教程、文档等学习做的笔记了,相对博客来说分类更加明确,整体更加系统,但更多是初次接触某个领域所做的笔记...'
<博客图片使用的图片链接>:'https://oss.justin3go.com/justin3goAvatar.png'

其中博客内容简介的两部分分居两栏
"""

res = get_completion(prompt)
display(HTML(res))
python
prompt = f"""
请生成一个简洁、现代化的个人博客主页,其中包含如下内容:
<博客标题>: 'justin3go的个人博客'
<博客站长个人介绍>: '坚持深耕技术领域的T型前端程序员'
<博客内容简介第一部分>:'博客--和大家平常见到的常规博客一样,可能偶尔一个小时或半天的时间去研究并输出的一小块知识,相对来说更多带有自己的思考和理解...'
<博客内容简介第二部分>:'笔记--更多则是自己平常通过视频教程、文档等学习做的笔记了,相对博客来说分类更加明确,整体更加系统,但更多是初次接触某个领域所做的笔记...'
<博客图片使用的图片链接>:'https://oss.justin3go.com/justin3goAvatar.png'

上述的<博客内容简介第一部分>和<博客内容简介第二部分>分居两栏
"""

res = get_completion(prompt)
display(HTML(res))
python
prompt = f"""
请生成一个简洁、现代化的个人博客主页,其中包含如下内容:
<博客标题>: 'justin3go的个人博客'
<博客站长个人介绍>: '坚持深耕技术领域的T型前端程序员'
<博客内容简介第一部分>:'博客--和大家平常见到的常规博客一样,可能偶尔一个小时或半天的时间去研究并输出的一小块知识,相对来说更多带有自己的思考和理解...'
<博客内容简介第二部分>:'笔记--更多则是自己平常通过视频教程、文档等学习做的笔记了,相对博客来说分类更加明确,整体更加系统,但更多是初次接触某个领域所做的笔记...'
<博客图片使用的图片链接>:'https://oss.justin3go.com/justin3goAvatar.png'

上述的<博客内容简介第一部分>和<博客内容简介第二部分>分居两栏;<博客图片使用的图片链接>的图片不要超过页面大小的20%
"""

res = get_completion(prompt)
display(HTML(res))
python
prompt = f"""
请生成一个简洁、现代化的个人博客主页,其中包含如下内容:
<博客标题>: 'justin3go的个人博客'
<博客站长个人介绍>: '坚持深耕技术领域的T型前端程序员'
<博客内容简介第一部分>:'博客--和大家平常见到的常规博客一样,可能偶尔一个小时或半天的时间去研究并输出的一小块知识,相对来说更多带有自己的思考和理解...'
<博客内容简介第二部分>:'笔记--更多则是自己平常通过视频教程、文档等学习做的笔记了,相对博客来说分类更加明确,整体更加系统,但更多是初次接触某个领域所做的笔记...'
<博客图片使用的图片链接>:'https://oss.justin3go.com/justin3goAvatar.png'

上述的<博客内容简介第一部分>和<博客内容简介第二部分>分居两栏,并处于图片的下方;
<博客图片使用的图片链接>的图片不要超过页面大小的20%

"""

res = get_completion(prompt)
display(HTML(res))
python
prompt = f"""
请生成一个简洁、现代化的个人博客主页,可以参考互联网上流行的大多数博客主页布局,其中包含如下内容:
<博客标题>: 'justin3go的个人博客'
<博客站长个人介绍>: '坚持深耕技术领域的T型前端程序员'
<博客内容简介第一部分>:'博客--和大家平常见到的常规博客一样,可能偶尔一个小时或半天的时间去研究并输出的一小块知识,相对来说更多带有自己的思考和理解...'
<博客内容简介第二部分>:'笔记--更多则是自己平常通过视频教程、文档等学习做的笔记了,相对博客来说分类更加明确,整体更加系统,但更多是初次接触某个领域所做的笔记...'
<博客图片使用的图片链接>:'https://oss.justin3go.com/justin3goAvatar.png'
------------------------------------------------------------------------------
上述的<博客内容简介第一部分>和<博客内容简介第二部分>为灰色、带圆角的背景块,这两部分内容排在图片后面、下方;
<博客图片使用的图片链接>的图片不要超过页面大小的20%

"""

res = get_completion(prompt)
display(HTML(res))
python
prompt = f"""
请生成一个简洁、现代化的个人博客主页,可以参考互联网上流行的大多数博客主页布局,其中包含如下内容:
<博客标题>: 'justin3go的个人博客'
<博客站长个人介绍>: '坚持深耕技术领域的T型前端程序员'
<博客内容简介第一部分>:'博客--和大家平常见到的常规博客一样,可能偶尔一个小时或半天的时间去研究并输出的一小块知识,相对来说更多带有自己的思考和理解...'
<博客内容简介第二部分>:'笔记--更多则是自己平常通过视频教程、文档等学习做的笔记了,相对博客来说分类更加明确,整体更加系统,但更多是初次接触某个领域所做的笔记...'
<博客图片使用的图片链接>:'https://oss.justin3go.com/justin3goAvatar.png'
------------------------------------------------------------------------------
上述的<博客内容简介第一部分>和<博客内容简介第二部分>分别为灰色、带圆角的背景块,这两部分内容排在图片后面、下方;
<博客图片使用的图片链接>的图片不要超过页面大小的20%

"""

res = get_completion(prompt)
display(HTML(res))
python
prompt = f"""
请生成一个简洁、现代化的个人博客主页,可以参考互联网上流行的大多数博客主页布局,生成一个可运行的HTML代码,其中包含如下内容:
<博客标题>: 'justin3go的个人博客'
<博客站长个人介绍>: '坚持深耕技术领域的T型前端程序员'
<博客内容简介第一部分>:'博客--和大家平常见到的常规博客一样,可能偶尔一个小时或半天的时间去研究并输出的一小块知识,相对来说更多带有自己的思考和理解...'
<博客内容简介第二部分>:'笔记--更多则是自己平常通过视频教程、文档等学习做的笔记了,相对博客来说分类更加明确,整体更加系统,但更多是初次接触某个领域所做的笔记...'
<博客图片使用的图片链接>:'https://oss.justin3go.com/justin3goAvatar.png'
------------------------------------------------------------------------------
下方()里面的内容仅供参考,你可以根据自己的经验谨慎地突破下方描述的限制,但一切的前提是为了简洁、好看、现代化:

(上述的<博客内容简介第一部分>和<博客内容简介第二部分>分别为灰色、带圆角的背景块,这两部分内容排在图片后面、下方;
<博客图片使用的图片链接>的图片不要超过页面大小的20%)

"""

res = get_completion(prompt)
display(HTML(res))
python