cssmagic / blog

CSS魔法 - 博客
http://blog.cssmagic.net/
2.8k stars 274 forks source link

LLM 应用开发技巧 (二):如何打磨系统提示词? #135

Open cssmagic opened 3 weeks ago

cssmagic commented 3 weeks ago

昨天有群友问,如何自动化地通过 LLM API 帮自己批量处理文稿?这个场景简直跟魔法哥新书 《AI 辅助编程入门》 第九章的案例完全一致!

今天的文章同样节选自新书,而且也正好是这位群友需要的——在用脚本实现批量处理之前,需要先跑通提示词。让我们开始吧!

回顾第 9.4.2 小节

……GitHub Copilot 帮我们生成的函数代码如下:

def translate(text):
    completion = client.chat.completions.create(
        model = MODEL_NAME,
        messages = [
            {"role": "system", "content": "Translate the following text to Chinese."},
            {"role": "user", "content": text}
        ]
    )

很好,这和你在之前的章节中看到的 OpenAI SDK 调用代码基本一致。

你的目光落在了 messages 参数这里。你现在对这个参数的作用有了更深的理解——它其实就是一组对话记录,模型把这些对话记录作为上下文,然后产生一条新消息。

💡

……在 GPT 模型的设定中,对话记录可以包含三种不同的角色:系统(system)、用户(user)和助理(assistant)。模型自己就是助理,每当我们调用 “对话式文本补全” API 时,它的回复都会以 assistant 的身份返回——这个很容易理解。

然后来看 user,这个角色就是模型的用户。用户消息就相当于我们在使用 ChatGPT 时对它说的话。用户角色的消息也称作 “用户提示词”。

最后,system 这个角色最为重要,但也是普通用户最容易忽略的。它相当于智能助理的生产者,对模型进行 “出厂设定”。系统消息通常排在对话记录的最顶部,它设定了模型的性格、功能、行为等基础规则,模型按照这些基础规则来响应用户消息。系统角色的消息也称作 “系统提示词”。

通常来说,我们在调用 “对话式文本补全” API 时,发送给模型的消息中至少要包含一条用户消息,这样模型才能产生有意义的回复。……

你在使用类似 ChatGPT 这样的智能助手方面已经有了不少心得,也掌握了不少提示词设计技巧。……不过 GitHub Copilot 生成的 messages 结构还是给你带来了有价值的启发——用户消息仅用来提供待处理的输入数据(请留意 text 参数的传递位置);而模型如何处理这些数据,则完全由系统提示词来规定

这样的消息角色定义,清晰地划分了模型的输入和输出,让你对整个对话记录有了更清晰的认识。

你甚至还联想到,这些消息角色不正对应了程序语言里 “函数” 的各个概念嘛:系统提示词定义了模型的行为,就像是函数体内部的逻辑;用户消息相当于传递给函数的参数;而模型的回复则是函数的返回值!……

系统提示词的设计理念

我们在上面这一小节提到了一种 “类似函数” 的系统提示词设计理念——用户提示词仅用于向模型提供待处理的输入数据;而模型如何处理这些数据、按什么格式输出数据,则完全由系统提示词来规定;模型输出的内容自然就是处理之后的结果。

这种设计方法非常适合通过脚本调用大模型 API 的场景,它最大的优势在于 清晰地划分了模型的输入和输出,让模型的行为模块化,易于调试和优化

打磨系统提示词的方式

我们不仅可以通过脚本调用 API 来进行系统提示词的持续迭代,还可以通过图形界面来更高效地实施这个过程。

比如 OpenAI 官网提供的 GPTs 编辑界面( https://chatgpt.com/gpts/editor ),就是一个非常实用的系统提示词调试工具。这个界面分为左右两栏,左栏中的 “Instructions” 相当于系统提示词的编辑区,而右栏的对话界面则可以实时地验证修改效果(如下图所示)。

9 8 gpts-edtor

如果你有 OpenAI API 访问权限的话,还可以尝试 OpenAI 官网提供的 “Playground” 界面( https://platform.openai.com/playground/chat )。这个界面不仅支持系统提示词的编辑,还支持多款模型的切换和多个底层参数的调节。

9 8 openai-playground

笔者开发的好几款 AI 工具的系统提示词都是在这些界面打磨完成的。如果你没有 OpenAI GPTs 和 API 的访问权限,或者你需要基于其他大模型打磨系统提示词,不妨阅读第十章即将呈现的案例——我们将在 GitHub Copilot 的协助下,自行开发一款网页版的智能对话机器人,兼具 LLM 系统提示词的调试功能。

小结

通过本篇文章,你已经掌握了 LLM 系统提示词的设计与优化要点。清晰划分消息角色、利用模块化设计,可以让模型行为更可控,更适合批量处理等复杂任务!

本系列文章均节选自魔法哥的新书《AI 辅助编程入门》,探讨 LLM 应用开发的实战经验,比如 如何选择模型配置 LLM API 参数探究 API 的返回数据 等等。各位新朋友请关注公众号,下次更新不迷路:

weixin-qrcode


cover-3d w1200

如果你希望 借助 AI 编程工具,快速掌握 LLM 应用开发技能,在 AI 时代抢占先机,请务必拿下魔法哥的这本新书!目前正遇上双十一,京东自营全网底价,正是入手的好时机。

promo 2

如果你想收藏一本魔法哥亲笔签名的纸质书,长按识别下图的小程序码,即可下单。选择 “豪华版” 还可以定制赠言哦

sign

祝阅读愉快!


📣 AI 魔法群开放啦!

扫码加群,领取魔法哥整理的常用 AI 工具包:

qun-qr


🔥 往期推荐

AI 应用开发指南:

ChatGPT 高级技巧:

AI 资讯与评述:


© Creative Commons BY-NC-ND 4.0   |   我要订阅   |   我要打赏