오픈 소스 슬랙 AI 앱
요약
사용자가 직접 호스팅할 수 있는 오픈 소스 Slack AI 솔루션입니다. OpenAI의 모델을 활용하여 Slack 스레드 및 채널의 내용을 요약하고 개요를 생성하는 기능을 제공합니다.
핵심 포인트
- OpenAI 모델(GPT-4, GPT-3.5-Turbo)을 활용한 스레드 및 채널 요약 기능 제공
- 스레드 요약, 채널 개요, 특정 시점 이후 요약, 전체 채널 요약(실험적) 기능 포함
- 커스텀 프롬프트를 지원하여 요약 방식 사용자 정의 가능
- Python, Poetry, ngrok 등을 활용한 로컬 설치 및 실행 지원
이 저장소는 사용자가 직접 호스팅할 수 있는 기본적인 Slack AI 솔루션으로, OpenAI를 사용하여 스레드와 채널을 필요에 따라 요약하는 기능을 구현할 수 있습니다 (다른 대체 LLM이나 오픈 소스 LLM 지원은 수요가 있을 경우 추가될 예정입니다). 공식 Slack AI 제품은 훌륭해 보이지만, 접근성이 제한적이고 추가 비용이 발생한다는 점 때문에 제가 2023년 9월에 구축했던 버전을 오픈 소스로 공개하기로 결정했습니다. [제가 왜 그리고 어떻게 오픈 소스 Slack AI를 만들었는지]에 대해 더 자세히 알아볼 수 있습니다.
설정 및 실행을 완료하면(전체 과정 지침은 아래 제공됨), 모든 슬랙 사용자가 공개 및 비공개 채널 모두에서 다음 기능을 생성할 수 있게 됩니다:
- 스레드 요약 (Thread summaries) - 모든 Slack 스레드에 대한 상세 요약을 생성합니다 (기본적으로 GPT-4.1 기반).
- 채널 개요 (Channel overviews) - 확장된 메시지 기록을 바탕으로 채널의 목적에 대한 개요를 생성합니다 (NLP 모델 앙상블과 분석 내용을 자연어로 설명하기 위한 약간의 GPT-4.1 기반).
- 특정 시점 이후 채널 요약 (Channel summaries since) - 특정 시점 이후의 채널 메시지에 대한 상세 요약을 생성합니다 (기본적으로 GPT-4.1 기반). 이제 커스텀 프롬프트(custom prompts)를 지원합니다! 예:
/tldr_since anonymize the summary. 참고: 이 기능은 아직 스레드를 포함하지 않습니다. - 전체 채널 요약 (Full channel summaries) (실험적 기능) - 채널의 확장된 기록에 대한 상세 요약을 생성합니다 (기본적으로 GPT-4.1 기반). 이제 커스텀 프롬프트(custom prompts)를 지원합니다! 예:
/tldr_extended anonymize the summary. 참고: 이 요약은 매우 길어질 수 있습니다!
참고: 이 기능들은 모두 GPT-3.5-Turbo에서도 잘 작동했습니다 (채널 개요의 경우 GPT-4 기반).
<!-- toc에서 제외 -->목차
시작하기 (Getting Started)
개발 및 테스트 목적으로 로컬 머신에서 프로젝트를 복사하여 실행하려면 다음 지침을 따르세요.
사전 요구 사항 (Prerequisites)
로컬 개발 머신에 다음 항목이 미리 구성되어 있거나 설치되어 있는지 확인하십시오:
- Python 3.9.x - 3.11.x
- OpenAI API 키
- Slack 앱 및 관련 API 토큰
- Poetry 패키지 매니저 (Poetry package manager)
- ngrok (권장)
설치 (Installation)
- 저장소(repository)를 로컬 머신으로 클론(Clone)합니다.
- 프로젝트 디렉토리로 이동합니다.
- Poetry를 사용하여 필요한 Python 패키지를 설치합니다:
poetry install
- 사전(dictionary) 모델을 설치합니다
poetry run python -m spacy download en_core_web_md
- 프로젝트의 루트 디렉토리에
.env파일을 생성하고, API 키와 토큰을 입력합니다.example.env파일을 템플릿으로 사용하세요.
cp example.env .env && open .env
Slack 앱 설정
manifest.json 파일을 복사한 뒤, 요청 URL (request URL)을 사용자의 ngrok 또는 서버 URL로 변경합니다.
여기에서 새로운 Slack 앱을 생성하고, manifest.yaml 파일을 사용하여 설정합니다.
그 외의 다른 변경 사항은 필요하지 않겠지만, 이름, 설명 및 기타 텍스트 관련 설정은 변경할 수 있습니다.
슬래시 커맨드 (slash commands)의 이름을 조정하고 싶다면 slack_server.py를 수정해야 합니다.
설정이 완료되면,
통합 테스트 (Integration tests)는 실제 OpenAI API 호출을 수행하여, 현재의 의존성 버전 (dependency versions)에서 엔드 투 엔드 (end-to-end) 요약 흐름이 정상적으로 작동하는지 검증합니다. 이를 위해서는 환경 변수 또는 .env 파일에 OPENAI_API_KEY가 설정되어 있어야 합니다.
pytest tests/ -m integration
통합 테스트는 MongoDB에서 PostgreSQL로 마이그레이션하는 내용의 명확한 대화 내용을 사용하며, 요약본에 핵심 주제(mongodb, postgresql, migrat*)가 포함되어 있는지 확인 (assert) 합니다. 이는 의도적인 설계로, 유닛 테스트 (unit tests)를 통과하더라도 SDK 버전 업데이트로 인해 실제 API 연동이 조용히 깨지는 상황을 포착하기 위함입니다.
두 테스트 스위트 (suites) 모두 CI에서 동일한 테스트 단계의 일부로 자동 실행됩니다.
향후 개선 사항 (Future Enhancements)
- 확장성, 추적 (tracing) 및 제어를 위해 LangChain 및 LangSmith로 전환
- LangSmith의 피드백 기능을 활용하여 사용자 피드백을 수집하고 학습
- 특정 날짜 이후의 채널 메시지를 요약하는
/tldr_since커맨드 추가 - README에 Slack 앱 설정 세부 사항 및 샘플 앱 매니페스트 (app manifest) 추가
- 채널 수준 요약에 스레드 대화 (threaded conversations) 포함
- 유닛 테스트를 보완할 평가 (evals) 스위트 구현
- 대안 및 오픈 소스 LLM 지원 추가
- 비용 절감을 위한 데이터 수집 및 모델 미세 조정 (fine-tuning) 워크플로우 탐색
- 익명화된 메시지 요약 지원 추가
- Chain of Destiny와 같은 프롬프트 도구 활용
- 회사 지식 베이스와 같은 외부 소스에서 보조 컨텍스트 (supporting context)를 가져오는 기능 지원 추가
- 캐싱 (caching) 및 기타 성능 최적화 탐색
- 감성 분석 (sentiment analysis) 탐색
기여하기 (Contributing)
기여를 언제나 환영합니다! 피드백, 버그, 기능 요청, 개선 사항 또는 직접 작성한 풀 리퀘스트 (pull requests)를 제출하는 방법에 대한 자세한 내용은 CONTRIBUTING.md를 읽어주세요.
라이선스 (License)
이 프로젝트는 GPL-3.0 라이선스 하에 라이선스가 부여됩니다. 자세한 내용은 LICENSE.md 파일을 참조하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기