AISmarteasy – 시맨틱 커널 포크로 개발하기 1a – 시작 – OpenAI API
openai가 제공하는 ai 서비스는 단연 으뜸이다. llm 연동 ai 애플리케이션이라면 이것과 연동하는 것을 가장 우선 시 한다. llm 연동 ai 애플리케이션 개발 프레임워크인 시맨틱 커널도 당연 그렇고.
openai는 ai 서비스 연동을 위한 api를 제공하고 있고, OpenAI developer platform으로 문서화하고 있다.
openai는 llm 기반 여러 ai 모델들에 대한 ai 서비스를 제공하고 있다. 텍스트 생성 모델로 gpt를 버전 별로 제공하고 있다. 가장 최근 모델은 gpt-4이다.
gpt-4에는 그냥 gpt-4가 있고, turbo가 있다. turbo는 2023년 11월에 출시된 openai의 최신 모델이다. 2023년 4월까지의 데이터로 학습했다. 300페이지 분량의 텍스트를 담을 수 있는 128k 컨텍스트 창이 있다. 비용 문제가 있다면 어떤 버전을 사용할 지 고민 되겠지만, 그렇지 않다면 gpt-4 turbo(gpt-4-turbo-preview).
gpt-4는 텍스트 입력에 대해 텍스트 출력을 한다. llm에서는 텍스트 입력을 프롬프트라 한다. 프롬프트 작성은 프로그래머가 보면 함수를 작성하는 프로그래밍이다.
openai는 이미지 모델도 제공 한다. dall·e라 부르고, 최근 모델은 dall·e 3(dall-e-3)으로 2023년 11월에 출시되었다. dall·e는 자연어 설명으로 이미지를 생성하고, 기존 이미지를 편집하거나 변형할 수도 있다.
openai는 음성 합성(tts)과 음성 인식(stt)을 위한 모델도 제공하기 시작했다. 음성 합성 모델은 속도에 최적화된 것을 tts-1이라 하고, 품질에 최적화된 것을 tts-1-hd라 한다. 음성 인식 모델은 whisper라는 이름을 사용한다. 버전2까지 나왔으나 api에서 사용하는 이름은 이전 버전과 같이 “whisper-1″을 사용한다.
자연어로 컴퓨팅 연산 하려면 자연어를 임베딩해서 벡터화 해야 한다. openai는 임베딩을 위한 모델도 제공한다. 최신 모델은 벡터 차원을 작게(text-embedding-3-small, 1536) 하느냐 크게(text-embedding-3-large, 3072) 하느냐에 따라 구분한다. 장기 기억해야 하는 외부 데이터를 저장하기 위해 벡터 데이터베이스를 사용하는데, 이런 경우에는 벡터 데이터베이스가 지원하는 벡터 차원도 고려해서 한다.
openai는 ai 서비스에 대한 openai 사용 정책 준수를 확인하는 moderation 모델도 제공한다. 자연어나 코드를 이해하고 생성하는 gpt base 모델도 제공하지만 ai 서비스 사용자는 텍스트 생성 모델을 사용하면 되기 때문에, 이런 모델도 있다 정도만 체크하고 넘어가자.
openai는 텍스트에 vision이 포함된 gpt-4 모델(gpt-4-vision-preview)도 제공한다.
openai가 잘 나가니, openai가 제공하는 ai 서비스 api는 이를 개발 환경에서 쉽게 사용할 수 있도록 라이브러리(모듈)들이 제공되고 있다. 시맨틱 커널은 Azure OpenAI client library for .NET을 사용한다. 파이썬인 경우에는 OpenAI Python API library.
파이썬으로 llm 연동 애플리케이션 개발을 한다면, 개발 프레임워크는 랭체인을 사용하고, 코딩이나 실행은 구글 코랩에서 시작하자.
openai api를 사용하려면 api 키를 발급 받아야 한다. “openai api 키 발급” 으로 구글링 해서 키를 발급 받는다.
키를 발급 받았다면, 예제를 하나 하나 해보면서 라이브러리(모듈) 사용법을 익혀 나가면 된다.
openai는 ai 서비스를 사용해 볼 수 있는 playground를 제공한다. 여기서 열심히 놀아보자.
[무엇을 할 수 있나?]
openai가 제공하는 모델들만 살펴봐도 ai 서비스가 무엇을 제공할 지는 대략 알 수 있다. openai는 생성형 ai 모델을 제공한다고 하니 모델을 생성 관점에서 살펴보면 된다.
- 텍스트 생성
- 텍스트 생성으로 보면, 모델은 사용자가 프롬프트로 전달한 텍스트를 완료하는 것이 된다. text completion
- 모델을 사용해 사람이 지시할 때는 챗 방식이 지금까지는 가장 좋아 보인다. 챗 방식에서 텍스트 생성은 대화하는 사람에 대한 응답이 되고, 이것은 한 번의 대화를 완료하는 것이 된다. chat completion
- 사용자가 원하는 응답 형식이 있을 수 있다. 예) json
- 임베딩
- llm 미 보유 데이터 – 사전 훈련 시점 이후에 생성 되었거나, 내부 기밀 데이터를 관리하면서 자연어 쿼리를 처리하고자 할 경우 자연어 데이터를 임베딩해서 벡터화 해야 한다. 임베딩 한 데이터는 검색, 클러스터링, 추천, 이상 탐지, 다양성 측정, 분류 등을 할 수 있게 된다.
- 파인 튜닝
- llm을 바닥 부터 시작해서 갖는 것은 막대한 자금을 요구하기 때문에, 소수를 제외하고는 llm 보유보다는 llm 벤더가 공개한 ai 서비스를 잘 활용하고 부족한 점을 보완하는 쪽에 노력을 기울인다. 시맨틱 커널도 그러한 노력의 하나 이다.
- 기밀 데이터를 처리해야 하는 경우, llm 벤더에게 데이터가 전달되는 위험성이 있다. 이러한 경우 기밀 데이터를 포함한 데이터로 llm을 미세 조정하고 싶을 수 있다. 이렇게 하더라도 기밀 데이터가 한 번은 llm 벤더에게 넘겨져야 하는 위험이 있다. 이런 위험성까지 고려해야 한다면, 오픈소스로 공개된 llm을 가져다가 직접 파인튜닝 해야 한다.
- 괜찮은 오픈소스 llm을 가져다, 파인 튜닝 해 주는 기업은 꼭 필요하겠다.
- 이미지 생성
- 음성 합성, 음성 인식
- 비전
- Moderation
[ Assistants API ]
openai는 llm 연동 ai 애플리케이션 개발에 필요한 기능 들을 assistants api로 제공하기 시작했다. 현재 code interpreter, retrieval과 function calling 기능을 제공하고 있다. 미래에는 더 많은 기능을 제공하겠다고 한다. llm 연동 ai 애플리케이션 기능 중 assistants api 기능과 같은 부분은 제거하고 제공하는 기능을 직접 사용하도록 한다. llm 연동 ai 애플리케이션 개발 회사라면 이런 부분도 잘 살펴야 한다. 역량을 갖출 때 llm 벤더가 치고 들어올 수 있는 영역인지 잘 살펴야 한다.