이우의 개발일지
C++에서 Chat GPT API 이용하기 with Python 본문
Chat gpt API를 C++ 이용
일단 C++에서는 라이브러리에서는 API 라이브러리가 잘 안되어있기 때문에 직접적으로 쓰기 어렵습니다.
(curl 라이브러리를 써서 HTTP 요청하는 방법도 있긴한데... 복잡합니다..)
따라서, 나는 C++에서 만든 텍스트를 가지고 그 텍스트를 GPT 실행 python 파일을 실행시켜 값을 다시 가져오는 식으로 진행하였습니다.
즉, C++ 코드 중간에 python 파일을 개별로 실행시키고 그 값을 받아와 C++안에서 다시 처리하는 식입니다.
C++ GPT 실행 코드
std::string execGPTScript(const std::string& prompt) {
std::string command = "python3 gpt_script.py \"" + prompt + "\"";
std::array<char, 128> buffer;
std::string result;
std::shared_ptr<FILE> pipe(popen(command.c_str(), "r"), pclose);
if (!pipe) throw std::runtime_error("popen() failed!");
while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
result += buffer.data();
}
return result;
}
int main(){
string talk;
std::cin >> talk;
std::string gpt_result = execGPTScript(talk);
std::cout << gpt_result;
}
execGPTScript 함수안에 popen를 통해 파이썬 스크립트를 실행하고, 그 출력을 C++에서 읽을 수 있도록 합니다.
popen 함수는 실행한 명령어에 대한 출력 스트림을 반환하는데, "r" 모드로 설정하여 파이썬 출력 내용을 읽을 수 있도록 합니다.
std::shared_ptr<FILE>을 사용하여 파이프 리소스를 자동으로 관리하고, pclose로 파이프를 닫는 작업을 pipe가 소멸될 때 자동으로 처리힙니다.
이렇게 하면 미리 만들어놓은 파이썬 파일 gpt_script.py 안에 들어가 입력한 텍스트를 프롬포트로 받아서 답변을 생성합니다.
Python GPT 실행 코드
import openai
import sys
def get_gpt_response(prompt):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "user", "content": prompt}
],
max_tokens=100
)
return response.choices[0].message["content"].strip()
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python gpt_script.py <prompt>")
sys.exit(1)
# API 키 설정
openai.api_key = "Your KEY"; # 실제 API 키로 대체
# C++에서 입력한 prompt
prompt = sys.argv[1]
print(get_gpt_response(prompt))
먼저, get_gpt_response함수는 prompt 문자열을 입력으로 받아, OpenAI의 chatCompletion API를 사용하여 응답을 생성합니다. model= "gpt-4"는 사용할 모델 버전을 지정합니다. messages 매개변수에는 모델과의 대화를 정의하며, 이 예에서는 사용자 메시지만 포함된 단일 메시지로 prompt가 들어갑니다.
이렇게 함수를 설정하면 main문 안에서 이제 get_gpt_response를 호출하면 그 안에 내용에 맞춰 실행됩니다.
main문 안에 sys.argv는 파이썬 스크립트를 실행할 때 함께 전달된 명령줄 인수를 포함하는 리스트입니다.
sys.argv[0]는 실행 중인 스크립트의 이름(gpt_script.py)이고, sys.argv[1]은 첫번째 명령줄 인수입니다.
이렇게 해서 print(get_gpt_response(prompt))를 하면 답변이 C++로 전달됩니다.
'Coding' 카테고리의 다른 글
C++ 에서 Google STT, TTS 이용하기 with Python (2) | 2024.11.09 |
---|---|
[C/C++] 징검다리 /소프티어/ DP / LIS (0) | 2024.10.31 |
[C/C++] Carry 피하기 /백트래킹/ 코드트리 (0) | 2024.10.30 |
[C/C++] 화면에 출력 / BFS / 코드트리 / 실버1 (0) | 2024.10.29 |
[C/C++] 백준 1654번 랜선 자르기 / 이분 탐색 알고리즘 - (1) (0) | 2024.10.20 |