[GPT] API를 활용한 서비스 만들기(1)

Sep 07, 2023
[GPT] API를 활용한 서비스 만들기(1)
 

1. GPT의 원리와 등장 배경

1.1. GenAI 와 비즈니스

notion image
 
notion image
  • 김칠힐 <생성모델이 미래다>
    • tmi : 상희님(샌드버드 CM) SaaS 관련 정말 좋은 아티클들 작성해주셔서.. 도움을 많이 받았던 블로그!
    • Gen AI는 반복적인 프로세스 자동화 뿐만 아니라 합성 미디어 전반, 프로토타이핑을 위한 도구 제조 및 비즈니스에도 사용될 수 있음
    • notion image
 

1.2. ChatGPT 학습 원리

  • Generative Model : X to Y (ex. text to text, text to image) ; 입력 데이터로부터 새로운 데이터를 생성하는 모델
  • ChatGPT의 학습 과정
    • Language Modeling, Pretraining : corpus로 학습
    • Instruction Finetuning
    • Reward Model Training
    • Reinforcement Learning
  • 강점 : 복잡한 자연어 문장을 이해하고 적절한 응답 생성, 논리와 지적 능력이 필요한 task 처리
  • 약점 : 할루시네이션, 편견, 속도가 느림
 

2. Python기초

2.1. 터미널 명령어

notion image

3. OpenAI API

3.1. OepnAI에서 제공하는 API 종류

(*강의시점과 현재 조금 다르다.)
  • Chat : 대화형 API를 만들 때 용이함
  • GPT best Practices
  • Embeddings : 텍스트를 고정된 벡터로 바꿔주는 것. 해당 벡터값을 활용해서 다양한 활용이 가능(Clustering, Search, Recommendations, Anomaly detection)
  • Speach to text
  • Image generation
  • Fine-Tuning
 

3.2. Playground

  • 테스트 환경
  • playground를 사용하려면 API Key발급 필요 (billing 정보 입력)
  • API Reference 페이지에 들어가면 각 파라미터별 설명이 있습니다
#Completion API 예제 import os import openai openai.api_key = "발급받은 키" response = openai.Completion.create(model="text-davinci-003", #instruction prompt="Say this is a test", #temperature가 클수록 randomness가 높음 - 서로 다른 응답 temperature=0, #응답 길이 제한, key tokenizer기준이라 단어 갯수는 아님 max_tokens=7) print(response)
#Chat API 예제 import os import openai openai.api_key = "발급받은 키" system_instruction = """ 너는 햄버거 가게 AI비서임. 아래는 햄버거 종류야, 이외의 버거는 없어. 빅맥, 쿼터파운더, 치즈버거 위의 메뉴 말고는 없다고 생각해 """ #bot에게 페르소나를 주는 것 messages = [{"role": "system", "content": system_instruction}] #input을 받아서 gpt의 output출력하는 함수 만들기 def ask(text): user_input = {"role": "user", "content": text} messages.append(user_input) response = openai.ChatCompletion.create( model = "gpt-3.5-turbo", messages = messages) resp = response.to_dict_recursive() bot_text = response['choices'][0]['message']['content'] bot_resp = {'role':'assistant', 'content':bot_text} messages.append(bot_resp) return bot_text while True: user_input = input("user input:") bot_resp = ask(user_input) print('-'*30) print(f'user_input: {user_input}') print(f'bot_resp: {bot_resp}')

4. AI서비스를 만들기 위해 필요한 라이브러리

4-1. Fast API란?

  • API를 만들기 위한 파이썬 웹 프레임워크. 빠른 속도가 강점.
  • API는 서비스 요청과 응답을 처리하는 서비스(기능)
 

4-2. Fast API

  • CRUD(HTTP메소드)
    • HTTP메소드는 웹 클라이언트 ↔ 서버 사이의 통신에 사용됨 ; CRUD작업 수행
    • Create(Post) : 데이터 생성, 데이터를 서버에 추가하기 위해 Post요청
    • Read(Get) : 데이터 조회, 서버에 데이터를 Get요청
    • Update(Put) : 데이터 수정, 기존 데이터 업데이트를 위한 Put요청
    • Delete(Delete) : 데이터 삭제, 서버에서 데이터를 삭제하기 위해 Delete요청
  • Get
from typing import Union from fastapi import FastAPI app = FastAPI() items = { 0 : {"name" : "bread", "price" : 1000}, 1 : {"name" : "water", "price" : 500} } #path parameter @app.get("/items/{item_id}") def read_item(item_id : int): item = items[item_id] return item @app.get("/items/{item_id}/{key}") def read_item_and_key(item_id : int, key:str): item = items[item_id][key] return item """ http://127.0.0.1:8000/0/name bread가 불러와짐! """ #query parameter @app.get("/item-by-name") def read_item_by_name(name : str): for item_id, item in items.items(): if item['name'] == name: return item return {"error" : "data not found"} """ http://127.0.0.1:8000/item-by-name?name=bread {"name":"bread","price":1000}가 불러와짐! """
  • Post / Update
    • 클라이언트→서버 리소스를 생성하거나 업데이트하기 위해 데이터 보낼 때 사용되는 메서드
    • ex.게시물 작성
    • HTTP메시지 body부분에 담아서 서버로 보냄
    • Get처럼 데이터가 외부적으로 드러나는 건 아니라서 보안이 필요한 부분에 사용됨 (하지만 데이터 암호화 필요함)
#옵션 부여 from typing import Optional class Item(BaseModel): name: str price: int @app.post("/items/{item_id}") def create_item(item: Item): if item_id in items: return {"error":"there is already existing key."} item[item_id] = item.dict() return {"success": "ok"} class ItemForUpdate(BaseModel): name: Optional[str] price: Optional[int] @app.put("/items/{item_id}") def update_item(item_id: int, item:Item): if item_id not in items: return {"error": f"there is no item id : {item_id}"} if item.name: item[item_id]['name'] = item.name if item.price: item[item_id]['price'] = item.price return {"success" : "ok"}
 
  • Delete
    • @app.delete("/items/{item_id}") def delete_item(item_id: int): items.pop(item_id) return {"success":"ok"}

Etc. 블로그 콘텐츠 마케팅xGPT

  • 블로그 콘텐츠 작성 자동화
    • 블로그 상단노출 결과를 참고해서 블로그 콘텐츠 제목을 추천받고
    • GPT에게 draft 내용 쓰게 만들기
  • 작업 프로세스
    • 주제선정 > 키워드 조사 및 목표 키워드 선정 > 제목선정 > 글 작성
BloFlo 서비스 사용기
  • 먼저 키워드 선정
    • notion image
  • 연관 키워드 알려줌 - 볼륨, 난이도, 의도 알려줌.
    • notion image
  • 타겟 키워드를 고르면 관련 제목을 추천해줌
    • notion image
      notion image
      notion image
  • 초안 작성된 파일을 Markdown파일로 받을 수 있는거 매우 센스있다..
    • notion image
  • 소감
    • 응답값 받는데 되게 오래 걸린다..
    • 이분 프롬프트 작성하신 것을 참고해보니.. [Goal] [Requirements] [Output] 이렇게 정확하게 작성해줌
      • notion image
만드신 분 글 :
서비스 데모 :
 

토이 프로젝트 기획해보기

(끄적끄적 수준..)
  • 대부분의 변호사 블로그에는 본인이 강점으로 내세우고 있는 분야에 대한 Best Practice(승소사례)가 콘텐츠화되어있음.
  • 프로세스
    • 사건번호를 받아옴 → 엘박스에 검색 → 판례 스크랩 → 프롬프트 작성 → GPT가 draft작성 → 중간에 필요한 이미지 Dalle로 생성해서 넣어주거나, 무료 이미지 사이트에서 찾아오도록 함 → Markdown 파일 다운로드 → 최소 수정
GPT 사용해 본 초안
  • 정제된 포스팅은 아니지만.. 프롬프트를 조정해보면 충분히,, 괜찮은 결과를 얻을 수 있을지도..?😂
[판례 복붙] [Goal] 위에 판례 내용을 바탕으로 해당 변호사의 승소사례를 담은 블로그 콘텐츠를 작성해 [Requirements] 해당 판례에서 드러나는 변호사의 역량을 특히 강조해 [Output] 소제목은 사건 경위, 변론 전략, 결과 순 개요에 맞게 내용을 작성하고 bullet point로 정리해
notion image
 
Share article

hollyisyoon