SPThole/CoexistAI
요약
CoexistAI는 LLM, 웹 검색, Reddit, YouTube, GitHub 등을 통합하여 연구 워크플로우를 자동화하는 모듈형 연구 보조 프레임워크입니다. API 호출이나 Python 함수를 통해 검색, 요약, 데이터 추출을 수행하며 다양한 도구와 유연하게 통합됩니다.
핵심 포인트
- LLM, 웹, Reddit, YouTube, GitHub 등 다양한 데이터 소스 통합
- 텍스트를 팟캐스트나 고품질 음성으로 변환하는 기능 제공
- FastAPI 및 MCP를 통한 유연한 에이전트 통합 지원
- 비동기 및 병렬 실행을 통한 확장성 있는 설계
- Google Gemini, OpenAI, Ollama 등 다양한 LLM 교체 가능
CoexistAI는 모듈형의 개발자 친화적인 연구 보조 프레임워크 (research assistant framework)입니다. LLM (Large Language Models), 웹 검색 (web search), Reddit, YouTube, git 및 매핑 도구 (mapping tools)를 사용하여 연구 워크플로우 (research workflows)를 구축, 검색, 요약 및 자동화할 수 있으며, 이 모든 과정은 간단한 API 호출이나 Python 함수를 통해 이루어집니다.
- 🔥
Docker 설치 가능 (모든 피드백에 감사드리며, 설치가 쉬워지기를 바랍니다). Docker를 이용한 컨테이너화된 설정을 원하시면 README.docker.md의 지침을 따르세요. 텍스트 → 팟캐스트 (Text → Podcast): 작성된 콘텐츠를 매력적인 팟캐스트 에피소드로 즉시 변환합니다. 이동 중 청취하거나 기사/노트/블로그를 재가공하기에 이상적입니다. 예시: 이 기사를 팟캐스트로 변환했습니다. **여기서 들어보세요*텍스트 → 음성 (Text → Speech): 고급 TTS (Text-to-Speech)를 사용하여 텍스트를 고품질 오디오로 변환합니다. 예시는 Notebook을 확인하세요.유연한 통합 (Flexible Integration): FastAPI 또는 MCP를 통해 오디오 파일을 생성합니다. 에이전트 (agents)와 통합하거나 단독으로 사용할 수 있습니다.직접 위치 검색 (Direct Location Search): 경로뿐만 아니라 모든 장소를 검색할 수 있습니다.고급 Reddit 검색 (Advanced Reddit Search): 더 정교한 탐색을 위해 BM25 랭킹 (BM25 ranking)이 적용된 사용자 정의 문구를 사용합니다.YouTube 파워업 (YouTube Power-Up): 사용자 정의 프롬프트 (custom prompts)를 사용하여 비디오 또는 URL을 검색하고 요약합니다.파일/폴더 탐색 (File/Folder Exploration): 이미지(.png, .jpg 등)에 대한 비전 (vision) 지원을 통해 로컬 폴더와 파일을 탐색합니다.더 정교한 웹 검색 (Sharper Web Search): 더 집중적이고 실행 가능한 결과를 제공합니다.어디서나 MCP 지원 (MCP Support Everywhere): LM Studio 및 기타 MCP 호스트 (MCP hosts)와 완벽하게 통합됩니다. 가이드를 참조하세요.GitHub 및 로컬 리포지토리 탐색기 (GitHub & Local Repo Explorer): 코드베이스 (codebases) (GitHub 또는 로컬)에 대해 질문할 수 있습니다.
Web Explorer: 웹을 검색하고, 결과를 요약하며, LLM (Large Language Models)을 사용하여 컨텍스트를 추출합니다.
Reddit Explorer: 검색 문구나 특정 서브레딧 (subreddit) 중심의 쿼리를 통해 Reddit 정보를 가져오고 요약합니다.
YouTube Transcript Explorer: 검색 문구로 YouTube를 검색하고, 모든 비디오를 요약하거나 질의응답 (QA) 합니다.
Map Explorer: 지도를 생성하고, 경로를 탐색하며, 주어진 위치 근처의 호텔, 카페와 같은 관심 지점 (points of interest)을 탐색합니다.
Github Explorer: 모든 GitHub 또는 로컬 Git 코드베이스를 탐색, 요약, 설명 및 질의응답 (QA) 합니다.
Pluggable LLMs and Embedders: Google Gemini, OpenAI, Ollama 및 모든 임베더 (embedders) 등 어떤 LLM이라도 사용할 수 있습니다.
Async & Parallel: 빠르고 확장 가능하며 견고한 비동기 (asynchronous) 실행을 지원합니다.
Notebook & API Ready: Python 라이브러리로 사용하거나 FAST API를 통해 사용할 수 있습니다.
MCP ready: FAST API 서버와 함께 MCP (Model Context Protocol) 서버를 즉시 구동합니다.
전제 조건 (Prerequisite): Docker가 설치되어 있고 Docker 데몬 (daemon)이 실행 중인지 확인하십시오.
Docker를 사용한 컨테이너화된 설정을 원하시면 README.docker.md의 지침을 따르십시오. 이 방법은 프로세스를 자동화하기 위해 방법 A (helper script)를 사용하며, 쉬운 설정을 위해 관리자 UI (Admin UI)를 제공합니다.
저장소 복제 (Clone the repository):
git clone https://github.com/SPThole/CoexistAI.git coexistai cd coexistai
모델 및 임베딩 설정 구성:
-
[신규] 선호하는 LLM 및 임베딩 모델을 설정하려면
config/model_config.json을 편집하십시오. -
(필요한 경우) 선호하는 SearxNG 호스트 및 포트를 설정하려면 위 파일을 편집하십시오.
-
LLM 및 임베더 API 키를 추가하십시오 (Google 모드의 경우 둘 다 동일합니다).
-
예시 (전체 로컬 모드 기준):
-
[신규] 편집:
{
"llm_model_name": "jan-nano",
"llm_type": "local", // 아래 제공된 baseurl 딕셔너리 기준
...
-
사용 가능한 모든 옵션과 기본값은 해당 파일을 참조하십시오.
-
다른 LLM 유형을 사용하는 경우,
openai_compatibleURL 딕셔너리에서 다른 키를 확인하십시오. 일반적으로 "googling [제공업체 이름] openai api base compatible url"로 검색하여 찾을 수 있습니다.
설정 스크립트 실행:
-
zsh를 사용하는 macOS 또는 Linux의 경우:
zsh quick_setup.sh -
bash를 사용하는 Linux의 경우:
bash quick_setup.sh
스크립트는 다음을 수행합니다:
- SearxNG Docker 이미지 Pull
- Python 가상 환경 (virtual environment) 생성 및 활성화
사용자 작업 필요GOOGLE_API_KEY설정
(실제 키를 사용하도록 스크립트를 수정하세요). 선호하는 LLM 제공업체로부터 API 키를 받으세요 (현재 Gemini, OpenAI 및 ollama 지원). (google 모드가 설정된 경우에만 필요하며, 그렇지 않으면 model_config.py에서 설정합니다.) - SearxNG Docker 컨테이너 시작
-
Python 의존성 (dependencies) 설치
-
FastAPI 서버 시작
-
zsh를 사용하는 macOS 또는 Linux의 경우:
끝입니다!
FastAPI 및 MCP 서버가 자동으로 시작되며 바로 사용할 준비가 됩니다.
참고:
- 시스템에 Docker, Python 3, pip가 설치되어 있는지 확인하세요.
- 실행하기 전에
quick_setup.sh를 편집하여 실제GOOGLE_API_KEY를 설정하세요 (google 모델을 사용하는 경우 필요함). - Windows 사용자는 WSL 또는 Git Bash를 사용하여 스크립트를 실행하거나, 수동 설정 단계를 따를 수 있습니다.
선호하는 LLM 제공업체로부터 API 키를 받으세요 (현재 Gemini, OpenAI 및 ollama 지원). 키를 받으면 app.py 파일 또는 환경 변수를 다음과 같이 업데이트하세요:
import os
os.environ['GOOGLE_API_KEY'] = "YOUR_API_KEY"
또는 서버를 시작하기 전에 셸(shell)에서 API 키를 설정할 수 있습니다:
export YOUR_LLM_API_KEY=your-api-key-here
참고: 최적의 품질과 속도를 위해 embedding-001 임베딩 (embeddings)이 포함된 Google 모델과 Gemini Flash 모델을 사용하세요. 이들은 무료 API 키를 제공합니다.
개인화된 결과를 위해 utils/config.py에서 위치(기본값: India)를 업데이트하세요.
붙여넣기 전 // 앞의 주석을 제거하세요
호스트와 포트를 변경하지 않은 경우 Swagger UI: http://127.0.0.1:8000/docs
웹을 검색하고, 요약하며, 실행 가능한 답변을 자동으로 얻으세요.
엔드포인트 (Endpoint):
POST /web-search
요청 예시 (Request Example):
{
"query": "Top news of today worldwide", // 질문하고 싶은 쿼리; URL을 제공하고 요약을 요청하면 전체 페이지를 요약합니다.
"rerank": true, // 더 나은 결과 순위 지정(ranking)을 위해 true로 설정하세요.
...
또는 로컬 문서에 대한 QA/요약
{
"query": "이 연구 논문을 요약해줘",
"rerank": true,
...
URL을 통해 모든 기사 또는 연구 논문을 요약합니다.
엔드포인트 (Endpoint):
POST /web-summarize
요청 예시 (Request Example):
{
"query": "이 모델에 대한 짧은 블로그 글을 작성해줘", // 가져온 페이지 콘텐츠에 대한 지시사항(Instruction) 또는 질문.
"url": "https://huggingface.co/unsloth/Qwen3-8B-GGUF", // 콘텐츠를 가져올 웹페이지.
...
YouTube 검색 (프롬프트 및 배치 지원).
엔드포인트 (Endpoint):
POST /youtube-search
요청 예시 (Request Example):
{
"query": "스위스 여행 일정", // YouTube에서 검색할 쿼리; URL이 제공되면 해당 URL에서 콘텐츠를 가져옵니다. url은 https://www.youtube.com/watch?v=videoID 형식을 따라야 합니다.
"prompt": "스위스 여행 계획을 세우고 싶어", // 가져온 콘텐츠를 사용하기 위한 지시사항(Instruction) 또는 질문.
...
사용자 정의 Reddit 검색, 정렬, 필터링 및 상위 댓글 가져오기.
엔드포인트 (Endpoint):
POST /reddit-search
요청 예시 (Request Example):
{
"subreddit": "", // 콘텐츠를 가져올 서브레딧 (url_type이 'search'가 아닌 경우 사용).
"url_type": "search", // 문구 검색의 경우 'search'; URL의 경우 'url'; 그 외에는 'hot', 'top', 'best' 등을 사용.
...
장소, 경로 및 주변 관심 지점(POI) 찾기.
엔드포인트 (Endpoint):
POST /map-search
요청 예시 (Request Example):
{
"start_location": "MG Road, Bangalore", // 출발 지점.
"end_location": "Lalbagh, Bangalore", // 목적지.
...
또는 단일 위치 검색 (Open Street Map은 API 호출 제한이 있습니다)
{
"start_location": "MG Road, Bangalore",
"end_location": "Lalbagh, Bangalore",
...
모든 GitHub 또는 로컬 저장소(Repo)의 디렉토리 구조 가져오기.
엔드포인트 (Endpoint):
POST /git-tree-search
요청 예시 (Request Example):
{
"repobaseurl": "https://github.com/SPThole/CoexistAI/" // 탐색할 저장소의 기본 URL.
}
또는 로컬 저장소의 경우:
{
"repobaseurl": "/home/user/projects/myrepo"
}
모든 저장소의 코드를 가져오고, 검색하고, 분석합니다.
엔드포인트 (Endpoint):
POST /git-search
요청 예시 (Request Example):
요청 예시 (Request Example):
{
"repobaseurl": "https://github.com/google-deepmind/gemma", // 레포지토리의 기본 URL.
"parttoresearch": "research/t5gemma/t5gemma.py", // 기본 URL에 대한 폴더 또는 파일 경로.
...
}
또는:
{
"repobaseurl": "https://github.com/openai",
"parttoresearch": "openai-cookbook/examples/mcp",
...
}
from utils.websearch_utils import query_web_response
from utils.reddit_utils import reddit_reader_response
# 웹 탐색 (Web Exploration)
...
사용자 지정 LLM 연결: Google Gemini 대신 OpenAI, Ollama 또는 LangChain에서 지원하는 모든 모델로 교체할 수 있습니다.사용자 지정 도구 (Custom Tools): 새로운 기능을 위해 자체 도구를 에이전트 시스템에 추가하세요 (예시는 utils/를 참조).비동기/병렬 (Async/Parallel): 모든 웹 및 문서 검색 유틸리티는 고성능을 위해 비동기로 작동합니다.MCP 서버: lmstudio와 같은 로컬 앱을 coexistAI MCP 서버에 연결하여 모두 로컬에서
풀 리퀘스트(Pull requests), 이슈(issues), 기능 제안은 환영합니다! GitHub에 이슈 또는 PR을 열어주세요.
비상업적 용도로만 사용: CoexistAI는 연구, 프로토타이핑 및 교육 목적으로 엄격하게 의도되었습니다. 이 프로젝트 또는 그 결과물의 상업적 또는 운영(production) 사용은 허용되지 않습니다.
웹 및 Reddit 데이터: CoexistAI는 공개 웹 스크래핑 및 Reddit JSON 엔드포인트를 사용합니다. 공식 Reddit API를 사용하지 않습니다. 이 도구를 사용할 때는 항상 robots.txt, 사이트 약관 및 저작권법을 준수해야 합니다.
YouTube 및 기타 출처: 책임감 있게 그리고 각 데이터 제공업체의 서비스 약관에 따라 사용하세요.
준수 (Compliance): 본 도구의 사용이 모든 관련 약관, 조건 및 법률을 준수하는지 확인하는 것은 사용자 본인의 책임입니다.
본 프로젝트는 커스텀 비상업적 연구 및 교육용 라이선스(Non-Commercial Research and Educational Use License) 하에 라이선스가 부여되었습니다. 이 소프트웨어의 사용은 비상업적인 연구, 프로토타이핑 및 교육 목적으로만 허가됩니다. 상업적 또는 운영 목적의 사용은 엄격히 금지됩니다. 전체 약관 및 조건은 LICENSE 파일을 참조하세요.
본 프로젝트가 유용하다고 생각되면, 레포지토리에 별을 달아주고 네트워크에 공유해 주세요!
@TotallyTofu와 같이 소중한 피드백을 주신 사용자분들께 특별히 감사드립니다.
질문이 있으시면 GitHub Issues를 통해 문의하거나 Discussion을 열어주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기