​Prompt高级技巧:借助伪代码精准控制LLM输出结果和定义执行逻辑

智能科技扫地僧 2024-06-23 18:59:36

众所周知,当我们需要让大语言模型(LLM)执行任务时,需要输入 Prompt 来指导其执行,而 Prompt 是使用自然语言描述的。对于简单的任务,自然语言能够描述得很清楚,比如:“请翻译以下内容为简体中文”或“请生成以下内容的摘要”等。

然而,当我们遇到一些复杂的任务,比如要求模型生成特定的 JSON 格式,或者任务有多个分支,每个分支需要执行多个子任务,子任务之间还相互关联时,自然语言描述就显得力不从心了。

思考题

在继续阅读之前,这里有两道思考题可以先试试看:

1.有多个长句子,需要将每一个都拆分成不超过 80 个字符的短句子,然后输出成一个 JSON 格式,清晰地描述长句子和短句子之间的对应关系。例如:

[ { "long": "This is a long sentence that needs to be split into shorter sentences.", "short": [ "This is a long sentence", "that needs to be split", "into shorter sentences." ] }, { "long": "Another long sentence that should be split into shorter sentences.", "short": [ "Another long sentence", "that should be split", "into shorter sentences." ] }]

2.一段原始字幕文稿,只有对话信息,现在需要从中提取章节、发言人,然后按照章节和段落列出对话内容。如果是多个发言人,每段对话前需要标明发言人;如果是同一个发言人连续发言,则不需要。实际应用中可以使用整理视频文稿的 GPT。

Prompt 的本质

Prompt 的本质是一种对 LLM 的控制指令,用自然语言描述,让 LLM 理解我们的要求,然后按照要求将输入转化为我们期望的输出结果。常用的 few-shot 技巧通过举例子让 LLM 理解我们的要求,然后参考样例输出我们期望的结果。比如 CoT(思维链,Chain of Thought),通过人为地对任务进行分解并限定执行流程,让 LLM 按照指定的流程和步骤执行,从而得到更好的结果。

伪代码的应用

既然 Prompt 的本质是一种对 LLM 的控制指令,我们可以不局限于传统的自然语言描述方式,还可以借助伪代码来精准地控制 LLM 的输出结果和定义其执行逻辑。

伪代码是一种用于描述算法的形式化描述方法,介于自然语言和编程语言之间,用于描述算法的步骤和流程。LLM 对伪代码的理解能力相当强,因为在训练时已经训练过大量的优质代码,可以轻易理解伪代码的含义。

如何写伪代码 Prompt

伪代码对于程序员来说非常熟悉,对于非程序员,只需要记住一些基本规则,就可以写出简单的伪代码:

变量:用来存储数据,比如用一些特定符号表示输入或中间结果。类型:用来定义数据的类型,比如字符串、数字、数组等。函数:用来定义某个子任务的执行逻辑。控制流:用来控制程序的执行流程,比如循环、条件判断等。

例如:

Array<{sentence: string;segments: string[]}>

实例应用用伪代码整理字幕文稿

整理字幕文稿这个任务相对复杂,可以将其分解成几个子任务,并逐步执行:

提取主题提取章节提取发言人查找段落和发言人格式化输出

伪代码示例

function extract_subject(transcript) { // 在转录中找到主题并返回}function extract_chapters(transcript) { // 找到剧本中的章节并返回}function extract_speakers(transcript) { // 在文本中找到发言者并返回}function find_paragraphs_and_speakers_in_chapter(chapter) { // 找到章节中的段落和发言者并返回}function format_transcript(transcript) { subject = extract_subject(transcript); console.log("Subject:", subject); speakers = extract_speakers(transcript); console.log("Speakers:", speakers); chapters = extract_chapters(transcript); console.log("Chapters:", chapters);}

借助伪代码让ChatGPT一次画多张图片

通过伪代码可以让 ChatGPT 一次生成多张图片:

javascript复制代码images_prompts = [ { style: "可爱", prompt: "画一只可爱的狗", aspectRatio: "宽屏" }, { style: "现实主义", prompt: "画一只逼真的狗", aspectRatio: "正方形" }]images_prompts.forEach((image_prompt) => { console.log("Generating image with style: " + image_prompt.style + " and prompt: " + image_prompt.prompt + " and aspect ratio: " + image_prompt.aspectRatio); image_generation(image_prompt.style, image_prompt.prompt, image_prompt.aspectRatio);});

通过上述例子,可以看到借助伪代码,我们可以更精准地控制 LLM 的输出结果和定义其执行逻辑,不仅局限于自然语言描述方式。当遇到复杂任务或多个子任务时,伪代码描述 Prompt 更加清晰和准确

文章的最后,如果还找不到ChatGPT原生使用站点的,关注公众号;我往期文章有提供免费直连的地址 或 直接点击阅读原文即可跳转。

参考文献:https://baoyu.io/blog/prompt-engineering/advanced-prompting-using-pseudocode-to-control-llm-output

0 阅读:0

智能科技扫地僧

简介:感谢大家的关注