LtM提示流程

概述

面对复杂的需求,想要稳定的结果,可以使用LtM提示流程完成更稳定的函数编写:

  • 类比的场景的是,干一个事,需要多个步骤,多个参数才能干成。

简单任务:输入输出

使用大模型编写代码或者其他任务,需求简单的话,可以直接使用下面的输入输出来做举例就行。

get_email_input = "请帮我查下邮箱里最后一封邮件内容。"

get_email_out = "请帮我编写一个python函数,用于查看我的mailbox邮箱中最后一封邮件信息,函数要求如下:\
                 1.函数参数userId,userId是字符串参数,默认情况下取值为'me',表示查看我的邮件;\
                 2.函数返回结果是一个包含最后一封邮件信息的对象,返回结果本身必须是一个json格式对象;\
                 3.请将全部功能封装在一个函数内;\
                 4.请在函数编写过程中,在函数内部加入中文编写的详细的函数说明文档,用于说明函数功能、函数参数情况以及函数返回结果等信息;"

LtM提示法

而如果在Few-shot的提示下,第一阶段的指令翻译不是每一次都能给出令人满意的结果,首先我们想到的解决问题的办法就是提供一些更加强有力的提示方法:例如LtM提示法。
根据LtM多段提示的策略,外加结合当前指令翻译任务考虑,一种更有希望能够引导模型能够顺利完成指令翻译流程的提示方法是:

  • 先引导模型拆解当前需求中的“变量”作为后续函数的参数;
  • 然后再基于已经确定的变量,引导模型完成翻译工作。
    其实就整个指令翻译任务来说,最难的地方也就在于函数参数的理解过程,而一旦模型能够准确的翻译出外部函数需要哪些参数,其他部分的翻译任务自然迎刃而解。

创建需求分析提示词

user_content = "请查下我的邮箱里是否有来陆小凤的未读邮件,并解读最近一封未读邮件的内容"
system_content1 = "为了更好编写满足用户需求的python函数,我们需要先识别用户需求中的变量,以作为python函数的参数。需要注意的是,当前编写的函数中涉及到的邮件收发查阅等功能,都是通过Python来完成。"
input1 = "请帮我查下mailbox邮箱里最后一封邮件内容。"
pi1 = "当前需求中可以作为函数参数的是:1.查看谁的邮箱。"
input2 = "请帮我给西门吹雪发送一封邮件,请他明天早上9点半来我办公室开会,商量下半年技术开发计划。"
pi2 = "当前需求中可以作为函数参数的是:1.发送邮件的对象;2.发送邮件的主题;3.邮件具体内容"
input3 = "请查下我的邮箱里是否有来自陆小凤的未读邮件,并解读最近一封未读邮件的内容。"

messages_CD = [{"role": "system", "content": system_content1},
               {"role": "user", "name": "example1_user", "content": input1},
               {"role": "assistant", "name": "example1_assistant", "content": pi1},
               {"role": "user", "name": "example2_user", "content": input2},
               {"role": "assistant", "name": "example2_assistant", "content": pi2},
               {"role": "user", "name": "example_user", "content": input3}]

response = client.chat.completions.create(
    model="glm-4",
    messages=messages_CD)

pi3 = response.choices[0].message.content

创建函数说明提示词

with open('code/my_mail数据字典.md', 'r', encoding='utf-8') as f:
    md_content = f.read()

system_content2 = md_content

get_email_input = "请帮我查下邮箱里最后一封邮件内容。" + pi1

get_email_out = "请帮我编写一个python函数,用于查看我的mailbox邮箱中最后一封邮件信息,函数要求如下:\
                 1.函数参数userId,userId是字符串参数,默认情况下取值为'me',表示查看我的邮件;\
                 2.函数返回结果是一个包含最后一封邮件信息的对象,返回结果本身必须是一个json格式对象;\
                 3.请将全部功能封装在一个函数内;\
                 4.请在函数编写过程中,在函数内部加入中文编写的详细的函数说明文档,用于说明函数功能、函数参数情况以及函数返回结果等信息;"

send_email_input = "请帮我给西门吹雪发送一封mailbox邮件,请他明天早上9点半来我办公室开会,商量下半年技术开发计划。" + pi2

send_email_out = "请帮我编写一个python函数,用于给叶孤城发送邮件,请他明天早上9点半来我办公室开会,商量下半年技术开发计划,函数要求如下:\
                  1.函数参数form_userid、subject和snippet,三个参数都是字符串类型,其中to表示发送邮件对象,subject表示邮件主题,snippet表示邮件具体内容;\
                  2.函数返回结果是当前邮件发送状态,返回结果本身必须是一个json格式对象;\
                  3.请将全部功能封装在一个函数内;\
                  4.请在函数编写过程中,在函数内部加入中文编写的详细的函数说明文档,用于说明函数功能、函数参数情况以及函数返回结果等信息;"

user_content = input3 + pi3
messages_CM = [{"role": "system", "content": md_content},
               {"role": "system", "content": "结果里不需要给出示例代码"},

               {"role": "user", "name": "example1_user", "content": get_email_input},
               {"role": "assistant", "name": "example1_assistant", "content": get_email_out},
               {"role": "user", "name": "example2_user", "content": send_email_input},
               {"role": "assistant", "name": "example2_assistant", "content": send_email_out},
               {"role": "user", "name": "example_user", "content": user_content}]


response = client.chat.completions.create(
    model="glm-4",
    messages=messages_CM)

function_description = response.choices[0].message.content

创建函数

func1_description = get_email_out

with open('./code/get_latest_email.py'', encoding='utf-8') as f:
    func1_str = f.read()

system_content3 = "你是一个智能助手,善于基于用户的需求,通过编写函数解决问题,函数参数必须是字符串类型对象,函数返回结果必须是json表示的字符串对象。"


messages_stage2 = [{"role": "system", "content": system_content3},
                   {"role": "system", "content": md_content},
                   {"role": "user", "name": "example1_user", "content": func1_description},
                   {"role": "assistant", "name": "example1_assistant", "content": func1_str},
                   {"role": "user", "content": function_description}]

response = client.chat.completions.create(
    model="glm-4",
    messages=messages_stage2)

python_code = response.choices[0].message.content

print(python_code)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容