面向开发者的 LLM 入门教程-笔记和代码

本文是 DLAI 课程 ChatGPT Prompt Engineering for Developers 的笔记。这门课面向入门 LLM 的开发者,深入浅出地介绍了如何构造 Prompt 并基于 OpenAI 提供的 API 实现包括总结、推断、转换等功能,是入门 LLM 开发的经典教程。

Prompt(提示),最初是 NLP 研究者为下游任务而设计的一种任务输入形式或模板,在 ChatGPT 的影响下,Prompt 成为与 LLM 交互输入的代称。一般我们把给大模型的输入称为 Prompt,将大模型返回的输出称为 Completion。一个合理的 Prompt 设计极大地决定了 LLM 能力的上限与下限。

Prompt Engineering,是针对特定任务构造能充分发挥大模型能力的 Prompt 的技巧

对于开发人员,LLM 更强大的功能是能通过 API 接口调用,从而快速构建软件应用程序。课程中有很多代码的实操,推荐大家使用 Google colab 来实现,免去本地环境的配置。代码运行的结果,可以查看 00 的 colab notebook,包括 Prompt 的运行结果:

图片

https://colab.research.google.com/drive/1m1QqQd2UUG_4VM4l1rEftKoWoCnxb7U0?usp=sharing

Lesson 1.提示词原则

提示词设计的两个关键原则:编写清晰、具体的指令,以及给模型充足思考时间。

原则一:编写清晰、具体的指令

Prompt 需要清晰明确地表达需求,提供充足上下文,使语言模型准确理解我们的意图,就像向一个外星人详细解释人类世界一样。过于简略的 Prompt 往往使模型难以把握所要完成的具体任务。

  1. 使用分隔符清晰地表示输入的不同部分

    可以选择用 ````,“”",< >, ,: 等做分隔符,只要能明确起到隔断作用即可。

在这里插入图片描述

  1. 结构化输出

    按照某种格式组织的内容,例如JSON、HTML等。这种输出非常适合在代码中进一步解析和处理。
    在这里插入图片描述

  2. 要求模型检查是否满足条件

    如果任务包含不一定能满足的条件,可以告诉模型先检查这些条件,如果不满足,就指出并停止执行后续的完整流程。
    在这里插入图片描述

  3. 提供少量示例

    在要求模型执行实际任务之前,给出一两个已完成的样例,让模型了解期望的输出样式。

原则二:给模型充足思考时间

语言模型与人类一样,需要时间来思考并解决复杂问题。如果匆忙给出结论,结果很可能不准确。因此 Prompt 应加入逐步推理的要求,给模型留出充分思考时间,可以要求其先列出对问题的各种看法,说明推理依据,然后再得出最终结论。

  1. 指定完成任务所需的步骤

    text = f"""
    李琪,爱荷华州立大学计算机科学系助理教授,她于2017年取得纽约州立大学布法罗分校计算机科学与工程系博士学位;于2012年取得伊利诺伊大学香槟分校统计学硕士学位;于2010年取得西安电子科技大学信息与计算科学学士学位。她的研究兴趣为数据管理、数据挖掘和机器学习。
    彭楠赟,现任加州大学洛杉矶分校计算机科学系助理教授。她于2012年在北京大学获得学士和硕士学位,于2017年获约翰·霍普金斯大学计算机科学博士学位。她的研究方向为低资源信息提取、语言生成和跨语言迁移。
    Qianqian Wang,康纳尔大学计算机科学专业博士四年级,此前在浙江大学获得学士学位,研究方向是3D 计算机视觉、计算机图形学和机器学习的交叉领域。
    陈师哲, INRIA Paris 的一名博士后研究员。她分别于2020年和2015年在中国人民大学获得博士和学士学位,2018年访问了卡内基梅隆大学,2019 年访问了阿德莱德大学,2019年在 MSRA 工作。她在2017年获得百度奖学金,2020年获得北京市优秀毕业生奖。她的研究兴趣是具身智能、视觉与语言、多模态深度学习。
    李爽,目前是麻省理工学院电气工程与计算机科学专业的一名五年级博士生,她的研究兴趣是人工智能,包括计算机视觉、自然语言处理、决策和机器学习。
    Xin Lu,现任Adobe 的高级工程经理,于2015年获得美国宾夕法尼亚州立大学的博士学位。她的研究涵盖从端到端 AI/ML 研发到软件开发、分析、开发运营、新计划和现有业务线的产品开发和管理。 此外,她还在顶级的计算机视觉和机器学习领域发表了 30 多篇论文,并拥有超过 35 项美国专利。
    刘伊凡,现任苏黎世联邦理工大学讲师,阿德莱德大学客座助理教授。于2018年获得北航自动化学院硕士学位,2021年获得阿德莱德大学计算机科学学院博士学位。研究领域主要包含深度学习、开放世界感知。
    """
    
    prompt_2 = f"""
    1-用一句话概括下面用<>括起来的文本。2-将摘要翻译成英语。3-在英语摘要中列出每个名称。4-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。请使用以下格式:文本:<要总结的文本>摘要:<摘要>翻译:<摘要的翻译>名称:<英语摘要中的名称列表>输出 JSON:<带有 English_summary 和 num_names 的 JSON>Text: <{text}>
    """
    response = get_completion(prompt_2)
    print("\nprompt 2:")
    print(response)
    
  2. 让模型在下结论之前给出自己的解法

Lesson 2. 迭代优化

在开发大语言模型应用时,很难通过第一次尝试就得到完美适用的 Prompt。关键是要有一个良好的迭代优化过程,不断改进 Prompt。

图片
在这里插入图片描述
在这里插入图片描述

轮次Prompt目的
初始您的任务是帮助营销团队基于技术说明书创建一个产品的营销描述。根据标记的技术说明书中提供的信息,编写一个产品描述。技术规格: {fact_sheet_chair}
迭代 1您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据标记的技术说明书中提供的信息,编写一个产品描述。使用最多50个词。技术规格: {fact_sheet_chair}添加长度限制,生成更简洁的文案
迭代 2您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据标记的技术说明书中提供的信息,编写一个产品描述。该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。使用最多50个单词。技术规格: {fact_sheet_chair}说明受众,应具有什么性质以及侧重点
迭代 3您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据```标记的技术说明书中提供的信息,编写一个产品描述。该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。在描述末尾,包括技术规格中每个7个字符的产品ID。使用最多50个单词。技术规格: {fact_sheet_chair}要求在描述的结尾,给出产品 ID
迭代 4您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。根据```标记的技术说明书中提供的信息,编写一个产品描述。该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。在描述末尾,包括技术规格中每个7个字符的产品ID。在描述之后,包括一个表格,提供产品的尺寸。表格应该有两列。第一列包括尺寸的名称。第二列只包括英寸的测量值。给表格命名为“产品尺寸”。将所有内容格式化为可用于网站的HTML格式。将描述放在元素中。技术规格: {fact_sheet_chair}提取产品尺寸信息并组织成表格

在这里插入图片描述

Lesson 3. 文本概括

LLM 文本摘要功能的优势可以为你节省时间、提高效率,以及精准获取信息。

单一文本概括

任务:商品评论总结
在这里插入图片描述

限制输出文本长度
在这里插入图片描述

注:模型在计算和判断文本长度时依赖于分词器,统计字符时并不精确。

设置侧重点
在这里插入图片描述

关键信息提取
在这里插入图片描述

多条文本概括

将多条用户评价集合在一个列表中,并利用 for 循环和文本概括提示词,将评价概括至小于 20 个词以下,并按顺序打印。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Lesson 4.推断

一、情感推断

商品评论

lamp_review = """
我需要一盏漂亮的卧室灯,这款灯具有额外的储物功能,价格也不算太高。\
我很快就收到了它。在运输过程中,我们的灯绳断了,但是公司很乐意寄送了一个新的。\
几天后就收到了。这款灯很容易组装。我发现少了一个零件,于是联系了他们的客服,他们很快就给我寄来了缺失的零件!\
在我看来,Lumina 是一家非常关心顾客和产品的优秀公司!
"""

判断商品评论的情感 prompt
在这里插入图片描述

识别情感类型 prompt
在这里插入图片描述

识别愤怒 prompt
在这里插入图片描述

二、信息提取

商品信息提取
在这里插入图片描述

综合情感推断和信息提取

prompt = f"""
从评论中识别以下内容:
- 情绪(正面/负面)
- 评论者是否感到生气?(是/否)
- 评论者购买的物品
- 制造该物品的公司

评论用三个反引号分隔。将回答转换为 JSON 对象,以 “情感倾向”、“是否生气”、“物品类型” 和 “品牌” 作为key。
如果信息不存在,请使用 “未知” 作为值。
回答应尽可能简短。
将 “是否生气” 值转换为布尔值。

评论文本: ```{lamp_review}```
"""
response = get_completion(prompt)
print(response)

三、主题推断

判断一段文本的主旨,它涉及了哪些主题。

story = """
在政府最近进行的一项调查中,要求公共部门的员工对他们所在部门的满意度进行评分。
调查结果显示,NASA 是最受欢迎的部门,满意度为 95%。

一位 NASA 员工 John Smith 对这一发现发表了评论,他表示:
“我对 NASA 排名第一并不感到惊讶。这是一个与了不起的人们和令人难以置信的机会共事的好地方。我为成为这样一个创新组织的一员感到自豪。”

NASA 的管理团队也对这一结果表示欢迎,主管 Tom Johnson 表示:
“我们很高兴听到我们的员工对 NASA 的工作感到满意。
我们拥有一支才华横溢、忠诚敬业的团队,他们为实现我们的目标不懈努力,看到他们的辛勤工作得到回报是太棒了。”

调查还显示,社会保障管理局的满意度最低,只有 45%的员工表示他们对工作满意。
政府承诺解决调查中员工提出的问题,并努力提高所有部门的工作满意度。
"""


推断讨论主题 prompt
在这里插入图片描述

为特定主题制作新闻提醒

假设有一个新闻网站,我们感兴趣的主题:美国航空航天局、当地政府、工程、员工满意度、联邦政府等。判断一篇文章,是否包含这些主题。
在这里插入图片描述

可以在此基础上制定新闻提醒:
在这里插入图片描述

Lesson 5.文本转换

一、文本翻译

相比于传统统计机器翻译系统,大语言模型翻译更加流畅自然,还原度更高。通过在大规模高质量平行语料上进行 Fine-Tune,大语言模型可以深入学习不同语言间的词汇、语法、语义等层面的对应关系,模拟双语者的转换思维,进行意义传递的精准转换,而非简单的逐词替换。
在这里插入图片描述

二、语气与写作风格调整

在这里插入图片描述

三、文件格式转换

大模型可以轻松实现 JSON 到 HTML、XML、Markdown 等格式的相互转化,掌握这一转换技巧可更高效地处理结构化数据。

# 假设有一个 JSON 数据,包含餐厅员工的姓名和邮箱。现在将这个 JSON 转换为 HTML 表格格式,以便在网页中展示
data_json = { "resturant employees" :[
    {"name":"Shyam", "email":"shyamjaiswal@gmail.com"},    
    {"name":"Bob", "email":"bob32@gmail.com"},    
    {"name":"Jai", "email":"jai87@gmail.com"}
]}
prompt = f"""
将以下Python字典从JSON转换为HTML表格,保留表格标题和列名:{data_json}
"""
response = get_completion(prompt)
print(response)

四、拼写及语法纠正

假设一篇文章的部分句子存在错误。可以遍历每个句子,要求模型进行检查,如果句子正确就输出“未发现错误”,如果有错误就输出修改后的正确版本。

text = [
   "The girl with the black and white puppies have a ball.",  # The girl has a ball.  
   "Yolanda has her notebook.", # ok  
   "Its going to be a long day. Does the car need it’s oil changed?",  # Homonyms  
   "Their goes my freedom. There going to bring they’re suitcases.",  # Homonyms  "Your going to need you’re notebook.",  # Homonyms  
   "That medicine effects my ability to sleep. Have you heard of the butterfly affect?", # Homonyms  
   "This phrase is to cherck chatGPT for spelling abilitty"  # spelling
]
for i in range(len(text)):
    time.sleep(20)    
    prompt = f"""请校对并更正以下文本,注意纠正文本保持原始语种,无需输出原始文本。    
    如果您没有发现任何错误,请说“未发现错误”。    
        
    例如:    
    输入:I are happy.    
    输出:I am happy.    
    ```{text[i]}```"""    
    response = get_completion(prompt)    
    print(i, response)

五、综合样例

同时对一段文本进行翻译、拼写纠正、语气调整和格式转换等操作。
在这里插入图片描述

Lesson 6.文本扩展

文本扩展可以输入简短文本,生成更加丰富的长文。

一、定制客户邮件

将根据客户评价和情感倾向生成回复邮件。
在这里插入图片描述
在这里插入图片描述

二、温度系数

大语言模型中的 “温度”(temperature) 参数可以控制生成文本的随机性和多样性。temperature 的值越大,语言模型输出的多样性越大;temperature 的值越小,输出越倾向高概率的文本。

举个例子,在某一上下文中,语言模型可能认为“比萨”是接下来最可能的词,其次是“寿司”和“塔可”。若 temperature 为0,则每次都会生成“比萨”;而当 temperature 越接近 1 时,生成结果是“寿司”或“塔可”的可能性越大,使文本更加多样。

图片

如果需要可预测、可靠的输出,则将 temperature 设置为0;如果需要更具创意的文本,可适当提高 temperature。
在这里插入图片描述

Lesson 7.聊天机器人

一、给定身份

在 ChatGPT 网页界面中,消息分为用户消息和助手消息。但在构建聊天机器人时,在发送了系统消息之后,您的角色可以仅作为用户 (user) ;也可以在用户和助手 (assistant) 之间交替来提供对话上下文。
在这里插入图片描述
在这里插入图片描述

二、构建上下文

每次与语言模型的交互都互相独立,这意味着要提供所有相关的消息,以便模型在当前对话中进行引用。如果想让模型引用或 “记住” 对话的早期部分,则必须在输入中提供对话历史,也就是上下文 (context) 。
在这里插入图片描述

三、订餐机器人

机器人会自动收集用户信息,并接收来自比萨饼店的订单。

collect_messages() 函数收集用户消息,从用户界面中收集 Prompt ,然后将其附加到一个名为上下文( context )的列表中,并在每次调用模型时使用该上下文。模型的回答也会添加到上下文中,上下文逐渐变长。这样模型就知道下一步要做什么。

def collect_messages(_):
    prompt = inp.value_input    
    inp.value = ''    
    context.append({'role':'user', 'content':f"{prompt}"})    
    response = get_completion_from_messages(context)    
    context.append({'role':'assistant', 'content':f"{response}"})    
    panels.append(     
        pn.Row('User:', pn.pane.Markdown(prompt, width=600)))    
    panels.append(    
        pn.Row('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color': '#F6F6F6'})))    
    return pn.Column(*panels)


现在,我们将设置并运行这个 UI 来显示订单机器人。初始的上下文包含了包含菜单的系统消息,在每次调用时都会使用。此后随着对话进行,上下文也会不断增长。需要用 pip 安装 panelCopy 库(用于可视化界面)。
在这里插入图片描述
在这里插入图片描述

运行如上代码可以得到一个点餐机器人,下图展示了一个点餐的完整流程:

图片

创建JSON摘要

接下来要求模型创建一个 JSON 摘要,发送给订单系统。(此处也可以定义为用户消息,不一定是系统消息)

请注意,这里使用了一个较低的温度,因为对于这些类型的任务,我们希望输出相对可预测。

messages =  context.copy()
messages.append(
{'role':'system', 'content':
'''创建上一个食品订单的 json 摘要。\
逐项列出每件商品的价格,字段应该是 1) 披萨,包括大小 2) 配料列表 3) 饮料列表,包括大小 4) 配菜列表包括大小 5) 总价
你应该给我返回一个可解析的Json对象,包括上述字段'''},
)

response = get_completion_from_messages(messages, temperature=0)
print(response)

在这里插入图片描述
在这里插入图片描述

总结

Prompt 的两个核心原则:

  • 编写清晰具体的指令;
  • 给模型一些思考时间。

我们还学习了迭代式 Prompt 开发的方法,逐步找到适合的 Prompt;另外,课程还讨论了大型语言模型的许多功能,包括摘要、推断、转换和扩展。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值