chatgpt api使用技巧

2023-05-06
1 min read

LLMs类型

base LLM
  • 基于大规模训练数据,预测下一个词
  • 如果是提问语句,在网络上下一个词/下一个语句可能是相似的提问语句(并不能回答提问者的问题)
instruction tuned LLM
  • 使用大规模训练数据进行训练,在有提示数据的数据集上进行微调
  • 使用RLHF(reinforcement learning with human feedback)
  • 可以很好的回答提问语句,并且回答导向可以是无害,诚实,有帮助的

principles(prompt使用原则)

原则1:write clear and specific instructions(clear不是short)
  • 技巧1:使用分隔符分开单独的内容
可以使用的分隔符有:
三个引号:"""
三个反引号:```
三个短横线:---
尖括号:<>
xml标签:<tag></tag>
这样做更清晰且可以避免prompt注入,比如命令词和内容混淆。
  • 技巧2:要求结构化的输出,比如:HTML,JSON,markdown
比如下面的例子:
生成三本畅销小说包含作者和题材,使用json格式输出,json包含的key有:编号,书名,作者,题材
  • 技巧3:明确要求模型去判断某个条件是否符合/假设是否成立
比如要求模型对三引号中的每一段单独做判断,如果包含某个条件就重写这个段落,如果该条件不满足就跳过该段落。
对列表/数组中的元素或其他可迭代的内容都可以如此操作。
  • 技巧4:few-shot prompt(少样本提示)
这里主要是需要对接下来的任务给出示例。
比如给出一段两人对话,要求模型模仿其中一个人的语气。
或者给出分类标准的示例,要求模型对剩下的进行分类。
原则2:give the model time to “think”

如果一个任务太复杂,提示词太短太少,模型就可能很快得出一个错误结论。那么应该重构问题,分解解决问题的步骤。

  • 技巧1:写下模型要完成这个任务的步骤
比如有一段话,要用json格式输出其中重要人物的法语名字,可以分解成多个步骤:
1. 将这段话摘要成一句话
2. 将摘要翻译成法语
3. 把法语总摘要中的人名提取出来
4. 讲人名输出成json格式,json的key为:法语名字,法语摘要
  • 技巧2:在得到结论前,指示模型输出自己的结果
比如要模型判断某一道题的某个学生的计算结果是否正确时,模型可能只判断最后一行是否正确,这样可能会得出错误结论。
要修复的话,可以要求模型先根据题目给出自己的解题过程和计算结果(明确要求模型在未给出自己的计算结果之前不要与学生的计算结果比较),然后再与学生的结果进行比较,最后得出学生的计算结果是否正确的结论。

模型的局限性

  • 幻觉(hallucination):输出一些看起来合理,实际不真实的内容
减少幻觉的方法:
可以要求模型先寻找相关信息,然后要求模型基于相关信息来回答问题。

Iterative prompt development

根据模型的上一次输出来调整本次prompt。通过不断迭代prompt,最终得到想要的输出结果。

Capabilities: Summarizing,Inferring,Transforming,Expanding

Summarizing
  • 将商品的评论,文章,新闻报道提炼出摘要(提炼出的摘要可以有侧重,比如要求将评论提炼出给销售部门/物流部门的摘要)
  • 获取摘要时,有时使用“提取(extract)”关键词比“总结(summarize)”关键词效果更好
Inferring
  • 可以用鱼提取一段文字的语意(sentiment)是积极还是消极的
  • 可以用于推断某篇文章是否属于某个主题
  • 可以一次提取多个信息或关键词
比如:从评论中识别以下内容
- 语意(积极或消极)
- 评论者是否愤怒(是或否)
- 评论者是否购买
- 商品的制造商
Transforming
  • 用于语言翻译(比如英语翻译成中文)
  • 用于格式转换(比如HTML转换成JSON/markdown格式)
  • 用于语法校验(比如写非native语言文本的时候)
  • 用于转换语气(将文本转换成正式/非正式邮件内容)
Expanding
  • 给出提示词或限定类别进行头像风暴(brainstorm)(比如:推荐值得看的十部喜剧影片)
  • 根据用户评论摘要和语意自动生成回复文本(如果是积极的就感谢用户的评论,如果是消极的就道歉并建议用户联系客服部门)
  • temperature,控制模型回复的自由度。如果temperature=0则回答最为稳定(可预测),相同prompt能得到相同的回答。temperature越大,则回答的自由度就越大,模型有一定随机概率选中评分不那么高的答案。temperature=0.7答案就很发散(有创造性)了。
Chatbot
  • role[user,assistant,system]
user:用户输入的信息
assistant:模型生成的信息(chat model)
system:全局信息(set behavior of assistant)
  • 要关联上下文信息的话,需要把历史对话一起输入