本篇参考:
https://salesforce.vidyard.com/watch/UUAxcUfHYGAxH3D9wV1RxJ
https://help.salesforce.com/s/articleView?id=sf.prompt_builder_about.htm&type=5
https://www.lightningdesignsystem.com/guidelines/conversation-design/overview/
一. 什么是Prompt Template
我们或多或少都用过一些生成式AI的工具,比如chat gpt。想象一下如果我们应用gpt在我们的salesforce的平台中,我们可以想象中很多的场景。比如:
场景很多我们可以自行的头脑风暴。我们以场景4进行举例,demo来自官方trailhead进行简单修改。
You are an account executive named York Zhang from a company named XXX. You are writing to Tom, who is a director at YYY. They have been a customer of yours since 2024/10/1.
You are attempting to persuade Tom to sign up for "Dream It Possible", which is described as
"I will run, I will climb, I will soar
I'm undefeated, ooh
Jumping out of my skin, pull the chord
Yeah I believe it, ooh
The past is everything we were
Don't make us who we are
So I'll dream, until I make it real".
Describe the business value of "Dream It Possible" in the context of organizations based in New Jersey.
Write the message in the form of an email directed toward a single individual, written in English.
The message should evoke enthusiasm with intensifiers, but limit the use of exclamation points. Express casualness using contractions, referring to the recipient in second person, and using discourse markers.
Limit the message to about 500 words, and do not address any content or generate answers that you don’t have complete data on.
Follow these instructions strictly to generate only the message to be sent to the customer.
我们把这个内容发送给gpt,然后得到了它的回复。
我们会发现gpt的输出挺好的,AE可以省下了很多时间在攥写邮件,从而关注其他更重要的事情。这里有一个问题,很多人员的时间都很宝贵,总不能每次都手动输入给gpt,然后获取到内容在进行复制粘贴或者其他的操作。如何去构建一个模板争取做到用户通过点点点就可以完全搞定获取到他们的信息,这个时候就需要Prompt Template(提示模板)。
简而言之,Prompt Template是一个可重用的提示。Prompt Template包括有关客户、产品等具体详细信息的占位符。一旦这些占位符填充了真实的相关数据,提示模板就成为真正个性化的提示。成分和说明基本相同,但输出是根据您的业务和目标受众定制的。Prompt template 需要通过Prompt Builder进行构建。
二. Prompt Template组成部分
我们在第一部分通过构建了一个Prompt发送给gpt然后返回了我们相应的邮件引出了Prompt Template,那么如果我们想要做一个公用的Template,我们是否有什么准则进行参考呢? 我们可以考虑以下的几部分:
1. Participants 参加者: 描述谁在发送和接收模型的响应。在描述参与者时,我们可以使用引用记录字段、流、Apex 等的合并字段,这个我们后续会有介绍,上述Demo中的参加者就是 York Zhang.
2. Setting 设定:为模型提供上下文信息,例如响应所针对的通信渠道或内容类型。您的Prompt Template Type决定您的设置。例如,如果您选择“Field Generation”模板类型,则您的设置是Record Field。
3. Goal 目标:描述您希望通过模型的响应实现什么目标。确保考虑用户的背景、偏好和过去的行为。您可以使用合并字段向您的目标添加详细信息。上述Demo中的目标是: You are attempting to persuade Tom to sign up for "Dream It Possible"
4. Relationships 人际关系:描述所涉及的参与者之间的关系。还要提及模型的响应怎样去和参与者关联/相关。上述Demo中的人际关系是: Tom, who is a director at YYY. They have been a customer of yours since 2024/10/1
5. Data 数据:使用合并字段为模型提供相关的 CRM 数据以供使用。上述Demo中我们可以通过Data实现共通。比如我们可以对包括但不局限于以下的字段使用系统中的数据来替换实现共通模板:
6. Instructions 指示:告诉LLM你想要什么类型的内容以及它必须包括什么。将指令放在三引号边界中,这有助于LLM区分提示上下文和指令。上述Demo中的指示为:
Write the message in the form of an email directed toward a single individual, written in English.
The message should evoke enthusiasm with intensifiers, but limit the use of exclamation points. Express casualness using contractions, referring to the recipient in second person, and using discourse markers.
Limit the message to about 500 words, and do not address any content or generate answers that you don’t have complete data on.
7. Guidelines 指南:为了减少产生幻觉的可能性,给出它必须遵循的模型指南。上述Demo中的指南为:Follow these instructions strictly to generate only the message to be sent to the customer.
8. Language 语言:告诉模型以哪种语言生成响应。上述Demo中的语言是English
9. Style and Tone 风格和基调: 给出要遵循的模型风格和语气指南。上述Demo中的风格和基调: The message should evoke enthusiasm with intensifiers, but limit the use of exclamation points. Express casualness using contractions, referring to the recipient in second person, and using discourse markers.
穿插起来,一个有效的Prompt template应该考虑:
除此之外,下方还有一些官方推荐的最佳实践。
1. 确保您的提示模板简洁且易于理解。避免使用行业术语或技术术语。相反,使用自然语言和对话设计指南。
2. 迭代您的提示模板。尝试使用不同的模板实现相同的目标,看看这些部件如何影响模型的响应。获取最终用户反馈,看看您的提示模板生成所需响应的效果如何。
更多可以查看:https://help.salesforce.com/s/articleView?id=sf.prompt_builder_best_practices.htm&type=5
三. 启用Prompt Builder以及权限配置
针对Prompt Builder,有两个permission set进行使用。
权限名称 | 权限描述 |
---|---|
Prompt Template Manager | 要在 Prompt Builder 中创建和管理Prompt Template |
Prompt Template User | 在 Prompt Builder 外部访问和运行Prompt Template |
我们需要先注册一个拥有ai功能的环境,可以访问这个trailhead然后点击注册14天的免费环境:https://trailhead.salesforce.com/content/learn/projects/quick-start-prompt-builder/get-started-with-prompt-builder
如何启用Prompt Builder?
1. Setup 搜索 Einstein Setup 然后启用 einstein.
2. 设置permission set。如果用户想要配置 Prompt template,需要有 Prompt Builder Manager权限。
3. 如果需要使用einstein for Sales功能,需要启用相关功能。Setup 搜索 Einstein for Sales,然后启用Sales Emails
刷新页面以后,就可以Setup 搜索 Prompt Builder进行使用了。
四. Prompt Builder 组成部分
当我们进入Prompt Builder以后,我们可以看到下述的类似页面,我们可以将它拆分成6部分。
1. Prompt Template Workspace: 输入自然语言提示的位置。向LLM提供指令以帮助创建所需的输出,我们也可以使用merge field进行grounding接地。
2. Resource:当我们需要使用merge field进行接地时,我们可以在resource中进行选择,resource可以选择以下的内容:
InvocableMethod
注解进行声明。举个官方提供的例子:public class OpenCasesPrompt {
@InvocableMethod(label='Open Cases'
description='Find Cases for an Account'
CapabilityType='PromptTemplateType://einstein_gpt__fieldCompletion')
public static List<Response> getCasesPrompt(List<Request> requests) {
// Validate the expected number of requests as an input
if (requests.size() != 1)
throw new ListException('The requests list must contain one entry only');
Account a = requests[0].RelatedEntity;
ID searchAcctId = a.Id;
List<Case> cases =
[SELECT Id, Subject, Description
FROM Case
WHERE AccountId = :searchAcctId AND Status != 'Closed'
WITH USER_MODE];
string responseData = null;
if(cases.isEmpty()) {
responseData = 'There are no open cases.';
} else {
for(Case c : cases) {
responseData =
(responseData != null) ? responseData + '\n' : '';
responseData += String.format('Case details: {0}, {1}.',
new List<Object>{c.Subject, c.Description});
}
}
List<Response> responses = new List<Response>();
Response res = new Response();
res.Prompt = responseData;
responses.add(res);
return responses;
}
public class Request {
@InvocableVariable(required=true)
public Account RelatedEntity;
}
public class Response {
@InvocableVariable
public String Prompt;
}
}
3. Configuration: 允许你选择当前的Prompt你想使用哪种模型类型来生成动态内容,比如你可以选择 GPT 3.5 / GPT 4.0等。
4. Selected Record:当我们的内容区域包含了merge field,我们需要选择数据,这个数据将会替换merge field动态接地。
5. Resolution:允许你选择具体的数据来查看Prompt,这个选择的数据会替换我们内容区域的merge field信息。
6. Response:允许你预览生成的内容,我们可以通过Response模型来知道我们的内容是否符合要求以及是否进行了我们预期内容的生成。
四. Prompt Template Type
通过上述步骤,我们就可以开始着手创建Prompt template了。那么Salesforce支持哪些类型以及这些类型的介绍是什么呢。
Prompt Template Type | Description |
---|---|
Field Generation | 为 Lightning Experience 中的记录字段生成内容。在 Salesforce 中,用户单击按钮来运行此提示并使用输出填充该字段。 |
Record Summary | 汇总记录数据以获得记录的全面视图。记录摘要提示模板由 Summarize Record standard invocable action使用。在 Einstein Copilot 中,它们由Summarize Record standard copilot action使用。 |
Sales Emails | 根据记录数据生成个性化的客户电子邮件。 |
Flex | 为其他模板未涵盖的任何商业目的生成内容。 Flex 提示模板可让您定义自己的资源。最灵活的一种。 |
这些是我们在创建的时候可以选择到的template type,除了我们自定义Prompt以外,salesforce还提供了一些标准的prompt template. 其中标准的template type还包括一个:Record Prioritization,用于Einstein Copilot,这里不做展开,当前只关注上述4种类型。这里我们只举例一下 Field Generation 以及 Sales Email,其他的类型大家可以自行查看官方文档。
1. Field Generation举例
我们的需求是整理一下当前的Account有哪些 open case,并且对这些 open case做一些简洁的总结。我们在开发实施以前先思考一下需要考虑哪些内容?
那么我们根据上述的步骤进行实施。具体的步骤可以参考:https://help.salesforce.com/s/articleView?id=sf.prompt_builder_add_flow_without_data_cloud_field_gen.htm&type=5
构建Flow:我们选择的Flow类型是 Template-Triggered Prompt Flow,然后input是auto input,并且设置object为account。针对当前的Account是否拥有Open Case有两个分支,如果没有Case,则增加一个No Case的Prompt Instruction。如果包含Open Case,则将Subject以及Description都加入 Prompt Instruction. 最终的output我们可以看到就是Prompt Instruction。
构建Prompt Builder:我们通过instruction将template内容补齐,通过merge field达成动态输入,我们可以看到demo中有两个动态的变量,AccountId以及Open Case的信息。通过Preview我们可以看到open AI可以基于系统数据进行动态接地,点击Preview以后的response如果符合我们的预期,我们便可以active这个template。
配置字段:首先需要将form升级为dynamic form,然后选择对应的prompt template,这样在详情页点击字段右侧,就可以弹出einstein bot来动态输入内容,如果我们觉得满意,就可以点击use从而完成此功能。
所有的模板的原则, Human-in-the-loop,一定要保证最终用户在这个流程中进行review。
2. Sales Email举例
这里我们直接用官方的demo进行举例。向Lead推荐公司的某款Product,发送会议邀请。篇中我们可以看到大部分都用的merge field,其他的没有额外特殊的地方。
我们进行一下演示。
总结:篇中主要介绍Prompt Builder的使用以及Prompt Template的一些规则。篇中有错误地方欢迎指出,有不懂欢迎留言。其他部分可以基于文档自行查看。