반응형

프로젝트: 노인을 위한 스마트챗봇

본 문서는 [프로젝트] 노인을 위한 스마트챗봇에 대한 설명서입니다.

프로젝트 개요

노인분들이 스마트폰 등 디지털 기기를 사용하는 데 어려움을 겪는 경우가 많습니다. 이에 따라 노인분들이 쉽게 사용할 수 있는 인터페이스를 제공하고, 일상생활에서 유용한 정보와 서비스를 제공하는 스마트챗봇을 개발하고자 합니다.

프로젝트 목표

  • 노인분들이 쉽게 사용할 수 있는 인터페이스 제공
  • 일상생활에서 유용한 정보와 서비스 제공
  • 사용자 맞춤형 서비스 제공

프로젝트 일정

  • 기획 및 설계: 2022년 1월 ~ 2월
  • 개발: 2022년 3월 ~ 6월
  • 테스트 및 보완: 2022년 7월 ~ 8월
  • 출시 및 유지보수: 2022년 9월 이후

프로젝트 구성원

  • 기획팀: 1명
  • 개발팀: 3명
  • 디자인팀: 1명
  • 마케팅팀: 1명

프로젝트 결과물

  • 노인분들이 쉽게 사용할 수 있는 스마트챗봇
  • 일상생활에서 유용한 정보와 서비스를 제공하는 스마트챗봇

프로젝트 예산

  • 총 예산: 100,000,000원
  • 인건비: 60,000,000원
  • 개발비: 20,000,000원
  • 디자인비: 5,000,000원
  • 마케팅비: 5,000,000원
  • 기타 경비: 10,000,000원

노션 ai 를 써서 알아서 써보라고 하니 이렇게 작성해준다. ㅋㅋㅋㅋ은근 잘써주네.

 

여튼

👉프로젝트: 노인을 위한 스마트챗봇

본 문서는 [프로젝트] 노인을 위한 스마트챗봇에 대한 설명서입니다.

GPT API 를 이용한 챗봇을 개발합니다.

👉프로젝트 개요

노인분들이 스마트폰 등 디지털 기기를 사용하는 데 어려움을 겪는 경우가 많습니다. 이에 따라 노인분들이 쉽게 사용할 수 있는 인터페이스를 제공하고, 일상생활에서 유용한 정보와 서비스를 제공하는 스마트챗봇을 개발하고자 합니다.

👉프로젝트 목표

  • 노인분들이 쉽게 사용할 수 있는 인터페이스 제공
  • 일상생활에서 유용한 정보와 서비스 제공
    • 찾기 쉬운 노인복지
    • 요즘 젊은이들은? 젊은이들과 대화하기
    • 지하철 길찾기 (더이상 주변사람에게 묻지마)
  • 사용자 맞춤형 서비스 제공

👉프로젝트 일정

  • 기획, 설계, 개발, QA : 2022년 3월 ~ 6월
  • 빨리 끝내고싶다.

👉프로젝트 개발환경

  1. React + Express
    • 일단은 웹 프로젝트로 진행할 예정.
    • 시간이 된다면 flutter로 전환예정.
  2. STT : React-speech-recognition
    • google cloud STT 도 있지만 일단 연결이 쉬운 패키지로 선정했다.
    • openai Whisper 도 보았으나 실시간 처리를 지원하지 않아 패스하기로 했다.
  3. Openai GPT3.5
  4. TTS : Google Cloud

진행사항

현재 React 로 테스트 페이지를 제작했으며, 음성인식을 통해 텍스트를 화면에 출력하고, 텍스트를 api 통신 후 response 를 받는데 성공했다. 이 response 를 출력하는데 까지 진행했다.

 

 

나말고도 STT, TTS 를 이용하는 분이 한 분 계시는데 그분은 Google Cloud STT 를 사용하는 것 같다. 시연 테스트를 보니 정확도는 나나 그분이나 비슷한 것 같아서 다행이긴한데 실시간 처리가 정확히 되는 모델을 무료로 찾는건 어려울 것 같다.

 

이제 TTS 도 연결하고 시나리오를 구체화해서 개발을 진행하면 될 것 같다.

 

기존 GPT 3.5 를 이용해 챗봇을 만들기엔 한계가 있기 때문에 open ai 에서 제공하는 fine tuning 을 이용할 예정이다.

위 기능을 이용하려면 데이터가 필요한데 데이터를 어떻게 학습시킬지 모델 구상하기가 조금 귀찮다. ㅋ

반응형

'ChatGPT > 챗봇프로젝트' 카테고리의 다른 글

[프로젝트] 노인을 위한 스마트챗봇 -2-  (0) 2023.06.17
반응형

ChatGPT 의 API 를 연결하려면 우선 로그인을 해야한다. 로그인을 하고 나서 Documentation 탭에 들어간다. API Reference 항목에서 Authentication 항목을 클릭하면 글 내용 중 볼드 처리된 API Keys 가 보이는데 이를 클릭하면 API Key 를 생성할 수 있다.

 

 

키가 발급되고 나면 팝업창이 뜨는데 전체 키를 보여주며 닫으면 다시 볼 수 없으니 복사를 잘 해놓자.

이제 적당한 폴더를 만들어

npm install openai

를 입력해 패키지를 설치하자.

 

 

https://platform.openai.com/docs/api-reference/chat/create

openAI 홈페이지에 가면 아주 잘 나와있으니 참고하면 편하다.

api.js 파일을 만들어 다음과 같이 입력한다.

const { Configuration, OpenAIApi } = require("openai");

const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

const completion = await openai.createChatCompletion({
  model: "gpt-3.5-turbo",
  messages: [{role: "user", content: "Hello world"}],
});
console.log(completion.data.choices[0].message);

위의 코드를 실행하면 다음과 같은 response를 받을 수 있다.

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\\n\\nHello there, how may I assist you today?",
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

Request Body 를 더 자세피 살펴보면

  • model(Required) : api 에 사용되는 모델
  • message(Required) : 전송할 메시지
  • temperature : 0~2 값을 입력. 더 높은 값일 수록 랜덤한 대답이 생성
  • top_p : temperature를 대체할 변수. 따라서 동시에 사용하지말자.
  • n : 각 입력 메시지에 대해 생성할 대화 완료 선택사항 수. 기본값은 1
  • stream : 생성되는 대답의 부분이 출력. 대답이 끊어서 전달된다.
response = openai.ChatCompletion.create(
    model='gpt-3.5-turbo',
    messages=[
        {'role': 'user', 'content': 'Count to 100, with a comma between each number and no newlines. E.g., 1, 2, 3, ...'}
    ],
    temperature=0,
    stream=True  # again, we set stream=True
)

위의 request 를 보내고

for chunk in response:
    chunk_time = time.time() - start_time  # calculate the time delay of the chunk
    collected_chunks.append(chunk)  # save the event response
    chunk_message = chunk['choices'][0]['delta']  # extract the message
    collected_messages.append(chunk_message)  # save the message
    print(f"Message received {chunk_time:.2f} seconds after request: {chunk_message}")

다음과 같이 response 를 확인한다면

Message received 0.10 seconds after request: {
  "role": "assistant"
}
Message received 0.10 seconds after request: {
  "content": "\\n\\n"
}
Message received 0.10 seconds after request: {
  "content": "1"
}
Message received 0.11 seconds after request: {
  "content": ","
}
Message received 0.12 seconds after request: {
  "content": " "
}
Message received 0.13 seconds after request: {
  "content": "2"
}
...
Message received 0.13 seconds after request: {
  "content": "100"
}

과 같은 출력을 할 수 있다.

  • stop : API가 추가 토큰 생성을 중지하는 최대 4개의 시퀀스.
  • max_tokens : 한번의 대답이 생성되기 위한 최대 토큰의 개수
  • presense_penalty : -2~2 사이의 숫자이며, 양수로 갈 수록 새로운 토큰이 지금까지 텍스트에 나타나는지 여부에 따라 대답을 다르게 한다.
  • frequency_penalty : -2~2 사이의 숫자이며, 양수로 갈수록 빈도를 기준으로 새로운 토큰에 페널티를 줘 동일한 행 생성을 막는다.
  • logit_bias : -100~100 사이의 값에 매핑한 json 개체를 이용해 지정된 값에 따른 토큰이 나타날 가능서을 수정한다.
  • user : user 를 입력해 openai 에서 로그를 수집해 피드백을 줄 수 있게 허가해준다.npm install openaiapi.js 파일을 만들어 다음과 같이 입력한다.위의 코드를 실행하면 다음과 같은 response를 받을 수 있다.Request Body 를 더 자세피 살펴보면
    • model : api 에 사용되는 모델
    • message : 전송할 메시지
    • temperature : 0~2 값을 입력. 더 높은 값일 수록 랜덤한 대답이 생성
    • top_p : temperature를 대체할 변수. 따라서 동시에 사용하지말자.
    • n : 각 입력 메시지에 대해 생성할 대화 완료 선택사항 수. 기본값은 1
    • stream : 생성되는 대답의 부분이 출력. 대답이 끊어서 전달된다.
    response = openai.ChatCompletion.create(
        model='gpt-3.5-turbo',
        messages=[
            {'role': 'user', 'content': 'Count to 100, with a comma between each number and no newlines. E.g., 1, 2, 3, ...'}
        ],
        temperature=0,
        stream=True  # again, we set stream=True
    )
    
    위의 request 를 보내고다음과 같이 response 를 확인한다면과 같은 출력을 할 수 있다.
    • stop : API가 추가 토큰 생성을 중지하는 최대 4개의 시퀀스.
    • max_tokens : 한번의 대답이 생성되기 위한 최대 토큰의 개수
    • presense_penalty : -2~2 사이의 숫자이며, 양수로 갈 수록 새로운 토큰이 지금까지 텍스트에 나타나는지 여부에 따라 대답을 다르게 한다.
    • frequency_penalty : -2~2 사이의 숫자이며, 양수로 갈수록 빈도를 기준으로 새로운 토큰에 페널티를 줘 동일한 행 생성을 막는다.
    • logit_bias : -100~100 사이의 값에 매핑한 json 개체를 이용해 지정된 값에 따른 토큰이 나타날 가능서을 수정한다.
    • user : user 를 입력해 openai 에서 로그를 수집해 피드백을 줄 수 있게 허가해준다.
  • Message received 0.10 seconds after request: { "role": "assistant" }
  • Message received 0.10 seconds after request: { "content": "\\n\\n" }
  • Message received 0.10 seconds after request: { "content": "1" }
  • Message received 0.11 seconds after request: { "content": "," }
  • Message received 0.12 seconds after request: { "content": " " }
  • Message received 0.13 seconds after request: { "content": "2" }
  • ...
  • Message received 0.13 seconds after request: { "content": "100" }
반응형

+ Recent posts