AI&GameDev

AI와 게임개발에 관련된 이야기

Ollama #3: OpenAI API와의 호환 통합 및 AutoGen 활용으로 혁신적 AI 개발 시작

Ollama OpenAI 호환성

2023년 2월 8일자 포스팅을 확인해 보면 Ollama가 OpenAI의 인터페이스와 호환성에 대한 내용이 있습니다. 이에 따르면 사용자들은 이 플랫폼을 개인화된 AI 솔루션 구축에 활용할 수 있게 되며 OpenAI의 다양한 호출 방식(cURL, Python 라이브러리, JavaScript 라이브러리)을 그대로 이용할 수 있습니다. 아직 시험적인 단계에 있지만 이번 변화는 completions, Streaming, JSON mode, Reproducible outputs 등의 주요 기능을 포함합니다.

이전 글에서는 Ollama 설치 및 사용법, 랭체인을 통한 모델 설치 및 대화형 AI 애플리케이션 개발에 대해 살펴봤습니다. 이번에는 Ollama를 로컬 언어 모델로 활용하는 새로운 접근법과 이를 통해 가능해지는 기회들에 대해 논의해 보겠습니다.

지원되는 기능 및 Request Field

지원되는 기능

기능지원여부
Chat completionsO
StreamingO
JSON modeO
Reproducible outputsO
VisionX
Function callingX
LogprobsX

지원되는 request fields

request field지원여부
modelO
messagesO
message > Text contentO
message > Array of content partsX
frequency_penaltyO
presence_penaltyO
response_formatO
seedO
stopO
streamO
temperatureO
top_pO
max_tokensO
logit_biasX
toolsX
tool_choiceX
userX
nX

OpenAI Chat Completions API

OpenAI 공식 문서의 예시 코드를 Ollama 환경으로 수정하여 사용자들이 로컬에서 OpenAI의 기능을 직접 활용할 수 있게 되었습니다. 이는 Ollama 사용자들에게 더욱 풍부한 AI 개발 환경을 제공합니다.

OpenAI 문서에서 제공하는 기본 예제 코드는 다음과 같습니다:

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Who won the world series in 2020?"},
    {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
    {"role": "user", "content": "Where was it played?"}
  ]
)

이 코드를 Ollama를 사용하도록 코드 일부를 다음과 같이 수정할 수 있습니다. api_key는 필요하지만 실제로는 사용되지 않습니다:

# 위 코드와 동일
# client = OpenAI()
client = OpenAI(
    base_url = 'http://localhost:11434/v1', # Ollama 로컬 주소
    api_key='ollama', # 필수이지만 실제 사용되진 않음
)


response = client.chat.completions.create(
  # model="gpt-3.5-turbo",
  model="llama2", # 모델을 llama2로 변경
  messages=[
# 위 코드와 동일

이를 통해 OpenAI API와 동일한 형식의 결과를 얻을 수 있습니다.

ChatCompletion(id='chatcmpl-488', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='{ "@type": "Answer", "text": "The 2020 World Series was played at various locations, including stadiums in Los Angeles, California and Tampa, Florida." }', role='assistant', function_call=None, tool_calls=None))], created=1708273458, model='llama2', object='chat.completion', system_fingerprint='fp_ollama', usage=CompletionUsage(completion_tokens=41, prompt_tokens=0, total_tokens=41))

AutoGen 적용

Microsoft Research에서 개발한 AutoGen은 복잡한 대규모 언어 모델 애플리케이션 구축을 위한 다중 에이전트 대화 시스템을 제공합니다. 이는 개발자가 다중 에이전트 협업, 교육 가능성, 개인화 등 차세대 기능을 갖춘 대화명 AI 워크플로우를 쉽게 만들 수 있도록 지원합니다.

사용자가 codellama 에이전트와 대화하며 간단한 Python 스크립트를 작성하는 과정을 살펴보겠습니다. 이를 통해 나만의 AI 개발 경험을 체험해 볼 수 있습니다.

파이썬 라이브러리 설치

pip install pyautogen

Ollama에 codellama가 설치되어 있지 않다면 run 혹은 pull 명령을 사용해 설치해 주세요.

ollama pull codellama
ollama run codellama
ollama  ai  ai

두 개의 숫자를 더하는 간단한 파이썬 GUI 프로그램을 만들라고 요청해 보겠습니다.
먼저 Autogen과 OpenAI API를 사용하는 방법입니다.

from autogen import AssistantAgent, UserProxyAgent

config_list = [
  {
    "model": "gpt-4",
    "api_key": api_key #openai api key
  }
]

llm_config = {
    "config_list": config_list
}

# Assistant 생성
assistant = AssistantAgent("assistant", llm_config=llm_config)
# UserProxyAgent 생성 (work_dir 설정)
user_proxy = UserProxyAgent("user_proxy", code_execution_config={"work_dir": "coding", "use_docker": False})

# Autogen 실행
user_proxy.initiate_chat(assistant, message="Make simple python gui program to add two numbers.")
  • AssistantAgent는 대화의 주체로서 특정 작업을 수행하기 위해 필요한 지식이나 정보를 제공하는 역할을 합니다. 예를 들어 주식 가격의 변화를 시각화하는 작업을 요청받을 수 있습니다. 이 에이전트는 LLM 구성을 통해 다양한 데이터 소스나 API에서 정보를 추출하고 처리하는 능력을 가집니다.
  • UserProxyAgent는 사용자의 대리인으로서 사용자의 요청이나 명령을 AssistantAgent에 전달하는 역할을 합니다. 또한 AssistantAgent가 제공한 정보나 결과를 사용자에게 전달합니다. 이 에이전트는 코드 실행 구성을 통해 실제 코드를 실행하거나 도커를 사용하여 안전한 환경에서 코드를 실행할 수 있습니다. 사용자의 요청에 따라 AssistantAgent와의 대화를 시작하고 필요한 작업을 수행하기 위해 서로 협력합니다.
    • code_execution_config: 이 매개변수는 코드 실행에 관련된 설정을 담은 딕셔너리입니다. 여기에는 다음과 같은 설정이 포함될 수 있습니다:
    • "work_dir": "coding": 코드 실행을 위한 작업 디렉토리를 지정합니다. 이 예제에서는 "coding"이라는 이름의 디렉토리를 작업 디렉토리로 사용하겠다는 의미입니다. 이 디렉토리는 코드 파일을 저장하거나 실행 결과를 담는 데 사용될 수 있습니다.
    • "use_docker": False: 코드 실행 시 Docker를 사용할지 여부를 지정합니다. False로 설정된 경우 Docker를 사용하지 않고 로컬 환경에서 코드를 직접 실행합니다. Docker를 사용하면 실행 환경을 격리하여 보안과 호환성을 개선할 수 있지만 여기서는 Docker 사용을 비활성화하고 있습니다.

그럼 이 코드를 Ollama의 codellama를 사용하도록 수정해 보겠습니다. 간단히 config_list 부분만 수정하면 됩니다.

config_list = [
  {
    "model": "codellama",
    "base_url": "http://localhost:11434/v1",
    "api_key": "ollama",
  }
]

실행을 시키면 AssistantAgent 대화를 하면서 프로그램을 개발하게 되고 work_dir에 코드를 생성하고 테스트까지 수행할 수 있습니다.

autogen  ai

코드가 실행될 때 생성된 계산기 프로그램입니다.

 ai

결과적으로 저는 코드를 한글자도 짜지 않고 파이썬 GUI 프로그램을 개발할 수 있었습니다.

Ollama를 사용하는 Autogen의 한계

Autogen을 사용 여러 AssistantAgent, UserProxyAgent가 서로 대화를 통해 시나리오를 작성하고 개선시키는 예제를 Ollama로 실행시켜 보았습니다.

ai Ollama #3: OpenAI API와의 호환 통합 및 AutoGen 활용으로 혁신적 AI 개발 시작 1

Contribute to abhilashi/ai-explorations development by creating an account on GitHub.

groupchat = autogen.GroupChat(agents=[
                              screen_writer, monica_mingle, joey_jumble, critic], messages=[], max_round=5)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=gpt4_config)

screen_writer.initiate_chat(
    manager,
    message="""
screen write a birthday party
""",

screen_writer는 UserProxyAgent이고 monica_mingle, joey_jumble, Critic는 AssistantAgent입니다. 이와 같이 여러 Agent를 사용하여도 gpt-4모델을 사용할 때에는 정상적으로 시나리오 작성이 가능하나 Ollama의 여러 모델들로 테스트 했을 때 역할지정이나 텍스트 생성에 계속 문제가 발생했습니다. 대체적으로 GroupChat 기능이 gpt-4에서 잘 작동한다는 보고이 있습니다. 다음그 관련된 내용이 있는 GitHub 이슈 url 입니다.

842 Ollama #3: OpenAI API와의 호환 통합 및 AutoGen 활용으로 혁신적 AI 개발 시작 2

Possible Regression – select_speaker failed to resolve the next speaker’s name – · Issue #842 · microsoft/autogen

결론: 새로운 가능성의 문을 여는 Ollama와 AutoGen

글을 작성하면서 OpenAI를 Ollama로 전환하는 과정이 예상보다 훨씬 간단하고 직관적임을 확인할 수 있었습니다. 이는 개발자들이 로컬 LLM을 활용하여 다양한 애플리케이션과 서비스를 구축할 수 있는 새로운 길을 열어줍니다. 특히, AutoGen을 사용하며 그 가능성에 크게 놀랐습니다. 이 경험은 앞으로 이 블로그를 통해 더 깊이 탐구하고 상세하게 정리할 예정입니다.

AutoGen과 같은 도구를 통한 개발 경험은 코딩 지식이 없는 사람들도 복잡한 기능을 원하는 대로 개발할 수 있다는 것을 실제로 체감하게 해줍니다. 이는 기술의 접근성을 대폭 향상시키는 중요한 변화입니다. 물론 AutoGen이 정상적으로 작동하는 로컬 LLM 모델이 더 많아진다면 이러한 가능성은 더욱 확장될 것입니다.

AI 분야는 변화의 속도가 빠르며 이는 우리에게 지속적인 학습과 탐구의 중요성을 상기시킵니다. 앞으로도 다양한 기술과 도구에 대한 관심을 가지고 이를 깊이 공부하며 이 블로그를 통해 공유해 나갈 것입니다. AutoGen과 같은 혁신적인 도구는 우리가 AI의 미래를 어떻게 형성할 수 있는지에 대한 흥미로운 통찰을 제공합니다. AI의 발전은 우리 모두에게 새로운 기회를 제공하며 이를 최대한 활용하기 위해 노력해야 할 것입니다.

본 글은 GPTers에 게시되고 있습니다.
Ollama #3: OpenAI API와의 호환 및 AutoGen 활용 | 지피터스 GPTers

Ollama #3: OpenAI API와의 호환 통합 및 AutoGen 활용으로 혁신적 AI 개발 시작

답글 남기기

Scroll to top