xLang
xLang
xLang 저장소(xlang-ai/xlang)는 바로 OpenAgents라는 오픈 플랫폼을 가리켜요. 이 프로젝트는 현실 세계의 일상에서 언어 에이전트(Language Agent)를 사용하고 호스팅할 수 있게 만들어 준 오픈 플랫폼이에요. 기존의 언어 에이전트 프레임워크가 개념 증명(proof-of-concept)용 에이전트 구축에 집중하면서 일반 사용자가 에이전트에 접근하기 어렵게 만들었다는 문제를 짚고, 대신 누구나 쉽게 쓸 수 있는 웹 UI와 실제 배포 가능한 풀 스택 구조를 제안해요. Apache 2.0 라이선스로 공개되어 있고, 데모(chat.xlang.ai)에서 세 가지 에이전트를 무료로 체험할 수 있어요.
출처: 문서
본문
OpenAgents란?
OpenAgents는 데이터 분석, 플러그인 호출, 브라우저 제어 같은 작업을 ChatGPT Plus처럼 처리할 수 있지만, 코드까지 전부 오픈해 공개했다는 점이 특징이에요. 쉽게 배포할 수 있고, 풀 스택이며, 채팅 웹 UI를 제공하고, 에이전트를 확장하는 방법까지 모두 담겨 있어요. 일반 사용자는 신속한 응답과 일반적인 오류에 최적화된 웹 UI를 통해 에이전트 기능과 상호작용하고, 개발자와 연구원은 로컬 환경에서 원활하게 배포하며 혁신적인 언어 에이전트를 개발하고 실제 세계에서 평가할 수 있어요.
세 가지 에이전트
OpenAgents에는 세 가지 에이전트가 구현되어 있어요.
데이터 에이전트 (Data Agent) — Python/SQL과 데이터 도구로 데이터 분석을 수행하는 포괄적인 도구 모음이에요. 다음과 같은 기능을 제공해요:
- 🔍 검색: 원하는 데이터를 빠르게 찾아요.
- 🛠️ 처리: 데이터 획득 및 처리를 간소화해요.
- 🔄 조작: 특정 요구 사항에 맞게 데이터를 수정해요.
- 📊 시각화: 데이터를 명확하고 통찰력 있게 표현해요.
플러그인 에이전트 (Plugins Agent) — 200개가 넘는 제3자 플러그인과 원활하게 통합돼요. 예시로 쇼핑(Klarna), 날씨(XWeather), 과학 탐구(Wolfram Alpha) 등이 있고, 여러 플러그인을 동시에 사용할 수 있으며, 자동 플러그인 선택 기능으로 에이전트가 필요에 맞는 최상의 플러그인을 직관적으로 검색하고 제안해줘요.
웹 에이전트 (Web Agent) — 크롬 확장 프로그램을 활용해 웹 사이트를 자동으로 탐색해요. Google 지도로 최적 경로를 찾아주고, Twitter에 트윗을 대신 올려주고, Google Form 양식을 대신 작성해주는 등 웹 브라우징 경험을 간소화해줘요.
로컬 호스트에 배포하기
소스 코드로 배포하려면 다음 폴더와 README를 확인하면 돼요:
Docker로 배포하려면 docker-compose를 사용해요. 참고로 docker는 개발 중이라 일부 기능이 예상대로 동작하지 않거나 응답이 느릴 수 있어요.
kaggle 데이터셋을 쓰려면 Dockerfile에 본인 정보를 입력해요:
ENV KAGGLE_USER="" \
KAGGLE_KEY=""
로컬이 아닌 환경에서 실행하려면 frontend/Dockerfile에서 백엔드 서비스에 접근 가능한 IP를 수정해요:
ENV NEXT_PUBLIC_BACKEND_ENDPOINT http://x.x.x.x:8000
프로젝트 루트에서 docker compose build 명령을 실행하고, OpenAI 비공식 서비스(FastChat 등)를 쓰는 경우 docker-compose.yml의 OPENAI_API_BASE를 수정하거나 OPENAI_API_KEY를 넣은 뒤, 아래 명령으로 모든 서비스를 시작해요:
docker compose up -d
GPU를 사용하려면 Nvidia Container Toolkit을 설치하고 docker-compose.yml의 56~62번 줄 주석을 해제해야 해요. 자동 플러그인을 사용하면 HuggingFace에서 가중치 파일을 내려받으므로 네트워크 문제가 발생할 수 있어요.
코드 구조
OpenAgents의 코드 구조는 아래와 같아요:
├── backend # backend code
│ ├── README.md # backend README for setup
│ ├── api # RESTful APIs, to be called by the frontend
│ ├── app.py # main flask app
│ ├── display_streaming.py # rendering the streaming response
│ ├── kernel_publisher.py # queue for code execution
│ ├── main.py # main entry for the backend
│ ├── memory.py # memory(storage) for the backend
│ ├── schemas.py # constant definitions
│ ├── setup_script.sh # one-click setup script for the backend
│ ├── static # static files, e.g., cache and figs
│ └── utils # utilities
├── frontend # frontend code
│ ├── README.md # frontend README for setup
│ ├── components # React components
│ ├── hooks # custom React hooks
│ ├── icons # icon assets
│ ├── next-env.d.ts # TypeScript declarations for Next.js environment variables
│ ├── next-i18next.config.js # configuration settings for internationalization
│ ├── next.config.js # configuration settings for Next.js
│ ├── package-lock.json # generated by npm that describes the exact dependency tree
│ ├── package.json # manifest file that describes the dependencies
│ ├── pages # Next.js pages
│ ├── postcss.config.js # configuration settings for PostCSS
│ ├── prettier.config.js # configuration settings for Prettier
│ ├── public # static assets
│ ├── styles # global styles
│ ├── tailwind.config.js # configuration settings for Tailwind CSS
│ ├── tsconfig.json # configuration settings for TypeScript
│ ├── types # type declarations
│ ├── utils # utilities or helper functions
│ ├── vitest.config.ts # configuration settings for ViTest
│ └── webot_extension.zip # Chrome extension for Web Agent
└── real_agents # language agents
├── adapters # shared components for the three agents to adapt to the backend
├── data_agent # data agent implementation
├── plugins_agent # plugins agent implementation
└── web_agent # web agent implementation
backend/와 frontend/는 독립적이고 바로 배포 가능해요. real_agents/는 "하나의 에이전트, 하나의 폴더"로 설계되어 새로운 에이전트를 쉽게 확장할 수 있게 구성됐어요. adapters/에는 스트림 파싱, 데이터 모델, 메모리, 콜백 같은 공유 어댑터 컴포넌트가 담겨 있어요. 실제 에이전트를 구축할 때는 LangChain의 코드를 기반으로 사용했어요.
에이전트 확장하기
새 에이전트를 구축하려면 real_agents/ 폴더에 새 폴더를 만들고 에이전트 로직을 구현한 뒤, backend/api/ 폴더에 chat_<new_agent>.py 파일을 추가해 채팅 API를 정의해요. 필요에 따라 backend/schemas.py에 새 상수를 등록하고, 프론트엔드의 frontend/types/agent.ts, frontend/utils/app/api.ts, frontend/utils/app/const.ts에 OpenAgentID와 API를 추가하면 돼요.
새 LLM을 백본으로 추가하려면 이미 API로 호출 가능한 LLM이라면 backend/api/language_model.py에 새 모델을 등록하기만 하면 돼요. 플러그인 에이전트에 새 도구를 추가하려면 real_agents/plugins_agent/plugins/ 폴더에 새 폴더를 만들고 로직을 구현한 뒤, real_agents/plugins_agent/plugins/plugin_names.py에 새 도구 이름을 등록하면 돼요. 도구가 인식되려면 ai-plugin.json와 openapi.yaml이 필수적이에요.
자료
자세한 개념과 구현 설계는 논문(arXiv:2310.10634)을 참고할 수 있고, 전체 문서는 docs.xlang.ai에서 확인할 수 있어요. 관련 오픈소스 기반 모델로는 ChatGPT와 15가지 에이전트 작업에서 견주는 Lemur이 있어요.