面向开发人员的 Einstein

内容

  • 概述
  • 当前能力
  • Salesforce 值得信赖的生成式 AI
  • CodeGen 模型

概述

使用 Einstein for Developers 使用自然语言指令快速生成代码建议,以提高开发人员的工作效率。Einstein for Developers 是一款 AI 驱动的开发人员工具,可作为易于安装的 Visual Studio Code 扩展使用来自 Salesforce 的安全自定义 AI 模型 CodeGen 构建。该扩展在 VS Code 和 Open VSX 市场中提供。

Einstein for Developers 利用从匿名 Code Pattern 中学到的专业知识,在整个 Salesforce 开发过程中为您提供帮助。我们的 AI 驱动的开发人员工具套件可提高工作效率,并为复杂的编码任务提供有用的帮助。我们通过代码生成和推荐的静态分析和安全扫描工具套件来实施开发最佳实践。以样板代码生成为基础,AI 辅助工具还使新开发人员更容易加入 Salesforce Platform。

重要提示:此功能是一项测试版服务。客户可以自行决定是否尝试此类测试版服务。对测试版服务的任何使用均受协议和条款中提供的适用测试版服务条款的约束。

当前能力

此版本的 Einstein for Developers 侧重于从自然语言提示生成样板 Apex 代码。此功能与 IntelliSense 一起使用,使 Visual Studio Code 中的 Apex 开发工具更加丰富。假定您熟悉 Visual Studio Code。

使用此版本中的扩展程序,从侧边栏中的自然语言指令生成样板代码,以便您可以并排使用编辑器和工具,而不会中断您的工作流程。您还可以在现有 Apex 类、触发器或匿名 Apex 文件中获取代码建议。使用 VS Code 命令面板输入描述要生成的内容的提示,然后在编辑器中生成代码建议。

注意:此工具使用生成式 AI,可能会产生不准确或有害的响应。人工智能生成的输出通常是不确定的。在使用生成的输出之前,请检查其准确性和安全性。您负责将 Einstein 的成果应用于您的组织。

Salesforce 值得信赖的生成式 AI

Einstein 解决方案的设计、开发和交付符合我们关于可信生成式 AI 的五项原则。

准确性:我们在模型中优先考虑准确性、精确度和召回率,并尽可能为模型输出提供解释和来源。我们建议在与最终用户共享之前人工检查模型输出。

安全:我们致力于使用行业领先的技术来减轻模型中的偏差、毒性和有害输出。我们通过在数据周围添加护栏来保护数据中个人身份信息 (PII) 的隐私。

诚实:我们确保我们在模型中使用的数据尊重数据来源,并且我们已同意使用这些数据。

授权:只要有可能,我们就会设计模型,将人工参与作为工作流程的一部分。

可持续性:我们努力构建大小合适的模型,优先考虑准确性并减少我们的碳足迹。

如需了解更多信息,请访问 Salesforce AI Research:可信 AI。

CodeGen 模型

重要提示:Einstein for Developers 使用基于我们的开源 CodeGen 模型的自定义 LLM。这个为 Einstein for Developers 提供支持的模型是 Salesforce 的专有财产。

代码Gen2.5

不断壮大的 Salesforce CodeGen 模型家族的一个新成员表明,如果训练得当,一个小模型可以实现令人惊讶的好性能。CodeGen2.5

模型版本的关键方面包括:CodeGen2.5

  • 它以最先进的 7B 参数发布。HumanEval
  • 在只有 7B 参数的情况下,其性能与具有 15B 以上参数的代码生成模型 (, , ) 相当。CodeGen1-16BCodeGen2-16BStarCoder-15B
  • 它具有强大的填充采样功能,也就是说,模型可以“读取”当前光标位置左侧和右侧的文本。
  • 它针对快速采样进行了优化,并注意服务完成。它还针对本地部署到个人计算机进行了优化。Flash
  • CodeGen2.5在 中获得了许可。Apache 2.0

请参阅博客文章 CodeGen2.5:小而强大。

面向开发人员的 Einstein 设置

内容

  • 设置概述
  • 为开发人员启用 Einstein
  • 安装 Einstein for Developers 扩展
  • 连接到组织
  • 显示 Einstein 反馈控制台视图

设置概述

具有适当权限的 Salesforce 管理员或用户可以在受支持的 Salesforce 组织中启用 Einstein for Developers。然后,有权访问组织的开发人员可以:

  1. 在 VS Code 中安装扩展。
  2. 连接到启用了 Einstein for Developers 的组织。
  3. 使用扩展从自然语言指令生成 Apex 代码。

所需版本

适用于:开发人员、企业、合作伙伴开发人员、性能版和无限版。

不适用于:Group、Professional 和 Essentials 版本

不适用于:欧盟运营区。欧盟运营区是一项特殊的付费产品/服务,可提供更高级别的数据驻留承诺。根据标准产品条款和条件,Einstein for Developers 在欧盟不属于欧盟 OZ 的组织中得到支持。

所需的用户权限

要配置 Einstein for Developers(测试版):自定义应用程序并修改所有数据

已启用增强型域

您的 Einstein for Developers 组织必须启用增强型域。有关详细信息,请参阅启用增强型域。

为开发人员启用 Einstein

当您在受支持的 Salesforce 组织中启用 Einstein for Developers 时,该组织中的所有用户都可以访问该功能。

  1. 在“设置”的“快速查找”框中,输入 ,然后选择“Einstein for Developers”。Einstein for Developers

提示:如果您在 Developer Edition 组织中的“设置”下没有看到“Einstein for Developers”选项,则该组织可能是在引入 Einstein for Developers 之前创建的,因此它没有正确的权限。创建另一个 Developer Edition 组织,然后重试此步骤。

  1. 打开 Einstein for Developers。

重要提示:我们建议您仔细阅读许可协议并查看所有条款和条件。然后接受启用 Einstein for Developers。

Einstein for Developers 在组织中被激活。

将用户添加到组织

管理员可以根据需要向组织添加其他用户:

  1. 在“设置”的“快速查找”框中,输入 ,然后选择“用户”。Users
  2. 单击“新建用户”或“添加多个用户”。
  3. 根据用户的角色选择适当的许可证类型和配置文件。
  4. 选择“生成密码并通过电子邮件通知用户”。
  5. 点击保存。 此过程会生成一封电子邮件,邀请新用户加入组织。

Visual Studio Code 版本

VS Code 每个月都会发布一个新版本,其中包含新功能和重要的 bug 修复。必须使用 VS Code 版本 1.76 或更高版本才能运行 Einstein for Developers 扩展。您可以从“帮助”>“在 Linux 和 Windows 上检查更新”或“代码>在 macOS 上检查更新”中手动检查更新

安装 Einstein for Developers 扩展

安装面向开发人员的 Einstein:

  • 如果在桌面上使用 VS Code,请从 Visual Studio Code 市场安装 Einstein for Developers。
  • 如果您使用的是 Code Builder,请单击 Code Builder 活动栏中的“扩展”图标,搜索“Einstein for Developers”,然后单击“安装”。

注意:若要在本地使用 Einstein for Developers,必须在 VS Code 桌面应用程序中安装 Salesforce 扩展包。有关详细信息,请参阅安装 Salesforce 扩展。

连接到组织

Einstein for Developers 工具在 Salesforce 组织的上下文中,在 Salesforce DX 项目中运行。要使用此工具,请执行以下操作:

  1. 转到菜单中的“文件”>“打开文件夹”,然后在 VS Code 中打开现有的 Salesforce DX 项目,或创建一个项目。
  2. 运行 SFDX: Authorize an Org 命令以连接到启用了 Einstein for Developers 的 Salesforce 沙盒组织或临时组织。选择默认选项以连接到您的组织。

活动栏和状态栏中的 Einstein 徽标确认已安装扩展。打开命令面板并运行以打开边栏。View: Show Einstein Developer Sidebar

在临时组织中将 Einstein 用于开发人员

Einstein for Developers 仅在可以编写 Apex 的 scratch 组织版本中可用:

  • 开发者版
  • 企业版

要在临时组织中使用 Einstein for Developers:

  1. 在 Dev Hub 中为开发人员启用 Einstein。
  2. 使用该命令登录到 Dev Hub。SFDX: Authorize a Dev Hub
  3. 通过打开 scratch org 功能激活 Einstein for Developers:EinsteinGPTForDevelopers

编辑 DX 项目中的文件,将“”功能添加到现有功能列表中并保存更改。例如:config/project-scratch-def.jsonEinsteinGPTForDevelopers

   {
   "orgName": "Acme Company",
   "edition": "Developer",
   "features":["Communities", "ServiceCloud", "EinsteinGPTForDevelopers"]
   }

使用引用您之前更新的临时组织定义的命令创建临时组织。SFDX: Create a Default Scratch Org...

显示 Einstein 反馈控制台视图

从命令面板运行 Einstein: Show Prompt History 以打开反馈控制台。打开后,您可以查看提示和关联响应的运行历史记录。对每个响应使用 👍 、 👎 和注释,以便向我们提供有关所生成代码质量的反馈。在此测试期间,您的反馈是帮助我们提高 AI 模型质量和整体产品的关键。

Apex 代码生成

内容

  • 生成 Apex 代码
  • 使用命令面板生成 Apex 代码

生成 Apex 代码

使用 Einstein for Developers 侧边栏编写问题或指令,描述您希望接收 Apex 代码建议的任务,然后按 Ask。复制您收到的代码建议并将其粘贴到 Apex 文件中以用作“入门”代码。

使用命令面板生成 Apex 代码

您可以从 VS Code 编辑器的 Apex 文件内部快速访问 Einstein for Developers。

  1. 打开现有的 Apex () 文件,或通过运行 SFDX: Create Apex Class 命令从命令面板创建一个文件。.cls
  2. 将光标放在文件中要放置生成的代码的行上。
  3. 在命令面板中,运行 Einstein: Generate Code
  4. 对于查询,请输入要生成的代码的描述。例如,“”Write a method that takes an account as a parameter and returns all contacts associated with that account.
  5. 查看 Einstein 生成的代码,然后单击“接受”、“重试”或“清除”。

使用我们的示例提示来了解如何充分利用生成式 AI 工具。

提示:要通过热键访问“Einstein:生成代码”命令,请按 Cmd+r (macOS) 或 Ctrl+r(Windows 或 Linux)。您可以自定义这些快捷方式。请参阅键盘快捷键编辑器。

您可以自定义这些快捷方式。请参阅键盘快捷键编辑器。

示例提示和响应

内容

  • 生成的代码质量
  • 提示写作技巧
  • 示例提示和响应
  • 编辑提示并重新生成输出

生成的代码质量

与所有基于 LLM 的产品一样,Einstein for Developers 背后的技术仍然是新的。生成的输出通常需要针对您的单个项目进行编辑。有些响应不是最佳的。我们很乐意通过 IDE 中的 History & Feedback Panel 听取您对生成的输出的反馈。您的反馈对于在测试计划期间持续训练我们的大型语言模型 (LLM) 至关重要。

我们强烈建议您在看到不太理想的代码示例时告知我们,以便我们可以继续改进生成的响应。我们建议使用 Apex PMD(已包含在 Salesforce 扩展包中)和 Salesforce Code Analyzer 等工具,以确保生成的代码的质量。

提示写作技巧

快速编写是高质量代码生成的关键。以下是一些改进提示编写的提示,以及一系列示例提示,可帮助您开始生成式 AI 代码辅助之旅。

原始提示改进的提示
编写对联系人列表进行排序的 Apex 代码。编写 Apex 代码,按姓氏的字母顺序对联系人列表进行排序。
编写一个将两个数字相加的方法。编写一个将两个数字相加并返回结果的方法。
编写一个返回对象字段的 Apex 方法。编写一个 Apex 方法,该方法接受 SObject 并返回其字段列表。

示例提示和响应

提示:编写一个 Apex 方法,该方法接受 sobject 列表和字段名称,并返回一组非 null 字段值。

响应:

public Set<String> getFieldValues(List<sObject> records, String fieldName) {
        Set<String> fieldValues = new Set<String>();

        for (sObject record : records) {
            try {
                Object fieldValue = record.get(fieldName);
                if (fieldValue != null) {
                    fieldValues.add((String) fieldValue);
                }
            } catch (Exception e) {
                system.debug('Error: ' + e.getMessage());
            }
        }
        return fieldValues;
    }


提示:创建一个 @invocable 方法,用于序列化 sObject 的输入列表并返回 JSON。

响应:

@InvocableMethod(label='Create Account' description='Creates a new account with the specified name, number and symbol.' category='Account')
    public static List<String> createAccounts(List<Account> accounts) {
        List<String> response = new List<String>();

        for (Account account : accounts) {
            String jsonAccount = JSON.serialize(account);
            response.add(jsonAccount);
        }

        return response;
    }

提示:编写一个 Apex 方法,该方法接受产品名称作为输入,并检索按产品名称筛选的 orderitems。

响应

public List<OrderItem> getOrderItemsByProductName(String productName) {
List<OrderItem> orderItems = [SELECT Description FROM OrderItem WHERE ProductCode = :productName LIMIT 50];
return orderItems;
}

提示:编写 Apex 触发器以添加与帐户关联的联系人数。在 SOQL 查询中,通过添加 WITH USER_MODE来确保其安全。

trigger AccountTrigger on Account (after update) {
    List<Account> accountsWithContacts = [
        SELECT Id, (SELECT Id FROM Contacts)
        FROM Account
        WHERE Id IN :Trigger.newMap.keySet()
        WITH USER_MODE
    ];
    
    for (Account account : accountsWithContacts) {
        Integer numberOfContacts = account.Contacts.size();
        
        // Update the Account's "Number_of_Contacts__c" field
        account.Number_of_Contacts__c = numberOfContacts;
    }
    
    update accountsWithContacts;
}

编辑提示并重新生成输出

精心设计的提示是获得 Einstein 良好响应的关键。我们鼓励您修改提示,直到您获得可帮助您完成手头任务的 Apex 代码。使用命令面板中的命令时,请使用“重试”和“接受”选项。在边栏中,编辑提示,然后单击“询问”。Einstein: Generate Code

例如,提示“编写代码以提供更新用户列表的 FirstName 的功能”会生成此响应。

public with sharing class AccountService {
  public Account createAccount( String accountName, String accountNumber, String tickerSymbol ) {
    Account newAcct = new Account(
      Name = accountName,
      AccountNumber = accountNumber,
      TickerSymbol = accountNumber
    );
    return newAcct;
  }
// Function to update the FirstName for a list of users
public static List<User> updateFirstName(List<User> users, String newFirstName) {
        for (User u : users) {
            if (String.isNotBlank(u.FirstName)) {
                u.FirstName = newFirstName;
            }
        }
        return users;
 }

此响应很好,但您可以通过创建方法编辑提示以生成可重用的代码。

单击“重试”并编辑提示以获得更具体的输出。将提示更新为“编写代码以提供将用户列表的 FirstName 更新为方法的功能”。这是新的回应。

public with sharing class AccountService {
  public Account createAccount( String accountName, String accountNumber, String tickerSymbol ) {
    Account newAcct = new Account(
      Name = accountName,
      AccountNumber = accountNumber,
      TickerSymbol = accountNumber
    );
    return newAcct;
  }
}

 //This is a method that allows updating the FirstName for a list of users
    public static void updateFirstName(List<User> users) {
        for (User usr : users) {
            if (usr.FirstName != null) {
                usr.FirstName = 'New First Name';
            }
        }
    }

如果您喜欢此输出,请单击“接受”。若要更新提示并重新生成新输出,请单击“重试”。

故障 排除

生成式 AI 使用大型语言模型 (LLM) 来生成输出。由于 LLM 是由其他组织训练的,因此输出并不总是您期望的,并且生成的代码也不完美。如果输出不符合您的预期,您可以通过重新开始生成新的输出。不会保存上一次尝试生成的输出,新输出将替换它。

我们鼓励您使用 👍 和 👎 按钮提供有关输出的反馈。您还可以评论为什么输出没有帮助。拇指响应和其他反馈仅与 Salesforce 共享,并用于反馈。若要跟踪所有已知问题和可能的解决方法,请使用此存储库中的“问题”选项卡。

Einstein for Developers 反馈和支持

内容

  • 反馈
  • 支持

反馈

在命令面板中,运行 Einstein: Show Prompt History 以打开反馈控制台。对每个提示使用 👍 和 👎注释来提供反馈。若要提出问题、请求功能和发布反馈,请使用“讨论”选项卡。

如果需要支持,请在 GitHub 存储库中提交问题。我们的团队会对所有传入的问题进行分类,并尽快回复您。

支持

注意:您需要一个 github 帐户才能创建问题。如果您没有 GitHub 帐户,可以轻松(且免费)注册一个帐户。

如果您想提供一般反馈、请求产品增强功能、开始与其他 Einstein for Developers 用户或产品团队进行讨论,以及分享最佳实践,请使用 Einstein for Developers Trailblazer Group。

Einstein for Developers 常见问题解答

什么是面向开发人员的 Einstein?

Einstein for Developers 是一种 AI 辅助工具,可作为易于安装的 VS Code 扩展使用来自 Salesforce 的安全自定义 AI 模型 Einstein 构建。

Einstein for Developers 接受过哪些数据训练?

Einstein for Developers 使用我们值得信赖的生成式 AI CodeGen 来协助您完成 Salesforce 开发。CodeGen 使用从匿名 Code Pattern 中学到的专业知识。

在哪里可以了解有关 Einstein for Developers 隐私和数据保护的更多信息?

请参阅来自 Salesforce 的可信 AI。

我的代码是否会在我的开发环境之外共享?

哈哈Salesforce 将您的代码视为主服务协议 (MSA) 下的机密信息,不会将其透露给其他 Salesforce 客户或 Salesforce 以外的任何人。您的一些代码和实体架构可用于改进 Einstein for Developers 和训练 CodeGen。由于机器学习的性质,Einstein for Developers 可以生成类似于用于训练模型的代码的输出。

我仍然有一些安全问题,如果我的代码包含专有信息怎么办?

在使用任何代码标记或构建模型之前,研究团队会从代码中清除所有个人身份信息 (PII) 和机密信息。这些信息包括姓名、公司名称、电话号码、地址和硬编码的 API 令牌。使用客户管理的加密密钥对数据进行静态加密。请参阅客户管理的加密密钥 (CMEK)。我们还确保只有 Salesforce 员工才能处理您的代码,而不是承包商。

Einstein 开发人员词汇表

本词汇表定义了贯穿 Einstein 文档的生成式 AI 术语。

生成式预训练转换器 (GPT):由 OpenAI 开发的一系列语言模型,通常在大量文本数据语料库上进行训练,因此它们可以生成类似人类的文本。

接地:用于将特定于域的知识和客户信息注入提示的过程。 人在环 (HITL):一种需要人机交互的模型。

意图:用户与 AI 助手交互的目标。

大型语言模型(LLM):一种语言模型,由神经网络组成,该神经网络具有在大量文本上训练的许多参数。

提示:要完成的任务的自然语言描述。LLM 的输入。

及时管理:用于生成、管理、打包和共享提示的工具套件,包括提示模板和提示模板存储。

提示模板:带有占位符/标记的字符串,可以将其替换为自定义值以生成最终提示。该模板包括与该提示关联的超参数,以及您选择的型号/供应商(如果未使用默认值)。

提示链接:选择正确的提示工程的方法,即将复杂的任务分解为几个中间步骤,然后将其重新组合在一起,希望 AI 产生更具体、更定制、从而更好的结果。若要获得最佳提示,请使用“重试”选项重新生成代码。

语义检索:大型语言模型使用客户 CRM 数据中存在的所有知识的方案。每个CRM用户都可以访问个性化的生成式AI。

遥测和数据收集

Einstein for Developers 目前处于测试阶段。在测试期间,您的反馈、提示和响应数据将用于模型训练。假定您授予 Salesforce 永久的、不可撤销的、非排他性的、全球性的、免版税的许可,以使用提交的代码。有关更多信息,请参阅我们的使用条款。

由于机器学习的本质,Einstein for Developer 可以生成类似于用于训练模型的代码的输出。您和 Salesforce 都不拥有为除他们自己之外的各方生成的输出。

Einstein for Developers 扩展(测试版)的附加使用条款

Einstein for Developers 扩展是使用 Salesforce 的全球 CodeGen 大型语言模型构建的 beta 扩展。Einstein for Developers 扩展直接在标准 Salesforce IDE 工具中提供生成式 AI 功能,包括但不限于以下用例:

  • 从自然语言生成代码 – 能够用通俗易懂的英语描述代码逻辑或目标,并使用 AI 生成一段代码;和
  • 代码自动完成 – 智能内联代码建议。

使用 Einstein for Developers 扩展程序须遵守以下附加条款:

  1. “提交的代码”定义为 (a) 提交给 Einstein for Developers 扩展的提示,以及 (b) 项目中用于为模型提供其他上下文的关联代码。
  2. 提交的代码和提供给 Salesforce 的任何反馈不应包含“个人数据”,即与已识别或可识别的自然人相关的任何信息。
  3. Salesforce 将使用提交的代码和反馈来开发和训练 CodeGen 模型,并且您授予 Salesforce 永久的、不可撤销的、非排他性的、全球性的、免版税的许可,以将提交的代码和反馈用于此类目的,并同意用于处理和存储提交代码和反馈的基础设施将部分由 Amazon Web Services 提供。 Inc.在美国。
  4. 您将保留代码的所有权,Salesforce 将保留 Einstein for Developers 扩展和 CodeGen 模型的唯一所有权。
  5. Einstein for Developers 扩展可能会生成类似于用于训练模型的代码的输出。为避免疑义,您和 Salesforce 均不拥有为非他们自己方生成的输出。
  6. 提交的代码不会与 Salesforce 以外的任何方共享。
  7. 无担保。EINSTEIN FOR DEVELOPERS 扩展按“原样”提供,不包括任何明示、暗示、法定或其他形式的保证。在适用法律允许的最大范围内,SALESFORCE 不承担任何默示保证,包括但不限于对适销性和特定用途适用性或不侵权的任何默示保证。Einstein for Developers 扩展和/或生成的代码可能包含错误或错误,使用它们的风险由您自行承担。您承认,Salesforce 可随时自行决定终止 Einstein for Developers 扩展,并且可能永远不会将其正式发布。
  8. 无损害赔偿。在任何情况下,SALESFORCE 均不对任何损害承担任何责任,包括但不限于直接、间接、特殊、偶然、惩罚性或后果性损害,或基于利润、数据或使用损失的损害,无论其原因如何,无论是合同、侵权行为还是根据任何其他责任理论,即使已被告知此类损害的可能性。

最后更新日期:2023 年 8 月