要用好现有大模型的能力严重依赖高质量 prompt , 然而编写高质量 prompt 在现阶段还是个手艺活,太依赖个人经验。
虽然也有许多个人自发分享的 prompt 方法、框架,以及吴恩达老师的 prompt 教程,但是现有 Prompt 创建方法还是有各种各样的缺点:
这也是为什么大家爱收集,分享一些久经考验的 prompt 的原因之一。
随着 GPT-4 模型出来,对 prompt 的依赖有所降低,同时其更强大的基础能力为编写更强大的 prompt 提供了良好的基础,优质的 prompt 能力越来越强大,也越来越复杂。
prompt 编写越来越像 AI 时代的编程语言。
那么有没有可能像学编程一样,掌握一些基础规则和概念,掌握一些编程模式(类似面向对象的编程),即可高效的编写出表现良好稳定的 prompt——即 prompt 编程?
经过初步探索和实验,我们设计了 LangGPT ,希望在 prompt 的编程法上迈出一小步。
使用 LangGPT 为大规模生产高质量 prompt 提供了可能,它有下面的优点:
LangGPT 的两个关键语法
我们发现 ChatGPT 可以识别各种良好标记的层级结构内容。大模型可以识别文章的标题,段落名,段落正文等层级结构,如果我们告诉他标题,模型知道我们指的是标题以及标题下的正文内容。
这意味着我们将 prompt 的内容用结构化方式呈现,并设置标题即可方便的引用,修改,设置 prompt 内容。可以直接使用段落标题来指代大段内容,也可以告诉 ChatGPT 修改调整指定内容。这类似于编程中的变量,因此我们可以将这种标题当做变量使用。
Markdown 的语法层级结构很好,适合编写 prompt ,因此 LangGPT 的变量基于 markdown 语法。实际上除 markdown 外各种能实现标记作用,如 json,yaml, 甚至好好排版好格式 都可以。
变量为 Prompt 的编写带来了很大的灵活性。使用变量可以方便的引用角色内容,设置和更改角色属性。这是一般的 prompt 方法实现起来不方便的。
ChatGPT 十分擅长角色扮演,大部分优质 prompt 开头往往就是 “我希望你作为 xxx”,“我希望你扮演 xxx” 的句式定义一个角色,只要提供角色说明,角色行为,技能等描述,就能做出很符合角色的行为。
如果你熟悉编程语言里的 “对象”,就知道其实 prompt 的“角色声明”和类声明很像。因此 可以将 prompt 抽象为一个角色 ( Role ),包含名字,描述,技能,工作方法等描述,然后就得到了 LangGPT 的 Role 模板。
使用 Role 模板,只需要按照模板填写相应内容即可。
除了变量和模板外,LangGPT 还提供了命令,记忆器,条件句等语法设置方法。
值得一提的是,我们基于 LangGPT 设计了 LangGPT 助手来帮助大家使用 LangGPT, 它会帮助你设计很好的咒语
LangGPT 还在探索开发阶段,有问题欢迎反馈,更欢迎更多的人参与进来! 欢迎关注+star ,欢迎共同参与!
Github 项目地址: https://github.com/yzfly/LangGPT
1
prenwang 2023-05-13 13:04:35 +08:00 2
现在都是基于向量数据库了, 以及加入 agent 来调度的思路,只做 prompt 提升程度有限。
|
3
etherealai OP @prenwang 所谓 Agent 本质也是用 prompt 调用大模型能力。这个项目是针对 prompt 的优化,与调度 agent 的思路并不冲突。
|
4
prenwang 2023-05-14 01:30:16 +08:00
@Bao3C
@etherealai 说的没错, 用在 agent 机制里, 就起到非常关键的作用了,agent 的调度环境会涉及到很多次自主 LLM 的调用, 而这些调用通常需要设计精致的 prompt , 来起到承上启下的作用,prompt 就是 AI 世界的 python , 通过粘合发挥最大价值 比如, 阅读 langchain 的源码, 可以发现其设计的 prompt 的思路的妙处 |
5
etherealai OP @prenwang 是的,所以 prompt 设计比较重要。还有就是随着模型可接受的输入长度越来越长,模型能力越来越强,相信 prompt 的重要性也会越来越凸显
|