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를 확인하면 돼요:

  1. 백엔드: Flask 백엔드로 세 개의 에이전트를 호스팅해요.
  2. 프론트엔드: 프론트엔드 UI와 WeBot 크롬 익스텐션을 담고 있어요.

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.ymlOPENAI_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.tsOpenAgentID와 API를 추가하면 돼요.

새 LLM을 백본으로 추가하려면 이미 API로 호출 가능한 LLM이라면 backend/api/language_model.py에 새 모델을 등록하기만 하면 돼요. 플러그인 에이전트에 새 도구를 추가하려면 real_agents/plugins_agent/plugins/ 폴더에 새 폴더를 만들고 로직을 구현한 뒤, real_agents/plugins_agent/plugins/plugin_names.py에 새 도구 이름을 등록하면 돼요. 도구가 인식되려면 ai-plugin.jsonopenapi.yaml이 필수적이에요.

자료

자세한 개념과 구현 설계는 논문(arXiv:2310.10634)을 참고할 수 있고, 전체 문서는 docs.xlang.ai에서 확인할 수 있어요. 관련 오픈소스 기반 모델로는 ChatGPT와 15가지 에이전트 작업에서 견주는 Lemur이 있어요.

더 알아보기 (Learn more)