명절에 AI 를 공부하다가 이상한것을 알게됐네요

신기 하기 보다는 제가 몰라서 하는 얘기같지만 제목 가지고 오해 큰 기대 안하시길 바랍니다 ^^;;

이번에 공부 목표는 OLLAMA 로 로컬 AI 를 올리고 이걸 시맨틱 커널을 구현해서 ?

질의 → ai 가 api 선택 → 저의 api 호출 해서 → 답변

이게 목적이었습니다. 된다고 들어서 덤볐는데 생각만큼 잘되지 않았어요?

모드는 ollama , Agent 모드로 만들었고 (바이브 코딩)

대략 이런 ui 를 구성했습니다.

API 는 간단하게 news,stock,weather 로 구성하고 질의의 따라 의도된 제 api 를 호출하면 됩니다.

하지만 ollama 모드에서는 api는 찾는데 답변을 제대로 형성 못했어요??

코파일럿을 갈구니 ? ai 모델이 api는 판단하는데 ? 그 응답을 받아서 처리를 못하는것 같다고
(gpu 가 딸려서 심플한 LLM 모델을 써서 한계가 있는것 같습니다)

아 실패인가 했는데 AGENT 모드로 하니까

의도 한대로 답변을 합니다 ;; 아니 도대체 ?? 이게 무슨차이인가
바이브 코딩으로 거의 해서 AGENT 랑 OLLAMA 차이를 잘몰랐습니다.

아니 AGENT 가 정확히 무슨 차이일까?? 나는 GPT 나 어떤 AI API 키도 연결하지 않았는데
저것 왜 잘작동하고 Ollama 는 안될까 ?

agent 모드는 처리 과정이 대략 이렇다고 합니다.
제가 준 질의를 c# 라이브러리가 판단해서 ? 답변하는 구조 라는 말인가??

나는 단지 자연어 처리만 하고 그 답변을 확실히 내가 의도한 API에서 답변만 하면 되는데
(API 도 필요없고 메소드만 있으면 될듯)

이러면 굳이 힘들게 LLM 하지 않아도 된다는 말인가 뭔가 이러면 자연어 프로폼트를 생각보다
어렵게 구현 안해도 된다는 말인가 (실제로 거의 바이브 코딩을 해서 내부 로직을 잘몰랐어요^^)

내부 코드를 보니 그냥 과연 Agent 모드는 키워드 매칭 방식이네요

 public async Task<ApiCallResult> DetermineAndCallApiAsync(string prompt)
 {
     if (string.IsNullOrWhiteSpace(prompt))
     {
         return new ApiCallResult
         {
             ApiName = "None",
             Data = null,
             Success = false
         };
     }

     // 프롬프트를 소문자로 변환하여 키워드 매칭
     var lowerPrompt = prompt.ToLower();

     // 키워드 매칭 및 API 호출
     foreach (var keyword in _keywordMapping.Keys)
     {
         if (lowerPrompt.Contains(keyword.ToLower()))
         {
             try
             {
                 // 기본 파라미터 추출 (간단한 구현)
                 var parameter = ExtractParameter(prompt, keyword);
                 var response = await _keywordMapping[keyword](parameter);

                 return new ApiCallResult
                 {
                     ApiName = GetApiName(keyword),
                     Data = response,
                     Success = true
                 };
             }
             catch (Exception)
             {
                 return new ApiCallResult
                 {
                     ApiName = GetApiName(keyword),
                     Data = null,
                     Success = false
                 };
             }
         }
     }

     // 매칭되는 키워드가 없을 경우 기본 응답 반환
     return new ApiCallResult
     {
         ApiName = "None",
         Data = new SampleApiResponse
         {
             Message = "No matching API found for the given prompt",
             Data = null
         },
         Success = true
     };
 }

개인적으로 공부한 보람이 약간 있는것 같습니다 아 저렇게 키워드 방식으로 자연어 처리가 되는구나 하구요

엄밀한 AI 처리는 아니고
“서울 날씨는 어때?” 이러면 날씨 키워드를 찾아 아 날씨 API랑 연결하고 서울은 파라미터로 삼네요
-근데 이 키워드를 일일이 노가다로 구현해야 합니다-

문장을 이해하는것이 아니라 그냥 키워드 매칭 방식으로 무식하게 구현하는것였네요

AI를 공부하다가 C# 키워드 매칭을 공부한것 같지만 Discovery 한 느낌입니다.

혹시 sematic 커널 로컬 llm 으로 구현하신분 중에 모델은 뭘 써야 한글 표현이 잘될까요?