เรียกใช้ตัวแทน Large Language Model (GPT) ใน Salesforce apex
ชมการสาธิตแบบเต็มได้ที่นี่
“ตัวแทน” เป็นเทคนิคในการปลูกฝังความสามารถของ LLM ในเรื่อง “เหตุผล” และดำเนินการ “ดำเนินการ” แนวทางนี้นำมาใช้ใน ReAct Paper (เหตุผล → พระราชบัญญัติ) และใช้ในไลบรารียอดนิยม เช่น langchain และ auto-gpt
Model
: รุ่น LLM/GTP ปัจจุบันรองรับเฉพาะรุ่น OpenAI GPT Completion & Chat เท่านั้นPrompt
: การสื่อสาร "โปรโตคอล" ระหว่างรุ่นและระบบ ปัจจุบันรองรับเฉพาะพรอมต์สไตล์ ReAct เท่านั้นAgent
: อินสแตนซ์ที่ถูกสร้างขึ้นเพื่อแก้ไขวัตถุประสงค์ที่กำหนดTools
: คำสั่งในการกำจัดตัวแทนAction
: การเรียกใช้เครื่องมือ force:source:push
) หรือในรุ่นนักพัฒนา ( force:mdapi:deploy
)คำเตือน องค์กร Scratch และนักพัฒนามีขีดจำกัดงานที่จัดคิวแบบโซ่ไว้ 5 งาน ซึ่งจะจำกัดจำนวนงานที่เจ้าหน้าที่สามารถทำได้
กำหนดตัวคุณเองให้กับชุดสิทธิ์ Apex Agent
sfdx force:user:permset:assign -n Apex_Agents
เปิด Setup -> Named Credential -> External Credential -> OpenAI
แก้ไข "การแมปชุดสิทธิ์" เพื่อเพิ่ม "พารามิเตอร์การรับรองความถูกต้อง" ด้วยชื่อ API_KEY
และคีย์ OpenAI API ของคุณเป็นค่า
(ไม่บังคับ) เปิด Setup -> Custom Settings -> Apex Agent Settings -> manage
และเพิ่มคีย์ SERP API และคีย์ ExtactorAPI ของคุณ สิ่งนี้จำเป็นเพื่อเปิดใช้งานความสามารถในการค้นหาทางอินเทอร์เน็ต ทั้งสองมีระดับฟรี
ไปที่แอป "Apex Agents" (จากตัวเรียกใช้งานแอป) และเรียกใช้งาน หรือเริ่มต้นตัวแทนโดยใช้โค้ดตัวอย่างด้านล่าง
ไลบรารีนี้ไม่พร้อมสำหรับการผลิตและอาจไม่มีวัน:
คำเตือน Salesforce ดูเหมือนจะมีข้อบกพร่องใน
aborting
งานที่จัดคิวได้ซึ่งมีการเรียก HTTP ที่ใช้เวลานาน หากคุณยกเลิกงาน งานนั้นจะยังคงทำงานจนเสร็จสิ้น และกำหนดเวลางานต่อไปนี้ต่อไป!
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 ();
หมายเหตุ เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด ขอแนะนำให้คุณใช้
OpenAIChatModel
กับgpt-4
&ReActZeroShotChatPromptManager
และรวมเฉพาะจำนวนเครื่องมือขั้นต่ำที่คุณต้องการเท่านั้น
การสร้างเครื่องมือแบบกำหนดเองเป็นเรื่องง่าย เพียงสร้างคลาสที่ใช้อินเทอร์เฟซ IAgentTool และเพิ่มลงในแมปของเครื่องมือเมื่อคุณสร้างพรอมต์
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' );
}
เคล็ดลับ:
JSON.serialize
คุณสามารถเขียนพรอมต์สไตล์ ReAct ของคุณเองได้โดยใช้ Prompt.IReAct
ขณะนี้มีสถานที่บันทึกดั้งเดิมสำหรับการเรียกออบเจ็กต์ Agent_Log__c
ขั้นตอนของเอเจนต์จะเรียกใช้เหตุการณ์แพลตฟอร์มทันทีของ Agent_Event__e ซึ่งส่งผลให้บันทึกได้รับการอัปเดตแบบเรียลไทม์
{thought/reasoning} {action_result}
พรอมต์ที่ทดสอบแล้ว:
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
วิธีที่ง่ายที่สุดในการมีส่วนร่วมในขั้นตอนนี้คือการสร้าง "AgentTools" ใหม่ (ยินดีต้อนรับ PR!) และทดลองเพื่อดูว่าสิ่งนี้สามารถทำอะไรได้บ้าง