ChatGPT 的出现之所以令人震惊,主要是因为大模型能够根据人类的语言(汉语、英语、日语等)生成新内容(例如文本、图像、音频、代码等)。
用户可以像聊天一样跟大模型进行交互,而无需任何技术专业知识或培训。并且用户可以在多轮对话中迭代地'与人工智能聊天',在这个过程中完善他们的问题,直到达成目标。
输入给大模型的语言或者指令,就被叫做提示词。'提示词'现在已经成为生成式人工智能的主要的编程界面,人人都能编程的时代已经到来。
什么是提示工程?
提示工程定义为就是:为了达到用户目标,让大模型提供高质量的结果,设计和优化提示词的过程,通常分为两个步骤:
- 设计指定模型和目标的初始提示
- 通过迭代的方式提炼提示语以提高响应质量
这必然是一个反复尝试的过程,需要用户的直觉和努力才能获得最佳结果。那么为什么它很重要呢?要回答这个问题,我们首先需要了解三个概念:
- Tokenization = 大模型如何'看到'提示词
- Base LLMs = 基础模型如何'处理'提示
- Instruction-Tuned LLM = 模型现在如何查看'任务'
概念 1:Tokenization(分词)
分词是大模型处理的第一步,也就是大模型如何看到提示词。大模型会把提示词按照词语或者字进行切开,这种切开之后的词就叫分词。不同的大模型切分的方式都会有区别,对于不同语言的切分也会有区别。
对于大模型是根据分词(而不是原始文本)进行训练的,因此提示词的分词方式对最终的结果质量也会有直接的影响。
这个其实很好理解,像现在的标点符号其实就是一种分词方法。在古代是没有标点符号的,所以就会产生很多歧义,举个简单的例子,'南京市 / 长江 / 大桥',和'南京市长 / 江大桥',就是两个完全不同的意思。
要直观地了解标记化的工作原理,可以使用 OpenAI Tokenizer 等工具。不过 Tokenizer 工具需要翻墙使用。所以只能通过 Python 调用 OpenAI 的 tokenizers 包测算一句话的 token 数,能看到 OpenAI 对于中文就是按照字进行切割,每个字就是一个 token。
对比另一款国内的切字工具'结巴',就会按照单词切分,同样一句话比 OpenAI 节省了一半 token。
from tokenizers import Tokenizer
encoding = tiktoken.get_encoding("cl100k_base")
num_tokens = len(encoding.encode("跟随 AI 模数师,探索 AI 生活,驱动数据智能"))
print("ChatGPT 4.0 token 数:", num_tokens)
import jieba
list_jieba = list(jieba.cut('跟随 AI 模数师,探索 AI 生活,驱动数据智能'))
print("结巴 token 数:", len(list_jieba))
print(list_jieba)
[图片:OpenAI 与结巴分词效果对比]
概念 2:基础模型
提示词被切分后,大模型是预测这段提示词之后会出现的分词。
由于大模型接受过大量文本数据集的训练,因此会根据词语出现的概率做出预测,比如用'苹'字组词,95% 的概率是苹果。大模型并不理解提示词语言的含义,他们只是根据概率进行预测。
但是这里提到的是基础模型,并不是我们通常直接使用的产品,基础模型可以智谱的体验中心试用,可以看到右边可以选择多轮对话最大的 token 数、温度等参数。
温度设置的越高会让大模型随机性越强,就像问一个人同一个问题,他每次可能会用不同的方式回答。温度越低则会让大模型输出的内容会更稳定,多次输出的内容更容易一致。


