{"id":48184220,"url":"https://github.com/doublesilver/knowledge-copilot","last_synced_at":"2026-04-04T17:47:19.095Z","repository":{"id":340957853,"uuid":"1168331190","full_name":"doublesilver/knowledge-copilot","owner":"doublesilver","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-27T11:55:17.000Z","size":51,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-27T15:06:11.991Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://knowledge-copilot.vercel.app","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/doublesilver.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-27T09:09:05.000Z","updated_at":"2026-02-27T11:39:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/doublesilver/knowledge-copilot","commit_stats":null,"previous_names":["doublesilver/knowledge-copilot"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/doublesilver/knowledge-copilot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doublesilver%2Fknowledge-copilot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doublesilver%2Fknowledge-copilot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doublesilver%2Fknowledge-copilot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doublesilver%2Fknowledge-copilot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doublesilver","download_url":"https://codeload.github.com/doublesilver/knowledge-copilot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doublesilver%2Fknowledge-copilot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31407653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-04T17:47:18.985Z","updated_at":"2026-04-04T17:47:19.074Z","avatar_url":"https://github.com/doublesilver.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Knowledge Copilot - AI Document Copilot\n\n\u003e **한 문서에서 근거 기반으로 답하는 팀형 지식 동반자**\n\u003e\n\u003e 업로드한 문서를 임베딩하고, 검색 기반 질의와 액션 API를 제공하는 풀스택 AI 포트폴리오 프로젝트입니다.\n\n\u003cdiv align=\"center\"\u003e\n\n[![Deploy Status](https://img.shields.io/badge/deploy-GitHub_Actions-2088FF?style=for-the-badge\u0026logo=github-actions\u0026logoColor=white)](https://github.com/doublesilver/knowledge-copilot/actions)\n[![CI/CD](https://img.shields.io/badge/CI%2FCD-dev%20%26%20prod-4CAF50?style=for-the-badge)](https://github.com/doublesilver/knowledge-copilot/actions/workflows/ci-cd.yml)\n[![Vercel](https://img.shields.io/badge/Vercel-Frontend-black?style=for-the-badge\u0026logo=vercel)](https://vercel.com)\n[![Railway](https://img.shields.io/badge/Railway-API-0B0D0E?style=for-the-badge\u0026logo=railway)](https://railway.app)\n\n\u003c/div\u003e\n\n---\n\n## 프로젝트 개요\n\n| 항목 | 내용 |\n|------|------|\n| **프로젝트명** | Knowledge Copilot |\n| **유형** | AI 문서 질의/요약 MVP (포트폴리오) |\n| **개발 기간** | 2026-02-27 기준 구축 단계 |\n| **개발 인원** | 1인 풀스택 |\n| **현재 버전** | v0.1.0 |\n| **서비스 URL** | 배포 URL 별도 등록(공개 도메인 미공개) |\n\n---\n\n## 주요 기능\n\n| 기능 | 설명 |\n|------|------|\n| **문서 업로드** | 텍스트/파일 기반 문서를 업로드해 인덱싱 |\n| **RAG 질의** | 문서 기반 근거가 포함된 답변 반환 |\n| **문서 상세 조회** | 업로드한 문서/청크 기반 조회 |\n| **피드백 수집** | 질의 결과 평점 및 메모 저장 |\n| **액션 실행** | 사전 정의된 액션 API 엔드포인트 제공 |\n| **운영 메트릭** | 질의 수, 지연시간, 피드백 지표 조회 |\n| **CI/CD 자동 배포** | `dev`/`main` 브랜치 기준 자동 배포 |\n\n---\n\n## 기술 스택\n\n```mermaid\nflowchart LR\n    subgraph Frontend[\"Frontend (Vercel)\"]\n        N[Next.js 14.2.15]\n        React[React 18.3.1]\n        TypeScript[TypeScript 5.5.4]\n    end\n\n    subgraph Backend[\"Backend (Railway)\"]\n        FastAPI[FastAPI 0.112.0]\n        PyEnv[Python 3.12]\n        Uvicorn[Uvicorn 0.30.6]\n        SQLite[\"SQLite (파일 DB)\"]\n    end\n\n    User[브라우저] --\u003e N --\u003e FastAPI\n    FastAPI --\u003e SQLite\n    FastAPI --\u003e OpenAI[\"Embedding/Chat API\"]\n```\n\n### 스택 정리\n\n| 영역 | 사용 기술 |\n|------|----------|\n| Frontend | Next.js, React, TypeScript |\n| Backend | FastAPI, Pydantic, Uvicorn |\n| Storage | SQLite (프로토타입 DB) |\n| AI | OpenAI(임베딩/챗 모델, 옵션) |\n| 배포 | Vercel, Railway, GitHub Actions |\n| 테스트 | pytest |\n\n---\n\n## 아키텍처\n\n```mermaid\nflowchart TD\n    subgraph Browser[Client]\n        UI[Next.js UI]\n    end\n    subgraph API[API Layer]\n        FAST[FastAPI]\n        ROUTES[\"REST endpoints /api/v1/*\"]\n        DB[(SQLite)]\n    end\n\n    UI --\u003e|HTTPS| ROUTES\n    ROUTES --\u003e FAST\n    FAST --\u003e DB\n    FAST --\u003e OpenAI[(\"OpenAI API\")]\n```\n\n### API 엔드포인트\n\n| 메서드 | 경로 | 용도 |\n|--------|------|------|\n| GET | `/api/v1/health` | 헬스체크 |\n| POST | `/api/v1/documents` | 문서 업로드 |\n| GET | `/api/v1/documents` | 문서 목록 |\n| GET | `/api/v1/documents/{id}` | 문서 상세 |\n| POST | `/api/v1/queries` | 질의 처리 |\n| GET | `/api/v1/queries/{id}` | 질의 상세 |\n| POST | `/api/v1/evals` | 사용자 피드백 수집 |\n| POST | `/api/v1/agent/actions` | 액션 실행 |\n| GET | `/api/v1/metrics` | 운영 메트릭 |\n\n---\n\n## 프로젝트 구조\n\n```text\nproject3/\n├── app/                  # Next.js 프론트엔드\n│   ├── src/\n│   ├── public/\n│   └── package.json\n├── api/                  # FastAPI 백엔드\n│   ├── src/\n│   ├── requirements.txt\n│   ├── Dockerfile\n│   └── pytest\n├── docs/                 # 배포/로드맵 문서\n├── .github/workflows/    # CI/CD\n├── scripts/              # 배포 전 검증 스크립트\n└── .env, .env.example    # 로컬 환경설정\n```\n\n---\n\n## 로컬 실행 방법\n\n### 사전 설치\n\n- Node.js 20+\n- Python 3.12+\n\n### Backend 실행\n\n```bash\ncd api\ncp ../.env.example ../.env  # 최초 1회\npython -m venv .venv\nsource .venv/bin/activate   # Windows: .venv\\\\Scripts\\\\activate\npip install -r requirements.txt\nuvicorn src.main:app --reload --env-file ../.env\n```\n\n### Frontend 실행\n\n```bash\ncd app\nnpm install\nnpm run dev\n```\n\n### 통합 실행\n\n```bash\ndocker compose up --build\n```\n\n### 체크리스트\n\n```bash\ncd api\npython -m pytest -q\n\ncd ../app\nnpm run build\n```\n\n---\n\n## 배포/운영\n\n### Git 기반 자동 배포 전략\n\n- **dev / development 브랜치 push**: 개발 환경 배포(Development)\n- **main 브랜치 push**: 실운영 배포(Production)\n- `main` 배포는 운영 정책상 `dev` 검증 흐름 이후 반영\n\n### 배포 산출물\n\n- Frontend: Vercel (`app` 디렉터리 기준)\n- Backend: Railway (`api` 디렉터리 기준)\n\n### GitHub Actions 필수 Secret\n\n- `VERCEL_TOKEN`\n- `VERCEL_SCOPE`\n- `RAILWAY_DEV_DEPLOY_HOOK`\n- `RAILWAY_PROD_DEPLOY_HOOK`\n\nRailway 배포는 더 이상 `RAILWAY_TOKEN`을 사용하지 않고, GitHub Actions에서 각 환경별 Deploy Hook URL을 호출해 배포를 트리거합니다.\n\n---\n\n## 테스트\n\n현재 기준으로 검증 가능한 항목\n\n- `pytest` (백엔드 단위/API 기본 테스트)\n- `npm run build` (Next.js 빌드 검증)\n- GitHub Actions 체크 자동화\n\n```bash\ncd api\npython -m pytest -q\n\ncd ../app\nnpm run build\n```\n\n---\n\n## 개발 타임라인\n\n- v0.1.0: CI/CD 안정화 및 문서화 정리\n- v0.2.0: 질문 정합성 개선, 프롬프트 강화\n- v0.3.0: 인증/권한, 멀티테넌트, 지표 대시보드 고도화\n\n---\n\n## 보안 \u0026 운영 노트\n\n- OpenAI 키/토큰은 `.env` 또는 플랫폼 Secret으로만 관리\n- CORS는 환경별로 제한하여 배포\n- 파일 업로드는 UTF-8 텍스트 기반 처리로 제한\n- SQLite는 포트폴리오/샘플 단계의 저장소로, 운영 요구 시 PostgreSQL 교체 고려\n\n---\n\n## 문서\n\n- [DEPLOYMENT.md](./docs/DEPLOYMENT.md)\n- [ROADMAP.md](./docs/ROADMAP.md)\n- [CI/CD workflow](.github/workflows/ci-cd.yml)\n\n---\n\n## License\n\nMIT License\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n이 프로젝트는 포트폴리오 제출 및 면접용 실무형 구현 역량 증빙 목적입니다.\n\n**Made for practical AI engineering interview readiness.**\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoublesilver%2Fknowledge-copilot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoublesilver%2Fknowledge-copilot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoublesilver%2Fknowledge-copilot/lists"}