우바부가가 OPENAI 형식으로 통신이 가능하네요.

2024. 2. 6. 23:34인공지능

안녕하세요. 쿠루가이입니다.

최근에 RTX8000이라는 그래픽카드를 사서 이것저것 돌리는 맛으로 하루하루를 살고 있는데요. 우바부가를 최신버전으로 설치했더니 extensions에 openai 가 있더라고요. 오늘은 python 코드로 우바부가와 통신해서 마치 openai가 대답하는것처럼 코드를 짜는걸 소개해볼까합니다.

Boolean command-line flags에 api를 체크하고 위의  openai를 체크한 다음 [Apply flags/extensions and restart]를 누르면 활성화 됩니다.

openai, api 체크후 적용

웹브라우저 주소창에서 'http://127.0.0.1:5000/v1' 를 입력하고 아래와 같이 출력되면 설정 성공입니다.

그리고 아래는 OPENAI 스타일 파이썬 코드인데 api_base를 'http://127.0.0.1:5000/v1'로 잡아주면 openai 스타일로 통신이 가능해집니다. 이게 왜 좋냐면...보통 우리는 제일 똑똑한 LLM인 chatGPT 3.5 or 4 를 사용하는데 로컬LLM으로 변환시 따로 코딩 수정이 필요없다는게 가장 큰 장점이지요!

# https://github.com/oobabooga/text-generation-webui/wiki/12-%E2%80%90-OpenAI-API

import openai
openai.api_key = 'sk-xxxx26o36e2345NK3245U2345bkF2345OBH2345d5AALzAk11'
openai.api_base = "http://127.0.0.1:5000/v1"

def get_message(question, history):
    response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-16k",        
            temperature = 0.7,
            messages=[
                {            
                    "role": "system", 
                    "content": f"사용자의 물음에 적절한 말을 해주세요. 반드시 한국어로 대답해주세요."
                },            
                {            
                    "role": "user", 
                    "content": f"이전 내용 : {history}\n{question}"
                }
            ],                
        )
        
    message = response["choices"][0]["message"]['content']
    return message

history = ""

while True:
    print(f"Q : ", end='')
    question = input()        

    if question == 'exit':
        break

    answer = get_message(question, history)

    history += f"Q : {question}"
    history += f"A : {answer}"
    
    print(f"A : {answer}\n")

실제로 구동을 해보겠습니다. 

Q : 625전쟁은 왜 일어난거야?
A : 625전쟁은 1962년 6월 25일 북한이 남한 경주 방위 지역에 대규모 전투를 진행하면서 일어난 전쟁입니다. 이 전쟁은 북
한이 남한의 방위 지역인 경주에 대규모 공격을 시작하여 전쟁이 발발하였습니다. 이 전쟁은 전세계에서 큰 주목을 받으면서, 남한과 연합국(미국, 대한민국, 대한민국 국민 등)이 북한의 공격에 대응하여 상황을 회복하였습니다. 이 전쟁은 남북 간
의 갈등과 냉전 시기에 대한 반영으로 볼 수 있습니다.

Q : 6.25 전쟁(다른 나라에서는 한국전쟁이라고 부름) 과 내용이 다른거 같네. 다시한번 생각해서 대답해줘.
A : 625전쟁과 한국전쟁은 같은 전쟁을 의미합니다. 그러나 625전쟁은 주로 한국에서 사용되는 용어이며, 한국전쟁은 외국에서 더 흔히 사용되는 용어입니다. 한국전쟁은 1950년 6월 25일 북한이 남한 경계지역에 대규모 공격을 시작한 이후 발발한 
전쟁으로, 1953년 7월 27일에 공식적으로 전쟁이 종결된 것으로 알려져 있습니다. 이 전쟁은 남북 간의 갈등과 냉전 시기에 대한 반영으로 볼 수 있으며, 전 세계에서 큰 주목을 받았습니다.

Q : 6.25 전쟁 시, 한국군과 연합군은 어느 도시까지 밀려내려갔어?
A : 6.25 전쟁 시, 한국군과 연합군은 4.19 전투로 알려진 대전동 전투에서 북한군을 밀려내고 평양을 차지하였습니다. 이 
전투는 1950년 8월 3일부터 8월 25일까지 진행되었으며, 이 후 한국군과 연합군은 평양을 중심으로 북한 지역을 점령하였습
니다. 그러나 이후 중국군의 참전으로 인해 전세계에서 큰 주목을 받은 전쟁이 계속되었습니다.

Q : 그래 평양까지 점령했다가 중공군 개입해서 후퇴하게 되었는데 어디까지 후퇴했었지?
A : 6.25 전쟁 시, 한국군과 연합군은 평양을 차지한 후 중국군의 참전으로 인해 후퇴하게 되었습니다. 이후 전쟁은 북한과 연합국 간의 대치 상태에서 진행되었으며, 1953년 7월 27일에 공식적으로 종결되었습니다. 이 전쟁으로 인해 전세계에서 큰 주목을 받았으며, 남북 간의 갈등과 냉전 시기에 대한 반영으로 볼 수 있습니다.

보시다시피 LLM과 통신에는 문제 없습니다. 이건 openai사 LLM이 아니라 로컬로 돌아가는 놈이 대답했기 때문에 답변의 질은 좀 떨어지는것을 알 수 있습니다. 그러나 더 좋은 품질의 LLM을 우바부가에서 얼마든지 갈아끼울수 있기때문에 상관없어요^^

점점 LLM 구동 및 연동이 편해지는것 같습니다. 오늘은 여기까지....