From 930f87b70f47ee134f8468b79227d920538247f5 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 18 Mar 2026 09:52:21 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20companyx=20RAG=20phase4/5a=20plans,=20r?= =?UTF-8?q?esearch,=20worklog=20=EA=B0=B1=EC=8B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- ...€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_κ³„νš.md | 15 +- ...©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_λ¦¬μ„œμΉ˜.md | 2 +- ...a_κ΅¬ν˜„μ™„λ£Œ_및_504_λΌμš°νŒ…_μˆ˜μ •.md | 193 ++++++++++++++++++ 3 files changed, 202 insertions(+), 8 deletions(-) create mode 100644 journey/worklog/260317_companyx_rag_phase4_5a_κ΅¬ν˜„μ™„λ£Œ_및_504_λΌμš°νŒ…_μˆ˜μ •.md diff --git a/journey/plans/260315_companyx_rag_λ‹΅λ³€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_κ³„νš.md b/journey/plans/260315_companyx_rag_λ‹΅λ³€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_κ³„νš.md index db7aaf3..663027d 100644 --- a/journey/plans/260315_companyx_rag_λ‹΅λ³€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_κ³„νš.md +++ b/journey/plans/260315_companyx_rag_λ‹΅λ³€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_κ³„νš.md @@ -247,14 +247,14 @@ tags: [plans, companyx, rag, answer-composition, scenario, troubleshooting] | μ €μž₯ 경둜 (rb8001 λ©”λͺ¨λ¦¬) | PostgreSQL `memory_vectors` λ“± 쀑심 μ „ν™˜ 확인 | **ν™•μ •** | | μ €μž₯ 경둜 (skill-rag-file λ¬Έμ„œ 청크) SSOT | `PostgreSQL team_document_chunk`. `upload.py`, `reindex.py`, `search.py` λͺ¨λ‘ `PostgresDocumentVectorStore` μ‚¬μš© 확인. "DB μ „ν™˜" μ•„λ‹˜ β€” **μŠ€ν‚€λ§ˆ μ΅œμ ν™” 및 인덱슀 μž¬μƒμ„±** κ΄€μ μœΌλ‘œ 관리. | **ν™•μ •** | | ChromaDB λ ˆκ±°μ‹œ 격리 | `rebuild_chroma_collection.py` β€” μ‹€ν—˜μš©/λ ˆκ±°μ‹œ. 운영 API와 μ™„μ „ 뢄리됨. κΈ΄κΈ‰ν•˜μ§€ μ•ŠμœΌλ‚˜ 정리 λŒ€μƒ. | **λ ˆκ±°μ‹œ 격리** | -| 인덱싱 νŒŒμ΄ν”„λΌμΈ | ν˜„μž¬ λͺ¨λ“  νŒŒμΌμ„ ν…μŠ€νŠΈ λ³€ν™˜ ν›„ μ²­ν‚Ή. Gemini Embedding 2의 λ©€ν‹°λͺ¨λ‹¬(PDF, 이미지, docx λ“± 직접 μž„λ² λ”©) λŠ₯λ ₯을 λ―Έν™œμš©. 원본 파일 직접 μž„λ² λ”©μœΌλ‘œ μ „ν™˜. Phase 5Aμ—μ„œ λ‹«μŒ. | **λ―Έμ™„λ£Œ** | -| NAS 동기화 경둜 | NAS β†’ skill-rag-file 반영 경둜/μ‹œμ  미확인. **Phase 5A μ„ ν–‰ 쑰건** β€” μž„λ² λ”© μ‹€ν–‰ 전에 NAS 파일이 skill-rag-file에 μ–΄λ–»κ²Œ λ“€μ–΄μ˜€λŠ”μ§€(μˆ˜λ™ upload vs μžλ™ 동기화) 확인 ν•„μš”. | **λ―Έμ™„λ£Œ (5A μ„ ν–‰)** | +| 인덱싱 νŒŒμ΄ν”„λΌμΈ | PDF 6νŽ˜μ΄μ§€ λ‹¨μœ„ λ°”μ΄λ„ˆλ¦¬ 직접 μž„λ² λ”©μœΌλ‘œ μ „ν™˜ μ™„λ£Œ (`IndexingPipelineService`). λΉ„PDFλŠ” ν…μŠ€νŠΈ μΆ”μΆœ fallback μœ μ§€. `task_type` ꡬ뢄(RETRIEVAL_DOCUMENT/QUERY) 적용. | **μ½”λ“œ μ™„λ£Œ, 배포 λŒ€κΈ°** | +| NAS 동기화 경둜 | **확인 μ™„λ£Œ (2026-03-17)**. NAS 마운트: `/mnt/nas` (CIFS `//192.168.0.101/home`). Company X 원본: `/mnt/nas/workspace/6.Company X/` (53,249개). μ™ΈλΆ€β†’λ‚΄λΆ€ NAS 동기화: cron 2건 (30λΆ„ μ£ΌκΈ° κ³„μΈ΅ν˜• + ν•˜λ£¨ 1회 μ „μˆ˜μ‘°μ‚¬, Go λ°”μ΄λ„ˆλ¦¬). **단, NAS β†’ skill-rag-file 인덱싱은 μžλ™ν™” μ—†μŒ** β€” ν˜„μž¬ μˆ˜λ™ upload API 호좜만 κ°€λŠ₯. μ—…λ‘œλ“œ μ €μž₯μ†Œ(`/mnt/hdd/data/documents/`)에 114개만 μΈλ±μ‹±λœ μƒνƒœ. 1μˆœμœ„ 2,957개 νˆ¬μž…μ—λŠ” NAS κ²½λ‘œμ—μ„œ 직접 읽어 upload APIλ₯Ό 일괄 ν˜ΈμΆœν•˜λŠ” 배치 슀크립트 ν•„μš”. | **확인 μ™„λ£Œ (배치 νˆ¬μž… μˆ˜λ‹¨ λ―Έκ΅¬ν˜„)** | | μž¬μ˜€ν”ˆ 질문 20개 μž¬ν˜„ | Slack 싀응닡 μž¬ν˜„ λ―Έμ‹€μ‹œ | **λ―Έμ™„λ£Œ** | - ν˜„μž¬ μƒνƒœ: - μž„λ² λ”©/μ €μž₯ μ „μ œλŠ” 확정됨. - - 인덱싱 νŒŒμ΄ν”„λΌμΈ μ „ν™˜κ³Ό Company X λ¬Έμ„œ μž„λ² λ”©μ€ Phase 5Aμ—μ„œ λ‹«μŒ. - - **NAS 동기화 κ²½λ‘œλŠ” Phase 5A μ„ ν–‰ 쑰건** β€” 5Aμ—μ„œ μž„λ² λ”©μ„ μ‹€ν–‰ν•˜λ €λ©΄ NAS 파일 νˆ¬μž… 방식이 λ¨Όμ € 확인돼야 ν•©λ‹ˆλ‹€. + - 인덱싱 νŒŒμ΄ν”„λΌμΈ μ½”λ“œ μ „ν™˜ μ™„λ£Œ, 배포 λŒ€κΈ°. + - NAS 동기화 경둜 확인 μ™„λ£Œ. NAS 원본 53,249개 쀑 114개만 인덱싱. **λŒ€λŸ‰ νˆ¬μž… 배치 μŠ€ν¬λ¦½νŠΈκ°€ Phase 5A 남은 핡심 μž‘μ—…**. - μž¬μ˜€ν”ˆ 질문 20개 μž¬ν˜„μ€ Phase 5Bμ—μ„œ 검증. ### Phase 1. ꡬ쑰 뢄리 β€” **κ΅¬ν˜„ μ™„λ£Œ** @@ -357,9 +357,10 @@ tags: [plans, companyx, rag, answer-composition, scenario, troubleshooting] - μž„λ² λ”© μ™„λ£Œ ν›„ Phase 0 ν‘œμ˜ 인덱싱 νŒŒμ΄ν”„λΌμΈ ν•­λͺ©μ„ **μ™„λ£Œ**둜 κ°±μ‹ ν•©λ‹ˆλ‹€. - ν˜„μž¬ μƒνƒœ: **μ½”λ“œ μ „ν™˜ μ™„λ£Œ, 배포 λ―Έμ™„λ£Œ** - 남은 μž‘μ—…: - - skill-embedding + skill-rag-file 배포/μž¬κΈ°λ™ - - NAS 동기화 경둜 확인 (μ„ ν–‰ 쑰건) - - 1μˆœμœ„/2μˆœμœ„ 폴더 μ‹€μ œ μž„λ² λ”© μ‹€ν–‰ + 1. skill-embedding + skill-rag-file 배포/μž¬κΈ°λ™ + 2. ~~NAS 동기화 경둜 확인~~ β†’ **확인 μ™„λ£Œ**. NAS 원본 경둜: `/mnt/nas/workspace/6.Company X/`. 인덱싱 μ €μž₯: `/mnt/hdd/data/documents/`. μžλ™ 동기화 μ—†μŒ β€” μˆ˜λ™ upload API만 κ°€λŠ₯. + 3. **NAS 일괄 νˆ¬μž… 배치 슀크립트 μž‘μ„±** β€” `/mnt/nas/workspace/6.Company X/` ν•˜μœ„ 1μˆœμœ„ 폴더 νŒŒμΌμ„ μˆœνšŒν•˜λ©° upload APIλ₯Ό ν˜ΈμΆœν•˜λŠ” 슀크립트. ν˜„μž¬ 114/53,249개만 μΈλ±μ‹±λœ μƒνƒœ. + 4. 1μˆœμœ„/2μˆœμœ„ 폴더 μ‹€μ œ μž„λ² λ”© μ‹€ν–‰ - pdftotext/OCR κ²½λ‘œλŠ” ν…μŠ€νŠΈ 미리보기 μƒμ„±μš©μœΌλ‘œ μž”μ‘΄ β€” PDF 직접 μž„λ² λ”©κ³Ό 병행. 별도 제거 κ³„νš λΆˆν•„μš”. ### Phase 5B. ν…ŒμŠ€νŠΈ κ³ μ • 및 검증 diff --git a/journey/research/260315_companyx_rag_λ‹΅λ³€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_λ¦¬μ„œμΉ˜.md b/journey/research/260315_companyx_rag_λ‹΅λ³€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_λ¦¬μ„œμΉ˜.md index 72eedbe..9413a62 100644 --- a/journey/research/260315_companyx_rag_λ‹΅λ³€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_λ¦¬μ„œμΉ˜.md +++ b/journey/research/260315_companyx_rag_λ‹΅λ³€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_λ¦¬μ„œμΉ˜.md @@ -248,7 +248,7 @@ tags: [research, companyx, rag, answer-composition, scenario, troubleshooting] ### μ—¬μ „νžˆ λ―Έν™•μ • 3. `μž¬μ •λ¦¬ν˜• 질문`은 이전 응닡 μž¬μ‚¬μš© 없이 μž¬κ²€μƒ‰ν•¨ (μ„Έμ…˜ μ—°κ²° μ—†μŒ). ν˜„μž¬ μŠ€μ½”ν”„μ—μ„œλŠ” μž¬κ²€μƒ‰ ν—ˆμš©μœΌλ‘œ 운영. 4. Company X μ „μš© κ·œμΉ™μ€ ν˜„μž¬ 독립 λͺ¨λ“ˆ(`companyx_grounding_service.py`)둜 μœ μ§€. λ²”μš©ν™”λŠ” 이 문제 μ„ΈνŠΈ λ°–. -6. NAS μ΅œμ‹  λ¬Έμ„œ 동기화본이 Company X RAG 검색 μ»¬λ ‰μ…˜μ— μ–Έμ œ, μ–΄λ–€ λ°©μ‹μœΌλ‘œ λ°˜μ˜λ˜λŠ”μ§€λŠ” 아직 λ―Έν™•μ •. +~~6. NAS μ΅œμ‹  λ¬Έμ„œ 동기화본이 Company X RAG 검색 μ»¬λ ‰μ…˜μ— μ–Έμ œ, μ–΄λ–€ λ°©μ‹μœΌλ‘œ λ°˜μ˜λ˜λŠ”μ§€λŠ” 아직 λ―Έν™•μ •.~~ β†’ **확인 μ™„λ£Œ (2026-03-17)**: NAS 마운트 `/mnt/nas` (CIFS). Company X 원본: `/mnt/nas/workspace/6.Company X/` (53,249개). μ™ΈλΆ€β†’λ‚΄λΆ€ NASλŠ” cron(30λΆ„ κ³„μΈ΅ν˜• + ν•˜λ£¨ 1회 μ „μˆ˜μ‘°μ‚¬)으둜 동기화. 단, NAS β†’ skill-rag-file 인덱싱은 μžλ™ν™” μ—†μŒ β€” μˆ˜λ™ upload API 호좜만 κ°€λŠ₯. ν˜„μž¬ 114개만 인덱싱. λŒ€λŸ‰ νˆ¬μž… 배치 슀크립트 ν•„μš”. ~~7. ν•œκ΅­μ–΄ κ³Όμ†Œ μ²­ν‚Ή 리슀크 및 `Gemini 2 PDF 직접 μž„λ² λ”©` λ―Έκ΅¬ν˜„μ€ **λ³Έ 문제 μ„ΈνŠΈμ—μ„œ μ¦‰μ‹œ μ „ν™˜** λŒ€μƒμœΌλ‘œ κ²°μ •ν• μ§€ λ―Έν™•μ •.~~ β†’ **ν™•μ • (2026-03-17)**: κ³„νš Phase 5Aμ—μ„œ 문자 λ‹¨μœ„ μ²­ν‚Ή 제거 + PDF 직접 μž„λ² λ”© μ „ν™˜μœΌλ‘œ 결정됨. 이 κ³„νšμ—μ„œ λ‹«μŒ. ## κ²°λ‘  diff --git a/journey/worklog/260317_companyx_rag_phase4_5a_κ΅¬ν˜„μ™„λ£Œ_및_504_λΌμš°νŒ…_μˆ˜μ •.md b/journey/worklog/260317_companyx_rag_phase4_5a_κ΅¬ν˜„μ™„λ£Œ_및_504_λΌμš°νŒ…_μˆ˜μ •.md new file mode 100644 index 0000000..4621291 --- /dev/null +++ b/journey/worklog/260317_companyx_rag_phase4_5a_κ΅¬ν˜„μ™„λ£Œ_및_504_λΌμš°νŒ…_μˆ˜μ •.md @@ -0,0 +1,193 @@ +--- +tags: [worklog, companyx, rag, phase4, phase5a, gateway, routing, troubleshooting] +--- + +# Company X RAG Phase 4Β·5A κ΅¬ν˜„ μ™„λ£Œ 및 Gateway 504 λΌμš°νŒ… 버그 μˆ˜μ • + +**μž‘μ„±μΌ**: 2026-03-17 +**μž‘μ—…μž**: Claude Code + +## κ΄€λ ¨ λ¬Έμ„œ +- [Company X RAG λ‹΅λ³€ν•©μ„± μ‹œλ‚˜λ¦¬μ˜€Β·νŠΈλŸ¬λΈ” λ™μ‹œμ’…κ²° κ³„νš](../plans/260315_companyx_rag_λ‹΅λ³€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_κ³„νš.md) +- [Company X RAG λ‹΅λ³€ν•©μ„± μ‹œλ‚˜λ¦¬μ˜€Β·νŠΈλŸ¬λΈ” λ™μ‹œμ’…κ²° λ¦¬μ„œμΉ˜](../research/260315_companyx_rag_λ‹΅λ³€ν•©μ„±_μ‹œλ‚˜λ¦¬μ˜€λ™μ‹œμ’…κ²°_λ¦¬μ„œμΉ˜.md) + +--- + +## 1. Phase 4 μ™„λ£Œ 확인 (νŠΈλž™ B) + +κ³„νš λ¬Έμ„œ Phase 4 μš”κ΅¬μ‚¬ν•­ 8κ°œμ™€ μ‹€μ œ μ½”λ“œ λŒ€μ‘° κ²°κ³Ό μ „λΆ€ μΆ©μ‘± 확인. + +### 핡심 κ΅¬ν˜„ λ‚΄μš© (`rb8001/app/services/companyx_grounding_service.py`) +- `CompanyXRAGOutput(direct_answer, evidence_docs, failure_reason)` Pydantic λͺ¨λΈ λ„μž… +- `_call_llm_companyx_grounding()` β€” μ„ λ³„λœ 청크λ₯Ό μ»¨ν…μŠ€νŠΈλ‘œ LLM 호좜 +- `_build_grounded_response()` β€” LLM λ‹΅λ³€ μš°μ„ , μ‹€νŒ¨ μ‹œ κ·œμΉ™ 기반 fallback +- LLM λͺ¨λΈ: `settings.DEFAULT_LLM_MODEL` SSOT μ°Έμ‘° (gpt-5-mini, ν•˜λ“œμ½”λ”© μ—†μŒ) + +### κ²½λ―Έν•œ 미비점 (Phase 5Bμ—μ„œ 확인) +- 질문 μœ ν˜•λ³„ λΆ„κΈ° ν”„λ‘¬ν”„νŠΈ 없이 `question_type` λ¬Έμžμ—΄μ„ LLM에 μœ„μž„. ν’ˆμ§ˆ 검증 ν•„μš”. + +--- + +## 2. Phase 5A μ™„λ£Œ 확인 및 보완 (νŠΈλž™ A) + +### 이미 κ΅¬ν˜„λœ λ‚΄μš© +- `IndexingPipelineService` λ„μž… β€” PDF 6νŽ˜μ΄μ§€ λ‹¨μœ„ λ°”μ΄λ„ˆλ¦¬ Base64 β†’ `embed_items()` +- `chunk_text`λŠ” 검색 ν˜Έν™˜μš© 미리보기 ν…μŠ€νŠΈλ‘œ μœ μ§€ +- λΉ„PDF fallback: ν…μŠ€νŠΈ μΆ”μΆœ β†’ μ²­ν‚Ή β†’ `embed_items(text=chunk)` + +### 이번 μ„Έμ…˜μ—μ„œ μΆ”κ°€ κ΅¬ν˜„ + +**`task_type` 전달 (RETRIEVAL_DOCUMENT / RETRIEVAL_QUERY ꡬ뢄)** + +| 파일 | λ³€κ²½ λ‚΄μš© | +|------|---------| +| `skill-embedding-repo/main.py` | `EmbedRequest.task_type` ν•„λ“œ μΆ”κ°€, `EmbedItem.metadata` pass-through μΆ”κ°€, `EmbedResponse.item_metadata` λ°˜ν™˜ | +| `skill-embedding-repo/embedder.py` | `encode(task_type=...)` β†’ `EmbedContentConfig(task_type=...)` Gemini API 전달 | +| `skill-rag-file/app/services/embedding.py` | `embed_texts()`, `embed_text()`, `embed_items()` λͺ¨λ‘ `task_type` νŒŒλΌλ―Έν„° μΆ”κ°€ | +| `skill-rag-file/app/api/upload.py` | `embed_items(task_type="RETRIEVAL_DOCUMENT")` | +| `skill-rag-file/app/api/reindex.py` | `embed_items(task_type="RETRIEVAL_DOCUMENT")` | +| `skill-rag-file/app/api/search.py` | `embed_text(task_type="RETRIEVAL_QUERY")` | + +### NAS 동기화 경둜 확인 κ²°κ³Ό +- NAS 마운트: `/mnt/nas` (CIFS `//192.168.0.101/home`) +- Company X 원본: `/mnt/nas/workspace/6.Company X/` β€” 53,249개 파일 +- μ™ΈλΆ€β†’λ‚΄λΆ€ NAS 동기화: cron 2건 (30λΆ„ μ£ΌκΈ° κ³„μΈ΅ν˜• + ν•˜λ£¨ 1회 μ „μˆ˜μ‘°μ‚¬, Go λ°”μ΄λ„ˆλ¦¬) +- **NAS β†’ skill-rag-file 인덱싱은 μžλ™ν™” μ—†μŒ** β€” μˆ˜λ™ upload API만 κ°€λŠ₯ +- ν˜„μž¬ 인덱싱 μ™„λ£Œ: 114개 (`/mnt/hdd/data/documents/79441171.../`) +- **남은 핡심**: 1μˆœμœ„ 폴더(2,957개) 일괄 νˆ¬μž… 배치 슀크립트 ν•„μš” + +--- + +## 3. Gateway 504 λΌμš°νŒ… 버그 μˆ˜μ • + +### 증상 +- `ro-being.com/api/chat` 및 `localhost:8100/api/chat` 호좜 μ‹œ μ•½ 60초 ν›„ 504 +- 3개 ν…ŒμŠ€νŠΈ 질문 λͺ¨λ‘ μ‹€νŒ¨ + +### 원인 좔적 κ³Όμ • + +1. **초기 μ˜€μ§„**: νƒ€μž„μ•„μ›ƒ 문제둜 νŒλ‹¨ β†’ Gateway httpx 30sβ†’60s 상ν–₯, 병렬 검색 λ„μž… +2. **재발**: 60μ΄ˆμ—λ„ λ™μΌν•˜κ²Œ 504 λ°œμƒ +3. **둜그 확인**: `docker logs robeing-gateway`μ—μ„œ μ‹€μ œ λΌμš°νŒ… μ£Όμ†Œ 확인 + ``` + Proxying to: http://192.168.219.52:8001/api/message ← ꡬ IP! + ``` +4. **DB 확인**: `robeing.robeing_container_url = 'http://192.168.219.52:8001'` + - μ„œλ²„ IPκ°€ `192.168.219.52` β†’ `192.168.0.106`으둜 λ³€κ²½λμœΌλ‚˜ DB λ―Έκ°±μ‹  + - AGENTS.md 기둝: "2026-03-09 이후 `192.168.0.106`이 SSOT" + +### μˆ˜μ • λ‚΄μš© + +**DB μ—…λ°μ΄νŠΈ** (Docker exec, gateway μ»¨ν…Œμ΄λ„ˆμ—μ„œ 직접 μ‹€ν–‰): +```sql +UPDATE robeing +SET robeing_container_url = 'http://192.168.0.106:8001' +WHERE robeing_container_url = 'http://192.168.219.52:8001' +-- Updated 1 rows +``` + +**Gateway μž¬κΈ°λ™** (μΊμ‹œ μ΄ˆκΈ°ν™”): +```bash +docker restart robeing-gateway +``` + +### ν•¨κ»˜ 적용된 κ°œμ„  (이번 κΈ°νšŒμ—) + +**1. RAG 닀쀑 쿼리 μˆœμ°¨β†’λ³‘λ ¬ μ‹€ν–‰** (`rb8001/app/services/companyx_grounding_service.py`) +```python +# Before: for loop 순차 μ‹€ν–‰ (μ΅œλŒ€ 9쿼리 Γ— 2-3초 = ~22초) +for query in _build_query_candidates(message, question_type): + for result in await _search_once(query): ... + +# After: asyncio.gather 병렬 μ‹€ν–‰ (~3초) +queries = _build_query_candidates(message, question_type) +all_results = await asyncio.gather(*[_search_once(q) for q in queries]) +``` + +**2. Gateway httpx timeout 상ν–₯** (`robeing-gateway/app/main.py`) +- `timeout=30.0` β†’ `timeout=60.0` + +### μ ‘κ·Ό 방법 (51124 μ„œλ²„ SSH) +```bash +# 51124 μ„œλ²„ SSH 포트: 51124 (κΈ°λ³Έ 22 μ•„λ‹˜) +ssh -i ~/.ssh/id_rsa_51123_to_51124 -p 51124 admin@192.168.0.106 +``` + +--- + +## 4. 컀밋 이λ ₯ + +| 레포 | 컀밋 ν•΄μ‹œ | λ‚΄μš© | +|------|---------|------| +| rb8001 | `1756983` | perf: RAG 닀쀑 쿼리 μˆœμ°¨β†’λ³‘λ ¬ μ‹€ν–‰μœΌλ‘œ 응닡 μ§€μ—° ν•΄μ†Œ | +| robeing-gateway | `d835fe4` | fix: Gateway httpx timeout 30sβ†’60s 상ν–₯ | +| skill-embedding-repo | (push ν•„μš”) | feat: task_type + metadata pass-through μΆ”κ°€ | +| skill-rag-file | (push ν•„μš”) | feat: embed_items task_type RETRIEVAL_DOCUMENT/QUERY 전달 | + +--- + +## 5. 남은 μž‘μ—… (Phase 5A) + +1. skill-embedding + skill-rag-file 배포/μž¬κΈ°λ™ +2. NAS 일괄 νˆ¬μž… 배치 슀크립트 μž‘μ„± (1μˆœμœ„ 폴더 β†’ upload API 호좜) +3. 1μˆœμœ„ 2,957개 β†’ 2μˆœμœ„ 15,976개 μˆœμ„œλ‘œ μž„λ² λ”© μ‹€ν–‰ +4. Phase 5B ν…ŒμŠ€νŠΈ/검증 + +--- + +## μ›Œν¬ν”Œλ‘œμš° β€” λ‹€μŒμ— 같은 μž‘μ—… μ‹œ μ°Έκ³  + +### Company X RAG E2E ν…ŒμŠ€νŠΈ μˆœμ„œ + +``` +1. skill-rag-file 검색 직접 확인 + curl http://192.168.0.106:8508/api/search -X POST \ + -H 'Content-Type: application/json' -H 'X-User-Id: system' \ + -d '{"query":"...", "team_id":"79441171-3951-4870-beb8-916d07fe8be5", "limit":3, "threshold":0.35}' + +2. rb8001 ν—¬μŠ€ 확인 + curl http://192.168.0.106:8001/health + +3. Gateway λΌμš°νŒ… 확인 + docker logs robeing-gateway --tail 20 | grep Proxying + β†’ μ£Όμ†Œκ°€ 192.168.0.106인지 확인 (ꡬ IP 192.168.219.52 μ•„λ‹˜) + +4. Gateway 504 λ°œμƒ μ‹œ 체크리슀트 + a. docker logsμ—μ„œ "Proxying to:" μ£Όμ†Œ 확인 + b. ꡬ IPλ©΄ DB μˆ˜μ •: + docker exec robeing-gateway python3 -u -c " + import asyncio + from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession + from sqlalchemy.orm import sessionmaker + from sqlalchemy import text + async def main(): + engine = create_async_engine('postgresql+asyncpg://robeings:robeings@192.168.0.100:5432/main_db') + Session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) + async with Session() as s: + r = await s.execute(text('SELECT id, robeing_container_url FROM robeing')) + for row in r.fetchall(): print(row[0], row[1]) + await engine.dispose() + asyncio.run(main()) + " + c. 잘λͺ»λœ URL 확인 ν›„ UPDATE μ‹€ν–‰ + d. docker restart robeing-gateway (μΊμ‹œ μ΄ˆκΈ°ν™”) + +5. rb8001 μ½”λ“œ λ³€κ²½ ν›„ 반영 확인 + ssh -i ~/.ssh/id_rsa_51123_to_51124 -p 51124 admin@192.168.0.106 + cd ~/robeing/rb8001 && git log --oneline -3 + β†’ μ΅œμ‹  컀밋 확인 ν›„ ν”„λ‘œμ„ΈμŠ€ μž¬κΈ°λ™ μ—¬λΆ€ νŒλ‹¨ +``` + +### μ„œλ²„ ꡬ쑰 μš”μ•½ + +| ν•­λͺ© | κ°’ | +|------|---| +| 51123 (이 μ„œλ²„) | nginx, Gateway(Docker:8100), auth, DB | +| 51124 | rb8001(:8001), skill-rag-file(:8508), skill-embedding(:ν¬νŠΈν™•μΈν•„μš”) | +| 51124 SSH | `ssh -i ~/.ssh/id_rsa_51123_to_51124 -p 51124 admin@192.168.0.106` | +| rb8001 경둜 (51124) | `~/robeing/rb8001/` | +| DB | `postgresql://robeings:robeings@192.168.0.100:5432/main_db` | +| NAS | `/mnt/nas` (CIFS, `//192.168.0.101/home`) | +| Company X 원본 λ¬Έμ„œ | `/mnt/nas/workspace/6.Company X/` | +| Company X 인덱싱 μ €μž₯ | `/mnt/hdd/data/documents/79441171-3951-4870-beb8-916d07fe8be5/` (51123) | +| Company X team_id | `79441171-3951-4870-beb8-916d07fe8be5` |