2023년 2월 8일자 포스팅을 확인해 보면 Ollama가 OpenAI의 인터페이스와 호환성에 대한 내용이 있습니다. 이에 따르면 사용자들은 이 플랫폼을 개인화된 AI 솔루션 구축에 활용할 수 있게 되며 OpenAI의 다양한 호출 방식(cURL, Python 라이브러리, JavaScript 라이브러리)을 그대로 이용할 수 있습니다. 아직 시험적인 단계에 있지만 이번 변화는 completions, Streaming, JSON mode, Reproducible outputs 등의 주요 기능을 포함합니다.
이전 글에서는 Ollama 설치 및 사용법, 랭체인을 통한 모델 설치 및 대화형 AI 애플리케이션 개발에 대해 살펴봤습니다. 이번에는 Ollama를 로컬 언어 모델로 활용하는 새로운 접근법과 이를 통해 가능해지는 기회들에 대해 논의해 보겠습니다.
지원되는 기능 및 Request Field
지원되는 기능
기능 | 지원여부 |
---|---|
Chat completions | O |
Streaming | O |
JSON mode | O |
Reproducible outputs | O |
Vision | X |
Function calling | X |
Logprobs | X |
지원되는 request fields
request field | 지원여부 |
---|---|
model | O |
messages | O |
message > Text content | O |
message > Array of content parts | X |
frequency_penalty | O |
presence_penalty | O |
response_format | O |
seed | O |
stop | O |
stream | O |
temperature | O |
top_p | O |
max_tokens | O |
logit_bias | X |
tools | X |
tool_choice | X |
user | X |
n | X |
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
두 개의 숫자를 더하는 간단한 파이썬 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로 실행시켜 보았습니다.
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 입니다.
결론: 새로운 가능성의 문을 여는 Ollama와 AutoGen
글을 작성하면서 OpenAI를 Ollama로 전환하는 과정이 예상보다 훨씬 간단하고 직관적임을 확인할 수 있었습니다. 이는 개발자들이 로컬 LLM을 활용하여 다양한 애플리케이션과 서비스를 구축할 수 있는 새로운 길을 열어줍니다. 특히, AutoGen을 사용하며 그 가능성에 크게 놀랐습니다. 이 경험은 앞으로 이 블로그를 통해 더 깊이 탐구하고 상세하게 정리할 예정입니다.
AutoGen과 같은 도구를 통한 개발 경험은 코딩 지식이 없는 사람들도 복잡한 기능을 원하는 대로 개발할 수 있다는 것을 실제로 체감하게 해줍니다. 이는 기술의 접근성을 대폭 향상시키는 중요한 변화입니다. 물론 AutoGen이 정상적으로 작동하는 로컬 LLM 모델이 더 많아진다면 이러한 가능성은 더욱 확장될 것입니다.
AI 분야는 변화의 속도가 빠르며 이는 우리에게 지속적인 학습과 탐구의 중요성을 상기시킵니다. 앞으로도 다양한 기술과 도구에 대한 관심을 가지고 이를 깊이 공부하며 이 블로그를 통해 공유해 나갈 것입니다. AutoGen과 같은 혁신적인 도구는 우리가 AI의 미래를 어떻게 형성할 수 있는지에 대한 흥미로운 통찰을 제공합니다. AI의 발전은 우리 모두에게 새로운 기회를 제공하며 이를 최대한 활용하기 위해 노력해야 할 것입니다.
본 글은 GPTers에 게시되고 있습니다.
Ollama #3: OpenAI API와의 호환 및 AutoGen 활용 | 지피터스 GPTers