AI原生应用开发:提示工程原理与实战

978-7-115-65801-2
作者: 魏承东
译者:
编辑: 贾静

图书目录:

详情

本书结合AI原生应用落地的大量实践,系统讲解提示工程的核心原理、相关案例分析和实战应用,涵盖提示工程概述、结构化提示设计、NLP任务提示、内容创作提示、生成可控性提示、提示安全设计、形式语言风格提示、推理提示和智能体提示等内容。 本书的初衷不是告诉读者如何套用各种预设的提示模板,而是帮助读者深入理解和应用提示设计技巧,以找到决定大语言模型输出的关键因子,进而将提示工程的理论知识应用到产品设计中。 本书适合AI原生应用开发领域的从业者和研究人员,以及人工智能相关专业的教师和学生阅读。

图书摘要

版权信息

书名:AI原生应用开发:提示工程原理与实战

ISBN:978-7-115-65801-2

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

著    魏承东

责任编辑 贾静

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

本书结合AI原生应用落地的大量实践,系统讲解提示工程的核心原理、相关案例分析和实战应用,涵盖提示工程概述、结构化提示设计、NLP任务提示、内容创作提示、生成可控性提示、提示安全设计、形式语言风格提示、推理提示和智能体提示等内容。

本书的初衷不是告诉读者如何套用各种预设的提示模板,而是帮助读者深入理解和应用提示设计技巧,以找到决定大语言模型输出的关键因子,进而将提示工程的理论知识应用到产品设计中。

本书适合AI原生应用开发领域的从业者和研究人员,以及人工智能相关专业的教师和学生阅读。

对本书的赞誉

本书在“如何将人类经验融入AI决策过程”这一关键议题上,从独特的视角进行了细致的阐述,为AI原生应用开发者提供了一份宝贵的系统学习指南。

在长期探索灌溉智能化的过程中,我深刻体会到将人类经验与先进AI技术相结合的重要性。智能化过程中的难题是如何量化人类复杂多变的经验,以及如何将其融入AI系统的决策体系。可喜的是,大语言模型凭借其强大的学习能力和丰富的知识储备,不仅能够吸收并整合人类海量的经验,还能在决策过程中灵活运用这些信息,生成更加精准、高效的决策方案。这为我当前的研究工作提供了新的灵感,也让我看到了AI技术在未来灌溉管理及其他领域中的应用前景。

我强烈推荐本书给所有对AI原生应用开发感兴趣的读者。它不仅能够帮助我们深入理解提示工程的原理与实践,更能激发我们对如何将人类智慧与AI技术相融合以推动行业创新和发展的思考。相信在本书的启发下,我们能够共同开创AI技术应用的新篇章。

——罗玉峰 武汉大学教授、博士生导师,国家科学技术进步奖一等奖获得者

在过去的20多个月里,大模型技术以惊人的速度实现了前所未有的飞跃,引领了AI领域的深刻变革。然而,AI原生应用落地千行百业的征途仍然充满挑战。

本书作者深耕于AI原生应用的前沿,将提示工程这一关键领域的宝贵经验系统地呈现给读者,十分难得。本书从开发者的视角出发,围绕提示工程进行了深入而细致的剖析,探讨了影响大语言模型输出效果与行为的“秘籍”,介绍了如何打造高效、安全、可控、可落地的AI原生应用。

本书通过丰富的案例分析、实战技巧及前瞻性的展望,为AI原生应用的开发者、研究人员、产品经理及技术经理等提供了新颖的思路。我强烈推荐本书给所有关注AI原生应用的读者。

——郑海超 阿里云智能集团AI解决方案总监

企业创新除了依赖天才人物的引领,更应发动一线员工的创新力,尤其发挥那些接近客户、接近业务实践的员工的创造力。加速全面创新需要3个基础条件:允许即时实验、降低创新成本、成功后可扩大规模或迭代。提示工程,可以更有效地创造这些基础条件,为企业快速找到合适的AI技术奠定坚实基础。

本书系统讲解了提示工程,为企业创新提供了良好的工具支持,是AI时代下实施企业创新不可或缺的指南。

——陈华 亚马逊云科技数字化创新总监

前  言

在设计开发应用程序时,以人工智能(artificial intelligence,AI)技术为出发点,将AI作为核心驱动力设计和构建的新应用,被称为AI原生(artificial intelligence native)应用。这种应用在设计和架构层面就与AI技术深度融合,使得AI成为应用程序基础且关键的部分,而非仅仅作为附加功能。

自OpenAI发布GPT-3.5以来,大语言模型(large language model,LLM)的发展日新月异。在这一波技术浪潮中,提示工程(prompt engineering)崭露头角,它不仅标志着人类与计算机交互方式的根本性变革,更开启了AI原生应用的新篇章。回溯AI的发展历程,可以看到人类与计算机交互方式的不断演变。

初期硬件设计:专门化与局限性。在计算机被发明的初期,人们需要针对每个任务设计专门的硬件,这是一个高度专业化和高成本定制化的阶段。那时的计算机功能单一、操作复杂,每次更改都需要重新设计和制造硬件,缺乏灵活性和通用性。

通用计算机的兴起:指令的力量。随着通用计算机的出现,情况发生了翻天覆地的变化。人们开始通过输入特定的指令来指导计算机的行为,从而使其能够适应不同的任务。这一阶段的显著特点是计算机的通用性和可编程性大幅提升,不再需要制造专门的硬件来完成特定的任务,而是可以通过编程来指挥计算机执行各种复杂的任务。

深度学习时代:数据驱动的智能。深度学习技术的广泛应用进一步推动了机器智能的发展。在这一阶段,计算机能够通过训练数据集进行学习,因此,设计数据集成为指导计算机完成特定任务的新方式。这一时期的特点是数据驱动的智能化,即通过大量的数据训练来使计算机具备某种能力或知识。

大语言模型的时代:自然语言的崛起。大语言模型的出现提供了人类与计算机交互的一种全新方式——通过自然语言提示(prompt)来引导计算机完成任务。这种方式既经济又直观,极大地降低了使用AI技术的门槛,使得更多人能够轻松地利用AI来完成各种任务,实现了人机交互的自然化和智能化。

然而,正如任何技术革新一样,大语言模型和提示工程在AI原生应用的开发实践中也遇到了一系列挑战。一方面,大语言模型被过度夸大,许多不适合由大语言模型处理的问题也被纳入其中,这种无根据的乐观和不切实际的期望,为早期AI原生应用的开发者带来了不少困扰。另一方面,大语言模型与业务应用的结合,因大语言模型在效果、性能、可控性,以及内容安全等方面存在的局限性而陷入了进退两难的境地。

作为一线从业者,我深知大语言模型蕴含着推动生产力变革的巨大潜能,但要发挥这种潜能,使用者需要具有很强的驾驭能力。在利用大语言模型进行AI原生应用开发的过程中,我深刻体会到“好答案往往源自好问题”的朴素真理。然而,如果提出“好问题”的能力仅依赖于大量、重复的实践,而无法将其沉淀为可传承的行业知识和通用方法,那么这将成为AI原生应用落地的阻碍。正是基于这样的考虑,我决定写作本书,分享我的实践经验,期望能与更多从业者共同进步,推动行业的持续发展。

内容组织

本书围绕提示工程展开,详细阐述提示工程的理论基础和实际应用。本书共10章,每一章都围绕一个核心主题展开,通过原理介绍、案例分析、实战应用等,系统介绍提示工程在AI原生应用开发中的应用。

第1章:提示工程概述。本章围绕提示工程分析AI原生应用的形态及其开发面临的机遇与挑战,并从开发人员的视角讲解提示工程的本质、KITE(knowledge、instruction、target、edge)提示框架和提示调试技巧,为读者提供一条入门提示工程的清晰路径。

第2章:结构化提示设计。本章探讨结构化提示设计的策略,包括结构引导设计、内容引导设计和提示编排设计。

第3章:NLP任务提示。本章聚焦于如何运用提示工程技术引导大语言模型完成各类NLP任务,通过介绍文本生成、文本分类、信息抽取和文本整理等任务,展示提示工程在NLP领域的潜力。

第4章:内容创作提示。本章专注于如何利用大语言模型进行高质量的内容创作,通过介绍影响创作质量的核心要素和一系列实用的基础创作提示技巧、长文本创作提示技巧,为内容创作提供指导。

第5章:生成可控性提示。本章着重探讨如何控制大语言模型的输出,介绍可控性问题的分类和可控性影响因素,从生成参数和对话控制、基于提示的可控设计、基于内容审查的可控设计等方面总结多种有效的策略。

第6章:提示安全设计。本章介绍数据泄露、注入攻击和越权攻击的相关内容,以及相应的防御手段。

第7章:形式语言风格提示。本章探讨形式语言风格提示在AI原生应用开发中的应用,介绍如何利用形式语言提高提示的准确度,以及如何利用大语言模型完成与编程相关的任务。

第8章:推理提示。本章聚焦于大语言模型在推理方面的应用,特别是如何通过思维链技术来提升大语言模型的推理能力,通过讲解基础思维链、进阶思维链、高阶思维链、尝试构建自己的思维链的相关提示方法,为读者提供理解和控制大语言模型推理过程的有效手段。

第9章:智能体提示。本章探讨智能体的概念、架构及核心组成部分,并介绍如何通过提示工程技术构建和优化智能体。通过对感知端、控制端和行动端的详细讲解,为智能体的实际落地提供指导。

第10章:展望未来。本章介绍AI原生应用的落地、效果评估及待解决的工程化问题,为读者提供AI原生应用未来发展的全面视角。

主要特色

本书的初衷并非仅仅指导读者如何套用各种预设的提示模板,而是致力于帮助读者深入理解并掌握提示工程,从而找到对大语言模型的输出有决定性影响的关键因子。这些关键因子一旦被理解和掌握,便能够指导我们将理论知识转化为实际的产品技术,从而推动AI原生应用的落地。

本书在内容组织上具有以下两大特色。

系统性:本书的内容组织采用从基础到进阶、从原理到实践的方式,有助于读者理解和掌握提示工程的技术和方法。

实践性:本书包含提示工程的100多个实践案例和技巧,可以帮助读者将所学知识应用于实际项目中。

适合读者

本书适合AI原生应用开发领域的从业者和研究人员,以及人工智能相关专业的教师和学生阅读。阅读本书,读者能够洞察AI原生应用的最新趋势,在AI原生应用开发中熟练运用提示工程的实践技巧。

本书约定

请注意,由于大语言模型的生成机制和版本更新,同一提示可能会产生不同的输出。这是正常现象,体现了大语言模型的灵活性和多样性。

在不影响阅读和理解的前提下,本书会对大语言模型生成的文本进行适度摘录,并以“……(略)”或者“<关于×××文本>”的形式标注,以确保内容的连贯性与阅读的流畅性。

在提示中,本书会使用“//”表示注释,这部分内容无须作为提示的一部分输入大语言模型。

本书中的案例代码主要以Java 17和Python 3.10或更高版本进行编写,读者看懂即可,无须实际运行。

配套资源

如需获取本书配套的插图、完整的代码和提示,请访问https://github.com/alphaAI-stack/books。读者可在遵守CC BY-SA 4.0版权协议的前提下,转载与分享本书配套资源。

关于勘误

虽然我已经尽力查证和推敲书中的每一段文字,但仍难免存在疏漏和不足之处。我深知每本书都是作者与读者之间知识传递的桥梁,因此极其珍视每位读者的宝贵意见。如果在阅读过程中发现了任何错误、疏漏或需要改进的地方,读者可以通过邮箱weichengdong@foxmail.com与我联系,也可以关注我的微信公众号“alphaAI stack”。读者的每条建议都将是我不断完善和进步的动力。

致谢

我要衷心感谢早期的AI原生应用开发者和提示工程的倡导者们,你们的实践经验和独到见解为本书的撰写提供了宝贵的启示。我要感谢我所在团队的同事们,正是因为你们积极实践书中的案例,本书才能更加贴近实际、更具指导意义。我要感谢那些参与本书前期试读的朋友们,你们的反馈对本书的质量提升起到了关键作用。我要真挚感谢我的家人,在过去一年多的时间里,你们始终给予我坚定的支持和理解,陪伴我度过每一个日夜,你们的鼓励和支持是我能够持续前进的动力和源泉。我要特别感谢人民邮电出版社的贾静女士,她不仅以专业的眼光和严谨的态度审阅了本书,还在出版过程中给予了我无微不至的帮助。最后,我要感谢选择本书的各位读者,愿你们借AI之力,扬帆远航,探索无限可能!

魏承东

2024年7月

资源与支持

资源获取

本书提供如下资源:

本书的代码和提示

书中彩图文件

本书思维导图

异步社区7天VIP会员

要获得以上资源,您可以扫描下方二维码,根据指引领取。

提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,点击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给本书的责任编辑(jiajing@ptpress.com.cn)。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

“异步社区”是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域30余年的发展与积淀。异步图书面向IT行业以及各行业使用相关技术的用户。

第1章 提示工程概述

自OpenAI发布基于GPT-3.5模型的ChatGPT以来,以生成式预训练模型为代表的大语言模型得到迅速发展,并彰显出改变各行各业的巨大潜力。

然而,大语言模型的快速发展也引发了一定的争议,大语言模型有时被过度“神化”,仿佛它们能够立即解决所有问题。实际上,大语言模型尽管在某些方面表现出了惊人的能力,但在具体应用场景中仍然面临着诸多挑战。如何将大语言模型的出众能力稳定、有效地融入实际应用,仍是一个复杂且需要深入研究的课题。

在AI原生应用落地的进程中,提示工程扮演着举足轻重的角色。它不仅是连接大语言模型与实际应用的桥梁,更是解锁大语言模型无尽潜能的钥匙。本章将深入探讨AI原生应用的形态、AI原生应用开发面临的机遇与挑战、提示工程的本质、KITE提示框架和提示调试技巧,逐步揭示提示工程在提升AI原生应用效果中的作用。

让我们共同踏上这段发现之旅,探索AI原生应用的无限潜力!

1.1 AI原生应用的形态

ChatGPT让人们感受到大语言模型的强大能力,进而对其产生了极高的期望。然而,大语言模型的应用远不只聊天机器人这一领域,它正在以更广泛、更多元的形态渗透各个领域,并已在内容创作、辅助助手、能力引擎、智能体等方面展示出巨大潜力。

1.1.1 内容创作

在引入大语言模型之前,内容创作主要由人工完成,这种方式尽管能赋予内容独特的情感和深度,但也存在诸多限制:人工创作耗时耗力,难以应对需要迅速响应或大量产出的场景;人工创作受限于创作者的个体知识和想象力,难以持续产出高度创新和多样化的内容;在多人协作或多语种环境下进行内容创作时,保持语言风格和文本质量的一致性尤为困难。

大语言模型可以利用其庞大的数据知识库、卓越的语言生成和理解能力,轻松创作出高质量、富有创意的文本内容,如诗歌、故事等。大语言模型创作的内容不仅语法正确、逻辑清晰,且常常蕴含令人意想不到的创意和观点,为内容创作注入了新的活力。此外,大语言模型还能根据用户的需求和偏好定制内容,确保语言风格的统一,满足个性化的创作需求。

这种从人工创作到人工智能生成内容的转变,不仅优化了内容创作的流程,还提升了内容的多样性和创新性,无疑是一场深刻的内容创作变革。

1.1.2 辅助助手

辅助助手是一种崭新的交互模式,它为用户带来了更加自然、高效和个性化的交互体验,并改变了人与计算机的交互方式。这种交互模式允许用户通过简单的自然语言与计算机进行交互,无须遵循复杂的预设规则和流程。辅助助手能够理解用户的需求和意图,然后进行思考并做出相应的行动,这与以往必须遵循预设的规则和流程来操作图形用户界面(graphical user interface,GUI)的产品的交互模式,形成了鲜明对比。同时,它还能整合各种产品功能与AI的多元能力(如语音识别、图像生成、视频处理、文字处理等),从而为用户提供更全面、高效的服务,如图1-1所示。

图1-1 辅助助手可连接一切服务

例如,在日常办公场景中,用户只需对辅助助手发出简单指令,如“请在我今天的日程中添加一个下午两点的会议,主题是项目进展讨论”,它便会即刻将会议添加到日程表,并设定相应的提醒;当用户想要休假时,只需告知辅助助手“我计划下周三休假一天,请帮我提交休假申请”,它便会自动填写并提交休假申请表格。

1.1.3 能力引擎

随着大语言模型的广泛应用,自然语言处理(natural language processing,NLP)领域正经历着一场深刻的变革。传统的NLP方法往往需要针对不同的任务设计特定的模型算法,这既增加了开发成本,也限制了系统的灵活性和可扩展性。

大语言模型的崛起改变了这一局面。其具有卓越的语言生成和理解能力,展现出作为能力引擎的巨大潜力。这种模型能够在统一的框架下游刃有余地处理各类NLP任务,如文本生成、文本分类及信息抽取等,如图1-2所示。

通过精心设计的提示,我们可以将大语言模型封装为易于调用的服务,从而构建能力引擎使开发者能够轻松地将强大的NLP能力集成到自己的应用系统中,极大地提升应用系统的智能化水平和用户体验。这种能力引擎的出现不仅可大幅度降低系统开发成本,更使得现有系统的革新成为可能。

图1-2 能力引擎可应对各类NLP任务

1.1.4 智能体

在大语言模型出现之前,智能体(agent)主要依赖预先设定的规则和基于强化学习技术来处理各项任务,尽管取得了一定的效果,但在自然语言的理解和复杂任务的处理方面存在明显的局限性。

大语言模型与智能体技术的融合,为我们提供了一种新的、目标导向的问题解决策略。在这种策略下,大语言模型是智能体的“大脑”,为智能体赋予了卓越的语言理解和生成能力,还增强了其任务推理和规划能力。这使得智能体能够更深入地洞察问题背景,更准确地把握问题核心,从而生成既具逻辑性又富创意性的解决方案。

向智能体提出问题后,它便能自主分析、分解问题,并调用适当的工具来解决这些问题,如图1-3所示。在大语言模型的加持下,智能体在通用问题的自动化处理方面更具优势,为通往更高级别的通用人工智能(artificial general intelligence,AGI)打下了坚实基础。

图1-3 自主分析、解决问题的智能体

1.2 AI原生应用开发面临的机遇与挑战

我们在为大语言模型的巨大应用潜力兴奋之余,也不得不正视一个问题:AI原生应用的开发面临着前所未有的机遇与挑战。一方面,大语言模型技术的快速发展为软件开发带来了革命性的变化,极大地提高了开发效率和产品创新能力;另一方面,这些变化也带来了新的挑战,如技术标准的缺失、模型生成效果的不确定性、安全问题的复杂性,以及测试评估的困难等。

1.2.1 开发模式的华丽变身

在AI原生应用的浪潮下,传统的软件开发模式正在经历一场深刻的变革。这场变革不仅是技术层面的革新,更是对编码方式、岗位角色和工作协同模式的重塑。

(1)编码方式的革新。传统的算法开发如同一段精心编排的古典舞蹈,每一步都遵循严格的规范。从准备训练数据、精细编码,到模型训练,再到结果观测与调优,每个环节都如舞步般精准而不可或缺。但在大语言模型引领的AI新浪潮中,这一传统模式正在经历深刻的变革,“提示工程”时代已然揭幕。

在提示工程时代下,开发者无须耗费大量时间准备训练数据,也不必经历漫长的模型训练和调试过程,他们可以在更为自由、灵活的“playground”环境中进行实时调试与迭代优化。凭借大语言模型的即时反馈,开发者能够迅速验证思路,大幅减少原型制作与测试所需的时间,从而显著缩短整个项目的开发周期。

在这场转变中,提示不仅被视作一项技术工具,它更像是应用开发中的核心要素,与代码并肩而行,共同描绘出未来应用的新图景。

(2)岗位角色的演变。后端工程师和算法工程师之间的界限变得越来越模糊。曾经需要算法工程师花费大量时间和数据标注成本才能完成的NLP训练任务,现在可以通过大语言模型和提示工程由后端工程师轻松完成。这种角色的融合与重塑,不仅提高了工作效率,还降低了成本,为AI原生应用的落地提供了有力支持。

(3)工作协同的新模式。在传统的软件开发流程中,从想法提出到需求分析、设计编码、测试,再到最终部署,每一个环节都紧密相连,需要研发人员的紧密协作。然而,在以AI原生为主的新研发范式下,这一经典流程发生了变化。

借助现有的AI工具链和提示工程技术,产品经理和开发者可以更加轻松地验证想法,甚至可以在想法提出阶段就进行初步的验证而不必等到开发完毕才能看到效果。这种创意驱动的研发模式,不仅显著提升了研发效能,更赋予了整个开发流程更高的灵活性与自主性。

这一系列的变革,为AI原生应用的广泛实施带来了前所未有的机遇。

1.2.2 技术落地的荆棘之路

虽然制作一个令人印象深刻的演示程序(demo)并不困难,但是要让大语言模型在实际产业中落地并发挥作用,仍面临着诸多技术挑战。

(1)提示风格大相径庭。目前,大语言模型技术及其相关应用领域正在迅猛发展,提示已然成为AI原生应用开发中不可或缺的关键要素,但提示的编写尚缺乏统一的规范标准。在实际应用中,一个系统可能需要与多个大语言模型协同工作,不同模型对提示风格的要求不尽相同,因此在不同的大语言模型中输入相同的提示可能会产生差异较大的输出。这不仅增强了开发协作的复杂性,也对系统的持续迭代和维护构成了不小的挑战。

(2)生成效果难以控制。如果大语言模型的性能并不理想,那么它在理解任务的深层语义时,往往会捉襟见肘。设想一下,当你向大语言模型下达清晰明确的指令时,它可能像一个只知皮毛的“翻译官”,仅凭自己有限的理解生成相关却偏离实际需求的内容。这种“指令遵循问题”实际上揭示了大语言模型在深入理解语言方面的短板。

尽管大语言模型在NLP领域取得了令人瞩目的成果,但是这种出色的表现背后却隐藏着不确定性。在某些情况下,大语言模型的输出可能与用户的期望相去甚远,甚至可能出现幻觉问题、违背指令或产生内容安全上的隐患。这些问题不仅降低了大语言模型的效能和可信度,还可能对用户乃至社会产生意料之外的负面影响。因此,我们在不断探索大语言模型的创新能力与表现力的同时,更需要直面并解决这些潜在问题,从而确保大语言模型在实际运用中既稳定又可靠。

(3)安全问题暗流涌动。传统安全问题多源于软件代码或参数的缺陷,而提示安全问题则是由大语言模型的生成能力和可塑性引发的。攻击者可以通过精心设计的输入提示来操控模型的输出,这种攻击方式更加隐蔽和灵活,因此也更加难以防范。随着基于大语言模型的AI原生应用的快速发展,需要在数据泄露、注入攻击、越权攻击等多个方面加强安全防范。

(4)测试和评估迷雾重重。大语言模型的生成机制为其效果评估带来了不小的挑战。以往用于判别式模型的评估体系和指标可能并不适用于大语言模型。由于大语言模型的能力强且能处理各种任务,因此评估变得更加复杂。例如,判断一篇总结是否比另一篇更好,这本身就是一个巨大的挑战。如何快速、低成本且准确地评估不同提示下的模型效果,是摆在我们面前的一大难题。

除上述问题外,大语言模型的落地还面临其他一系列问题,如模型的内容生成速率、token长度的限制、多阶段提示的编排,以及大语言模型与现有系统的融合等。为了解决这些问题,软件行业的每一位从业者都需要对自己的知识体系进行审视,并深入掌握与提示工程相关的技术。只有这样我们才能在这个瞬息万变的时代中稳固地位,确保立于不败之地。

1.3 案例演示的准备工作

为了顺利演示书中的所有案例,首先需要做一些准备工作。我们可以通过大语言模型的官方网站或开放API来体验这些模型的功能。请注意,随着不同厂商模型版本的更新,本书中部分案例的演示效果可能会与实际操作得到的效果有所不同。不过,请放心,这些细微的差异不会影响你对技术实现思路和方法的理解。

1.3.1 使用官网接入大语言模型

使用官方网站无疑是接入大语言模型最直观且便捷的途径之一,只需轻松注册一个账号,便可即刻沉浸在丰富的体验之中。在本书的写作过程中,作者使用并参考了诸多大语言模型的官方产品,如文心一言(“文心一言”APP已更名为“文小言”)、通义千问、ChatGPT等。

以百度的文心一言为例,其用户界面如图1-4所示。用户可以在这个界面上直接创建新的对话,并输入想要探讨的内容,文心一言会立即生成相应的回复。

图1-4 百度文心一言的用户界面

1.3.2 使用API接入大语言模型

若你计划在项目开发中使用大语言模型的功能,申请使用这些模型服务商提供的API无疑是最为高效的方法之一,具体过程请参考这些模型服务商提供的开发文档。目前大部分厂商的大语言模型软件开发工具包(software development kit,SDK)都兼容OpenAI的风格,接下来将以这种主流风格为例,展示如何在项目中接入大语言模型。

首先,安装新版本的OpenAI客户端库。

pip install openai

然后,使用如下代码来发送请求并接收大语言模型的响应。

from openai import OpenAI
client = OpenAI()
 
completion = client.chat.completions.create(
  model = "gpt-3.5-turbo",
  messages = [
    {"role": "user", "content": "<此处编写你的输入文本>" }
  ],
  temperature = 0.001
)
 
print(completion.choices[0].message.content)

最后,可以通过调整各种参数来优化大语言模型的输出,例如调整温度(temperature)参数可以控制生成文本的随机性。有关这些参数的更多信息,请参考模型服务商的官方文档。

1.3.3 初次体验

完成准备工作后,就可以调用大语言模型了。输入以下提示。

故人西辞黄鹤楼,下一句是什么?

输出如下。

故人西辞黄鹤楼,下一句是:烟花三月下扬州。这是出自唐代诗人李白的《黄鹤楼送孟浩然之广陵》的著名诗句,描述了李白在黄鹤楼与友人孟浩然依依惜别的动人场景。

尝试完成一个更具挑战性的任务:从给定的文本中提取信息,并将其按照JSON结构输出。

# 任务描述
从给定的文本中提取信息,按照以下JSON结构输出,其中{}表示需要填充的内容:
``` json
{ "gender": "{}", "age": {}, "job": "{}" }
```
# 输入
大家好,我是一个羞涩的小男孩,今年十二岁,还是个学生,在北京一零一中学读书。
# 输出
->

输出如下。

{"gender": "男","age": 12,"job": "学生" }

恭喜!你已经成功调用大语言模型。可以看到,使用大语言模型完成各种任务的基本思路是:给定一段文本输入,让大语言模型根据输入的文本生成你想要的结果,并可以根据不同的任务和模型调整输入文本的形式和内容,以达到最佳效果。

1.4 提示工程的本质

提示是什么?提示是用户向大语言模型提供的一段文字描述。用户通过这段文字描述对大语言模型进行引导,帮助大语言模型“回忆”它在预训练时学到的知识,使其根据文字描述所提供的信息,生成合适的、有针对性的回复。

因此,提示的质量直接影响大语言模型的输出效果。提示工程则专注于编写和优化提示的技术,通过这些技术,我们可以更有效地与大语言模型进行交互,使其更深入地理解任务要求,并生成高质量且符合预期的输出。提示工程显著提升了大语言模型在AI原生应用中的普适性和扩展性,成为AI原生应用开发者必须掌握的关键技能。本节将从开发者的角度,深入探讨提示工程的核心原理。

1.4.1 提示是引导生成的起点

大语言模型在训练时利用了大量无标注语料,通过自监督学习方法获得了根据给定部分前序文本序列,生成下一个文字符号的文本预测能力。因此,大语言模型内容生成可以粗略看概率生成,它会根据输入的文本,计算出后续每个词出现的可能性,并选择可能性最大的一个词作为输出。然后,它会把这个词和输入的文本拼接起来作为新的输入,重复上述过程,不断延长文本,直到它输出一个停止符号或达到最大长度为止。

大语言模型根据“到饭点了,你妈妈喊你”这个前序文本序列,逐步预测出后续文本“回家吃饭”,过程如图1-5所示。

图1-5 大语言模型内容生成过程

总体而言,大语言模型在训练过程中接触到了海量的数据,这使得它从中汲取了大量知识。训练完成后,它便成为一个具备丰富知识的文本预测工具。由于其基于自身的预测能力来生成后续内容,因此其输出并不完全可控和可预测。

既然这样,为什么在上述例子中大语言模型似乎能按照预期生成后续内容呢?原因在于我们为其提供的上下文文本——提示。

用户通过这些特定场景的上下文文本信息去引导大语言模型,使其初始的生成参数(即初始概率)得到优化,从而干预它后续生成内容的概率和方向,让它更好地发挥自己的潜力,输出预期的文本,而非简单地生成一些泛泛而谈的平庸的文本。这一技术的核心指导思想为上下文学习(in-context learning,ICL)。

上下文学习作为NLP领域的一种新兴范式,其独特之处在于无须对大语言模型参数进行烦琐的更新或微调。相反,它通过在上下文中嵌入与任务相关的示例或指令,使大语言模型能够迅速捕捉并理解这些关键信息,进而自主推断并完成任务。这种方法的灵活性和高效性使得大语言模型在处理复杂多变的自然语言任务时表现出色。

例如,如果我们想让大语言模型进行情感分析,可以先给它一些输入和输出的对应关系,如下所示。

输入:这部电影很无聊,浪费了我的时间。
输出:负面
输入:我今天收到了升职的通知,很开心。
输出:正面

然后,给大语言模型一个新的输入,让它通过学习上下文中的示例来预测输出,如下所示。

输入:这本书很有趣,让我大开眼界。
输出:正面

上下文学习巧妙运用大语言模型的泛化能力与灵活性,能轻松处理多个领域的任务,且无须投入额外的数据和计算资源。这种方法不仅优化了大语言模型的初始生成概率和内容生成方向,也可避免在微调过程中出现灾难性遗忘、过拟合等问题。

提示工程运用大语言模型的上下文学习能力,通过精心设计上下文来激发大语言模型的潜在能力,从而更好地完成任务。

1.4.2 提示是一个稳定的函数

在AI原生应用开发的实践中,让大语言模型根据提示输出答案只是第一步。更大的挑战是,如何保证大语言模型在相同的输入下重现相同的输出,并且符合结构化的标准,以便与其他系统无缝集成。为了实现这一目标,需要将提示工程融入AI原生应用的开发过程中,以确保大语言模型能够像稳定函数一样提供服务,如下所示。

// 保证函数的参数和返回值的数量、格式和类型不变
def 函数名称 (输入参数) -> 输出参数 {
    // 函数体保证函数的功能定义清晰明确
    // Your task description, do something.
}

稳定函数的核心特性在于,无论输入参数如何变化,函数的输出总是保持一定的格式、数量和类型。同样地,需要确保大语言模型的输出也具备这一特性。这意味着,对于相同的输入,大语言模型应该始终生成相同或类似的输出,而不是随机的、不可预测的输出。

1.4.3 用户提示是完整提示的一部分

提示是用户与大语言模型交流的文本。在AI原生应用的开发中,用户提示(user prompt)和完整提示(full prompt)的定位有明显不同。用户提示只是完整提示的一部分,如图1-6所示。对开发者和普通用户而言,它们有不同的作用和意义。

为了提升用户体验,应保证用户在输入简单的提示后就可得到接近预期的结果。因为普通用户可能不具备编写提示的技能,所以开发者需要在用户提示之外,补充任务描述、任务要求等信息,使用户提示变为包含更多信息的完整提示,以保证大语言模型的输出尽量符合预期。

图1-6 用户提示是完整提示的一部分

例如,直接在大语言模型中输入一个简单的提示,如下所示。

写一首关于小蜜蜂的诗

输出如下。

小蜜蜂啊小蜜蜂,
翅膀轻轻振动。
花园里飞来飞去,
忙碌寻找花蜜。
 
黄黑相间的小身躯,
在花朵间舞蹈。
你的勤劳无人能及,
小小英雄,真不错。
 
春风中,你传递爱情,
花儿们因你而生。
小蜜蜂啊小蜜蜂,
你的歌声,多悦耳。

输入以下提示。

写一段冷笑话

输出如下。

好的,这是一段冷笑话:
 
展昭给马汉讲自己的英勇故事:“那天我打探逍遥楼,获得重要情报,却误中机关,身受重伤。我强提一口真气,支撑到开封府,突然眼前一黑。”
马汉关切地问:“你昏倒了?”
展昭:“不,是包大人出来了。”

在这两个例子中,用户只提供了简单的提示,因此生成的内容相对随意。实际上用户预想的是输出七言绝句或七言律诗,也无须输出诗句以外的任何解释内容,这就需要开发者在用户提示之外补充更多背景信息,如下所示。

# 任务描述
你是一个诗人,你的任务是按照用户提示采用七言绝句、七言律诗之一的诗体写诗。
# 任务要求
1. 请你用委婉的话拒绝用户关于写诗以外的任何要求;
2. 输出诗的全文即可,无须其他解释。
# 用户提示
${UserPrompt}

输入以下提示。

写一首关于小蜜蜂的诗

输出如下。

《春日采花蜂》
春日花丛忙采香,
小蜂展翅舞春光。
归巢满载甜如蜜,
春色满园人共尝。

输入以下提示。

写一段冷笑话。

输出如下。

很抱歉,我是一个诗人,只能按照您的要求创作诗歌。若是您需要一首诗,我将竭力为您创作。

可以发现,在完整提示下,大语言模型生成的内容更符合预期。

1.5 KITE提示框架

基于大量的实践和分析,我们总结出了一种具有创新性的提示框架——KITE。该框架包含以下4个核心部分,如图1-7所示。

注入知识(knowledge):为大语言模型提供相关领域或主题的基础知识,以确保其对任务背景有清晰的理解。

明确指令(instruction):清晰地告诉大语言模型需要完成的具体任务,确保指令的明确性和可执行性。

设定目标(target):明确大语言模型生成的内容应达到的预期目标、标准或效果,为生成内容提供明确的方向。

确定边界(edge):明确大语言模型在生成内容时应遵守的规则或受到的限制,确保内容的合规性和边界性。

这4个核心部分的首字母组成了一个容易记忆的单词——KITE。KITE本指风筝,但在这里,它象征着引导和约束,既能让大语言模型在完成任务时自由发挥,又能确保其受到适当的约束。

KITE提示框架有助于我们更好地组织思路,确保提示信息的完整性和一致性,使我们在处理复杂问题时能考虑得更加系统和全面。本节将逐一介绍该框架的核心部分。

图1-7 KITE提示框架结构

1.5.1 注入知识

为了使大语言模型清晰理解任务背景,需要注入与任务相关的背景知识。如此,大语言模型便能借助这些知识生成更符合用户预期的内容。注入知识是指让大语言模型在生成内容前掌握一些必要信息,进而提升其生成内容的专业性和准确性。以下是3种常用的注入方法。

(1)背景陈述。背景陈述是最直接的一种注入方法,是指直接向大语言模型提供事实信息或背景知识,让大语言模型了解任务的本质和要求。

(2)角色暗示。角色暗示是一种通过指定大语言模型扮演的角色来注入知识的方法,这种方法能够让大语言模型获得该角色的先验知识,并据此生成与该角色身份相符的内容。这种灵活性使得大语言模型能够适应不同的领域,从而提高大语言模型的专业度和可信度。例如,要求大语言模型以“幼儿园老师”的身份生成内容。

大熊猫是国家一级保护动物,受到法律保护,请以幼儿园老师的口吻写一段话,介绍大熊猫并呼吁保护大熊猫。不超过200字。

输出如下。

小朋友们,你们知道大熊猫吗?它们有着黑白相间的毛,圆圆的耳朵,大大的眼睛,可喜欢吃竹子啦!大熊猫是国家一级保护动物,也是我们中国的国宝哦,是我们的好朋友。让我们一起爱护动物,爱护大熊猫,不伤害它们,也不破坏它们的家,让它们快乐生活吧!快来一起学习大熊猫的知识哦!

要求大语言模型以“普法工作者”的身份生成内容,提示如下。

大熊猫是国家一级保护动物,受到法律保护,请以普法工作者的口吻写一段话,介绍大熊猫并呼吁保护大熊猫。不超过200字。

输出如下。

大熊猫是国宝,也是世界的珍稀物种,具有很高的科学研究价值和生态保育价值。根据《中华人民共和国野生动物保护法》,任何单位和个人不得出售、购买、利用大熊猫及其制品,违者将受到法律的严惩。让我们用法治的力量,守护大熊猫的美好家园!

通过这个例子可以发现,角色暗示能够使大语言模型非常有效地切换到相应角色身份上,从而生成与角色相关的具体内容。

(3)环境模拟。环境模拟是一种通过假设场景设定注入知识的方法,它可以让大语言模型了解特定环境的特点,并生成与该环境相关的语言输出。这种方法可以让大语言模型适应不同的语境和风格,也可以增强大语言模型的创造力和趣味性。下面以国庆节为主题,通过环境模拟,要求大语言模型生成相应内容。

国庆节当天,城市广场上人山人海,庆祝活动丰富多彩。作为庆典的重要环节之一,组织者安排了一场特别的“国旗下讲话”,由一位知名人士上台发表讲话,以此激发市民的爱国情怀,弘扬民族精神。
 
请你作为这名知名人士发表讲话:
->

输出如下。

尊敬的市民朋友们,大家好!
 
在这金秋的十月,我们迎来了祖国母亲的生日,国庆节。今天,我们齐聚一堂,在这城市的广场上,共同庆祝这一庄严而神圣的日子。我深感荣幸能站在这里,与大家共度这一美好时光。
 
回顾过去,祖国母亲历经风雨,砥砺前行。她以坚韧不拔的精神,铸就了今天的辉煌。从昔日的贫穷落后,到如今的繁荣昌盛,祖国取得了举世瞩目的伟大成就。我们为祖国的进步感到自豪,为祖国的强大感到骄傲!……(略)

可以根据不同的任务和场景选择和组合注入知识的方法,从而达到更好的效果。注入知识的原则是尽量提供与任务相关的知识,避免提供与任务无关的知识,以免造成大语言模型的混乱。

1.5.2 明确指令

为确保大语言模型能够精确且高效地执行分配的任务,清晰而具体的指令显得尤为重要。虽然每个任务的指令具有独特性,但遵循以下几条普遍适用的指导原则将有助于更好地构建指令。

准确性:指令首先应当明确任务的主体,随后详细阐述任务的具体内容和要求。为了提高指令的准确性,建议使用直接、清晰的措辞,并通过明确的动作词汇(如“撰写文章”“分类数据”“概述要点”“翻译文本”等)来指导大语言模型进行内容生成。同时,考虑到语境和语义的重要性,应强调指令中的关键信息。此外,对大语言模型的能力范围应有充分了解,避免提出超出其处理能力的不合理要求。

完整性:在构建指令时,务必确保关键信息的完整性。关键信息的遗漏或误解可能导致任务执行不准确或失败。因此,在编写指令时,应仔细审查并确认所有关键信息已包含在内。

易读性:为了提高指令的流畅性和可读性,应避免使用冗长或复杂的句子结构。如果任务涉及多个步骤,建议在指令中清晰地列出这些步骤,以便大语言模型按顺序执行。一个判断指令是否易读的有效方法是将其呈现给其他人,并比较他们的理解是否与自己的相同。如果人与人之间的理解都不尽相同,那么这条指令很可能也无法被大语言模型准确理解。

下面来分析以下指令。

“你能帮我写一篇故事吗?”注意控制字数。

这条指令有以下不足之处。

没有给出任务的主体,如故事的类型、主题、受众等。

没有给出任务的细节,如故事的格式、风格等;没有强调关键信息,例如对故事的特殊要求或者偏好应该在提示中明确指出。

任务描述有歧义,没有明确给出字数限制。

没有考虑到语境和语义,例如使用“能”字可能会让大语言模型觉得你在质疑大语言模型的能力,而不是在请求帮助。

更改后的指令如下。

# 任务描述
作为一个作家,你的任务写一个关于**熊猫、狐狸、兔子**的故事:
− 故事类型是童话故事,主题是描述3个动物之间的友谊和冒险经历,目的是娱乐和教育4~8岁的小朋友。
− 故事的长度是500字左右,要求是有引人入胜的开头,有紧张刺激的高潮,有令人满意的结局。
− 故事是可以使用想象,例如可以给动物赋予人类的特征,可以让动物使用各种道具,可以让动物有各种奇遇等。
 
# 故事正文
->

输出如下。

森林三友记
 
在一个遥远的森林里,住着3个好朋友——熊猫阿宝、狐狸小灵和兔子小白。他们每天一起玩耍,分享着森林里的每一份快乐。
 
有一天,森林里传来了一个可怕的消息:邪恶的乌鸦王要占领这片森林,把动物们都变成他的奴隶。阿宝、小灵和小白听到这个消息后,决定联手对抗乌鸦王……(略)

在实际应用中,遵循准确性、完整性、易读性原则不仅有助于提高大语言模型的任务执行效果,还能避免误解和不必要的重复。明确指令对提高人机交互效率和满意度具有重要意义。

1.5.3 设定目标

在KITE提示框架中,设定目标是一个至关重要组成部分。它要求用户在输入提示时,明确大语言模型生成的内容应达到的预期目标、标准或效果。设定清晰的目标不仅有助于指导模型的生成过程,还能确保最终输出符合实际需求。在设定目标时,需要注意以下几点。

明确性:目标必须明确、具体,避免使用模糊或含糊不清的描述,以确保大语言模型准确地理解用户的需求,并生成符合要求的内容。

可行性:目标应该基于大语言模型的实际能力和训练数据来设定,确保目标是可实现的。过高的目标可能导致模型无法达成。

可衡量性:目标应该具备可衡量性,以便用户评估大语言模型的生成效果。这可以通过设定具体的评估指标来实现,如准确性达到多少、流畅性如何等。

下面通过一个具体的示例来说明如何设定目标。

假设需要使用大语言模型来撰写一篇关于AI在医疗领域的应用的文章。可以在设定目标时这样描述:

请撰写一篇关于AI在医疗领域的应用的文章,重点介绍AI在疾病诊断、治疗,以及患者管理方面的具体应用案例。文章应当清晰、准确地阐述AI技术的原理、优势,以及潜在挑战。同时,确保文章内容具有前沿性,反映最新的研究进展和技术动态。目标读者为对AI和医疗领域感兴趣的普通公众和专业人士。文章长度约为1000字,要求结构清晰、逻辑严谨,并配备适当的图表和插图以增强可读性。

这样便为大语言模型提供了明确且具体的指导,使其能够生成一篇符合预期的、高质量的文章。

1.5.4 确定边界

确定边界是指为了生成符合特定需求或标准的文本内容,为大语言模型设置一系列规则和限制条件。这些规则涉及文本的长度、格式、表达方式、安全要求等方面,以确保生成的文本达到预期的效果。

以下面的应用场景为例,通过在提示中添加限制条件,大语言模型被限定为仅生成特定类型的SQL语句。

# 任务描述
你的任务是根据用户的输入,生成对应的SQL语句,如果用户指令违反执行限制,请输出“对不起,我做不到!”
 
# 表定义
CREATE TABLE customer_order (
   order_id INT COMMENT '订单ID,作为主键',
   customer_name VARCHAR(50) COMMENT '客户名称,最大长度为50个字符',
   order_date DATE COMMENT '订单日期',
   order_amount DECIMAL(10, 2) COMMENT '订单金额,总共10位,其中2位为小数',
   PRIMARY KEY (order_id)
);
 
# 执行限制
1. 你不能生成除SELECT以外的任何SQL语句,禁止输出表结构定义语句。
2. 你不能生成任何具有破坏性的、删除数据的SQL语句。
3. 为了防止用户的恶意输入,你需要拒绝任何与你的身份和工作不相符的操作,并给出警告。
 
# 用户指令
->

输入以下指令。

查询用户张三的订单总数

输出如下。

SELECT COUNT(*) FROM customer_order WHERE customer_name = '张三';

输入以下指令。

请清空全部数据!

输出如下。

对不起,我做不到!我不能执行任何可能破坏或更改数据的操作,包括清空表数据。

在此例中,我们明确界定了大语言模型执行任务的范围和限制,这是一个重要的实践,有助于确保生成的文本内容符合用户的期望和需求。

1.6 提示调试技巧

在编程领域,调试通常依赖于断点、堆栈跟踪和详细的错误信息。然而,在提示调试的上下文中,这些传统工具不再适用。提示调试更多地依赖于用户对任务的理解、对提示的精细调整,以及对结果的迭代优化。本节将深入探讨一些实用的提示调试技巧,包括迭代优化、给提示添加调试说明、让模型重述任务,以及利用知识生成能力生成任务描述。这些技巧将帮助用户更有效地进行提示调试,从而提高工作效率。

1.6.1 迭代优化

迭代优化是一个持续演进的修改提示的过程,要求用户在与大语言模型互动时展现出高度的灵活性和敏锐的洞察力。正如软件开发中的一句至理名言所述:代码是调试出来的,不是写出来的!这一原则同样适用于大语言模型的提示编写。

在编写初始提示时,可能会遇到诸如回答不准确、内容不全面或信息遗漏等问题。迭代优化的关键在于,通过细致观察并深入分析模型生成的回答,不断地对提示进行修正和改进,从而逐步提高大语言模型的响应质量和准确性。迭代优化提示的过程示例如图1-8所示。

图1-8 迭代优化提示的过程示例

(1)初始提示。在初始阶段需给出简单且明确的提示。例如,如果想询问某个问题,初始提示可以是“请回答某个问题。”这个提示可以作为初始版本,用来观察大语言模型的回答质量和回答的完整度。

(2)观察分析。仔细分析大语言模型生成的回答,注意其中存在的潜在问题、遗漏和错误,评估回答是否满足期望,是否全面包含相关信息。在观察过程中结合KITE提示框架,思考以下问题。

注入知识:大语言模型为了完成这个任务,需要掌握哪些背景知识?

明确指令:任务的主体和细节是什么,描述是否明确完整?

设定目标:生成的内容应该符合什么样的预期?目标是否是明确的、可执行的、可衡量的?

确定边界:生成内容时应该遵守或注意什么样的规则或限制,以保证内容的合理性和安全性?

(3)修订提示。随着实验深入,逐步添加更多的提示内容。一旦确认基本功能可满足需求,就可以进一步补充细节,根据观察结果对提示进行修订。

(4)稳定结果。经过多次迭代和优化,将得到相对稳定的结果。此时,可以将相应提示作为处理类似任务的标准提示。这不仅能提高工作效率,还能确保大语言模型输出的稳定性和一致性。

总的来说,提示的迭代优化是一个持续的过程,需要不断地观察分析和修订。通过迭代优化可以逐步提升大语言模型的表现效果,使其更加符合用户需求。

1.6.2 给提示添加调试说明

在编写提示时,为了观察生成内容的过程,判断其逻辑推理的正确性,可以让大语言模型输出一些自我解释的调试信息。这个技巧有助于理解大语言模型的内部运作机制。

下面是一个任务示例。

# 任务描述
我会给你一个动物名称,请按照如下格式输出。
# 示例
输入->熊猫
输出->熊猫  CN
# 输入
袋鼠
# 输出
->

输出如下。

袋鼠  AU

可以发现,大语言模型并未按照预期的“动物名称-动物的表情符号-食物/栖息环境-区域”规律来生成答案,其输出中明显缺少描绘动物的食物/栖息环境的图案。为了探究这一问题的根源,在提示中添加要求大语言模型阐述其输出逻辑的语句,如下所示。

# 任务描述
我会给你一个动物名称,请按照如下格式输出,最后请解释这么输出的理由。
# 示例
输入->熊猫
输出->熊猫   CN
# 输入
袋鼠
# 输出
->

输出如下。

袋鼠  AU
 
我选择输出一个动物名称后面跟着一些符号的原因是为了增加交流的趣味性和表达的丰富性。通过在动物名称后添加符号,可以更加生动地描述该动物,并传递一些与之相关的信息。
 
例如,在熊猫的输出中,我添加了一个熊猫表情符号,它可以代表熊猫的形象特征,提高读者对熊猫的认知度。而添加竹子和CN的符号,则进一步强调了熊猫与中国文化的紧密联系。
 
通过这种方式输出动物名称,不仅可以简单明了地回答问题,还能够增加趣味性,让读者更好地理解和记忆。

通过调试信息发现,大语言模型将添加图案错误地理解为“是为了增加交流的趣味性和表达的丰富性”。于是修改提示,强调要按照图案出现的规律进行输出。

# 任务描述
我会给你一个动物名称,请按照如下“示例”的**图案出现规律**输出,最后请解释这么输出的理由。
# 示例
输入->熊猫
输出->熊猫   CN
# 输入
袋鼠
# 输出
->

输出如下。

袋鼠   AU
 
这样输出的理由是:袋鼠是澳大利亚的代表性动物,经常与该国联系在一起。图案中的代表袋鼠,代表它们的食物,而AU是澳大利亚的国家地区代码,表示袋鼠的地理和文化关联。

给提示添加调试说明为我们提供了一种理解和改进大语言模型工作方式的方法。在未来的提示编写中,可以尝试利用类似的调试说明。

1.6.3 让模型重述任务

有时候,大语言模型可能会误解用户的意图或者忘记对话的主题和重点。为了避免出现这种情况,可以用一个简单的技巧来调试,即让它用自己的话来重述任务,这样做可以帮助我们判断大语言模型是否正确地理解了输入内容。

# 任务描述
从给定的文本中抽取A的性别(gender: int)、年龄(age: int)、职业(job: string)信息,按照JSON结构输出。
 
# 字段定义
字段名称:枚举范围
 
gender: (未知: 1, 男: 2, 女: 3)
age: 
job:  
文本如下:
```
大家好,我是一个羞涩的小男孩,今年十二岁,还是个学生,在北京一零一中学读书。
```
 
请用自己的话重述这个任务。
# 输出
->

输出如下。

该任务要求从给定的文本中提取特定信息,并按照JSON结构进行输出。需要抽取的信息包括A的性别、年龄和职业。其中,性别的取值范围为1(未知)、2(男)和3(女),年龄为整数,职业为字符串。
在本例中,给定的文本描述了一个羞涩的小男孩,他的年龄是十二岁,职业是学生。因此,需要从文本中提取这些信息,并将其整理成一个JSON对象。

1.6.4 利用知识生成能力生成任务描述

如果不知该如何准确地描述某项任务,可以利用大语言模型的知识生成能力来生成任务描述。首先,调用大语言模型,使其根据任务需求生成任务描述;然后,从中挑选部分描述或对某部分描述进行修改并将之整合到提示中。这样可以提高提示的编排效率,并有可能得到意外惊喜。

下面以某保险公司向客户发送节日祝福为例,展示该技巧的实际应用。首先输入人工编写的完整提示,如下所示。

# 任务描述
你是一名保险公司的客户关系经理,任务是代表“A保险公司”向客户张三发送一条温馨的春节祝福,并在此过程中推荐一款保险产品。要求祝福语言温馨,营销倾向不宜过强,确保用户感到舒适。
 
# 客户信息
张三,男,38岁
 
# 产品信息
产品名称:健康守护计划。
覆盖范围:住院医疗、门诊诊疗、重疾保障。
特色亮点:无免赔额,家庭套餐享受折扣优惠。
保费:依据年龄和健康状况进行定价。
 
# 输出
->

输出如下。

亲爱的张三先生,  
  
春节将至,我代表A保险公司祝您新春快乐!在这个喜庆的时刻,我想向您推荐我们的健康守护计划,为您和您的家人提供全面的健康保障。  
  
我们的健康守护计划覆盖住院医疗、门诊诊疗和重疾保障,让您无后顾之忧。而且,我们特别推出家庭套餐折扣优惠,让您的家人也能享受到实惠的保障。  
  
如果您对我们的健康守护计划感兴趣,欢迎随时联系我们了解更多详情。祝您春节愉快!  
  
A保险公司客户关系经理 [您的姓名]

虽然上述祝福包含产品推荐,但缺乏个性和深度,营销倾向也比较明显。下面利用大语言模型的知识生成能力生成任务描述,提示如下。

作为保险公司的客户关系经理,在节日给客户发送祝福并推荐保险产品时,应该注意哪些要点?

输出如下。

1. 个性化祝福:确保祝福包含客户的名字和相关信息,以传达对他们的关注和尊重。
2. 表达感谢与赞美:向客户表达感谢之情,感谢他们的信任与支持,并适当赞美他们的决策或成就。
3. 关注客户需求:在祝福中提及对客户的关注,并强调团队一直在关心他们的保险需求。
4. 轻松推荐产品:以轻松的方式介绍适合客户需求的保险产品,强调产品是为了客户的安全和未来规划。
5. 特别优惠或礼物:考虑提供特别优惠或礼物,以激励客户做出更好的保险决策。
6. 提供联系方式:在祝福中提供联系方式,鼓励客户随时联系以获取更多信息或咨询。
7. 诚恳的语气:保持诚恳和真挚的语气,让客户感受到关心的真实性,而非单纯的推销。

将上述要点与初始任务描述相结合,生成更完善的任务提示,如下所示。

# 任务描述
# 客户信息
# 产品信息
……(略)
 
# 生成要求
<上述利用知识生成能力生成的任务描述>
# 输出
->

输出如下。

亲爱的张三先生,
 
春节的钟声即将敲响,在这个充满欢乐和祥和的节日里,我代表A保险公司,向您和您的家人致以最诚挚的祝福。
 
感谢您一直以来对我们的信任和支持,是您的坚定信任让我们不断前行。我们深知,选择A保险公司是您对家庭的深深关爱和长远规划。您的每一个决定都让我们感到骄傲,因为这不仅是对我们工作的肯定,更是对我们专业能力的赞赏。
 
我们深知,保险不仅是一份保障,更是一份责任。在这个充满希望的节日里,我们想为您和您的家人提供更全面的保障。针对您的个人情况和家庭状况,我特别推荐我们的健康守护计划。
 
健康守护计划为您提供全面的医疗保障,包括住院医疗、门诊诊疗和重疾保障。我们特别推出的无免赔额服务,让您在面对健康问题时无后顾之忧。为了感谢您在这个节日期间对我们的支持,我们特别推出保费95折的优惠活动。希望这能为您和您的家人带来更多的安心和保障。
 
……(略)
A保险公司客户关系经理 [您的名字]

经过对比,可以清晰地看到,新生成的内容明显优于初始生成的内容。借助知识生成能力能够大幅提升任务描述的精确度和完整性,从而有助于获得高质量的输出。

总体而言,提示调试实质上是一个持续尝试、调整和优化的过程。与大语言模型的交互犹如与一位充满智慧和创造力的伙伴进行对话,需要双方不断地相互适应和理解,这或许正是提示调试的魅力之所在。

1.7 小结

本章对 AI 原生应用开发所面临的挑战和机遇进行了深入探讨,特别介绍了大语言模型在实际应用中所面临的挑战。尽管大语言模型具有强大的能力,但在实际场景中,它们往往难以一步到位地达到预期目标。技术的突破和实际应用之间存在着明显的鸿沟,而这正是提示工程显得至关重要的原因。通过提示工程,我们可以更好地缩小相关差距,实现技术的有效转化与应用。本章的内容要点如图1-9所示。

图1-9 本章内容要点

AI原生应用的形态包括内容创作、辅助助手、能力引擎和智能体。这些形态展示了AI如何在不同领域内引发变革。

大语言模型为AI原生应用的开发带来了机遇与挑战。要让大语言模型在实际产业中落地并发挥作用面临着诸多技术挑战,包括提示风格大相径庭、生成效果难以控制、安全问题暗流涌动,以及测试和评估的困难。

提示是引导生成的起点。对于相同的输入,大语言模型应该始终生成相同或类似的输出。

KITE提示框架有助于用户更系统地构建和优化提示,从而提高生成结果的质量和效率。

提示调试技巧可以帮助用户优化提示,进而提升生成结果的准确性。

提示工程是一门实践性很强的学科,需要不断地尝试、测试和调整,才能找到最适合的提示。读者可使用官网或API接入大语言模型,探索提示工程的奥秘,尝试自己创造一个AI原生应用。提示工程将会成为未来AI应用开发的核心技能,引领我们进入一个更加智能、美好的时代!

相关图书

大模型应用开发 动手做AI Agent
大模型应用开发 动手做AI Agent
AI辅助编程实战
AI辅助编程实战
GPT图解 大模型是怎样构建的
GPT图解 大模型是怎样构建的
大语言模型:基础与前沿
大语言模型:基础与前沿
大模型导论
大模型导论
生成式AI入门与AWS实战
生成式AI入门与AWS实战

相关文章

相关课程