LLM-universe 第二课prompt工程

参考地址:https://github.com/datawhalechina/llm-universe/tree/main/docs/C2

本课主要是调用LLM-API接口,并学习提示工程,在LLM这里你可以认为输入就是prompt,输出就是completion,高质量的prompt会产出跟精准的completion。

这里以调用智谱清言的api为例子:

接口参考:智谱AI开放平台

from zhipuai import ZhipuAI

client = ZhipuAI(api_key="xxxxxxxxxxxxxxxx")


def gen_glm_params(prompt):
    message = [{"role": "user", "content": prompt}]
    return message


def get_completion(prompt, model="glm-4", temperature=0.9):
    messages = gen_glm_params(prompt)

    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=temperature
    )
    if len(response.choices) > 0:
        print(f"获得的回答: {response.choices[0].message.content}")
        print("++++++++++++++++++++++++++++++++++++++++++++++++")
        print(f"本次共消耗tokens数: {response.usage.total_tokens}")
    else:
        print("------------------------------------------------")
        print("出现错误!!!")


if __name__ == "__main__":
    #########################普通输入#############################################
    normal_prompt = "你如何称呼自己?"
    ##########################要求结构化输出#######################################
    json_prompt = f"""
    请生成包括姓名、想别和英文名的三个虚构的、非真实存在的数据,\
    并以 JSON 格式提供,其中包含以下键:name、sexual、en_name。
    """
    ###########################提供少量提示########################################
    fewshot_prompt = f"""
    你的任务是以一致的风格回答问题(注意:文言文和白话的区别)。
    <中一>: 你做什么那?
    <中二>: 红尘滚滚来。
    <中一>: 要到哪里去?
    <中二>: 条条大路通罗马。
    <中一>: 晚上吃什么?
    """
    ###########################检索是否满足条件######################################
    text_1 = f"""
    如何开车那?。首先,确认目的地。\
    拿出车钥匙,启动汽车。\
    一旦发动机启动,观察四周并进入公路行驶\
    到达目的地,关闭发动机,拔下车钥匙。\
    就这样,您可以惬意安全的到达目的地。
    """
    requirement_prompt = f"""
    您将获得由三个引号括起来的文本。\
    如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:
    第一步 - ...
    第二步 - …
    …
    第N步 - …
    如果文本中不包含一系列的指令,则直接写“未提供步骤”。"
    {text_1}
    """
    ############################指定完成任务的步骤###################################
    text_2 = f""""
    在一艘远洋的邮轮上,罗丝跨过了栏杆悲伤的站在船舷最前方。\
    这时杰克静悄悄的走到她的身后低声说到,你一定会后悔这么做,\
    罗丝有点歇斯底里的转头喊到,你根本不知道我经历了什么,\
    杰克淡淡的说到,不管你经历过什么,生活没有辜负你,你会有更好的选择,\
    接下来杰克伸出了他的右手,慢慢走向罗丝,\
    罗丝迟疑了一下,下意识的想抓住杰克的手。\
    这时突然巨轮晃动了一下,罗丝大喊着不,眼看马上掉下船去,\
    电光火石之间,杰克跑向前,抓住了罗丝,紧紧的将其抱在怀中,\
    他未曾注意到,在怀里的罗丝脸色绯红,深深的将头埋入到杰克的怀中。\
    """

    step_prompt = f"""
    1-用一句话概括下面用<>括起来的文本。
    2-将摘要翻译成英语。
    3-在英语摘要中列出每个名称。
    4-根据文本推断出人物之间的关系。
    5-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。
    6-不需要有重复的输出内容,仅输出要求的格式内容。
    请使用以下格式:
    摘要:<摘要>
    翻译:<摘要的翻译>
    名称:<英语摘要中的名称列表>
    推断:<人物关系>
    输出 JSON 格式:<带有 English_summary 和 num_names 的 JSON 格式>
    Text: <{text_2}>
    """
    ##############################指导模型在获取结论前自己找出解决方法,26个包子,40.7元###################
    guide_prompt = f"""
    请判断小红的计算方案是否正确,请通过如下步骤解决这个问题:
    步骤:
    首先,自己解决问题。
    然后将您的计算方案与小红的计算方案进行比较,对比计算得到的总数与小红计算的总费用是否一致,
    并评估小红的解决方案是否正确。
    在自己完成问题之前,请勿决定小红的就计算方案是否正确。
    使用以下格式:
    问题:问题文本
    小红的计算方案:小红的计算方案文本
    实际计算方案和步骤:实际计算方案和步骤文本
    实际计算包子的总数:实际计算的包子个数
    实际计算的总费用:实际计算的包子费用
    小红计算的包子总数和实际计算的包子总数用是否相同:是或否
    小红计算的总费用和实际计算的总费用是否相同:是或否
    小红的计算的结果:正确或不正确
    问题:
    小红正在包子城市旅游,需要帮助计算她买过包子所有费用。
    - 开封灌汤包,单价0.8元,买4个赠一个
    - 广东叉烧包,单价2元,一笼4个,买俩笼赠2个
    - 天津狗不理包子,不单买,一笼5元,一笼3个
    - 上海生煎包,单价2.5元,一份4个,一份8元
    小红买了4个灌汤包,俩笼叉烧包和单买三个叉烧包,狗不理包子1笼,生煎包一份加单买一个
    一共买了多少个包子,共消费多少钱?
    小红的计算方案:
    包子个数:
    灌汤包4+1=5个,叉烧包2x4+2+3=13个,狗不理包子1x3=3个,生煎包1x4+1=5,所以总数是5+13+3+5,一共是26个。
    费用:
    1. 灌汤包费用:5x0.8=4
    2. 叉烧包费用:2x11=22
    3. 狗不理包子费用:1x5=5
    4. 生煎包费用:1x8+2.5=10.5
    
    总费用:4+22+5+10.5=41.5元
    实际解决方案和步骤:
    """
    #############################这里输入prompt,查看结果###########################################
    get_completion(guide_prompt)

感受不一样prompt的魅力吧,调试过程共使用约2w的tokens。

Prompt:研究者为下游任务设计出来的一种任务专属的输入模板,类似于一种任务(例如:分类,聚类等)会对应一种 Prompt。在 ChatGPT 推出并获得大量应用之后,Prompt 开始被推广为给大模型的所有输入。即我们每一次访问大模型的输入为一个 Prompt,而大模型给我们的返回结果则被称为 Completion.

Temperature:Temperature 一般取值在 0~1 之间,当取值较低接近 0 时,预测的随机性会较低,产生更保守、可预测的文本,不太可能生成意想不到或不寻常的词。当取值较高接近 1 时,预测的随机性会较高,所有词被选择的可能性更大,会产生更有创意、多样化的文本,更有可能生成不寻常或意想不到的词。

System Prompt:它并不在大模型本身训练中得到体现,而是大模型服务方为提升用户体验所设置的一种策略具体来说,在使用 ChatGPT API 时,你可以设置两种 Prompt:一种是 System Prompt,该种 Prompt 内容会在整个会话过程中持久地影响模型的回复,且相比于普通 Prompt 具有更高的重要性;另一种是 User Prompt,这更偏向于我们平时提到的 Prompt,即需要模型做出回复的输入.System Prompt一般在一个对话中只有一个。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值