• AI基盤

【Salesforce】Agentforce利用したコード生成

T.Hayato
T.Hayato
  • Agentforce
  • Salesforce
  • 生成AI
【Salesforce】Agentforce利用したコード生成

はじめに

こんにちは、サービスプラットフォーム事業部の辰己です。

近年ではAIの普及により、ChatGPTをはじめとした多くのサービスで自動コード生成が可能となりました。

今回はSalesforceが提供するAI「Agentforce」を用いてコード生成を行った検証結果を書いていきます!

Agentforceとは?

Agentforceとは、Salesforceが提供する"AIエージェントサービス群"です。

一括りにAgentforceといえど、多様なサービスが含まれますが、今回はその中でも開発者の生産性向上を目的とした"Agentforce for Developer" を利用したソースコードの自動生成に関して、どの程度のものが出力できるのかを検証します。

検証

筆者の使用した環境・ソフト

Salesforce CLIを利用してVsCodeとDeveloper環境を接続、VsCode上のプロンプトから出力させたいプログラムの内容を指示します。

  • Salesforce Developer環境
  • Visual Studio Code
  • Salesforce CLI

検証ケース

今回は下記の通り、主に3つの観点を中心に検証を実施しました。

  1. レコードの取得・登録
  2. 数値項目の乗算
  3. 既存ソースコードの修正

各検証結果

※Agentforceは現在日本語未対応のため、指示内容はGoogle翻訳を通したものをそのまま使用しています。

1. レコードの取得・登録

検証内容

  • 5つの引数を指定
  • 内2つを用いてオブジェクトからレコードを取得
  • 引数と取得したレコードの情報をマッピングし指定したオブジェクトにInsert

検証観点(期待値)

  • 引数名が指定した値と一致する
  • 指定したオブジェクト、項目を正しく取得できる
  • 指定したオブジェクト、マッピングでレコードがInsertできる

指示内容(原文)

Create an Apex class code that inserts the entered information (firstName, lastName, accountName, accountNo, phone) into the Contact object.
Since accountId is in a reference relationship, search the list of business partners using accountName and accountNo as conditions, and register the Id of the search result.
The insert destination is as follows.
・firstName → FirstName
・lastName → LastName
・firstName + lastName → FullName__c
・phone → phone
・Account ID obtained by List → AccountId

出力

検証結果

マッピング先等を細かく指示してあげる必要はありますが、引数名、レコードの取得条件、マッピングも想定通りで良好な結果となりました。

  • 引数名が指定した値と一致する → 〇
  • 指定したオブジェクト、項目を正しく取得できる → 〇
  • 指定したオブジェクト、マッピングでレコードがInsertできる → 〇

2. 数値項目を乗算

検証内容

  • A、B、Cオブジェクトを取得
  • B、Cオブジェクトの数値項目を乗算 + 四捨五入
  • 計算結果をAオブジェクトに登録しUpdate

検証観点(期待値)

  • 複数オブジェクトからレコードを取得できる
  • 指示通りの計算、四捨五入を行う
  • レコードのUpdateができる

指示内容(原文)

Add a method to connectTest.
First, get the Account Name and SettlementFee__c using soql.
The conditions for obtaining an account are as follows:
・Name = TestAccount
Next, use soql to get the Price__c of PlanMaster__c and the CommissionRate__c of PayMethodMaster__c one by one.
Multiply the obtained Price__c and CommissionRate__c and round off to the first decimal place.
Finally, set the calculation result to the SettlementFee__c of the Account you obtained and update it.

出力

検証結果①

おおまかなロジックは形になっているものの、取引先を取得する変数名が「*」となる、四捨五入の位置が想定通りではない等、期待した結果は得られませんでした。

  • 複数オブジェクトからレコードを取得できる → △
  • 指示通りの計算、四捨五入を行う → ×
  • レコードのUpdateができる → 〇

上の結果に対し追加で指示を出してみました。まずは変数名の修正から!

指示内容(原文)

The Account variable name should be accRec.

出力

検証結果②

指定した変数名で修正されました。出力結果に対するレスポンスも問題なく対応できるようです。

  • 複数オブジェクトからレコードを取得できる → 
  • 指示通りの計算、四捨五入を行う → ×
  • レコードのUpdateができる → 〇

しかし、続いて四捨五入の位置に関して修正依頼を投げたものの、

指示内容(原文)

Please round the settlement fee to the first decimal place.

返答

I don’t have the information needed to answer that question. My knowledge is focused on Salesforce development, including Apex, LWC, and common Salesforce APIs.

検証結果③

ソースの出力は行われず、Salesforceに関する知識しか対応していないといった返答が返ってきました。

指示内容には現状そこまでの自由度はなさそうです。

  • 複数オブジェクトからレコードを取得できる → 〇
  • 指示通りの計算、四捨五入を行う → ×
  • レコードのUpdateができる → 〇

3. 既存ソースコードの修正

検証内容

  • 自作ソースコードの修正

検証観点(期待値)

  • 既存ソースコードを修正できる(今回はガバナ制限に関する修正依頼を投げます)
  • 大雑把な指示でも該当箇所を修正することができる

元ソースコード

for内でsoqlを発行し、意図的にガバナ制限を考慮できていない形としています。

こちらに対して修正依頼を投げていきます。

指示内容(原文)

Please modify No6Test.getContactList() to take into account governor limits.

出力

検証結果①

for内のsoqlに対し、LIMITが追加されただけで理想的な結果は得られませんでした。

  • 既存ソースコードを修正できる → △
  • 大雑把な指示でも該当箇所を修正することができる → ×

試しに問題のsoqlの行を直接指示したところ、

指示内容(原文)

Please take the soql on line 9 out of the for loop.

出力

検証結果②

soqlがfor外に出され、以降の処理も合わせた形に修正されました。ロジックの修正自体は可能なものの、該当箇所を直接指示に含める必要があるため、自作コードをレビューさせるといったことは難しそうです。

  • 既存ソースコードを修正できる → 
  • 大雑把な指示でも該当箇所を修正することができる → ×

まとめ

今回の検証結果を踏まえ、現状Agentforce for Developer のメリット・デメリットは下記があげられます。

メリット

  • DML処理は基本的に問題なく実装される
  • 出力内容に対する追加の指示も対応できる

デメリット

  • マッピング等細かく指示出ししてあげる必要がある
  • ソースコードの修正については該当箇所を指示に含める必要があるためレビューには不向き

また、同じ内容の指示でも、直近の履歴(指示)に依存して出力内容が大きく変わることも度々ありました。

ただ、いずれの検証でもおおまかなロジック自体は正しく実装されるので、Agentforce for Developerで初回コードを出力させ、以降は手修正を行うといった形では使用できるかもしれません。

筆者としては今後の日本語対応に期待です!

新着記事一覧へ