本周工作思考
本周的大概用2-3天的时间熟悉Prompt和Langchain的开发模式,看了大量Prompt的指导建议,原则及示例,目前大部分上在ChatGPT上表现的良好,和柳祎也沟通了下,他的总的思路是基于我们的模型写Prompt,所以目前的做法是参照ChatGPT的输出。对于编写Prompt的建议,建议看吴恩达老师视频课(中文版),也可以看openAI提供的最佳实践建议,非常不建议为了日常使用ChatGPT去arXiv上看论文, 建议大家多看网络上的相关完整,然后加上自己的实践总结。我自己感受最深的是自己看到的各类指导挺多的,但是实际用起来,指导原则太多,反而不知道该怎么用了, 结果发现效果不是很好,有的需要试几次。根据别人的总结,结合我的使用,也总结了一个公式:Prompt = 角色 + 场景 + 问题(任务说明) + 解决方案(答案大概得分层,分类,角色,维度,层次等等) + 要求(结果说明,task result) + 输出(格式,结构化) + 示例?+ 可选项?
以上所有变量的原则是来自吴恩达老师的建议:清晰、具体,拿角色举例子,我一名老师,我一名语文老师,我是一名小学语文老师,我是一名小学一年级的小学语文老师,我一名来自北京的一所重点小学的一年级小学语文老师,随着对角色的限定词越来越明确,ChatGPT给你的可能就越接近你希望她给你的。
可选项根据要问的问题,如果是推理,分析,判断之类的问题,可以加上一些惯用词(ChatGPT本身也在不断学习,这类惯用词用的越多,她就越“懂”人类的期望),比如,请一步一步分析 ,请给我你的理由表示你希望看到过程的表达(很多人所说的CoT),这样结果准确的概率会大一些
有一个比较有效的策略是提供少量示例(Few-shot prompting),我试过几次,比较有效
对我来说,总的感觉是所谓的prompt engineering有点像是中药治病,方子上的中药种类很多,而且也有效果,但是得用对, 但是我又很难搞清楚这是为什么。
我考虑的另外一个问题是如何更有效的量化的验证ChatGPT给我们的是较好的。在实际的产品开发中,我们要提供给用户的是有和问题有较高匹配度,也要有较高置信度的回答,也就是安全的靠谱的回答,那这个问题我们在工程上如何解决呢,我觉得这个问题也是未来我们在大模型应用中要重点关注的一个话题。