23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
전편에 이어서 말씀드리겠습니다.
2편 : Fast-API 백엔드 구현 및 결과 보기
config 변경하기
스키마 만들기
라우터 만들기
Swagger로 확인하기
bard api 키 값과, open ai api 키 정보를 .config_secret\setting_local.json 파일을 읽어서 api키값을 변수에 저장하도록 수정합니다.
소스코드상에서는 key정보가 유출되지 않습니다.
# demo=fast-api > config > config.py 파일 수정
class Settings :
...
EMAIL_API_KEY: str = config_secret_common["email_api_key"]
## 아래 두줄 추가 하기
OPENAI_API_KEY: str = config_secret_common["openai_api_key"]
BARD_API_KEY: str = config_secret_common["bard_api_key"]
...fast-api 에서는 pydantic 을 사용하는데 I/O 의 spec을 정의하고, 검증을 수행합니다.
스키마를 생성하게 되면 API 문서를 자동으로 생성하여 정보를 반영해 줍니다. 이는 개발자에게 매우 편리하고 유용한 기능입니다.
Client (Flutter) 와 Server (Fast-API) 가 통신하기 위한 request 과 response의 스펙을 정의합니다.
# demo=fast-api > schemas > gpt_sch.py 파일 생성
from pydantic import BaseModel
# 요청시
class GptRequestSch(BaseModel):
title_nm: str
class Config :
orm_mode = True
schema_extra = {
"example": {
"title_nm": "Base Tesla Model 3 Inventory has $2,410 discount and now Qualifies for $7,500 Tax Credit"
}
}
# 결과를 응답하는 경우
class GptResponseSch(BaseModel):
bard_msg_ctt: str
openai_msg_ctt: str
kakao_msg_ctt: str
class Config:
orm_mode = True
schema_extra = {
"example": {
"bard_msg_ctt": "bard 메시지 내용 입니다",
"openai_msg_ctt": "openai 메시지 내용 입니다",
"kakao_msg_ctt": "kakao 메시지 내용 입니다"
}
}세 가지 다른 번역 서비스인 OpenAI, Bard API 및 Kakao Translator를 이용하여 텍스트를 번역하는 API 엔드포인트를 정의합니다
# demo=fast-api > apis > version1 > gpt_router.py 파일 생성
from fastapi import APIRouter
from schemas.gpt_sch import GptRequestSch, GptResponseSch
from kakaotrans import Translator
from bardapi import Bard
from config.config import settings
import openai, json, requests
router = APIRouter()
translator = Translator()
# POST 메소드를 사용하며 /translate/by/gpt 경로를 가집니다.
# 응답시에는 위에서 정의한 GptResponseSch 스키마를 활용합니다.
@router.post("/translate/by/gpt", response_model= GptResponseSch)
async def translate_by_gpt_router(req: GptRequestSch):
# 비교하기 위한 api 들을 호출합니다.
openai_result = await translate_by_openai(req)
bard_result = await translate_by_bard(req)
kakao_result = await translate_by_kakao(req)
# 결과를 리턴합니다.
return {
"bard_msg_ctt": bard_result,
"openai_msg_ctt": openai_result,
"kakao_msg_ctt": kakao_result,
}
# open ai의 api를 호출하는 예제 입니다.
# gpt-3.5-turbo 모델을 사용합니다.
# "role": "user": 사용자 역할을 나타내며, 일반적으로 사용자가 입력한 메시지나 질문을 나타냅니다.
# 번역할 텍스트를 content 속성에 추가하여 사용자 역할로 전달합니다.
# 응답의 첫번째의 내용을 리턴합니다.
async def translate_by_openai(req: GptRequestSch) :
data = {
'model': 'gpt-3.5-turbo',
'messages': [{'role': 'user',
'content': req.title_nm + '한국어로 100자 이내로 설명해줘'}],
'temperature': 0.3,
'max_tokens': 150,
}
response = requests.post('<https://api.openai.com/v1/chat/completions>', headers=settings.OPENAI_HEADERS, json=data)
output = json.loads(response.text)
openai_result = output["choices"][0]["message"]["content"]
return openai_result
# bard api를 활용하는 예제 입니다.
# 매우 간단합니다.
async def translate_by_bard(req: GptRequestSch) :
bard = Bard(token=settings.BARD_API_KEY)
bard_result = bard.get_answer(req.title_nm + '한국어로 100자 이내로 설명해줘')['content']
return bard_result
# 카카오 translator을 활용하는 예제 입니다.
# 입력 언어는 en : 영어 이고, 번역할 언어는 kr : 한국어 입니다.
async def translate_by_kakao(req: GptRequestSch) :
kakao_result = translator.translate(req.title_nm, src='en', tgt='kr')
return kakao_resultgpt_router를 연결해 줍니다. 최종경로는 /gpt/translate/by/gpt 입니다.
# demo=fast-api > apis > api_base 파일 수정
from fastapi import APIRouter
# gpt_router 추가
from apis.version1 import comm_router, gpt_router
api_router = APIRouter()
api_router.include_router(comm_router.router, prefix="/comm", tags=["comm"])
# 아래 줄 추가
api_router.include_router(gpt_router.router, prefix="/gpt", tags=["gpt"])fast-api 실행하기
uvicorn main:app --reload --port 9004몇 가지 테스트 해본 결과 입니다.
결과
{
"title_nm": "Air Jordan XXXVII Basketball Shoes (White/Red/Black)"
}
{
"bard_msg_ctt": "에어 조던 37 농구화는 2023년 5월에 출시된 농구화입니다. 흰색, 빨간색, 검은색으로 출시되었으며, 에어 조던 시리즈의 37번째 모델입니다. 에어 조던 37 농구화는 가볍고 편안한 착용감을 제공하며, 뛰어난 쿠션감과 반응성을 제공합니다. 또한, 에어 조던 37 농구화는 다양한 색상으로 출시되어 취향에 맞게 선택할 수 있습니다.",
"openai_msg_ctt": "에어 조던 XXXVII 농구화는 흰색, 빨간색, 검은색의 색상으로 제작되었습니다. 이 신발은 탁월한 트랙션과 안정성을 제공하며, 플라이워브 기술로 제작되어 발을 편안하게 감싸줍니다. 또한, Zoom Air 쿠셔닝 시스템이 탑재되어 충격을 완화하고 반응성을 높여줍니다",
"kakao_msg_ctt": "에어 조던 XXXVII 농구화 (화이트/레드/블랙)"
}
{
"title_nm": "adidas Ultraboost 22 Running Shoe - Women's $56.95 with Free Shipping"
}
{
"bard_msg_ctt": "아디다스 울트라부스트 22는 여성용 러닝화로, 현재 56.95달러에 무료 배송됩니다. 이 신발은 부드러운 착용감과 뛰어난 쿠션감으로 유명하며, 다양한 러닝 활동에 적합합니다.",
"openai_msg_ctt": "아디다스 울트라부스트 22 런닝화는 여성용으로 디자인된 제품입니다. 이 제품은 우수한 쿠셔닝과 안정성을 제공하여 뛰는 동안 발을 보호하고 편안한 착화감을 제공합니다. 또한, 유연한 소재와 트랙션 아웃솔로 다양한 지형에서도 안정적인 발걸음을 유지할 수 있습니다. 이 제품은 무료",
"kakao_msg_ctt": "아디다스 울트라부스트 22 러닝 슈 - 무료 배송으로 여성 56.95달러"
}
{
"title_nm": "CRAFTSMAN V20 20-Volt Max 8' Cordless Electric Pole Saw w/ 4.0Ah Battery"
}
{
"bard_msg_ctt": "CRAFTSMAN V20 20-Volt Max 8' Cordless Electric Pole Saw w/ 4.0Ah Battery는 20V Max 리튬 이온 배터리로 구동되는 전기 폴 절단기입니다. 8피트의 폴과 20인치의 톱날을 장착하고 있으며, 최대 10인치의 가지를 절단할 수 있습니다. 무게는 10파운드 미만으로 가볍고, 핸드 그립과 어깨 스트랩이 있어 편안하게 사용할 수 있습니다.",
"openai_msg_ctt": "CRAFTSMAN V20 20-Volt Max 8' Cordless Electric Pole Saw는 4.0Ah 배터리로 구동되며, 최대 8피트까지 연장 가능한 전동 폴 소입니다. 무선으로 사용할 수 있어 편리하며, 20볼트 최대 전압으로 강력한 성능을 제공합니다. 또한, 안전한 사용을 위해 자동 윤활 시스템과 자동 체인 텐셔너가 장착되어 있습니다.",
"kakao_msg_ctt": "CRAFTSMAN V20 20볼트 맥스 8' 코드리스 전기 폴 Saw w/4.0Ah 배터리"
}
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.