Salesforce apex에서 대규모 언어 모델(GPT) 에이전트를 실행합니다.
여기에서 전체 데모를 시청하세요
"에이전트"는 LLM에 "이성"하고 "행동"하는 능력을 주입하는 기술입니다. 이 접근 방식은 ReAct Paper(Reason → Act)에 의해 소개되었으며 langchain 및 auto-gpt와 같은 인기 있는 라이브러리에서 사용됩니다.
Model
: LLM/GTP 모델. 현재 OpenAI GPT Completion & Chat 모델만 지원됩니다.Prompt
: 모델과 시스템 간의 통신 "프로토콜"입니다. 현재는 ReAct 스타일 프롬프트만 지원됩니다.Agent
: 주어진 목표를 해결하기 위해 형성된 인스턴스입니다.Tools
: 에이전트 처리에 사용되는 명령Action
: 도구를 호출하는 행위 force:source:push
) 또는 개발자 버전( force:mdapi:deploy
)에 설치경고 스크래치 및 개발자 조직에는 대기열에 연결할 수 있는 작업이 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
하고 추가합니다. 이는 인터넷 검색 기능을 활성화하는 데 필요합니다. 둘 다 무료 등급이 있습니다.
앱 시작 관리자에서 "Apex Agents" 앱으로 이동하여 작업을 실행합니다. 또는 아래 예제 코드를 사용하여 에이전트를 시작하세요.
이 라이브러리는 프로덕션 준비가 되어 있지 않으며 다음과 같은 상태가 아닐 수도 있습니다.
경고 Salesforce에 장기 실행 HTTP 콜아웃이 포함된 대기열 작업을
aborting
버그가 있는 것 같습니다. 작업을 중단해도 해당 작업은 완료될 때까지 실행되며 계속해서 다음 작업을 예약합니다!
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 ();
참고 최상의 결과를 얻으려면
gpt-4
및ReActZeroShotChatPromptManager
와 함께OpenAIChatModel
사용하고 필요한 최소 수의 도구만 포함하는 것이 좋습니다.
맞춤형 도구를 만드는 것은 쉽습니다. 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
사용하여 JSON 또는 YAML을 반환할 수 있습니다. Prompt.IReAct
구현하여 자신만의 ReAct 스타일 프롬프트를 작성할 수 있습니다.
현재 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 환영합니다!)를 만들고 이것이 무엇을 할 수 있는지 실험하는 것입니다.