반응형

배경

opencv 를 쓰기 위해 파이썬 코드를 작성해 nodejs 서버에서 실행하고 있었다.

결과

https://github.com/pyinstaller/pyinstaller/issues/2613

 

How to generate an executable on Linux for Windows? · Issue #2613 · pyinstaller/pyinstaller

I'm trying to generate an executable from Linux for Windows. pyinstaller --onefile --windowed montecarlo.py I run this command and get a single executable that works on Linux just fine, I can open ...

github.com

 

하지만 조사결과 그렇게하지 못한다고 한다.

Pyinstaller 메뉴얼을 보면 다음과 같은 글이있다.

PyInstaller is tested against Windows, Mac OS X, and Linux. However, it is not a cross-compiler: to make a Windows app you run PyInstaller in Windows; to make a Linux app you run it in Linux, etc. PyInstaller has been used successfully with AIX, Solaris, and FreeBSD, but is not tested against them.

according to the comments in that answer it appears the ability to cross-compile was removed in 1.5, which was many releases ago. However, the secondary answer mentioning wine is correct -- you can usually create working Windows executables if you run pyinstaller under wine.

And as @xoviat mentioned, pyinstaller is cross-platform -- the compilation program works on Linux, OSX, and Windows. However, the resulting executables are platform specific.

 

한마디로 cross-compiler 가 아니라 불가능하다는 것이다. Wine 을 쓰는걸 추천한고 한다.

 

그리고, pyinstaller 는 사용자의 OS 환경에 맞게 실행파일을 만들어준다. linux 에서 배포를 했으면 조금은 달라졌을까?

왠만하면 언어 하나만을 쓰는걸로 생각하는게 정신건강에 좋을 듯 하다.

반응형

'Error' 카테고리의 다른 글

[React] useEffect 함수 한 번만 실행되게 하기  (0) 2023.06.02
반응형

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

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

프로젝트 개요

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

프로젝트 목표

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

프로젝트 일정

  • 기획 및 설계: 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" }
반응형
반응형

MSI 윈도우 설치 시 드라이버를 모르고 삭제했을 경우 MSI 공식 홈페이지에서 다운을 받아야한다. 

 

하지만, 드라이버가 왠만한거는 다 안되므로 어떻게 구글링 하다가 메디텍에서 만든 드라이버를 구했더니 설치가 완료되었다.

 

나같은 사람이 또 없기를 바라며 포스팅 한다.

meditek_wlan_ 3.00.01.1239.zip
2.22MB

반응형

'Day Life' 카테고리의 다른 글

2023 회고  (1) 2023.12.31
2022/08/06  (0) 2022.08.06
21.08.13  (0) 2021.08.13
실버 달성  (0) 2021.04.27
HI  (0) 2021.04.21

+ Recent posts