Jalankan agen Model Bahasa Besar (GPT) di Salesforce apex.
Tonton Demo Lengkapnya Di Sini
Sebuah "Agen" adalah teknik untuk menanamkan kemampuan LLM untuk "Beralasan" dan mengambil "Tindakan". Pendekatan ini diperkenalkan oleh ReAct Paper (Reason → Act) dan digunakan di perpustakaan populer seperti langchain dan auto-gpt.
Model
: Model LLM/GTP. Saat ini hanya model Penyelesaian & Obrolan OpenAI GPT yang didukung.Prompt
: "Protokol" komunikasi antara model & sistem. Saat ini hanya perintah gaya ReAct yang didukung.Agent
: Sebuah instance yang dibentuk untuk menyelesaikan tujuan tertentu.Tools
: Perintah yang ada pada agenAction
: Tindakan memanggil alat force:source:push
) atau ke edisi pengembang ( force:mdapi:deploy
)Peringatan Organisasi awal & pengembang memiliki batas 5 pekerjaan yang dapat diantri berantai, yang akan membatasi jumlah pekerjaan yang dapat dilakukan agen.
Tetapkan diri Anda ke kumpulan izin Apex Agent
. sfdx force:user:permset:assign -n Apex_Agents
Buka Setup -> Named Credential -> External Credential -> OpenAI
. Edit "Pemetaan Set Izin" untuk menambahkan "Parameter Otentikasi" dengan nama API_KEY
dan Kunci API OpenAI Anda sebagai nilainya
(Opsional) Buka Setup -> Custom Settings -> Apex Agent Settings -> manage
dan tambahkan kunci API SERP Anda & kunci ExtactorAPI. Ini diperlukan untuk mengaktifkan kemampuan pencarian internet. Keduanya memiliki tingkatan gratis.
Navigasikan ke aplikasi "Apex Agents" (dari peluncur aplikasi) dan jalankan tugas. Atau mulai agen menggunakan contoh kode di bawah ini.
Pustaka ini belum siap produksi dan mungkin tidak akan pernah:
Peringatan Salesforce tampaknya memiliki bug dengan
aborting
pekerjaan yang dapat diantri dengan pemanggilan HTTP yang sudah berjalan lama. Jika Anda membatalkan suatu pekerjaan, pekerjaan tersebut akan tetap berjalan hingga selesai, dan terus menjadwalkan pekerjaan berikut!
OpenAIChatModel chatLLM = new OpenAIChatModel ();
// chatLLM.model = 'gpt-3.5-turbo';
chatLLM . model = 'gpt-4' ;
SerpAPIKey__c mc = SerpAPIKey__c . getInstance ( UserInfo . getUserId ());
Map < String , IAgentTool > tools = new Map < String , IAgentTool >{
'search_internet' => new InternetSearchAgentTool ( mc . API_Key__c ),
'find_records' => new SOSLSearchAgentTool (),
'send_notification' => new SentNotificationAgentTool (),
'create_records' => new CreateRecordAgentTool (),
'get_fields' => new GetSObjectFieldsAgentTool (),
'list_custom_objects' => new ListSObjectAgentTool (),
'execute_soql' => new RunSQLAgentTool ()
};
ReActZeroShotChatPrompt prompt = new ReActZeroShotChatPrompt ( tools );
ReActChatAgent agent = new ReActChatAgent ( 'Find 3 accounts with missing phone numbers and try to populate them from the internet' , prompt , chatLLM );
agent . maxInvocations = 15 ;
AgentQueueable manager = new AgentQueueable ( agent );
manager . startAgent ();
Catatan Untuk hasil terbaik, disarankan agar Anda menggunakan
OpenAIChatModel
dengangpt-4
&ReActZeroShotChatPromptManager
dan hanya menyertakan jumlah minimum alat yang Anda perlukan.
Membuat alat khusus itu mudah. Cukup buat kelas yang mengimplementasikan antarmuka IAgentTool dan tambahkan ke peta alat saat Anda membuat prompt.
public class GreetingAgentTool implements IAgentTool {
public string getDescription () {
return 'Get a greeting' ;
}
public Map < string , string > getParameters () {
return new Map < string , string >({
'name' => 'The name to greet'
});
}
public string execute ( Map < string , string > args ) {
if ( String . isEmpty ( args . get ( 'name' )){
// throw an error with instructions so the agent can self correct
throw new Agent . ActionRuntimeException ( 'missing required parameter: name' );
}
return 'hello ' + args . get ( 'name' );
}
Kiat:
JSON.serialize
Anda dapat menulis perintah gaya ReAct Anda sendiri dengan mengimplementasikan Prompt.IReAct
.
Saat ini ada beberapa tempat logging primitif ke panggilan Objek Agent_Log__c
. Langkah agen langsung mengaktifkan Agent_Event__e peristiwa platform, yang mengakibatkan log diperbarui secara waktu nyata.
{thought/reasoning} {action_result}
Perintah yang Diuji:
Search for accounts containing the word "sample" and send a notification to the user with name = "charlie jonas", notifying them that they should remove the account.
write a SOQL query that returns all billing related fields for an account. Send me a notification with the results of the query
Get the weather tomorrow in Lander, wyoming. Send a notification to Charlie Jonas letting him know how to dress
Research 3 companies that offer leading edge solutions for building API. Insert the new account with basic information about the business, but only if the account does not already exist.
Find out how many employees work at amazon and update the account
query 3 accounts that do not have Number of Employees set. Update the account with the number of employees from the internet.
See if you can fill in any missing information on the amazon account. Send me a notification with the summary
Search for accounts containing the word "sample". Create a task assigned to me with the subject "Remove Sample Account
write a SOQL query to group invoice total by project name. Send me the results in a notification
Cara termudah untuk berkontribusi pada tahap ini adalah dengan membuat "AgentTools" baru (selamat datang dari PR!) dan bereksperimen untuk melihat apa yang dapat dilakukan alat ini.