로딩...

GPT-4를 활용한 인공지능 앱 개발

목차

GPT-4와 챗GPT의 핵심 요소

  • 읽기 힘듬

GPT-4와 챗GPT의 API

  • 입력 프롬프트와 출력 모두 token을 소비하며 비용으로 처리된다
    • 영어가 아닌 경우 더 비싸게 처리된다
  • 보안에 주의할 것 openai 서버에 들어가 스캔될 수 있다
  • 텍스트를 모델이 이해할 수 있는 벡터(현재 512차원)로 변환 임베딩 이라고 한다
    • 임베딩 자체도 openai 의 api 를 통해 수행
    • 입력 프롬프트도 임베딩하여 벡터 디비(redis)에 저장된 임베딩간에 검색(유사도 서치) 가능
  • 모더레이션 모델을 통해 openai 사용정책에 위반되는 것들 필터링할 수 있다
    • 이 또한 api 로 과금, 영어이외엔 사용 불가능하다
  • dall-e, whisper 와 같이 이미지, sst(speach-to-text) 모델이 존재

GPT-4와 챗GPT로 애플리케이션 구축하기

  • LLM 은 텍스트 요약 능력에 강점이 입증됨
  • 프롬프트 템플릿 + 프롬프트 입력 변수화하여 사용
  • 어플리케이션 예제
    • 요약류
    • youtube 스크립트 요약을 통한 영상 내용 요약
    • 젤다의 전설 전문가
      • pdf(메뉴얼)을 임베딩한후 벡터디비에 저장한다
        • 임베딩시에 api 한계로 끊어서 임베딩을 하게 되는데 이 때 단순 페이지나 글자수, 용량에 따른 청크화를 하는게 아니라
          문맥이나 챕터등으로 끊어서 임베딩을 하게 되면 성능이 향상된다
      • 입력 프롬프트 -> 임베딩 -> 벡더티비에서 메뉴과 검색을 시도
      • 매칭되는 정보를 context 에 포함하여 gpt 에 응답을 요구한다
  • 프롬프트 인젝션

    일종의 지침(명령어 셋) 유출

    • 프롬프트 인젝션은 피할 수 없다 이를 위해 각별히 신경쓸 것
    • 생각해보기로는 출력 내용에 사전 구성된 프롬프트가 존재하는지 등 체크필요
    • 사용자에게 너무 긴 입력 자유를 주면 인젝션 가능성이 상승
    • gpt 를 통해 의도 분석등을 통해 막는 것도 가능

GPT-4와 챗GPT의 고급 기법

  • 프롬프트 엔지니어링 아래와 같은(RCT) 제공 가능한 정보가 있음 추가적으로 제공
    • role - assist의 롤을 정의 예를 들어 경험 많은 개발자
    • context - 답변을 위한 정보, 상황 등
      • gpt extension 이나 추가 랭체인의 추가 api 활용, 벡터 디비 검색 결과등을 여기에 합쳐서 정확한 답변을 요구할 수 있음
    • task - 할일을 부여
      • 출력을 여기서 요구할 수도 있음 예를 들어 2컬럼의 테이블로 출력등
      • TL;dr 을 입력하여 요약을 요구
      • 코드와 함께 주석으로 수정된 코드를 요구하면 답변으로 수정된 코드를 얻을 수 있음
  • 출력서식 지정
    • 예를 들어 json 으로 출력을 요구, 동작은 역시나 이해하고 주는것은 아닐 것이므로,
      the output must be accepted by json.loads 와 같은 추가 프롬프트를 통해 정확한 답변 형식을 요구할 수 있음
      • json.loadspython 에서 사용하는 JSON.stringify 로 추측
  • 네거티브 프롬프트
    • 여러 지침을 반복해서하는 경우 효과가 올라간다, 이 또한 가이드라인으로써 활용된다
  • 답변의 길이 제한을 통해서도 출력 형태를 조절할 수 있다
    • LENGTH: 100 words 와 같은 추각 프롬프트
  • 러닝
    • 제로샷 러닝(zero-shot learning), COT(chain of thought)
      • 예로 Let's think, step-by-step 프롬프트 추가하면 특수한 케이스를 프롬프트에 추가하지않고도 답변 추론 방식에 영향을 준다
        • 3123 * 12312은 질문을 하면 틀린답을 할 확률이 매우 높지만 Let's think, step-by-step 프롬프트 추가를 하게되면
          실제 산수 계센을 하듯 자릿수계산을 하나씩 프롬프트로 계산하게(텍스트 추측) 되어 더하는 형태로 추론하여 정답에 가능성을 올린다
          • 2 + 24 를 맞추는데 이는 학습된 내용에 해당 내용이 많기 때문이며 수학적 논리로 답변을 하는게 아니다
          • step by step 프롬프트를 통하면 실제 산수와 같이 각자릿곱을 각각 더하는 형태로 쪼개서 추론하기 때문에 각각의 단순계산은 학습에 정확한 답이 포함되어있을 확률이 높기 때문에 정답확률이 올라간다는 의미
    • 원샷 러닝(one-shot learning)
      • 프롬프트에 대한 응답 예를 하나 추가하여 가이드를 하는 개념
    • 퓨샷 러닝(few-shot learning)
      • 프롬프트에 대한 응답 예를 여럿 추가하여 가이드를 하는 개념
  • 파인 튜닝

    특정 도메인, 회사등에서 사용을 위해 특정 지식을 추가적으로 대량 학습시켜 사용

    • 파인튜닝 api 가 별개로 존재하며 비싸다
    • 프롬프트와 응답으로 구분된 수백, 수천개 이상의 대량의 데이터를 학습시킨다
      • 꼭 사람이 만들 필요는 없으므로 이또한 GPT 를 통해 생성된 것으로 학습하는 케이스도 필요에 따라 사용
    • 파인튜닝의 결과로는 새로운 모델이 생성되는 것이며 이 모델을 사용하는 것은 좀 더 비싼 토큰 비용이 적용된다

랭체인과 플러그인으로 LLM 기능 향상하기

  • 랭체인
    • 랭체인은 프레임 워크, 툴체인과 같이 필요한 여러 도구들을 엮어서 사용하는 형태의 한 프레임워크
    • 랭체인의 구성 이해한 대로 정리
      • 모델 - llm 모델, openai 외에도 허깅페이스, gpt4all 등이 있음
      • 메모리 - 연속적인 결과를 처리하기 하기 위한 상태 저장 역할
      • 에이전트 - 툴이나 외부 api 를 사용하기 위해 사용자의 입력으로 부터 툴사용여부등을 결정
      • 체인 - 여러 모델, 프롬프트 결합을 위한 호출 생성
      • 인덱스 - llm 을 데이터와 결합, 벡터화된 데이터를 저장하여 사용하는 것을 말하는 것으로 추측
      • 프롬프트
      1. 들자면 프롬프트 입력을 에이전트가 필요한 도구가있는지를 판단한다 필요한 도구 있으면 인덱스, 혹은 계산 툴들을 불러와서 처리후 모델에 넘겨 답을 얻는다
      2. 채팅 모델이 아니라 (자동) 완성 모델을 가지고도 프롬프트를 만들때 이전 대화를 계속 붙여서 마치 채팅처럼 모델에 건내주는 context 를 만들어서 채팅결과를 얻는다
  • chatgpt plugin
    • open api interface 스펙을 작성하고 서버를 서빙하면된다 서빙을 할때는 /.well-known/ai-plugin.json 을 제공해야하며 사용하는 측에서 플러그인을 활성화하면 해당 플러그인의 설명을 읽고 chatgpt 의 판단 하에 필요하다고 생각되면 이를 사용하여 결과를 내어준다

정리

  • openai api 는 Model-As-A-Service
  • 개념상 문자를 벡터로 처리하여 비교하는 개념이기 때문에 숫자연산에 대해 논리적 근거가 없다
  • {zero,one,few}-shot 러닝