AISmarteasy – 시맨틱 커널 개발하기 3a – Semantic Function – GetIntent
ai 애플리케이션이 사용자와 챗을 하다 보면, 사용자의 의도를 알면 좋은 때가 있다. 아니 좋다 기 보다는 꼭 필요하다.
ll이 이를 할 수 있도록 지시하는 시맨틱 함수를 만들어보자. 의도를 알아내라고 지시하는 함수는 GetIntent라고 하자. 의도를 알면 그 의도에 따라 뭔가 해야 하므로, 의도를 아는 것은 ai 애플리케이션 구성 요소들을 협력 시키도록 하는 거니 플러그인은 OrchestratorSkill이라고 하자.
Plugins – Semantic 하위에 OrchestratorSkill와 GetIntent 폴더를 만들고, GetIntent 폴더에 skprompt.txt와 config.json 파일을 만든다.
skprompt.txt는 다음과 같이 작성한다.
{{ConversationSummarySkill.SummarizeConversation $history}} User: {{$input}} ——————————————— Provide the intent of the user. The intent should be one of the following: {{$options}} INTENT: |
첫 문장을 보면, 함수 호출이 있다. ConversationSummarySkill 플러그인의 SummarizeConversation 함수를 호출한다. 이 시맨틱 함수가 이미 있다는 거다. 호출할 때 history인자 값이 전달된다. 챗 이력이 history 변수로 관리되고, 이 챗 이력을 요약한다는 거다.
사용자와 ai 애플리케이션이 대화한 이력 다음에 사용자의 말이 나온다. 이것은 input 변수 값으로 전달된다.
llm이 파악한 의도를 알려준다고 해도 개발되는 ai 애플리케이션에서 대응하는 범위를 벗어날 수 있다. 사용자의 의도가 어떤 것일 때 이렇게 대응 해야 지라는 것이 있다면, 의도를 제공되는 것들 중 하나로 작성해 달라고 할 수 있다. options가 선택할 수 있는 의도들을 제공해 준다.
config.json은 다음과 같이 작성한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
{ "schema": 1, "type": "completion", "description": "Gets the intent of the user.", "completion": { "max_tokens": 1024, "temperature": 0.0, "top_p": 0.0, "presence_penalty": 0.0, "frequency_penalty": 0.0 }, "input": { "parameters": [ { "name": "input", "description": "The user's request.", "defaultValue": "" }, { "name": "history", "description": "The history of the conversation.", "defaultValue": "" }, { "name": "options", "description": "The options to choose from.", "defaultValue": "" } ] } } |
이렇게 시맨틱 함수 구성 요소인 설정을 잘 작성하려면, llm에 뭘 지시 할 지를 명세 할 때 뭘 지시하려는 것인지, 지시할 때 뭘 사용할지, 그것들은 왜 사용 하는 지를 잘 작성해야 한다. llm 서비스 사용과 관련된 항목은 max_tokens과 temperature 정도만 잘 작성하면 된다. 이에 대해서는 지시의 종류와 원하는 결과 수준에 따라 선택해서 사용할 수 있는 몇 가지 안을 만들어 두면 된다. 이 또한 명세에 작성해야겠다.