26 min read

🌟ChatGPT指南:六个最佳提示词使用技巧

大家好,我是星辰编程理财。很高兴能够与大家分享关于ChatGPT的最佳实践。作为一个热爱编程的技术爱好者,我曾经历了在学习和使用ChatGPT时遇到的一些挑战和困惑。然而,通过不断的探索和实践,我逐渐领悟到一些宝贵的经验和技巧。在这篇文章中,我想和大家聊聊指令的重要性。我还记得刚开始使用ChatGPT时,我提问的问题并不是很清晰,结果得到的回答也不尽如人意,模型无法理解我的意图。通过不断的尝试和总结,我得到了一些经验。结合OpenAI GPT官方使用最佳实践指南,我将与大家分享一些关于指令要清晰、提供参考文本、将复杂任务拆分为简单子任务、给GPT时间“思考”、使用外部工具以及系统地测试变化的最佳实践。无论你是新手开发者还是经验丰富的AI爱好者,我相信这些实用的技巧和建议将对你的ChatGPT编程之旅有所帮助。

第一章:指令要清晰

作为一个开发者,在使用ChatGPT时,指令的清晰度对于获得准确和有用的回答至关重要。在这一章中,我将分享一些最佳实践,给出明确的指令,让ChatGPT能够更好地理解你的需求。

1.1 提供更多细节的问题描述

当向ChatGPT提问时,提供更多细节的问题描述可以帮助模型更好地理解你的问题,并给出相关的答案。让我举个例子:

用户: 你好,我最近在前端开发中遇到一个问题,我想知道如何在JavaScript中创建一个动态生成的表格,每行有两列,一列显示数字,另一列显示对应的文字。

AI: 当然!在JavaScript中,你可以使用DOM操作动态创建表格。以下是一个简单的示例代码:

// 创建表格
var table = document.createElement('table');

// 动态生成表格内容
for (var i = 0; i < data.length; i++) {
  var row = document.createElement('tr');
  var cell1 = document.createElement('td');
  var cell2 = document.createElement('td');

  cell1.innerHTML = data[i].number;
  cell2.innerHTML = data[i].text;

  row.appendChild(cell1);
  row.appendChild(cell2);
  table.appendChild(row);
}

// 将表格添加到页面中的某个元素
document.getElementById('tableContainer').appendChild(table);

这样,你就可以动态生成带有数字和文字的表格了。

1.2 让模型角色扮演,充当 ChatGPT 提示生成器

有时候,我们可能想要用ChatGPT作为一个提示生成器,向它提供一些提示词,然后让它生成一些相关的问题。这可以帮助我们更好地了解ChatGPT的思考过程并得到一些新的创意。

用户: 给我一些关于前端开发的问题的提示词,让我来挑战一下自己!

AI: 当然!以下是一些关于前端开发的问题提示词:

  • 响应式设计
  • 跨浏览器兼容性
  • 前端框架比较
  • 性能优化技巧
  • 前端安全性

试着使用这些提示词来生成一些有趣的问题吧!

1.3 使用分隔符来区分不同部分

当你的问题或指令需要包含多个部分时,使用分隔符可以帮助模型更好地理解你的意图,并将其分成合适的部分进行处理。比如:

用户: 我需要一个完整的前端开发教程,包括HTML、CSS和JavaScript。请使用三个井号(###)作为分隔符划分各个部分。

AI: 好的,下面是一个完整的前端开发教程:

HTML

HTML是一种标记语言,用于构建网页的结构。以下是一个简单的HTML示例:

<!DOCTYPE html>
<html>
<head>
  <title>My First Web Page</title>
</head>
<body>
  <h1>Hello, World!</h1>
  <p>This is a paragraph.</p>
</body>
</html>

CSS

CSS用于为HTML元素添加样式和布局。以下是一个简单的CSS示例:

h1 {
  color: blue;
}

p {
  font-size: 14px;
}

JavaScript

JavaScript是一种用于为网页添加交互功能的编程语言。以下是一个简单的JavaScript示例:

console.log("Hello, World!");

function sayHello(name) {
  console.log("Hello, " + name + "!");
}

sayHello("John");

希望这个教程能对你有所帮助!

1.4 指定任务完成所需的步骤

在某些情况下,你可能希望ChatGPT按照一定的步骤为你完成一个任务。这时,你可以明确指定任务所需的步骤,以帮助模型更好地理解并按照你的要求生成回答。

用户: 我想知道如何使用React创建一个简单的待办事项列表,包括添加、删除和完成任务的功能。请按照以下步骤完成:

  1. 创建一个React组件来显示待办事项列表。
  2. 实现添加任务的功能。
  3. 实现删除任务的功能。
  4. 实现完成任务的功能。

AI: 好的,按照你的要求,我将为你完成这个任务。以下是每个步骤的代码示例:

  1. 创建一个React组件来显示待办事项列表:
import React from 'react';

class TodoList extends React.Component {
  render() {
    return (
      <ul>
        {this.props.todos.map(todo => (
          <li key={todo.id}>{todo.text}</li>
        ))}
      </ul>
    );
  }
}

export default TodoList;
  1. 实现添加任务的功能:
import React from 'react';

class TodoList extends React.Component {
  state = {
    todos: [],
    newTodo: ''
  };

  handleInputChange = e => {
    this.setState({ newTodo: e.target.value });
  };

  handleAddTodo = () => {
    const { todos, newTodo } = this.state;
    const todo = { id: todos.length + 1, text: newTodo };
    this.setState({ todos: [...todos, todo], newTodo: '' });
  };

  render() {
    return (
      <div>
        <input
          type="text"
          value={this.state.newTodo}
          onChange={this.handleInputChange}
        />
        <button onClick={this.handleAddTodo}>Add</button>
        <ul>
          {this.state.todos.map(todo => (
            <li key={todo.id}>{todo.text}</li>
          ))}
        </ul>
      </div>
    );
  }
}

export default TodoList;
  1. 实现删除任务的功能:
import React from 'react';

class TodoList extends React.Component {
  state = {
    todos: []
  };

  handleDeleteTodo = id => {
    this.setState(prevState => ({
      todos: prevState.todos.filter(todo => todo.id !== id)
    }));
  };

  render() {
    return (
      <ul>
        {this.state.todos.map(todo => (
          <li key={todo.id}>
            {todo.text}
            <button onClick={() => this.handleDeleteTodo(todo.id)}>
              Delete
            </button>
          </li>
        ))}
      </ul>
    );
  }
}

export default TodoList;
  1. 实现完成任务的功能:
import React from 'react';

class TodoList extends React.Component {
  state = {
    todos: []
  };

  handleCompleteTodo = id => {
    this.setState(prevState => ({
      todos: prevState.todos.map(todo => {
        if (todo.id === id) {
          return { ...todo, completed: true };
        }
        return todo;
      })
    }));
  };

  render() {
    return (
      <ul>
        {this.state.todos.map(todo => (
          <li
            key={todo.id}
            style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}
          >
            {todo.text}
            {!todo.completed && (
              <button onClick={() => this.handleCompleteTodo(todo.id)}>
                Complete
              </button>
            )}
          </li>
        ))}
      </ul>
    );
  }
}

export default TodoList;

希望这样的步骤指导能对你有所帮助!

1.5 提供示例来引导模型生成回答

有时,提供示例来引导模型生成回答是非常有效的。模型可以通过示例学习到一些模式,并生成更符合你期望的回答。

用户:
你是一个前端开发,我会在三引号内给你提供示例,你必须模仿示例的风格写出3个回答。提示词:介绍一下vue3。 提示词:介绍一下React。 回答:React,就像是一门前端开发的魔法,它以其强大的组件化能力和高效的虚拟DOM操作征服了无数开发者的心。每一个React组件都是一个独特的存在,拥有自己的状态和属性,就像音符在乐谱上舞动。通过React,我们可以构建出华丽的用户界面,实现动态的数据渲染和交互效果。就像一场魔法表演,它让我们的网页焕发出生机和魅力。

AI:
Vue 3,简直就是前端开发的一颗明星。它是一个轻量级、高效的JavaScript框架,专注于构建用户界面。Vue 3的核心特点就是响应式数据绑定和组件化开发。通过使用Vue 3,我们可以轻松地将数据和视图进行绑定,实现数据的自动更新和视图的动态渲染。而且,Vue 3还引入了Composition API,让我们能够更灵活地组织和复用代码。总的来说,Vue 3是一个功能强大且易于学习的框架,它能够帮助我们构建出优雅、高效的用户界面。

Vue 3,是一款非常受欢迎的前端框架。它的特点是简单易用、灵活性强、性能出色。Vue 3采用了虚拟DOM的方式进行渲染,可以快速地更新页面,并且能够根据数据变化自动更新视图。另外,Vue 3还支持组件化开发,可以将页面拆分成多个独立的组件,方便代码的维护和复用。除此之外,Vue 3还提供了丰富的工具和插件,可以帮助开发者更高效地开发应用。总的来说,Vue 3是一款非常强大的前端框架,可以帮助我们快速构建出漂亮且高性能的用户界面。

Vue 3是一款非常受欢迎的前端框架,它的设计理念是简单、灵活和高效。Vue 3采用了响应式数据绑定的方式,可以让数据和视图保持同步,使得页面的更新变得非常高效。此外,Vue 3还支持组件化开发,可以将页面拆分成多个独立的组件,方便代码的维护和复用。除此之外,Vue 3还提供了丰富的生态系统,包括路由、状态管理、构建工具等,可以帮助开发者更好地开发和维护应用。总的来说,Vue 3是一款非常优秀的前端框架,可以帮助我们构建出漂亮、高性能的用户界面。

1.6 设定回答的长度要求,如字数、段落数量、要点数量

有时候,你可能希望ChatGPT生成的回答具有一定的长度或包含特定数量的段落或要点。这时,你可以设定回答的长度要求,以帮助模型更好地满足你的需求。

用户: 作为一个前端开发,你怎么理解闭包?要求字数大于200

AI:
闭包是JavaScript中一个非常重要且常用的概念。它是由函数和其相关引用环境组合而成的一种特殊对象。在理解闭包之前,我们需要先了解一下JavaScript的作用域和变量提升。

JavaScript中存在全局作用域和局部作用域的概念。在函数内部定义的变量称为局部变量,只能在该函数内部访问。而在函数外部定义的变量称为全局变量,可以在任何地方访问。

当一个函数内部引用了外部的变量,并且该函数被外部的作用域引用或者返回时,就形成了闭包。闭包可以让函数访问外部作用域的变量,即使外部作用域已经执行完毕。

闭包的应用场景非常广泛。一方面,闭包可以用来创建私有变量,通过将变量定义在函数内部,外部无法直接访问,只能通过闭包提供的接口进行访问和修改。这种方式可以有效地隐藏变量,保护数据的安全性。另一方面,闭包还可以用来实现函数工厂,即通过闭包返回一个函数,每个返回的函数都可以访问自己的私有变量,实现了数据的封装和复用。

需要注意的是,闭包会带来内存的开销。由于闭包会保留对外部作用域的引用,因此外部作用域的变量无法被垃圾回收机制回收。如果闭包被滥用或者使用不当,可能导致内存泄漏的问题。

在实际开发中,理解闭包的概念和原理,能够更好地利用闭包的特性,编写出高效、安全的JavaScript代码。

用户: 请把上面回答的内容总结为三个要点。

AI:
闭包是由函数和其相关引用环境组合而成的一种特殊对象。 闭包可以让函数访问外部作用域的变量,即使外部作用域已经执行完毕。 闭包的应用场景包括创建私有变量和实现函数工厂,但需要注意内存开销和潜在的内存泄漏问题。

第二章:提供参考文本

这章我们将探讨如何使用参考文本来引导ChatGPT生成更准确和有用的回答。提供参考文本可以帮助模型理解问题的上下文,并提供相关的信息。

2.1 使用参考文本来引导模型回答问题

当你向ChatGPT提问时,你可以提供一些相关的参考文本,让模型在生成回答时参考这些文本,从而使回答更加准确和有针对性。

用户: 请解释一下什么是响应式设计。

AI: 响应式设计是一种网页设计的方法,它使网页能够根据用户的设备和屏幕尺寸进行自适应布局和显示。响应式设计可以通过使用CSS媒体查询和弹性布局来实现。以下是一个关于响应式设计的参考文本,帮助你更好地了解这个概念:

响应式设计旨在提供一致的用户体验,无论用户使用的是台式机、笔记本电脑、平板电脑还是手机。通过使用媒体查询,网页可以根据屏幕尺寸和设备功能应用不同的样式和布局,以适应不同的设备。这种方法可以提高网页的可用性和可访问性,并确保内容在各种设备上都能够清晰可见。

希望这个回答能够帮助你更好地理解响应式设计!

2.2 让 ChatGPT 引用参考文本来生成答案

除了让ChatGPT参考参考文本来回答问题之外,你还可以让模型直接引用参考文本的内容来生成回答。这样可以确保回答的准确性和一致性。

用户: 请问,人类智能与机器智能有何区别?参考《人工智能:一种现代方法》

AI:
根据斯图尔特·罗素(Stuart Russell)和彼得·诺维格(Peter Norvig)在《人工智能:一种现代方法》一书中的定义,他们指出:“人类智能是指人类所表现出的智能,而机器智能是指机器所表现出的智能。”简而言之,人类智能是由人类所拥有的认知和思维能力组成,而机器智能则是指计算机和机器所具备的类似人类智能的能力。

在这个定义中,人类智能是基于生物学和心理学的研究,包括人类的感知、推理、学习、创造力等方面的能力。而机器智能是通过计算机和机器系统模拟人类智能的能力,包括机器学习、自然语言处理、计算机视觉等领域的技术与算法。

总的来说,人类智能和机器智能之间的主要区别在于其来源和实现方式。人类智能是基于生物学和心理学的研究,而机器智能是通过计算机科学和人工智能技术来实现的。

第三章:将复杂任务拆分为简单子任务

这章中我们将学习如何将复杂的任务拆分为简单的子任务,以便更好地处理问题并生成准确和有用的回答。

3.1 对问题进行分类

当面对复杂的问题时,对问题进行分类是一个有效的策略。通过将问题分解为多个子问题,我们可以更好地处理每个子问题,并生成相应的回答。
我们可以先把这些任务按类型分类,然后给每一种类型的任务都制定一套相应的步骤或者指令。这样,当我们需要完成一个任务的时候,就可以直接根据任务的类型找到相应的步骤或者指令了。
使用这种方法的好处就是,每一次我们只需要关注当前的任务和相应的步骤或者指令,这样就可以降低出错的几率,而且也能节省成本。因为处理大任务需要的电脑运行费用,通常会比处理小任务的费用要高。

用户:
您将收到用户性能优化的查询。您需要将每个查询找到对应的主要类别和次要类别,然后以json格式输出:主要类别和次要类别。

主要类别:交互优化、网络优化
交互优化次要类别:
防抖节流
懒加载
css3动画
无线加载
骨架屏

网络优化次要类别:
https
gzip
cdn
http缓存

用户查询:动画卡顿怎么办?

AI:
{ "用户查询": "动画卡顿怎么办?", "主要类别": "交互优化", "次要类别": "css3动画" }

3.2 处理长对话:总结或过滤信息

由于 GPT 有固定的上下文长度,用户和ChatGPT之间的对话,如果将整个对话内容都包含在上下文窗口中,是无法无限期地进行下去的。

ChatGPT 有点像一个记忆力有限的机器人。他只能记住一定长度的对话内容,所以用户和他的对话不能无限长。就像你和你的朋友聊天,如果你们聊得太久,他可能会忘记你们之前聊过什么。

但是我们有一些方法可以解决这个问题。一个办法就是把之前的对话内容进行概括。当对话的长度达到了一定的限度,这个机器人就会自动把一部分对话内容进行总结,然后把这个总结放在他的记忆里。就像你在写日记的时候,可能不会把每一天发生的所有事情都详细写下来,而是只写下最重要的部分。

另外一种办法就是在整个对话过程中,让机器人在背后不断地把对话内容进行总结。这就像你在读一本书的时候,可能会时不时地在脑子里回顾一下之前的情节,这样就不会忘记故事的主线。

这些方法就能帮助我们解决因为机器人的记忆力有限导致的问题,让用户和机器人的对话能够更顺畅。

另一种解决方案是动态选择与当前查询最相关的对话的先前部分。请参阅策略“使用基于嵌入的搜索来实现高效的知识检索”。

对于这个长文本的实际处理方法,如果靠提示词来完成的话,是一件很麻烦的事情:为了输入到ChatGPT的对话框里,必须首先对内容进行分段。

3.3 分段总结长文本并递归构建完整摘要

ChatGPT 是个有点像有记忆力限制的机器人,他记住的东西长度有限。因此,如果让他一口气读完一本非常长的书然后再总结,他可能会记不住所有的内容。那怎么办呢?

我们可以用一种“分段总结,再汇总”的方法来解决这个问题。就好比,你在学习很长的一篇文章或者一本书的时候,你可能会先总结每一小节的内容,然后再把这些小节的总结放在一起,再做一次总结,这样就能得到整个文章或者书的总结了。

但是有的时候,前面的内容和后面的内容可能有关系,为了理解后面的内容,我们可能需要知道前面的总结。这种时候,我们可以在总结每一部分内容的时候,都带上之前的总结,这样就能更好地理解整个文章或书的内容。

其实,这种方法就像我们读书学习的时候一样,通过把大的任务分解成小的任务,一步一步地完成,最后再把所有的小步骤的结果放在一起,就能得到最终的结果了。OpenAI的科学家们已经用这种方法去研究过如何让ChatGPT总结一整本书,发现效果还不错呢!

处理长对话和长文的基本方法,基本是一样的:总结前一部分的时候,带上之前的内容。 不同点是:有的长文章节之间,关系较弱,可以用分段总结,再汇总的方法,不用每次总结都带上之前的总结。

第四章:给GPT时间“思考”

在这章中,我们将探讨如何给ChatGPT足够的时间来“思考”,以得出更准确和合理的答案。我们将涵盖引导GPT在得出结论前生成自己的答案、隐藏推理过程以及处理答案不完整的问题等内容。

4.1 引导 GPT 在得出结论前生成自己的答案

有时候,我们希望ChatGPT能够在得出最终答案之前,先生成一些自己的答案,然后再进行选择和调整。这样可以引导模型思考问题,并激发一些新的创意。

用户: 问题:1+1=3是否正确 答案:正确,因为在三维空间里1+1则是立体的,所以等于3。请判断答案是否正确。要求:判断之前先自己思考答案,然后再判断答案是否正确。

AI:
经过思考,我可以明确地告诉您,无论是在二维空间还是三维空间,1加1的结果都是2。数学中的加法运算是一种抽象的概念,与空间维度无关。在数学中,1代表一个单位,将一个单位与另一个单位相加,得到的结果是两个单位,即2。因此,答案是不正确的。
通过引导模型在得出结论前生成自己的答案,我们可以激发模型的思考过程,并获得更加丰富和多样的回答。

4.2 隐藏推理过程,只展示最终答案

在某些情况下,我们可能更关注最终答案,而不是模型的推理过程。通过隐藏推理过程,我们可以简化回答,并使其更加直接和易于理解。

用户: 如何用Python反转一个字符串。要求:只需要输出代码,不输出其它任何文字。

AI:

string = "Hello, World!"
reversed_string = string[::-1]
print(reversed_string)

通过隐藏推理过程,我们可以直接展示最终的代码和结果,使回答更加简洁和易于理解。

4.3 处理答案不完整的问题

有时,ChatGPT可能会生成一些不完整的回答,缺少一些重要的细节或信息。在这种情况下,我们可以通过补充细节或提供额外的信息来完善回答。

用户: JavaScript是世界上最好的语言吗?要求:只需要回答最终结论。

AI: 没有绝对的最好的编程语言,因为每种语言都有自己的优点和适用场景。不同的语言适用于不同的任务和需求。所以,JavaScript并不是世界上最好的语言,但它在Web开发中具有广泛的应用和强大的生态系统。

用户: 在前端开发中,JavaScript是世界上最好的语言吗?要求:只需要回答最终结论

AI: 在前端开发中,JavaScript是最主要的语言,并且具有广泛的应用和强大的生态系统。因此,可以说在前端开发中,JavaScript是世界上最好的语言之一。

通过补充细节和提供额外的信息,我们可以完善回答,使其更加全面和有用。

第五章:使用外部工具

在第五章中,我们将学习如何使用外部工具来增强ChatGPT的功能。具体包括使用嵌入(embedding)技术、进行计算操作以及让模型使用特定功能的外部工具。

5.1 使用嵌入(embedding)技术

嵌入(embedding)技术是一种将文本或其他类型的数据转换为向量表示的方法。通过将文本嵌入为向量,我们可以将其输入到模型中进行处理,从而获得更丰富的信息表示。

用户: 请告诉我如何使用嵌入技术来增强ChatGPT的文本处理能力。

AI: 使用嵌入技术可以将文本转换为向量表示,从而增强ChatGPT的文本处理能力。一种常见的嵌入技术是词嵌入(word embedding),它将单词映射为一个低维向量,捕捉了单词之间的语义和上下文关系。

例如,你可以使用预训练的词嵌入模型(如Word2Vec、GloVe或BERT)将输入的文本转换为向量表示,并将这些向量输入到ChatGPT中进行处理。这样,模型可以更好地理解文本的语义和上下文,并生成更准确和有用的回答。

5.2 进行计算操作

除了处理文本之外,ChatGPT还可以通过使用外部工具进行计算操作,从而扩展其功能。在长时间计算情况下,可以指示模型编写和运行代码,而不是进行自己的计算。

用户: 我想知道如何在Python中计算两个数的和。

AI: 你可以使用Python的基本算术运算符来计算两个数的和,例如:

num1 = 10
num2 = 20
sum = num1 + num2
print("The sum is:", sum)

这段代码会将变量num1num2相加,并将结果存储在变量sum中,然后打印输出结果。

通过使用外部工具进行计算操作,我们可以在回答中直接展示相应的代码示例,使回答更加全面和实用。

5.3 让模型使用特定功能的外部工具

另一种方法是让ChatGPT使用特定功能的外部工具来增加其能力。这些外部工具可以是专门用于某个领域的库、API或服务。

用户: 请告诉我如何使用ChatGPT生成一个随机密码。

AI: 要生成一个随机密码,我们可以让ChatGPT调用一个密码生成器的外部工具,例如使用Python的secrets模块:

import secrets
import string

def generate_random_password(length):
    characters = string.ascii_letters + string.digits + string.punctuation
    password = ''.join(secrets.choice(characters) for _ in range(length))
    return password

password = generate_random_password(10)
print("Random password:", password)

这段代码会生成一个由大小写字母、数字和标点符号组成的随机密码,长度为10个字符。

通过让模型使用特定功能的外部工具,我们可以扩展ChatGPT的功能范围,并使其能够执行更复杂的任务。

第六章:系统地测试变化

这章将学习介绍如何系统地测试ChatGPT的变化,以确保模型输出的准确性和质量。具体包括通过参考黄金标准答案评估模型输出,从而提供有针对性的反馈和改进。

6.1 通过参考黄金标准答案评估模型输出

为了评估ChatGPT的输出质量,我们可以使用参考黄金标准答案作为评估标准。通过将模型的输出与黄金标准答案进行比较,我们可以量化模型在不同问题上的准确性和一致性,并提供有针对性的反馈和改进。

用户: 我如何评估ChatGPT生成的回答是否准确?

AI: 为了评估ChatGPT生成的回答是否准确,你可以使用参考黄金标准答案进行比较。将模型生成的回答与标准答案进行对比,并计算它们之间的相似度或其他评估指标。

例如,你可以使用文本相似度度量(如BLEU、ROUGE等)或语义相似度模型(如BERT、GPT等)来比较模型输出和标准答案之间的相似程度。更具体的评估指标和方法取决于你的具体任务和需求。

通过参考黄金标准答案评估模型输出,我们可以获得关于模型性能和改进方向的有价值的反馈。这有助于提升模型的质量和准确性。