قم بتشغيل وكلاء نموذج اللغة الكبير (GPT) في Salesforce apex.
شاهد العرض التوضيحي الكامل هنا
"الوكيل" هو أسلوب لغرس قدرة LLM على "السبب" واتخاذ "الإجراء". تم تقديم هذا النهج من خلال ورقة ReAct (السبب → الفعل) ويتم استخدامه في المكتبات الشائعة مثل langchain وauto-gpt.
Model
: نموذج LLM/GTP. حاليًا، يتم دعم نماذج OpenAI GPT Completion & Chat فقط.Prompt
: "بروتوكول" الاتصال بين النموذج والنظام. حاليًا يتم دعم مطالبات نمط ReAct فقط.Agent
: مثيل تم تشكيله لحل هدف معين.Tools
: الأوامر الموجودة تحت تصرف الوكلاءAction
: فعل استدعاء أداة force:source:push
) أو في إصدار مطور ( force:mdapi:deploy
)تحذير لدى مؤسسات Scratch & Developer حد يبلغ 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" جديدة (نرحب بالعلاقات العامة!) والتجربة لمعرفة ما يمكن أن يفعله هذا الشيء.