Salesforce AI Specialist篇之 Prompt Builder
本篇参考:
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的平台中,我们可以想象中很多的场景。比如:
- 我是一个酒店前台。客人定了我们公司的酒店,我给客户发送一下欢迎预定的邮件,内容包括预订信息,酒店地址,可能增加一些比如天气预报或者四周游玩的内容。我们可以将这些关键信息发送给gpt,然后gpt返回给我们一个草稿版的邮件,我们review完成觉得不错进行发送。
- 我是一个销售人员,有一个opportunity我刚接手,我想了解一下这个opportunity的一览信息的整理/总结。
- 我是一个客服,针对客户的case和客户多次沟通记录了很多的comment,我想快速对这些comment进行整理。
- 我是一个AE,我有一个潜在客户,我希望通过邮件向他推销我们公司的产品以便更好的宣传以及促成潜在的机会。
场景很多我们可以自行的头脑风暴。我们以场景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实现共通。比如我们可以对包括但不局限于以下的字段使用系统中的数据来替换实现共通模板:
- Your Name
- Your Name's Company
- Customer Name
- Customer Role
- Customer Company
- Product Name
- Product Description
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应该考虑:
- What’s the goal of the prompt template?—By declaring the goal of the response first, you can better answer all the subsequent questions.
提示模板的目标是什么?——通过首先声明响应的目标,您可以更好地回答所有后续问题。 - Who is involved?—Describe the participants who send or receive the response, the relationship between the participants, and the relationship between the participants and the response.
谁参与?—描述发送或接收响应的参与者、参与者之间的关系以及参与者与响应之间的关系。 - What’s the context of the prompt template and the response?—Define a setting for the model response, the CRM data to ground the prompt in, and add a command that tells the model what to generate.
提示模板和响应的上下文是什么? - 定义模型响应的设置、提示所依据的 CRM 数据,并添加告诉模型要生成什么内容的命令。 - What guardrails does this prompt template need to succeed?—You can add more information, such as instructions for the response’s style and tone.
此提示模板需要哪些防护栏才能成功? - 您可以添加更多信息,例如响应风格和语气的说明。
除此之外,下方还有一些官方推荐的最佳实践。
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可以选择以下的内容:
- Flows Merge Field:当你的逻辑当前标准的merge field无法解决时,可以采用Flow Merge Field,比如我们想要整理Account数据中所有他的Open Case的信息,我们可以考虑使用这个类型,首先通过Flow选择Template-Triggered Prompt Flow 类型进行构建,然后我们就可以在Prompt Builder中选择到了此类型。
- Apex Merge Field:同Flow Merge Field,如果标准功能搞定不了,我们可以通过apex进行复杂逻辑的构建来实现接地进行动态输入。apex class需要使用
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;
}
}
- Current Organization Merge Field: 当你想要用当前org的信息接地进行动态输入时,可以选择此类型,比如需要用到当前Org的Fax信息作为动态参数接地使用。
- Current User Merge Field: 当你想要用当前运行用户的信息接地进行动态输入时,可以选择此类型,比如需要用到当前用户的Email作为动态参数接地使用。
- Record Merge Field: 当你想要当前记录的一些字段值接地进行动态输入时,可以选择此类型,比如想要用到当前记录的Case Type作为动态参数接地使用。
- Record Related List Merge Field: 当你想要当前记录的关联列表数据接地进行动态输入,可以选择此类型,比如你需要当前记录的 Case Histroy作为动态参数接地使用。例如点击下方图中的Case,然后就可以在最下方选择到Case Histories(全部的histories,如果想要进行filter,需要使用apex/flow merge field)
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做一些简洁的总结。我们在开发实施以前先思考一下需要考虑哪些内容?
- open case而不是所有case,所以我们无法使用 related list,只能通过apex或者flow进行变量传递。
- 针对open case信息进行总结而不是针对当前的数据进行总结,所以使用Field Generation类型。
- 这个字段的赋值是需要基于AI生成,所以需要开启dynamic form,然后可以针对这个字段选择基于指定的prompt template进行生成。
那么我们根据上述的步骤进行实施。具体的步骤可以参考: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的一些规则。篇中有错误地方欢迎指出,有不懂欢迎留言。其他部分可以基于文档自行查看。
Salesforce AI Specialist篇之 Prompt Builder的更多相关文章
- 京东云与AI 10 篇论文被AAAI 2020 收录,京东科技实力亮相世界舞台
美国时间2月7-12日,AAAI 2020大会在纽约正式拉开序幕,AAAI作为全球人工智能领域的顶级学术会议,每年评审并收录来自全球最顶尖的学术论文,这些学术研究引领着技术的趋势和未来.京东云与AI在 ...
- 【Salesforce】入门篇
Salesforce.com 一开始是一个云端的销售自动化(Sales Force Automation, SFA)以及客户关系管理工具(Customer Relationship Managemen ...
- 最新版本 Stable Diffusion 开源 AI 绘画工具之使用篇
目录 界面参数 采样器 文生图(txt2img) 图生图(img2img) 模型下载 界面参数 在使用 Stable Diffusion 开源 AI 绘画之前,需要了解一下绘画的界面和一些参数的意义 ...
- salesforce
salesforce&apex salesforce开发的小心得 salesforce零基础学习(七十七)队列的实现以及应用 摘要: 队列和栈简单的区别为栈是后进先出,队列是先进先出.队列也是 ...
- python 全栈开发,Day122(人工智能初识,百度AI)
一.人工智能初识 什么是智能? 我们通常把人成为智慧生物,那么”智慧生物的能力”就是所谓的”智能”我们有什么能力?听,说,看,理解,思考,情感等等 什么是人工智能? 顾名思义就是由人创造的”智慧能力” ...
- 大白话建造者模式(Builder Pattern)
前言 起初打算按照之前的日产系列写建造者模式.但参考了网上的很多文章,让我对建造者模式更加的困惑,也害怕自己无法已易懂的方式进行解释.最后通过Google发现了一篇英文文章Builder,使我茅塞顿开 ...
- 声网AI降噪测评系统初探
作者:孟赛斯 前言 音频质量的优化是一个复杂的系统工程,而降噪是这个系统工程中的一个重要环节,传统的降噪技术经过几十年的发展已经陷入了瓶颈期,尤其是对非平稳噪声的抑制越来越不能满足新场景的需求.而近几 ...
- TGL站长关于常见问题的回复
问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...
- 文心ERNIE-ViLG,你的免费插图画师
你是否想拥有一个专属画师,免费为你的优美文字插上几幅优美的插图?如今依然实现 最近AI作画确实很火,在DALL-E和Imagen崭露头角之后,ERNIE-ViLG.Stable-Diffusion(S ...
- Midjourney 提示词工具(10 个国内外最好最推荐的)
Midjourney,是一个革命性的基于人工智能的艺术生成器,可以从被称为提示的简单文本描述中生成令人惊叹的图像.Midjourney已经迅速成为艺术家.设计师和营销人员的首选工具(包括像我这样根本不 ...
随机推荐
- JMeter+Ant+Jenkins接口自动化测试框架(Windows)
一:简介 大致思路:Jmeter可以做接口测试,也能做压力测试,而且是开源软件:Ant是基于Java的构建工具,完成脚本执行并收集结果生成报告,可以跨平台,Jenkins是持续集成工具.将这三者结合起 ...
- Charles抓包配置、常见问题和解决方法
1.下载安装charles,官方下载地址:https://www.charlesproxy.com/download/ 如图,下载所对应系统需要的相应版本即可. 2.解压Charles包,双击Char ...
- Umov移动方块-scratch编程作品
程序说明: <Umov移动方块>是一款基于Scratch平台制作的小游戏.在这个游戏中,玩家将面对一个3×3的圆圈棋盘,并通过鼠标控制蓝色方块在这些圆圈中灵活移动.游戏的挑战在于,舞台的四 ...
- 【转载】 GPU地址空间的相关概念
为了结合上篇 文章 https://www.cnblogs.com/devilmaycry812839668/p/13264080.html 对RTX显卡是否能够实现P2P通信功能,同时专业级别显 ...
- 读《Simple statistical gradient-following algorithms for connectionist reinforcement learning》论文 提出Reinforce算法的论文
<Simple statistical gradient-following algorithms for connectionist reinforcement learning>发表于 ...
- 国产操作系统 deepin —— UOS 系统下使用蓝牙音箱或蓝牙耳机不能正常工作
近日搞来了一个国产CPU的电脑,自带系统为UOS,具体可见: https://www.cnblogs.com/devilmaycry812839668/p/14828130.html 忽然发现这个系统 ...
- (续) python 中 ctypes 的使用尝试
内容接前文: https://www.cnblogs.com/devilmaycry812839668/p/15032493.html ================================ ...
- 如何在python同一应用下的多模块中共享变量
最近在考虑编码风格的问题,突然想到如何在一个python应用下的多个模块中共享一个变量.最早接触python还是在python2.5版本左右,那个时候由于python的import规则设定的问题导致本 ...
- 面试官:JDK中都用了哪些设计模式?
设计模式是前辈们经过实践验证总结的解决方案,帮助我们构建出更具可维护性.可扩展性和可读性的代码.当然,在面试的过程中,也会或多或少的被问到.那么今天,我们就来看一道设计模式中的常见面试问题:JDK 中 ...
- springcloud集成grpc(二)
码云地址:https://gitee.com/lpxs/lp-springcloud.git 有问题可以多沟通:136358344@qq.com. 上一章内容介绍了springboot2集成net.d ...