1. GPT의 원리와 등장 배경1.1. GenAI 와 비즈니스1.2. ChatGPT 학습 원리2. Python기초2.1. 터미널 명령어3. OpenAI API3.1. OepnAI에서 제공하는 API 종류3.2. Playground4. AI서비스를 만들기 위해 필요한 라이브러리4-1. Fast API란?4-2. Fast APIEtc. 블로그 콘텐츠 마케팅xGPT토이 프로젝트 기획해보기
1. GPT의 원리와 등장 배경
1.1. GenAI 와 비즈니스
- SEQUOIA : Generative AI - A Creative New World →2022년 작성된 기사다
- 김칠힐 <생성모델이 미래다>
- tmi : 상희님(샌드버드 CM) SaaS 관련 정말 좋은 아티클들 작성해주셔서.. 도움을 많이 받았던 블로그!
- Gen AI는 반복적인 프로세스 자동화 뿐만 아니라 합성 미디어 전반, 프로토타이핑을 위한 도구 제조 및 비즈니스에도 사용될 수 있음
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. 터미널 명령어
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는 서비스 요청과 응답을 처리하는 서비스(기능)
- 찾아보니 wikidocs에 이런 책도 있다 <점프투 FastAPI>
- 강의에서는 FastAPI Example 따라서 진행함.
#설치하고 pip install fastapi pip install "uvicorn[standard]" #main.py만들어서 코드 복붙 from typing import Union from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} @app.get("/items/{item_id}") def read_item(item_id: int, q: Union[str, None] = None): return {"item_id": item_id, "q": q} #실행 uvicorn main:app --reload
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 서비스 사용기
- 먼저 키워드 선정
- 연관 키워드 알려줌 - 볼륨, 난이도, 의도 알려줌.
- 타겟 키워드를 고르면 관련 제목을 추천해줌
- 초안 작성된 파일을 Markdown파일로 받을 수 있는거 매우 센스있다..
- 소감
- 응답값 받는데 되게 오래 걸린다..
- 이분 프롬프트 작성하신 것을 참고해보니.. [Goal] [Requirements] [Output] 이렇게 정확하게 작성해줌
만드신 분 글 :
서비스 데모 :
토이 프로젝트 기획해보기
(끄적끄적 수준..)
- 대부분의 변호사 블로그에는 본인이 강점으로 내세우고 있는 분야에 대한 Best Practice(승소사례)가 콘텐츠화되어있음.
- 프로세스
- 사건번호를 받아옴 → 엘박스에 검색 → 판례 스크랩 → 프롬프트 작성 → GPT가 draft작성 → 중간에 필요한 이미지 Dalle로 생성해서 넣어주거나, 무료 이미지 사이트에서 찾아오도록 함 → Markdown 파일 다운로드 → 최소 수정
GPT 사용해 본 초안
- 정제된 포스팅은 아니지만.. 프롬프트를 조정해보면 충분히,, 괜찮은 결과를 얻을 수 있을지도..?😂
[판례 복붙] [Goal] 위에 판례 내용을 바탕으로 해당 변호사의 승소사례를 담은 블로그 콘텐츠를 작성해 [Requirements] 해당 판례에서 드러나는 변호사의 역량을 특히 강조해 [Output] 소제목은 사건 경위, 변론 전략, 결과 순 개요에 맞게 내용을 작성하고 bullet point로 정리해
Share article