- 参考《【GLM课程】ChatGLM 大模型应用构建 & Prompt 工程》
- 智谱清言、智谱AI开发平台、ChatGLM 博客
基座模型类似于知识的学习阶段,它用于理解各种知识。而指令模型则类似于专业的训练阶段(刷题),它与人类认知对齐,使模型能够在特定领域表现出色。
这可以类比为学习英语的过程,阅读教材是基础,但在参加考试之前需要刷题,了解如何解答特定领域的问题。指令工程的任务就是为模型提供这种训练和指导。
了解大型模型能够完成的工作非常重要。大型模型的工作可以分成三个主要类别:
这些工作类别展示了大型模型的多功能性,它们可以在各种领域和场景中为自动化和智能化的任务提供支持,从而提高效率和便捷性。
To B
、To C
场景应用区别在应用大型语言模型时,不同的场景需要采取不同的策略和原则。以下是对不同场景的应用原则的总结:
To C场景(面向消费者):
全能助理: 大模型在To C场景中充当全能助理的角色,用户可以通过不断提出要求,获取新的内容。
不断完善指令: 在这个场景中,指令的提炼是一个迭代过程。用户可以开始简单的指令,然后根据模型的反馈逐渐完善指令,以获得更精准的输出。
灵活性: 在To C场景中,模型的输出需要适应不同用户的不同需求和思考方式。因此,灵活性和个性化是关键。
内容可调整: 用户在最终输出内容上具有一定的自由度,因为通常还需要经过人工干预和修改,以确保满足特定需求。
To B场景(面向企业):
工程化指令: 在这种场景中,指令通常需要具有工程化特性,以适应确定的场景。这包括稳定的输入和评测集,以确保模型的稳定性和可用性。
系统交互: To B场景通常需要与其他系统进行交互,因此输出内容必须具有稳定的格式,以实现与下游系统或业务目标的互动。
在To C场景中,大模型更像一个灵活的助理,而在To B场景中,它更多地作为一个专门的工具,服务于特定场景和需求。用户根据产品经理给定的prompt格式(APP)来输入关键内容,引导用户完成有效的输入。有了大模型,产品经理可以更专注于产品的定位、设计,引导用户进行有效输入。指令工程师根据这些指令开发一个让大模型更稳定执行指令的APP(根据一个稳定的输入评测集,来做工程化的大模型方案,得到业务可用的结果)。
为了有效地应用大模型,首要任务是将它嵌入到企业的业务流程中。举例来说,假设企业需要进行大量的招聘面试工作。在评估候选人时,通常需要查看其简历和过往面试官的评价。在这种情况下,可以在招聘系统中添加一个按钮,让大模型一键总结前序面试官的内容,然后以表格形式输出候选人的优点和缺点。大模型在文本理解和生成方面表现出色,因此这是嵌入业务流程的一个非常有用的功能。
大模型在文本理解、生成和一些基础推理方面具有强大的潜力。因此,在企业内部应用大模型时,应该充分发挥其这些潜力。产品经理和业务专家需要了解大模型的能力,然后从企业的现有业务系统中找到可以应用大模型的领域。这可能包括自动文本总结、信息提取、自然语言推理等多个方面。
大型模型不是一个神奇的许愿池,不能只是告诉它目标然后期待它完成一切。相反,我们需要重新设计一套流程,以解决具体的问题。下面举例说明:
问题背景: 旅游行业的老板需要构建一个能够进行行程规划的门店机器人
分解流程: 为了满足业务需求,我们将行程规划拆解为四个步骤,以明确模型的任务和目标。
a. 步骤一 - 角色扮演和信息收集: 首先,模型扮演角色,与用户进行自然语言交互,收集关于旅行需求的信息,如目的地、旅行偏好、出行人数等。这是一个自然而然的门店机器人交互,可以提供良好的用户体验。
b. 步骤二 - 信息提取: 接下来,模型从之前的对话中提取关键信息,例如预算、出行人数、具体家庭成员和目的地清单等。这些信息在后续步骤中用于行程规划。
c. 步骤三 - 行程规划: 模型可以利用提取的信息向外部服务(如携程)或内部的行程规划系统发出请求,生成行程规划建议。大型模型通过微调训练还可以自己进行行程规划。
d. 步骤四 - 生成路书: 最后,机器人根据用户的家庭情况和景点信息生成一份可读性高的、精美的路书。模型收到指令,按照每天的旅行计划、景点介绍以及家庭成员的情况,生成与用户需求切合的文本。这样,我们向用户提供了有价值的行程建议。
这个示例强调了如何将业务目标重新分解为一系列任务,以明确大型模型的任务和指导。这种方法有助于确保模型能够有效地满足特定的业务需求。
在设计和管理大模型应用时,有一些关键技巧可以帮助提高效果和用户体验:
例如,在用户希望大模型帮助写歌曲的情况下,用户通常会提供主题、风格等信息。为了有效地与用户的输入交互,可以事先准备多个围绕不同主题的模板,然后通过将用户的输入与适配的模板结合成一个结构化的指令。这样的设计允许产品经理通过交互引导用户提供有效的输入,也有利于指令工程师更好的进行语料收集、指令开发、指令微调。
在下图示例中,大模型需要根据用户输入的指令来操控汽车内的设备。为了实现这一点,产品经理需要设计通用的指令,使其能够控制多种设备,如空调、座椅和车窗。这些指令需要包括具体的操作动作和前提条件,并设计出稳定的输出结构,以此来让大模型可以有效地将人类语言转化成设备可操作的指令。
将大模型的任务细分为特定场景和问题类型,以便让大模型更专注地解决某一类问题。例如,用户可能需要大模型回答学科类问题,如数学或语文。为了提高效果,可以对这些问题先进行分类,然后针对每个分类设计指令,表明大模型在特定领域的专业性(比如提示模型,你现在是专业的语文老师…)。此外,还可以为每个领域准备一些CoT示例,以帮助大模型更好地回答问题,并进一步提高输出的质量。
以医疗问诊场景举例,希望大模型做一个初步的疾病诊断。在互联网医疗场景中,远程和医生沟通的时间和成本都比较高,如果大模型能够先采集有效的病人信息,就可以节省很多时间成本,但这可能需要大量专业医疗知识,比如呼吸道疾病该怎么问诊、消化道疾病该怎么问诊。如果大模型发散的去问,效果可能不好。
为了解决这个问题,可以借助外部控制系统,将问诊过程与医疗知识图谱相结合,以稳定和有效的方式提供信息,并确保问题的可控性。
此外,多轮问诊会话的信息需要提炼收集,这也可以通过外部系统(另一个指令)来不断提取对话信息,然后与疾病诊断知识图谱进行比对,以确保问题不会被遗漏或重复。
在英语陪练场景中,大模型可以专注于进行英语对话,同时需要处理多个任务,如在对话中保持语法检查、口语化要求和语言风格,同时还需要进行对话内容的检查(是否违规、是否完成订餐等对话目标)。
为了处理这种多任务情况,可以使用两个大模型指令,一个用于陪练对话,另一个用于检查对话内容。这样,两个大模型可以协同工作,以确保达成英语陪练的目标,同时保持对话的质量和合规性。
在处理长文本总结时,用户通常希望将上万字的长文本精炼为200至300字的摘要。一种常见的策略是将长文本进行切片或分段处理,然后通过第一个指令来生成每个片段的摘要。
随后,这些片段的摘要可以被合并成一个整体摘要。如果已经满足了用户的总结需求,就可以结束处理。如果未达到总结目标,可以回到原始文本,进一步切分文本,重复上述过程。这种循环迭代的方法类似于"map reduce"的思想,可以有效地处理长文本总结的问题,确保最终生成的摘要符合用户的期望。
通过上述讨论的技巧,可以在不同的场景中将大型模型成功应用于现有的业务系统或解决新问题。
对于大模型的应用,以下几个方法非常重要:
制定流程图:在项目开始之初,制定一个清晰的流程图非常关键。流程图有助于简化并理解大模型在业务流程中的角色和任务,促使业务方对其功能和能力有更准确的认知。
定义评测标准:大模型的应用往往需要以准确率为依据进行评估,评测标准也是达成可控率的重要手段。在项目初期,用户很难提供完善的评测标准,因此需要通过迭代过程逐渐形成。评测标准有助于确保上线效果符合期望。
使用评测数据:评测数据是验证模型性能的关键因素,也可用于补充和改进需求。用户可能无法准确描述其期望的结果,但通过收集真实的评测数据,可以更好地理解用户需求,从而快速将应用落地。
下面是作者经历的一个需求案例,如何逐步完善一个问答系统的功能以满足用户需求:
起初需求: 用户最初要求构建一个问答系统,该系统可通过一套指令和知识库来回答问题。
加入报案功能: 随后,用户提供了评测数据,表明他们希望系统不仅仅是回答问题,还可以帮助他们完成报案的动作。这需要系统具备意图识别功能,并能够引导用户提供报案信息,例如车险报案。
满足更多需求: 在进一步的对话中,用户提出了更多的要求,例如希望系统能够推断出报案的具体时间和地点。用户可能在对话中提到“刚刚”或其他含糊不清的时间信息,系统需要通过大模型的推断来提供确切的答案。
指令的完善: 为了满足更多的用户的新需求,系统需要进一步完善指令,以便大模型可以处理更多的信息和推断任务。
总的来说,这个案例突出了在构建问答系统时,如何根据用户需求逐步扩展功能,包括意图识别、信息引导和推断能力,以使系统满足不断变化的用户期望。这些都是大模型可以胜任的任务。
指令是用于从模型中检索信息的请求,它描述了用户的需求,但通常没有具体的语法或固定格式。指令可以涵盖广泛的领域,包括知识检索、任务执行、自然语言生成等。例如,用户可能希望查询中国各个直辖市的人口情况。
指令编写过程中,存在一些问题:
个人经验的局限性: 指令编写通常依赖于个人经验,这种情况下,其他人可能难以直接使用相同的指令,因为它们可能与其他问题或模型不兼容,导致效果不稳定。
灵活性欠缺: 他人分享的指令难以修改。为了增加指令的复用性,在指令工程中,可以将一些内容变成可配置的变量,这样,其他人可以更容易地修改和复用指令。
敏感性和评测: 指令中的词语或格式的微小更改可能会影响最终输出的内容,特别是在生产环境中,其中查询之间可能存在强烈的依赖关系。因此,在生产过程中,通常需要进行评测和不断的指令改进。
不同模型的差异: 同一指令在不同的模型之间可能会产生不同的效果。然而,通过进一步优化,可以使指令在不同模型上都能够产生良好的效果。
指令工程是NLP领域对话系统相关的工作流程和方法,旨在创建和改进用于与大型语言模型进行对话的指令或请求,不断提高模型的性能和适应性,以确保在实际应用中能够产生预期的结果。指令工程是一个迭代的过程,通常包括以下步骤:
创建指令: 基于任务需求,创建一份初步的指令。
实施指令: 使用该指令来生成模型的输出。
评测和分析: 使用评测集来测试指令的效果,并分析模型在不同情况下的表现,包括检查badcase。
优化指令: 根据评测和分析的结果,修改和优化指令,以改善模型的性能。
持续评测: 随着模型或任务的变化,持续评估指令的效果,并根据需要进行修改。
稳定评测: 使用稳定的评测集来确保指令在不同场景下表现一致。
在过去的半年多时间里,我们团队完成了大量指令的开发和评测,在这个过程中得出了一些关键观点:
指令的潜力:在优秀的大型模型上,通过指令的精心设计和开发,可以实现高水平的效果,甚至能够达到90分、95分甚至更高的水平。这证明了指令工程的潜力,它可以帮助落地产品,同时也可以帮助个人在生活和工作中解决问题。
灵活性和适应性:指令工程需要具备灵活性,能够根据不同的需求场景进行开发和调整。不同的任务可能需要不同类型的指令,因此团队需要适应不断变化的需求。
综上所述,指令工程在将大型模型应用于实际场景中发挥了关键作用,它可以帮助模型的性能和效果达到最佳水平。无论是团队还是个人,都可以受益于指令工程的方法和实践,以应对多样化的问题和需求。
在指令编写中,有一些重要的知识和原则:
例如,在编写求职信的指令中,您可以明确要求开头部分表明为什么对该职位感兴趣,中间部分描述为什么自己适合该职位,结尾表达对未来的期望并表示感激之情。这种方式有助于引导模型按照您的期望生成内容。
编写指令时,通常包括以下几个关键部分:
上下文(可选): 指令的上下文部分应该包括角色和任务,这有助于模型更好地理解任务。同时还应该提供一些相关的背景知识,以便模型在执行任务时可以参考,这包括领域特定的信息或知识库。
指令本身(必选): 在指令中,明确指定执行任务的步骤或逻辑。这些步骤可以按照顺序列出,以告诉模型应该按照什么顺序完成任务。您还可以提供一些样例数据或示例,以帮助模型更好地理解任务的性质。
输入内容(必选): 输入内容可以是对话、文章或者提问的形式。
输出格式(可选): 在指令的最后部分,应该包括一个输出指引,以明确模型应该输出的信息或结果的格式。
例如,需要大模型从对话中提取销售过程中的关键信息,您可以在指令中包括上述四个部分,使指令更加完备和清晰,同时使用变量来表示输入的对话内容和输出的信息点格式。
# 结构
你是对话信息提取器,你要按顺序完成任务,从客户对话中找到的客户提出的关注点,按照输出格式输出4个客户认为最重要的关注点词语
你需要按顺序完成任务:
1. 找到在客户说的话中出现的关注点并精简为词语,如果没有找到任何客户提出的关注点,请输出"未涉及"
2. 按照客户的关注度从高到低排序,按输出格式输出4个客户最关注的词语
3. 检查你的输出内容,如果你输出的内容是一句话,请重新输出总结为词,按照输出格式输出 json
对话:
"""
( input )
"""
输出格式:
{"客户关注点:["."]}
在编写指令时,了解大型语言模型的能力以及使用一些指令编写技巧,可以帮您更好地引导大模型执行任务。以下是一些关键点:
提供明确的步骤: 在编写思维链时,确保提供明确的步骤,让模型逐步完成任务。每个步骤都应该包含明确的指导,以便模型按照您的期望进行思考和行动。
示例数据: 在思维链中,您可以包括示例数据或情景,以帮助模型更好地理解任务。这些示例可以用于引导模型进行推理和计算。
反馈和迭代: 审查模型生成的结果并提供反馈,然后根据反馈不断改进思维链。迭代是不断提高任务执行效果的关键。
4. 无示例的思维链
下面的例子中,我们要求模型进行逐步思考,并指示了思考的关键点是水果数量的变化。
Top-k 和 Temperature
在编写指令的过程中,两个重要的超参数需要调整:Top-k 和 Temperature。
Top-p: Top-p 参数用于控制模型生成内容的多样性。当设置较低的 Top-k 值时,模型更倾向于选择概率最高的词语,使生成内容更加稳定和确定。设置较高的 Top-k 值时,会增加生成内容的多样性,使模型更有创造性,但可能会导致一些内容不够准确。
Temperature: 温度参数通过数学公式影响了词语之间概率的区别,从而影响生成内容的多样性。较高的温度值会使模型生成更多多样的内容,这些内容可能更具创造性,但也更加随机。较低的温度值会使模型更加倾向于选择概率最高的词语,生成内容更加确定和稳定。
在某些情况下,例如信息抽取或问答任务,较低的温度和较低的 Top-p 值可能更合适,以确保生成的答案更加准确和可靠。而在创造性写作等场景中,较高的温度和较高的 Top-p 值可能更适合,以生成更具多样性和创造性的内容。在实际应用中,通过反复调整这些超参数,可以找到最适合特定任务和场景的配置,以获得满意的生成结果。
知识注入: 在某些场景下,你可以通过注入知识来帮助大模型生成更准确的结果。
表格注入:如果你使用表格数据,确保将表头或解释信息附加在每个数据前面,将表格数据的呈现方式转化为更接近自然语言的表达,以帮助大模型更好地理解数据的含义,提高其理解和生成答案的准确性。
目标:在许多场景中,希望使用大模型对表格数据进行简单的分析,例如检查数据中的增长或下降趋势。
数据来源:数据通常直接来自Excel或PDF文件,需要进行解析和准备。
难度增加:直接使用原始平铺的表格数据对大模型来说难以理解,因此需要采取措施来提高模型的理解能力。
组织数据:为了更好地注入数据,建议将表头或解释信息与每个结构化数据相关联,放在每个数据的前面。例如,第一行可以表达2022年的收入、同比数据和收入增长数据等。
顺势而为: 在编写指令时,尽量根据大模型的能力和认知方式来书写,减少非常规或不必要的逻辑,避免让模型做难以理解的操作。
通过这些经验和技巧,可以更好地编写指令,提高大模型生成结果的质量和准确性,同时确保大模型能够理解和执行每个任务。
在一个实际的指令生产和迭代过程中,我们面对的是一个教学场景,辅助老师批改作文,需要从作文中抽取比喻句、拟人句和排比句,但大模型对这些概念不是很清晰,需要不断迭代来改进。
业务要求:
实现方法和改进进程:
初始尝试: 最初的指令要求模型直接提取比喻句、拟人句和排比句,但效果不佳。大模型对这些概念不是很清晰,比如很容易将是字句认为是比喻句,所以得分普遍在六七十分之间。
更具体的定义: 优化指令,明确定义比喻句、拟人句和排比句,并要求输出修辞手法等。效果提升不明显。
任务拆分: 将任务拆分,比如先专注于提取比喻句,并在指令中加入语文老师的身份信息。因为任务更专注了,提升了效果,但还远达不到可以上线的要求。
提供思考路径,引导大模型全面分析: 在明确比喻句定义的同时,告诉模型什么是本体,什么是喻体,并引导大模型思考路径。我们要求大模型不仅输出答案,还要呈现一个完整的分析过程,句子中是否有具体的本体和喻体,是否是比喻句句式,最终判断是否是比喻句。
优化指令表达: 调整指令文本中的词汇和表达方式,以尝试提升大模型的效果,例如将提取变为识别并提取等等,效果不明显。
增加示例: 为了进一步提高大模型的性能,我们给大模型提供更多示例。在示例中告知大模型哪些句子是比喻句,同时明确每个句子中的本体和喻体。尽管提供了示例和明确的结构,但效果提升微弱
提供负例: 为了进一步改善模型性能,引入了负例,告诉模型哪些句子不是比喻句,以及为什么不是。通过引入负例并解释其原因,性能显著提升。
提供排比句思维链: 对于排比句的处理,明确了分析排比句的步骤,包括观察是否有三个或三个以上的句子,以及词语与句子之间的相似性等。
调整文本顺序: 在处理文本时,要注意文档的窗口长度和内容出现位置对结果的敏感性。如果想强调特定内容,可以尝试调整文本顺序,以影响大模型的处理方式。比如在提出负例时,有时候会出现不应该提及的信息。在这种情况下,将负例放在示例的前面,也略微提高了一些效果。
以上就是完整的指令迭代过程,最终实现了指令的高质量,满足了业务需求,使模型能够准确地抽取比喻句、拟人句和排比句,并提供详细的分析过程。
目前还不行。目前的B端场景往往是全新的,大模型之前未见过,还是需要手动编写和迭代指令。但是随着大模型能力的提升,随着对更多C和B场景的了解,指令的编写可能会变得更加高效和自动化。
微调模型时,如果A领域与B领域存在较大的差异(如法律和医疗),微调一般没有太大价值。如果是在同一领域内类似但具体要求不同的问题上,会有一些帮助。
比如短文本与长文本写作,模型的泛化能力可能有助于将相关的指令和内容一并训练,大模型可以迁移一些能力,从而在相关场景中产生有帮助的效果。
不同大型模型之间的项目迁移工作量会根据情况而异,通常需要重新编写和评测指令。虽然不同大型模型之间可能需要重新编写指令,但可以复用原始产品方案中的一些功能。随着未来模型能力的增强,或许几年后可能会有更好的解决方案,但在当前和接下来的几年内,通过指令工程仍然可以快速提高生产力,对于落地大模型成为生产力而言,仍然是高效且有价值的方法。
在构建思维链时,关键是围绕着解决问题的题目来构思。可以将人解题的过程尽可能结构化的给到大模型,比如问题、上下文信息以及相关步骤提供给大模型,以帮助构建思维链。
生成可执行的SQL:大模型需要生成最终的SQL查询语句,这需要相关的表头信息和问题作为输入,以及将问题的语义映射到SQL的能力。
前置的工作:在SQL生成之前,需要确定从海量的表中选择相关的表,这可以通过将表的相关信息(如注释、业务归属等)转化为向量并进行相似性计算来实现。表结构信息也需要作为强约束纳入考虑,以确定哪些字段是最重要的。
构造知识库:建立一个知识库,其中包括表信息、字段信息和指标信息,以便在第二个步骤中进行相关性检索。
在极其敏感的场景中,使用大模型可能需要辅助外围的工程化手段,如科研等,以确保数据的准确性。特别是在需要高精度的情况下,外围辅助工程可能是必要的。
微调的数据安全性取决于所使用的大模型技术以及供应商提供的服务。如果自行研究和使用模型,安全性完全取决于数据存储在何处。云端服务提供商可以提供私有化的实例,确保数据只进不出,并进行审计,以保障数据的安全性。
指令微调的核心能力是对齐,帮助模型更好地理解和响应特定的指令。尽管微调可以注入一些新词或知识,但如果需要大量的新知识,这可能不太经济。在这种情况下,更好的做法可能是将新知识集成到模型的预训练中,然后再进行指令微调,以更高效地使用这些知识。
智谱清言:可以在C端应用中使用,用于对话交互、提出问题等。
智谱AI开发平台:该平台提供了GLM模型的接口,使开发者能够在本地进行应用开发。开放平台还提供了一个简单的调整指令的工具,以及一些基础设施,如知识库服务。用户可以上传知识并利用平台提供的技术细节,实现用于回答问题的embedding数据库。此外,用户可以通过分享链接或者接口将知识库集成到他们的组织中,以在云端进行知识问答等应用。