2023년 2월 8일자 포스팅을 확인해 보면 Ollama의 OpenAI와 호환성에 대한 내용이 있습니다. 이에 따르면 사용자들은 이 플랫폼을 개인화된 AI 솔루션 구축에 활용할 수 있게 되며 OpenAI의 다양한 호출 방식(cURL, Python 라이브러리, JavaScript 라이브러리)을 그대로 이용할 수 있습니다. 아직 시험적인 단계에 있지만 이번 변화는 completions, Streaming, JSON mode, Reproducible outputs 등의 주요 기능을 포함합니다.
이전 글에서는 Ollama 설치 및 사용법, 랭체인을 통한 모델 설치 및 대화형 AI 애플리케이션 개발에 대해 살펴봤습니다. 이번에는 Ollama를 로컬 언어 모델로 활용하는 새로운 접근법과 이를 통해 가능해지는 기회들에 대해 논의해 보겠습니다.
- 목차 -
지원되는 기능 및 Request Field
지원되는 기능
지원되는 request fields
OpenAI Chat Completions API
AutoGen 적용
Ollama를 사용하는 Autogen의 한계
결론
지원되는 기능 및 Request Field
지원되는 기능
지원되는 request fields
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 pyautogenOllama에 codellama가 설치되어 있지 않다면 run 혹은 pull 명령을 사용해 설치해 주세요.
ollama pull codellamaollama run codellama두 개의 숫자를 더하는 간단한 파이썬 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에 코드를 생성하고 테스트까지 수행할 수 있습니다.
코드가 실행될 때 생성된 계산기 프로그램입니다.
결과적으로 저는 코드를 한글자도 짜지 않고 파이썬 GUI 프로그램을 개발할 수 있었습니다.
Ollama를 사용하는 Autogen의 한계
Autogen을 사용 여러 AssistantAgent, UserProxyAgent가 서로 대화를 통해 시나리오를 작성하고 개선시키는 예제를 Ollama로 실행시켜 보았습니다.
ai-explorations/ai_scene_writer.py
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 입니다.
Possible Regression - select_speaker failed to resolve the next speaker's name
결론
글을 작성하면서 OpenAI를 Ollama로 전환하는 과정이 예상보다 훨씬 간단하고 직관적임을 확인할 수 있었습니다. 이는 개발자들이 로컬 LLM을 활용하여 다양한 애플리케이션과 서비스를 구축할 수 있는 새로운 길을 열어줍니다. 특히, AutoGen을 사용하며 그 가능성에 크게 놀랐습니다. 이 경험은 앞으로 이 블로그를 통해 더 깊이 탐구하고 상세하게 정리할 예정입니다.
출처 : Ollama #3: OpenAI API와의 호환 통합 및 AutoGen 활용으로 혁신적 AI 개발 시작 | AI&GameDev
#9기랭체인