DeepSeek Harness Remote
DeepSeek Harness Remote: DeepSeek Harness 실행 PC와 모바일·PC를 안전하게 연결해 어디서나 작업 이어받기
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기원티드랩 AI 네이티브 커리어캠프 2기 포트폴리오
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗자취생이 세탁기·에어컨 모델을 고르고 질문하면, 그 모델의 공식 설명서와 제조사 공식 해결 가이드에서 근거를 찾아 쪽 번호·짧은 인용과 함께 답하는 웹 서비스입니다. 근거가 없으면 지어내지 않고 "설명서에서 찾지 못했어요"라고 답합니다.
data/models.json)flowchart TD
U[휴대폰 브라우저<br>public/ 화면] -->|POST /api/ask| F[Vercel 함수 sin1<br>FastAPI index.py]
F --> G[입력 검사<br>개인정보 가리기]
G --> E[OpenAI 임베딩<br>text-embedding-3-small]
E --> S[(Neon Postgres + pgvector<br>ap-southeast-1)]
S -->|선택 모델의 조각만| P[프롬프트 v1]
P --> L[OpenAI 답변<br>gpt-6-luna]
L --> V[근거 검증<br>인용이 조각에 그대로 있는지]
V -->|답 + 쪽 번호 + 인용<br>또는 찾지 못함| U
M[설명서 PDF·가이드 HTML<br>로컬에만] -->|python -m ingest| S
| 폴더 | 하는 일 |
|---|---|
index.py, app/web.py | Vercel 진입점, API 조립 |
app/input_guard/ | 빈 질문·길이·모델 검사, 개인정보(전화·이메일·주소) 가리기 |
app/retrieval/ | 임베딩, 모델 필터 검색, 에러 코드 → 진단 안내 쪽 덧붙이기 |
app/answer/ | 프롬프트, OpenAI 호출(타임아웃·재시도), 답변 검증 |
app/ask/ | POST /api/ask 흐름 |
public/ | 화면(정적 HTML·CSS·JS, Vercel CDN) |
ingest/ | 전처리(로컬): PDF·HTML → 조각 → 임베딩 → Neon |
evaluation/ | 평가(로컬): 테스트 질문 30개, 채점, 리포트 |
필요한 것: Python 3.14(Windows는 py 런처), Git, Neon 계정(무료), OpenAI API 키
아래 명령은 Windows의 Git Bash 기준입니다. PowerShell·명령 프롬프트에서는 .venv/Scripts/python을 .venv\Scripts\python으로 바꿔 입력합니다.
git clone https://github.com/mini-cs/pyeobom.git
cd pyeobom
py -3.14 -m venv .venv
.venv/Scripts/python -m pip install -r requirements-dev.txt
.venv/Scripts/python -m pytest -m "not integration" # 여기까지는 키·DB·설명서 없이 됩니다
data/guides/)을 받기 전에는 테스트 1개가 건너뛰어집니다(skipped)..env.example을 .env로 복사하고 비밀 값 두 개만 직접 채웁니다. 나머지는 예시 값 그대로 써도 됩니다.
OPENAI_API_KEY=sk-... # OpenAI API 키
DATABASE_URL=postgresql://user:password@host/db?sslmode=require # Neon 접속 주소
OPENAI_EMBED_MODEL=text-embedding-3-small
OPENAI_CHAT_MODEL=gpt-6-luna
EMBED_DIM=1536
OPENAI_REASONING_EFFORT=low
SEARCH_MODE=vector
.env는 커밋되지 않습니다(.gitignore). 비밀 값을 화면·로그·커밋 메시지에 남기지 마세요.설명서 PDF와 가이드 HTML은 저작권 때문에 저장소에 넣지 않았습니다(결정기록 009). 아래 공식 페이지에서 직접 받아 data/documents.json의 file 경로와 같은 이름으로 저장합니다.
| 문서 | 받는 곳 | 저장 위치 |
|---|---|---|
| 삼성 세탁건조기 설명서 | 삼성전자서비스 다운로드 자료실(https://www.samsungsvc.co.kr/download)에서 WD90H25AHTN1로 검색해 받음(표지 모델명 WD90H25AH* 계열) | data/manuals/OID140081_IB_WD80H-AD_7LCD_KO_260331.pdf |
| LG 드럼세탁기 설명서 | LG전자 제품 설명서(https://www.lge.co.kr/support/product-manuals)에서 FX24GNG로 검색해 받음(표지 모델명 FX25*N*/FX24*N*/FX23*N*, 문서 번호 MFL71792818) | data/manuals/WM_KOR_MFL71792818_10_251204_00_OM_WEB.pdf |
| LG 벽걸이 에어컨 설명서 | 같은 페이지에서 SQ06FA1WDS로 검색해 받음(공용 설명서, 문서 번호 MFL71890636) | data/manuals/[CW_RAC_24515]_250626_MFL71890636_01_Domestic_2025_WLM_2LED_CO.pdf |
| 해결 가이드 8개 | data/documents.json의 각 source_url | data/guides/<id>.html |
data/documents.json의 file을 맞추고, 쪽 번호가 바뀌었는지 확인합니다.ingest/schema.sql을 한 번 실행합니다. vector 확장과 테이블 3개(documents, document_models, chunks)가 만들어집니다.# Git Bash
for id in $(.venv/Scripts/python -c "import json;print(' '.join(d['id'] for d in json.load(open('data/documents.json',encoding='utf-8'))))"); do
.venv/Scripts/python -X utf8 -m ingest --doc-id "$id"
done
# PowerShell
(Get-Content data/documents.json -Encoding utf8 -Raw | ConvertFrom-Json).id | ForEach-Object { .venv\Scripts\python -X utf8 -m ingest --doc-id $_ }
.venv/Scripts/python -m pytest -v -m "not integration" # 기본 테스트(키·DB 없이)
.venv/Scripts/python -m pytest -v -m integration # Neon·OpenAI 연결 테스트(.env 필요)
.venv/Scripts/python -X utf8 experiments/dev_server.py # 화면 + API → http://127.0.0.1:8765
dev_server.py는 로컬 확인 전용입니다. 배포에서는 public/을 Vercel CDN이 제공합니다(결정기록 013).POST /api/ask?debug=true이면 검색된 근거(retrieved_refs)와 단계별 시간(embed_ms·db_connect_ms·search_ms·llm_ms)이 응답에 붙습니다..venv/Scripts/python -X utf8 -m evaluation --label v1 --prompt v1 --search vector
evaluation/questions.csv의 고정 질문 30개(2026-10-28 고정)를 돌려 채점합니다.evaluation/results/<label>-<날짜>.csv(사람 판정용 human_verdict 열)와 docs/평가/<날짜>-<label>.md에 저장됩니다.index.py가 FastAPI 앱을 노출하고, public/은 Vercel CDN이 제공합니다. vercel.json이 framework: fastapi와 함수 지역 regions: ["sin1"]을 고정합니다(결정기록 013·018).ap-southeast-1)이고, 함수와 같은 싱가포르에 둡니다..env.example의 키를 Vercel 대시보드의 Production·Preview에 직접 입력합니다. 값은 저장소·화면·로그에 남기지 않습니다. FORCE_FAIL은 운영(Production)에 넣지 않습니다.SEARCH_MODE: 운영은 vector입니다. 벡터 검색을 하고, 근거에 없는 에러 코드면 진단 안내 쪽을 덧붙입니다(결정기록 019). hybrid(질문 단어·코드 키워드를 섞음)는 시도한 뒤 채택하지 않은 실험용입니다(결정기록 020).main에 merge commit으로 병합하면 운영에 배포됩니다.| 버전 | 바꾼 것 | 자동 채점 정답률 | 사람 판정 정답률 | 근거 적중률 | 환각률 | 결정 |
|---|---|---|---|---|---|---|
| v1 | 기준 | 68.0% | 84.0% | 76.0% | 0% | — |
| v2a | 근거에 없는 에러 코드면 진단 안내 쪽을 덧붙임 | 68.0% | 88.0% | 80.0% | 0% | 채택(운영) |
| v2b | + 질문 단어·코드 키워드 검색 | 84.0% | — | 84.0% | 0% | 미채택 |
docs/평가/2026-11-01-v1.md, -v2a.md, -v2b.mddocs/결정기록/)| 번호 | 제목 |
|---|---|
| 001 | 주제 변경: 개발자 도구 → 비개발자 반복 업무 → 가전 설명서 Q&A |
| 002 | 1차 사용자: 자취생 중심, 어르신·상담원은 2~4차 |
| 003 | 대상 가전: 세탁기 + 에어컨 |
| 004 | 기술 구조: HTML + 파이썬 서버 함수(Vercel) |
| 005 | 검색 데이터: Neon + pgvector |
| 006 | 1차 범위: 핵심 흐름 우선, 추가 기능은 여유 시 |
| 007 | 화면 구성: C안 검색형 |
| 008 | 컴퓨터(노트북) 카테고리: 2차 이후 |
| 009 | 저작권 정책: 원본·조각 비공개, 짧은 인용, 고지, 허락 문의 |
| 010 | 수리 연결·리뷰 로드맵 |
| 011 | 형상관리: 기능별 폴더 + 기능별 브랜치 + PR |
| 012 | 서비스명 '펴봄'과 첫 화면 소개 영역(랜딩 A안) |
| 013 | Vercel 파이썬 배포 구조 |
| 014 | 근거 문서 선정 |
| 015 | 1차 최종 설정 (각 결정기록 요약) |
| 016 | 추출 도구 선택 (+ 부록: 측정 기록) |
| 017 | 임베딩·답변 모델 선택 |
| 018 | 배포 지역: Vercel 함수 sin1 + Neon 싱가포르 |
| 019 | v2a: 근거에 없는 에러 코드는 진단 안내 쪽을 덧붙인다 |
| 020 | v2b(질문 단어·코드 키워드 하이브리드 검색): 시도 후 미채택 |
docs/기획서.md, 구현 계획 docs/superpowers/plans/2026-10-27-pyeobom-phase1.md, 개발일지 docs/개발일지/, AI 실수 기록 docs/AI-실수-기록.md, 안정성 기록 docs/안정성-테스트.md