Salesforce AI Specialist篇之 Prompt Builder

简介: Salesforce AI Specialist篇之 Prompt Builder

一. 什么是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.

  1. Guidelines 指南:为了减少产生幻觉的可能性,给出它必须遵循的模型指南。上述Demo中的指南为:Follow these instructions strictly to generate only the message to be sent to the customer.

  2. Language 语言:告诉模型以哪种语言生成响应。上述Demo中的语言是English

  3. 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.
  1. 设置permission set。如果用户想要配置 Prompt template,需要有 Prompt Builder Manager权限。

  2. 如果需要使用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 getCasesPrompt(List 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 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{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)
  1. Configuration: 允许你选择当前的Prompt你想使用哪种模型类型来生成动态内容,比如你可以选择 GPT 3.5 / GPT 4.0等。

  2. Selected Record:当我们的内容区域包含了merge field,我们需要选择数据,这个数据将会替换merge field动态接地。

  3. Resolution:允许你选择具体的数据来查看Prompt,这个选择的数据会替换我们内容区域的merge field信息。

  4. 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。

[box.sanlejx.com)
[box.liudaqu.com)
[box.hfdbdp.com)
[box.hebyyyy.net)
[box.jtwjc.com)
[box.xyxjjc.com)

  1. Sales Email举例

这里我们直接用官方的demo进行举例。向Lead推荐公司的某款Product,发送会议邀请。篇中我们可以看到大部分都用的merge field,其他的没有额外特殊的地方。

我们进行一下演示。

总结:篇中主要介绍Prompt Builder的使用以及Prompt Template的一些规则。篇中有错误地方欢迎指出,有不懂欢迎留言。其他部分可以基于文档自行查看。

相关文章
|
24天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
16天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
20天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2577 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
18天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
3天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
2天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
163 2
|
20天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1576 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
22天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
977 14
|
4天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
221 2
|
17天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
734 9