Notice
Recent Posts
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
관리 메뉴

이우의 개발일지

C++에서 Chat GPT API 이용하기 with Python 본문

Coding

C++에서 Chat GPT API 이용하기 with Python

공대이우 2024. 11. 8. 23:36

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++로 전달됩니다.

반응형