초등학생을 위한 요즘 LLM

오병진·2025년 3월 4일
65
post-thumbnail

요즘 업계에서 가장 뜨거운 키워드, 바로 LLM이에요.
Claude 3.5, Grok3 같은 모델들이 계속 등장하고 있고,
뤼튼이나 제타처럼 LLM을 활용한 서비스들도 늘어나고 있어요.

개발자로서 언젠가는 우리 서비스에도 LLM을 붙이게 될 텐데,
그때 당황하지 않으려면 기본적인 개념은 미리 알아두는 게 좋지않을까 싶어요!
그래서 한번 핵심 키워드들을 정리해 봤어요.


LLM

LLM(Large Language Model)은 쉽게 말하자면
"텍스트를 넣으면 이해하고, 다시 텍스트로 답하는 AI"예요.
GPT-4o, Claude 3, Grok3 같은 모델들이 대표적이죠.

요즘 LLM은 단순히 문장을 생성하는 걸 넘어서
코딩, 이미지 분석, 수식 풀이까지 다양한 작업을 수행하는데요.
이제는 개발자가 AI를 도구처럼 활용하는 시대가 아닌가 싶어요.

Tool Call, Function Call

LLM이 단순히 답변만 하는 게 아니라,
"필요한 도구를 호출해서 작업을 도와줘!"라고 요청할 수도 있는데요.

예를 들어,

  • 사용자가 "이 숫자 계산해줘"라고 하면
  • LLM이 계산기 API를 호출하도록 요청하고
  • 그 결과를 다시 사용자에게 전달하는 방식이에요.

하지만 LLM이 직접 API를 호출하는 건 아니고,
실제 호출은 우리가 코드로 구현해 줘야 한답니다 ㅜㅜ


RAG (Retrieval-Augmented Generation)

LLM이 아무리 똑똑해도,
이미 학습한 데이터만 가지고 답을 생성하는데요.
그럼 최신 뉴스나 사내 문서 같은 정보는 어떻게 불러오는걸까요?

그때 필요한 게 RAG예요.

  • 외부 데이터베이스에서 필요한 정보를 먼저 검색(Retrieval)하고,
  • 그 정보를 기반으로 답변을 생성(Generation)하는 방식이에요.

이렇게 하면 LLM이 최신 정보도 반영할 수 있어요.

즉, LLM이 대답하기 이전에 먼저 대답에 필요한 자료들을 넣어주고, 요약 또는 이를 기반으로 대답하는걸
모두 RAG라고 하는거죠

4B, 8B, 308B? 숫자가 뭐야?

LLM 모델을 보면 8B, 70B 같은 숫자가 붙어 있어요.
이건 모델이 학습한 파라미터(Parameter) 개수를 뜻해요.

  • 8B (80억 개) → 가벼운 모델, 빠름
  • 308B (3,080억 개) → 엄청 큰 모델, 하지만 느림

큰 모델일수록 정교하지만, 속도와 비용이 부담될 수 있어요.
요즘은 경량 모델을 잘 활용하는 게 트렌드예요.

무거운 모델일수록 응답속도가 느려져서
최종 사용자들의 이탈율이 높아지기 때문이에요.

멀티 에이전트 (Multi-Agent)

LLM이 혼자서 모든 걸 처리하는 게 아니라,
여러 개의 작은 AI(에이전트)가 협력하는 방식인데요.

예를 들면:

  • 하나는 코딩을 담당하고
  • 하나는 데이터 분석을 하고
  • 하나는 문서 정리를 해주는 식이에요.

이렇게 역할을 나누면 속도도 빠르고, 더 정확한 답변이 가능해요.
마치 회사 같지않나요? 누구는 프론트엔드를 하고.. 누구는 백엔드를 하고.. 말이죠

Validation Feedback (검증 피드백)

LLM이 항상 정답을 말하는 건 아니에요.
틀린 답을 줄 수도 있어요.

그래서 Validation Feedback이 필요해요.

  • 사용자가 LLM의 답변이 맞는지 틀렸는지 피드백을 주면
  • 모델이 점점 더 똑똑해질 수 있어요.

이걸 자동화해서 LLM이 스스로 학습하는 시스템을 만들 수도 있어요.

또는 Function Call이나 응답 포맷이 정해졌을 때
포맷을 따르지 않는다면 포맷을 따르라고 강제 할 수 도 있죠

OpenAI에서 Function Call 쓰는 법

실제로 OpenAI의 GPT-4o를 이용해서 Function Call을 쓰려면,
아래처럼 구현할 수 있어요.

🔹 TypeScript 예제

import { OpenAI } from "openai";

const openai = new OpenAI({ apiKey: "YOUR_API_KEY" });

async function callFunction() {
  const response = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: [
      { role: "user", content: "지금 시간을 알려줘" }
    ],
    functions: [
      {
        name: "get_current_time",
        description: "현재 시간을 반환합니다.",
        parameters: {},
      },
    ],
    function_call: "auto",
  });

  if (response.choices[0].message.function_call) {
    console.log("LLM이 호출한 함수:", response.choices[0].message.function_call.name);
  }
}

callFunction();

이런 식으로 Function Call을 활용하면,
LLM이 단순한 텍스트 생성뿐만 아니라
실제 기능을 수행하는 "진짜 유용한 AI"로 발전할 수 있어요.


Agentica

이러한 FunctionCall을 상세하게 인자값을 채워넣는 행위들은 매우 귀찮을 수도 있어요.
그래서 Vercel ai나 LangChain 같은 친구들은 zod라는 라이브러리로써
LLM이 반환한 인자값이 맞는지, Validation Feedback을 진행합니다.

그렇게 정확도가 높은 Function Call을 수행하는건데요.

하지만, 복잡한 함수의 인자값을 하나 하나 스키마를 zod로 작성하는 것은 매우 귀찮을 수 밖에 없고
개발자가 느끼기에는 "짜치다" 라고 느낄 수 있는 포인트라고 생각해요.

그렇기에 저는 Agentica 라는 라이브러리를 추천하는데요.

import { Agentica } from "@agentica/core";
import typia from "typia";

const agent = new Agentica({
  controllers: [
    await fetch(
      "https://shopping-be.wrtn.ai/editor/swagger.json",
    ).then(r => r.json()),
    typia.llm.application<ShoppingCounselor>(),
    typia.llm.application<ShoppingPolicy>(),
    typia.llm.application<ShoppingSearchRag>(),
  ],
});
await agent.conversate("I wanna buy MacBook Pro");

위와 같은 간단한 코드만으로, 세개의 클래스에 있는 함수들과 swagger의 endpoint들을
Function Call로 지정을 하고, 대화시에 자동으로 호출되도록 세팅을 완성했습니다..

이로써 간단한 "챗봇 에이전트" 가 만들어진거죠.


이렇게 LLM을, AI를 다루는 영역은 점점 더 쉬워지고 있는데요.
기술의 발전이 어디까지인지 너무나도 무섭네요.

profile
지나가는 사람입니다. 마저 지나갈게요 :D

0개의 댓글

관련 채용 정보