본문 바로가기

메타버스 뉴스레터

전문가들이 GPT-4를 활용하는 법

반응형
SMALL
How AI experts are using GPT-4

전문가들이 GPT-4를 활용하는 법

더 똑똑해진 GPT-4는 어디에 쓰일 수 있을까? 마케팅부터 코딩, 헬스케어까지 전문가들의 GPT-4를 사용법을 알아봤다.
 

최근 정말 치열하게 대표 AI 기업들이 주요 상품들을 출시했다. 구글은 개발자들에게 자사의 AI 언어모델에 대한 접근 권한을 제공하겠다고 밝혔고, AI 스타트업 앤스로픽(Anthropic)은 AI 어시스턴트 클로드(Claude)를 발표했다. 하지만 이 모든 것을 압도하는 중대 발표는 오픈AI의새로운 멀티모달 대형 언어모델 ‘GPT-4’ 공개였다. 출시 발표 직후 GPT-4 개발팀을 독점 취재한 MIT 테크놀로지 리뷰의 윌리엄 더글러스 헤븐(William Douglas Heaven)이 전하는 GPT-4의 첫인상을 이곳에서 볼 수 있다.

최근 인기를 끌고 있는 챗GPT를 일반 대중이 자유롭게 이용할 수 있는 것과 달리, 현재 GPT-4는 개발자만이 이용할 수 있다. [*편집자 주: 현재 챗GPT의 유료 멤버십인 챗GPT 플러스를 통해 이용할 수 있다] 아직 출시 초기인 만큼 GPT-4가 새 제품과 서비스에 적용되기까지는 시간이 다소 걸릴 테지만, 이미 많은 사람들이 GPT-4의 역량을 공개적으로 시험해 보고 있다. 재미있는 사례를 몇 가지 소개한다.

영감 주기(Hustling)

브랜드 디자이너인 잭슨 그레이스하우스 폴(Jackson Greathouse Fall)의 사례는 트위터에서 크게 화제가 되었다. 폴은 GPT-4에 어떻게 하면 초기 예산 100달러(약 13만 원)로 최대한 많은 돈을 벌 수 있는지 물었다. 그리고 그는 마치 컴퓨터의 ‘인간 리에종(보좌관)’처럼 무엇이 되었든 GPT-4가 시키는 대로 구입했다고 말했다.

GPT-4는 폴에게 특정 제품들(폴의 경우에는 어떤 친환경 제품이었다)의 구매 링크를 홍보하는 방식으로 돈을 벌 수 있도록 제휴 마케팅 사이트를 개설하라고 제안했다. 다음으로 폴은 GPT-4에 오픈AI의 이미지 생성 AI 시스템인 DALL-E 2를 사용해 로고를 만들 수 있는 프롬프트를 만들어 달라고 했다. 또 그는 GPT-4에 콘텐츠를 생성하라고 했으며 소셜미디어 광고에 자금을 할당해 달라고도 했다.

MIT Technology Review 뉴스레터 구독

가장 빠르게, 가장 편하게 MIT Technology Review의 최신 컨텐츠를 받아 보세요.

GPT-4로부터 영감을 얻어 마케팅 사업을 펼친 폴의 이야기는 소셜미디어에서 많은 이들의 관심을 끌었고 이들은 그의 사업에 투자하고 싶어 했다. 그리고 마침내 폴은 1,378.84달러(약 182만 원)의 현금을 손에 쥐었다. 이번 일은 명백히 홍보용 퍼포먼스였지만 한편으로는 사람들이 아이디어를 구상하는 데 AI 시스템이 어떤 도움을 줄 수 있는지 보여주는 멋진 예시이기도 했다.

생산성 높이기

대형 IT 기업들은 이용자들이 회사 업무에 AI를 사용하기를 고대하고 있다. 어쩌면 대부분의 사람들이 이러한 경로로 새로운 기술을 접하고 활용하게 될 것이다. MIT 테크놀로지 리뷰에서 지난 1월 예측했던 대로 마이크로소프트는 이용자들이 오피스 제품군의 GPT-4를 활용해 문서를 요약하거나 파워포인트 프레젠테이션을 준비하기를 바란다. 고작 두어 달 전 일이 벌써 아주 오래된 것처럼 느껴질 정도로 상황이 빠르게 돌아가고 있다.

우연찮게도 구글은 구글 독스와 지메일을 포함한 오피스 제품에 이와 비슷한 AI 기술을 적용할 것이라고 발표했다. 사람들은 이를 통해 이메일 초안을 작성하고 글을 교정하며 프레젠테이션용 이미지를 생성하는 데 도움을 받을 것이다.

헬스케어에 활용하기

MIT 테크놀로지 리뷰는 오픈AI가 투자한 앰비언스 헬스(Ambience Health)의 공동창업자인 니킬 부두마(Nikhil Buduma)와 마이크 응(Mike Ng)을 인터뷰하였다. 앰비언스 헬스는 GPT-4를 사용해 의료진과 환자가 나눈 대화를 기반으로 의무기록을 작성하는 기술을 개발하고 있다. 이들은 데이터 입력과 같은 번거로운 작업이 생략되어 의사들의 업무 부담이 줄어들 것이라고 설명한다.

부두마는 GPT-4가 이전 버전보다 훨씬 더 지시를 잘 따른다고 말한다. 하지만 무엇보다도 정확성이 가장 중요한 의료 분야에서 이 프로그램이 얼마나 잘 작동할지는 아직 알 수 없다. 오픈AI는 여러 AI 언어모델에서 나타나는 결함으로 알려진 것 가운데 일부를 개선했다고 밝혔지만, GPT-4는 여전히 완벽하지 않다. GPT-4는 없는 말을 지어내거나 거짓을 사실인 것처럼 자신 있게 말한다. 편향성 문제도 아직 남아 있다. 이러한 이유로 응은 인간 전문가가 직접 다루면서 실수를 바로잡는 것이 이 같은 AI 모델을 안전하게 사용할 수 있는 유일한 방법이라고 말한다.

코딩하기

프린스턴 대학교(Princeton University) 컴퓨터과학 교수인 아빈드 나라야난(Arvind Narayanan)은 GPT-4를 사용해 URL 주소를 참고문헌의 인용 항목으로 변환하는 코드를 생성하는 데 10분도 채 걸리지 않았다고 말한다.

나라야난은 텍스트, 이미지, 코드 생성을 위해 AI 프로그램을 각각 시험해 본 결과 코드 생성 AI 프로그램이 가장 유용했다고 말한다. 그는 트윗에서 “LLM(대형 언어모델) 코드 생성의 장점은 시간을 절약할 수 있다는 점과 심리적인 부분이라고 생각한다”라고 말했다.

그렉 브록먼(Greg Brockman) 오픈AI 공동창업자는 한 시연에서 메모장에 그려진 간단한 이미지를 기반으로 GPT-4를 사용해 웹사이트를 만드는 모습을 보여주었다. 나라야난이 지적하듯 이러한 AI 시스템의 강점은 바로 이처럼 평범하고 민감하지 않으면서도 시간이 오래 걸리는 작업을 자동화하는 것이다.

트윗: 아빈드 나라야난(Arvind Narayanan) @random_walker

(트윗 내용) “내가 인용했던 웹페이지의 URL을 BibTex(참고문헌 관리 프로그램) 항목으로 추가하기 위해 GPT-3 API에 접근하는 코드를 챗GPT-4로 짜는 데 10분도 걸리지 않았다. 지난 몇 년간 글을 쓸 때마다 작업이 참 성가셨다. 같은 작업을 하는 프로그램이 따로 있긴 한데 오류가 많다.” 

책 저술하기

오픈AI의 초기 투자자인 리드 호프먼(Reid Hoffman) 링크드인 공동창업자 겸 회장은 저서 《임프롬투: AI를 통한 인간성 증폭(Impromptu: Amplifying Our Humanity through AI)》을 집필하는 데 GPT-4를 사용했다고 말한다. 호프먼은 이 책이 GPT-4와 공동 집필한 최초의 책일 것이라고 했다. (이전 버전인 챗GPT는 이미 수많은 책을 만드는 데 사용되었다.)

호프먼은 2022년 여름 GPT-4를 처음 이용한 이후로 교육, 예술, 사법 체계, 저널리즘 등 다양한 분야에서 GPT-4를 활용할 수 있는 여러 방안에 대한 생각을 정리해 왔다. 그가 GPT-4와 주고받은 대화를 발췌해 옮긴 이 책에서 그는 자신이 생각하는 AI의 미래를 설명한다. 또한 GPT-4를 글쓰기 조수로 사용하면서 새로운 아이디어를 얻어 이를 분석하기도 한다.

ChatGPT 및 GPT-4 모델 작업 방법 알아보기

 

ChatGPT 및 GPT-4 모델은 대화형 인터페이스에 최적화된 언어 모델입니다. 모델은 이전 GPT-3 모델과 다르게 작동합니다. 이전 모델은 텍스트 입력 및 텍스트 출력이었습니다. 즉, 프롬프트 문자열을 수락하고 프롬프트에 추가하기 위해 완료를 반환했습니다. 그러나 ChatGPT 및 GPT-4 모델은 대화 입력 및 메시지 출력입니다. 모델은 특정 채팅과 유사한 대화 내용 형식으로 형식화된 입력을 예상하고 채팅에서 모델 작성 메시지를 나타내는 완료를 반환합니다. 이 형식은 멀티 턴 대화를 위해 특별히 설계되었지만 채팅이 아닌 시나리오에서도 잘 작동할 수 있습니다.

Azure OpenAI에는 이러한 유형의 모델과 상호 작용하기 위한 두 가지 옵션이 있습니다.

  • 채팅 완료 API
  • ChatML(Chat Markup Language)을 사용하는 완료 API입니다.

채팅 완료 API는 ChatGPT 및 GPT-4 모델과 상호 작용하기 위한 새로운 전용 API입니다. 이 API는 이러한 모델에 액세스하기 위한 기본 방법입니다. 또한 새 GPT-4 모델에 액세스할 수 있는 유일한 방법이기도 합니다.

ChatML은 text-davinci-002와 같이 다른 모델에 사용하는 것과 동일한 완료 API를 사용하며 ChatML(Chat Markup Language)이라는 고유한 토큰 기반 프롬프트 형식이 필요합니다. 이는 전용 채팅 완료 API보다 낮은 수준의 액세스를 제공하지만 추가 입력 유효성 검사가 필요하고 ChatGPT(gpt-35-turbo) 모델만 지원하며 기본 형식은 시간이 지남에 따라 변경될 가능성이 높습니다.

이 문서에서는 새로운 ChatGPT와 GPT-4 모델을 시작하는 방법을 안내합니다. 여기에 설명된 기술을 사용하여 최상의 결과를 얻는 것이 중요합니다. 이전 모델 시리즈와 동일한 방식으로 모델과 상호 작용하려고 하면 모델은 장황하고 덜 유용한 응답을 제공하는 경우가 많습니다.

ChatGPT 및 GPT-4 모델 작업

다음 코드 조각은 채팅 완료 API로 ChatGPT 및 GPT-4 모델을 사용하는 가장 기본적인 방법을 보여 줍니다. 이러한 모델을 프로그래밍 방식으로 처음 사용하는 경우 ChatGPT & GPT-4 빠른 시작으로 시작하는 것이 좋습니다.

GPT-4 모델은 현재 요청에 의해서만 사용할 수 있습니다. 기존 Azure OpenAI 고객은 이 양식을 작성하여 액세스를 신청할 수 있습니다.

Python복사
import os
import openai
openai.api_type = "azure"
openai.api_version = "2023-05-15" 
openai.api_base = os.getenv("OPENAI_API_BASE")  # Your Azure OpenAI resource's endpoint value.
openai.api_key = os.getenv("OPENAI_API_KEY")

response = openai.ChatCompletion.create(
    engine="gpt-35-turbo", # The deployment name you chose when you deployed the ChatGPT or GPT-4 model.
    messages=[
        {"role": "system", "content": "Assistant is a large language model trained by OpenAI."},
        {"role": "user", "content": "Who were the founders of Microsoft?"}
    ]
)

print(response)

print(response['choices'][0]['message']['content'])

출력

복사
{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "The founders of Microsoft are Bill Gates and Paul Allen. They co-founded the company in 1975.",
        "role": "assistant"
      }
    }
  ],
  "created": 1679014551,
  "id": "chatcmpl-6usfn2yyjkbmESe3G4jaQR6bsScO1",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 86,
    "prompt_tokens": 37,
    "total_tokens": 123
  }
}

 참고

새 ChatGPT 및 GPT-4 모델에서는 다음의 매개 변수를 사용할 수 없습니다. logprobs, best_of, echo. 이러한 매개 변수를 설정하면 오류가 발생합니다.

모든 응답에는 finish_reason이 포함됩니다. finish_reason에 대한 가능한 값은 다음과 같습니다.

  • stop: API가 전체 모델 출력을 반환했습니다.
  • length: max_tokens 매개 변수 또는 토큰 한도로 인한 모델 출력이 완료되지 않았습니다.
  • content_filter: 콘텐츠 필터의 플래그로 인해 콘텐츠를 생략되었습니다.
  • null: API 응답이 아직 진행 중이거나 완료되지 않았습니다.

max_tokens을 300 또는 500과 같이 평소보다 약간 더 높은 값으로 설정하는 것이 좋습니다. 이렇게 하면 모델이 메시지의 끝에 도달하기 전에는 텍스트 생성을 중지하지 않습니다.

모델 버전 관리

 참고

gpt-35-turbo는 OpenAI의 gpt-3.5-turbo 모델과 동일합니다.

이전 GPT-3 및 GPT-3.5 모델과 달리 gpt-35-turbo 모델, gpt-4 모델, gpt-4-32k 모델은 계속 업데이트됩니다. 이러한 모델의 배포를 만들 때 모델 버전도 지정해야 합니다.

현재 ChatGPT에서는 0301 버전만 사용할 수 있고 GPT-4 모델에서는 0314만 사용할 수 있습니다. 앞으로도 업데이트된 버전을 계속 사용할 수 있습니다. 모델 사용 중단 시간은 모델 페이지에서 확인할 수 있습니다.

채팅 완료 API 작업

OpenAI는 ChatGPT 및 GPT-4 모델을 학습하여 대화 형식의 입력을 허용했습니다. 메시지 매개 변수는 역할별로 구성된 대화가 있는 사전 배열을 사용합니다.

기본 채팅 완료 형식은 다음과 같습니다.

복사
{"role": "system", "content": "Provide some context and/or instructions to the model"},
{"role": "user", "content": "The users messages goes here"}

하나의 질문에 답변이 이어지는 대화는 다음과 같습니다.

복사
{"role": "system", "content": "Provide some context and/or instructions to the model."},
{"role": "user", "content": "Example question goes here."},
{"role": "assistant", "content": "Example answer goes here."},
{"role": "user", "content": "First question/message for the model to actually respond to."}

시스템 역할

시스템 메시지라고도 하는 시스템 역할은 배열의 시작 부분에 포함됩니다. 이 메시지는 모델에 대한 초기 지침을 제공합니다. 시스템 역할에서 다음과 같은 다양한 정보를 제공할 수 있습니다.

  • 도우미의 간략한 설명
  • 도우미의 성격 특성
  • 도우미가 따르려는 지침 또는 규칙
  • 모델에 필요한 데이터 또는 정보(예: FAQ의 관련 질문)

사용 사례에 맞게 시스템 역할을 사용자 지정하거나 기본 지침만 포함할 수 있습니다. 시스템 역할/메시지는 선택 사항이지만 최상의 결과를 얻으려면 최소한 기본 역할/메시지를 포함하는 것이 좋습니다.

메시지

시스템 역할 이후에는 사용자 및 도우미 간 일련의 메시지를 포함할 수 있습니다.

복사
 {"role": "user", "content": "What is thermodynamics?"}

모델에서 응답을 트리거하려면 도우미가 응답할 차례임을 나타내는 사용자 메시지로 끝나야 합니다. 또한 몇 가지 샷 학습을 수행하는 방법으로 사용자와 도우미 간 일련의 예제 메시지를 포함할 수도 있습니다.

메시지 프롬프트 예제

다음 섹션에서는 ChatGPT 및 GPT-4 모델에서 사용할 수 있는 다양한 프롬프트 스타일의 예를 보여 줍니다. 이러한 예제는 시작에 불과하며 다양한 프롬프트를 통해 사용자 고유의 사용 사례에 맞게 동작을 사용자 지정할 수 있습니다.

기본 예제

ChatGPT 모델이 chat.openai.com과 유사하게 작동하도록 하려면 “도우미는 OpenAI에서 학습한 대규모 언어 모델입니다.”와 같은 기본 시스템 메시지를 사용하면 됩니다.

복사
{"role": "system", "content": "Assistant is a large language model trained by OpenAI."},
{"role": "user", "content": "Who were the founders of Microsoft?"}

지침이 포함된 예제

일부 시나리오의 경우 모델에 추가 지침을 제공하여 모델이 수행할 수 있는 작업에 대한 가드 레일을 정의할 수 있습니다.

복사
{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer their tax related questions.
Instructions: 
- Only answer questions related to taxes. 
- If you're unsure of an answer, you can say "I don't know" or "I'm not sure" and recommend users go to the IRS website for more information. "},
{"role": "user", "content": "When are my taxes due?"}

접지용 데이터 사용

또한 시스템 메시지에 관련 데이터 또는 정보를 포함하여 대화를 위한 추가 컨텍스트를 모델에 제공할 수도 있습니다. 소량의 정보만 포함해야 하는 경우에는 시스템 메시지에서 하드 코딩할 수 있습니다. 모델이 유의해야 할 많은 양의 데이터가 있는 경우에는 포함을 사용하거나 또는 Azure Cognitive Search와 같은 제품을 사용하여 쿼리 시 가장 관련성이 높은 정보를 검색할 수 있습니다.

복사
{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer technical questions about Azure OpenAI Serivce. Only answer questions using the context below and if you're not sure of an answer, you can say 'I don't know'.

Context:
- Azure OpenAI Service provides REST API access to OpenAI's powerful language models including the GPT-3, Codex and Embeddings model series.
- Azure OpenAI Service gives customers advanced language AI with OpenAI GPT-3, Codex, and DALL-E models with the security and enterprise promise of Azure. Azure OpenAI co-develops the APIs with OpenAI, ensuring compatibility and a smooth transition from one to the other.
- At Microsoft, we're committed to the advancement of AI driven by principles that put people first. Microsoft has made significant investments to help guard against abuse and unintended harm, which includes requiring applicants to show well-defined use cases, incorporating Microsoft’s principles for responsible AI use."
},
{"role": "user", "content": "What is Azure OpenAI Service?"}

채팅 완료를 사용하여 몇 가지 샷 학습

모델에 몇 가지 샷 예제를 제공할 수도 있습니다. 새로운 프롬프트 형식으로 인해 몇 가지 샷 학습에 대한 접근 방식이 약간 변경되었습니다. 이제 사용자와 도우미 간 일련의 메시지를 몇 가지 샷 예제로 프롬프트에 포함할 수 있습니다. 이러한 예제는 일반적인 질문에 대한 답변을 시드하여 모델을 초기화하거나 모델에 특정 동작을 가르치는 데 사용할 수 있습니다.

이것은 ChatGPT 및 GPT-4로 몇 가지 샷 학습을 사용하는 방법의 한 가지 예일 뿐입니다. 다양한 접근 방식을 실험하여 사용 사례에 가장 적합한 접근 방식을 확인할 수 있습니다.

복사
{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer their tax related questions. "},
{"role": "user", "content": "When do I need to file my taxes by?"},
{"role": "assistant", "content": "In 2023, you will need to file your taxes by April 18th. The date falls after the usual April 15th deadline because April 15th falls on a Saturday in 2023. For more details, see https://www.irs.gov/filing/individuals/when-to-file."},
{"role": "user", "content": "How can I check the status of my tax refund?"},
{"role": "assistant", "content": "You can check the status of your tax refund by visiting https://www.irs.gov/refunds"}

채팅이 아닌 시나리오에 채팅 완료 사용

채팅 완료 API는 멀티 턴과 함께 작동하도록 설계되었지만 채팅이 아닌 시나리오에서도 잘 작동합니다.

예를 들어 엔터티 추출 시나리오의 경우 다음 프롬프트를 사용할 수 있습니다.

복사
{"role": "system", "content": "You are an assistant designed to extract entities from text. Users will paste in a string of text and you will respond with entities you've extracted from the text as a JSON object. Here's an example of your output format:
{
   "name": "",
   "company": "",
   "phone_number": ""
}"},
{"role": "user", "content": "Hello. My name is Robert Smith. I'm calling from Contoso Insurance, Delaware. My colleague mentioned that you are interested in learning about our comprehensive benefits policy. Could you give me a call back at (555) 346-9322 when you get a chance so we can go over the benefits?"}

기본 대화 루프 만들기

지금까지의 예제에서는 채팅 완료 API와 상호 작용하는 기본 메커니즘을 보여 주었습니다. 이 예제에서는 다음 작업을 수행하는 대화 루프를 만드는 방법을 보여 줍니다.

  • 콘솔 입력을 지속적으로 사용하고 메시지 배열의 일부로써 사용자 역할 콘텐츠로 적절하게 서식을 지정합니다.
  • 콘솔에 출력되고 서식이 지정되어 메시지 배열에 도우미 역할 콘텐츠로 추가되는 응답을 출력합니다.

즉, 새로운 질문이 제기될 때마다 지금까지의 대화 내용이 최신 질문과 함께 전송됩니다. 모델에는 메모리가 없으므로 각 새 질문이 제기될 때마다 업데이트된 대본을 보내야 합니다. 그렇지 않으면 모델은 이전 질문과 답변의 컨텍스트를 잃게 됩니다.

Python복사
import os
import openai
openai.api_type = "azure"
openai.api_version = "2023-05-15" 
openai.api_base = os.getenv("OPENAI_API_BASE")  # Your Azure OpenAI resource's endpoint value .
openai.api_key = os.getenv("OPENAI_API_KEY")

conversation=[{"role": "system", "content": "You are a helpful assistant."}]

while(True):
    user_input = input()      
    conversation.append({"role": "user", "content": user_input})

    response = openai.ChatCompletion.create(
        engine="gpt-3.5-turbo", # The deployment name you chose when you deployed the ChatGPT or GPT-4 model.
        messages = conversation
    )

    conversation.append({"role": "assistant", "content": response['choices'][0]['message']['content']})
    print("\n" + response['choices'][0]['message']['content'] + "\n")

위의 코드를 실행하면 빈 콘솔 창이 나타납니다. 창에 첫 번째 질문을 입력한 다음 Enter 키를 누릅니다. 응답이 반환되면 프로세스를 반복하여 계속 질문할 수 있습니다.

대화 관리

이전 예제는 모델의 토큰 한도에 도달할 때까지 실행됩니다. 질문을 하고 답변을 받을 때 마다 messages 배열의 크기가 커집니다. gpt-35-turbo에 대한 토큰 제한은 4096 토큰인 반면 gpt-4 및 gpt-4-32k에 대한 토큰 한도는 각각 8192 및 32768입니다. 이러한 한도에는 전송된 메시지 배열과 모델 응답 모두의 토큰 수가 포함됩니다. max_tokens 매개 변수 값과 결합된 메시지 배열의 토큰 수는 이러한 제한 내에서 유지되어야 합니다. 그렇지 않으면 오류가 발생합니다.

프롬프트 및 완료가 토큰 한도 내에 있도록 하는 것은 사용자의 책임입니다. 즉, 대화가 길어질 수록 토큰 수를 추적하고 한도 내에 속하는 프롬프트만 모델에 보내야 함을 의미합니다.

다음 코드 샘플에서는 OpenAI의 tiktoken 라이브러리를 사용하여 4096 토큰 수를 처리하는 기술을 사용하는 간단한 채팅 루프 예제를 보여 줍니다.

코드에는 tiktoken 0.3.0이 필요합니다. 이전 버전이 있는 경우 pip install tiktoken --upgrade를 실행합니다.

Python복사
import tiktoken
import openai
import os
openai.api_type = "azure"
openai.api_version = "2023-05-15" 
openai.api_base = os.getenv("OPENAI_API_BASE")  # Your Azure OpenAI resource's endpoint value .
openai.api_key = os.getenv("OPENAI_API_KEY")

system_message = {"role": "system", "content": "You are a helpful assistant."}
max_response_tokens = 250
token_limit= 4096
conversation=[]
conversation.append(system_message)

def num_tokens_from_messages(messages, model="gpt-3.5-turbo-0301"):
    encoding = tiktoken.encoding_for_model(model)
    num_tokens = 0
    for message in messages:
        num_tokens += 4  # every message follows <im_start>{role/name}\n{content}<im_end>\n
        for key, value in message.items():
            num_tokens += len(encoding.encode(value))
            if key == "name":  # if there's a name, the role is omitted
                num_tokens += -1  # role is always required and always 1 token
    num_tokens += 2  # every reply is primed with <im_start>assistant
    return num_tokens

while(True):
    user_input = input("")     
    conversation.append({"role": "user", "content": user_input})
    conv_history_tokens = num_tokens_from_messages(conversation)

    while (conv_history_tokens+max_response_tokens >= token_limit):
        del conversation[1] 
        conv_history_tokens = num_tokens_from_messages(conversation)
        
    response = openai.ChatCompletion.create(
        engine="gpt-35-turbo", # The deployment name you chose when you deployed the ChatGPT or GPT-4 model.
        messages = conversation,
        temperature=.7,
        max_tokens=max_response_tokens,
    )

    conversation.append({"role": "assistant", "content": response['choices'][0]['message']['content']})
    print("\n" + response['choices'][0]['message']['content'] + "\n")

이 예제에서는 토큰 수에 도달하면 대화 내용 기록에서 가장 오래된 메시지가 제거됩니다. 효율성을 위해 pop() 대신 del이 사용되며 항상 시스템 메시지를 보존하고 사용자/도우미 메시지만 제거하도록 인덱스 1에서 시작합니다. 시간이 지남에 따라, 이 대화 관리 방법을 사용하면 모델이 대화의 이전 내용을 점차 잃어버리기 때문에 대화 품질이 저하될 수 있습니다.

다른 접근 방식은 대화 기간을 최대 토큰 길이 또는 특정 턴 수로 제한하는 것입니다. 최대 토큰 한도에 도달하였고, 대화를 계속하도록 허용할 경우에 모델에서 컨텍스트가 손실되면 사용자에게 새 대화를 시작해야 하고 메시지 배열을 지워야 한다는 메시지를 표시하여 사용 가능한 전체 토큰 한도로 완전히 새로운 대화를 시작할 수 있습니다.

마지막으로 덧붙여 … GPT-4는 AI 커뮤니티에 있어 멋지고 반짝이는 새 장난감이다. 이것이 아이디어 구축, 문서 요약, 개념 설명, 단순 작업 자동화에 도움이 되는 강력한 보조 기술이라는 점은 부인할 수 없는 사실이다. 특히 사무직 지식근로자에게는 환영할 만한 발전이다.

그러나 오픈AI 스스로 GPT-4 사용에 주의를 촉구하고 있다는 점, 개인정보 침해, 사람인 척 기만하는 행위, 유해 콘텐츠 생성을 비롯해 여러 가지 안전의 우려가 있음을 경고하고 있다는 점은 눈 여겨볼 만하다. 또한 GPT-4가 아직 드러나지 않은 다른 위험한 일에 쓰일 가능성도 있다. 그러므로 기대는 하되 과대광고에 현혹되어서는 안 될 것이다. 현재로서는 누군가 이 강력한 새 AI 모델을 이용해 나쁜 일을 저지르는 것을 막을 도리가 없고, 그러한 일이 벌어지더라도 책임을 물을 방법 역시 없다.

SMALL

 

반응형
LIST