![GitHub Release](https://img.shields.io/github/v/release/Jacobinwwey/obsidian-NotEMD?label=Version&link=https%3A%2F%2Fgithub.com%2FJacobinwwey%2Fobsidian-NotEMD%2Freleases%2Flatest) ![GitHub Downloads](https://img.shields.io/github/downloads/Jacobinwwey/obsidian-NotEMD/total?logo=Obsidian&label=Downloads&labelColor=%237C3AED&color=%235b5b5b&link=https%3A%2F%2Fgithub.com%2FJacobinwwey%2Fobsidian-NotEMD%2Freleases%2Flatest) ![GitHub Repo stars](https://img.shields.io/github/stars/Jacobinwwey/obsidian-NotEMD?style=social) [![Discord](https://img.shields.io/badge/Discord-Join%20Chat-5865F2?logo=discord&logoColor=white)](https://discord.gg/qnGgsQ9W) ![QQ](https://img.shields.io/badge/QQ-1104515865-12B7F5) # Obsidian용 Notemd 플러그인 [English](./README.md) | [简体中文](./README_zh.md) | [Español](./README_es.md) | [Français](./README_fr.md) | [Deutsch](./README_de.md) | [Italiano](./README_it.md) | [Português](./README_pt.md) | [繁體中文](./README_zh_Hant.md) | [日本語](./README_ja.md) | [한국어](./README_ko.md) | [Русский](./README_ru.md) | [العربية](./README_ar.md) | [हिन्दी](./README_hi.md) | [বাংলা](./README_bn.md) | [Nederlands](./README_nl.md) | [Svenska](./README_sv.md) | [Suomi](./README_fi.md) | [Dansk](./README_da.md) | [Norsk](./README_no.md) | [Polski](./README_pl.md) | [Türkçe](./README_tr.md) | [עברית](./README_he.md) | [ไทย](./README_th.md) | [Ελληνικά](./README_el.md) | [Čeština](./README_cs.md) | [Magyar](./README_hu.md) | [Română](./README_ro.md) | [Українська](./README_uk.md) | [Tiếng Việt](./README_vi.md) | [Bahasa Indonesia](./README_id.md) | [Bahasa Melayu](./README_ms.md) 다른 언어로 된 문서 읽기: [언어 센터](./docs/i18n/README.md) ``` ================================================== _ _ _ _ ___ __ __ ___ | \ | | ___ | |_| |___| | \/ |___ \ | \| |/ _ \| __| |___| | |\/| | | | | |\ | (_) | |_| |___ | | | |___| | |_| \_|\___/ \__|_|___| | | | |____/ ================================================== AI 기반 다국어 지식 강화 도구 ================================================== ``` 나만의 지식 베이스를 만드는 가장 쉬운 방법! Notemd는 다양한 거대 언어 모델(LLM)과 통합되어 다국어 노트를 처리하고, 주요 개념에 대한 위키 링크를 자동으로 생성하며, 대응하는 개념 노트를 만들고, 웹 리서치를 수행하는 등 Obsidian 워크플로우를 강화하여 강력한 지식 그래프를 구축할 수 있도록 돕습니다. Notemd를 사랑한다면, [⭐ GitHub에서 별을 주거나](https://github.com/Jacobinwwey/obsidian-NotEMD) [☕️ 커피를 사주세요](https://ko-fi.com/jacobinwwey). .9.0 show multi-langu NEW FEATURE ## 목차 - [빠른 시작](#빠른-시작) - [언어 지원](#언어-지원) - [주요 기능](#주요-기능) - [설치](#설치) - [설정](#설정) - [사용 가이드](#사용-가이드) - [지원되는 LLM 제공업체](#지원되는-llm-제공업체) - [네트워크 사용 및 데이터 처리](#네트워크-사용-및-데이터-처리) - [문제 해결](#문제-해결) - [기여하기](#기여하기) - [유지 관리자 문서](#유지-관리자-문서) - [라이선스](#라이선스) ## 빠른 시작 1. **설치 및 활성화**: Obsidian 커뮤니티 마켓플레이스에서 플러그인을 다운로드합니다. 2. **LLM 설정**: `Settings -> Notemd`로 이동하여 LLM 제공업체(예: OpenAI 또는 로컬 Ollama)를 선택하고 API 키/URL을 입력합니다. 3. **사이드바 열기**: 왼쪽 리본에 있는 Notemd 마법 지팡이 아이콘을 클릭하여 사이드바를 엽니다. 4. **노트 처리**: 노트를 열고 사이드바에서 **"파일 처리 (링크 추가)"**를 클릭하면 핵심 개념에 `[[wiki-links]]`가 자동으로 추가됩니다. 5. **빠른 워크플로우 실행**: 기본 제공되는 **"One-Click Extract"** 버튼을 사용하여 처리, 일괄 생성, Mermaid 수정을 한 번에 실행합니다. 완료되었습니다! 웹 리서치, 번역, 콘텐츠 생성 등 더 많은 기능을 활용하려면 설정을 살펴보세요. ## 언어 지원 ### 언어 동작 규약 | 항목 | 제어 범위 | 기본값 | 비고 | |---|---|---|---| | `인터페이스 언어` | 플러그인 인터페이스 텍스트만 해당(설정, 사이드바, 알림, 대화 상자) | `auto` | Obsidian 언어 설정을 따릅니다. 현재 지원 카탈로그는 `en`, `ar`, `de`, `es`, `fa`, `fr`, `id`, `it`, `ja`, `ko`, `nl`, `pl`, `pt`, `pt-BR`, `ru`, `th`, `tr`, `uk`, `vi`, `zh-CN`, `zh-TW`입니다. | | `작업 출력 언어` | LLM에 의해 생성된 결과물(링크, 요약, 생성, 추출, 번역 대상) | `en` | 전체 또는 `작업별로 다른 언어 사용` 옵션을 활성화하여 작업별로 설정할 수 있습니다. | | `자동 번역 비활성화` | 번역 이외의 작업에서 원문 문맥 유지 | `false` | 명시적인 `Translate` 작업은 지정된 대상 언어를 계속 적용합니다. | | 로케일 폴백 | 누락된 UI 키 해결 | 로케일 -> `en` | 일부 키가 번역되지 않은 경우에도 UI 안정성을 유지합니다. | - 유지 관리 기준 문서는 영어와 중국어 간체이며, 공개된 README 번역본은 상단 헤더에 링크되어 있습니다. - 앱 내 UI 로캘 지원 범위는 현재 코드의 명시적 카탈로그와 정확히 일치합니다: `en`, `ar`, `de`, `es`, `fa`, `fr`, `id`, `it`, `ja`, `ko`, `nl`, `pl`, `pt`, `pt-BR`, `ru`, `th`, `tr`, `uk`, `vi`, `zh-CN`, `zh-TW`. - 영어 fallback은 구현 차원의 안전망으로 유지되지만, 지원 대상의 가시 UI는 회귀 테스트로 보장되며 일반 사용 중 조용히 영어로 되돌아가면 안 됩니다. - 자세한 내용 및 기여 가이드라인은 [언어 센터](./docs/i18n/README.md)에서 확인할 수 있습니다. ## 주요 기능 ### AI 기반 문서 처리 - **멀티 LLM 지원**: 다양한 클라우드 및 로컬 LLM 제공업체 연결([지원되는 LLM 제공업체](#지원되는-llm-제공업체) 참조). - **지능형 청킹**: 처리를 위해 단어 수에 따라 대용량 문서를 관리 가능한 부분으로 자동 분할합니다. - **콘텐츠 보존**: 구조와 링크를 추가하면서 원본 서식을 최대한 유지합니다. - **진행 상태 추적**: Notemd 사이드바 또는 진행률 모달을 통한 실시간 업데이트. - **취소 가능한 작업**: 전용 취소 버튼을 통해 사이드바에서 시작된 모든 처리 작업(단일 또는 일괄)을 언제든지 취소할 수 있습니다. 명령 팔레트 작업은 취소 가능한 모달을 사용합니다. - **멀티 모델 구성**: 작업(링크 추가, 리서치, 제목 기반 생성, 번역)에 따라 서로 다른 LLM 제공업체 *및* 특정 모델을 사용하거나, 모든 작업에 단일 제공업체를 사용하도록 구성할 수 있습니다. - **안정적인 API 호출(재시도 로직)**: 실패한 LLM API 호출에 대해 구성 가능한 간격 및 시도 제한으로 자동 재시도를 활성화할 수 있습니다. - **탄력적인 제공업체 연결 테스트**: 첫 번째 테스트에서 일시적인 연결 끊김이 발생할 경우, Notemd는 실패하기 전에 안정적인 재시도 시퀀스를 수행합니다. OpenAI 호환, Anthropic, Google, Azure OpenAI 및 Ollama 전송을 지원합니다. - **실행 환경 전송 폴백**: `requestUrl`을 통한 장기 요청이 `ERR_CONNECTION_CLOSED`와 같은 일시적인 네트워크 오류로 끊길 경우, Notemd는 구성된 재시도 루프에 들어가기 전에 환경별 폴백 전송을 통해 동일한 시도를 재시도합니다. 데스크톱 빌드는 Node `http/https`를 사용하고, 비데스크톱 환경은 브라우저 `fetch`를 사용합니다. 이는 느린 게이트웨이 및 역방향 프록시에서의 오탐 실패를 줄여줍니다. - **OpenAI 호환 안정적 장기 요청 체인 강화**: 안정 모드에서 OpenAI 호환 호출은 각 시도에 대해 명시적인 3단계 순서(기본 직접 스트리밍, 직접 비스트리밍, `requestUrl` 폴백(필요시 스트리밍 파싱으로 업그레이드 가능))를 사용합니다. 이는 제공업체가 버퍼링된 응답은 완료했지만 스트리밍 파이프가 불안정한 경우의 오탐 오류를 줄여줍니다. - **모든 LLM API에 대한 프로토콜 인식 스트리밍 폴백**: 장기 요청 폴백 시도는 이제 OpenAI 호환 엔드포인트뿐만 아니라 모든 기본 제공 LLM 경로에서 프로토콜 인식 스트리밍 파싱으로 업그레이드됩니다. Notemd는 데스크톱 `http/https` 및 비데스크톱 `fetch` 모두에서 OpenAI/Azure 스타일 SSE, Anthropic 메시지 스트리밍, Google Gemini SSE 응답, Ollama NDJSON 스트림을 처리하며, 나머지 OpenAI 스타일 직접 제공업체 진입점은 동일한 공유 폴백 경로를 재사용합니다. - **중국 지역 전용 프리셋**: 기존의 글로벌 및 로컬 제공업체 외에 `Qwen`, `Qwen Code`, `Doubao`, `Moonshot`, `GLM`, `Z AI`, `MiniMax`, `Huawei Cloud MaaS`, `Baidu Qianfan`, `SiliconFlow` 프리셋이 추가되었습니다. - **신뢰할 수 있는 일괄 처리**: 대규모 일괄 작업 중 속도 제한 오류를 방지하고 안정적인 성능을 보장하기 위해 **시차를 둔 API 호출**이 포함된 개선된 동시 처리 로직을 적용했습니다. 새로운 구현은 작업이 동시에 시작되지 않고 서로 다른 간격으로 시작되도록 보장합니다. - **정확한 진행 보고**: 진행률 표시줄이 멈추는 버그를 수정하여 UI가 항상 실제 작업 상태를 반영하도록 했습니다. - **견고한 병렬 일괄 처리**: 병렬 일괄 작업이 중간에 중단되는 문제를 해결하여 모든 파일이 안정적이고 효율적으로 처리되도록 보장합니다. - **진행률 표시줄 정확도**: "위키 링크 생성 및 노트 생성" 명령의 진행률 표시줄이 95%에서 멈추는 버그를 수정하여 완료 시 100%가 올바르게 표시되도록 했습니다. - **개선된 API 디버깅**: "API 오류 디버깅 모드"는 이제 LLM 제공업체 및 검색 서비스(Tavily/DuckDuckGo)의 전체 응답 본문을 캡처하며, OpenAI, Anthropic, Google, Azure OpenAI, Ollama 폴백에서 더 나은 문제 해결을 위해 삭제된 요청 URL, 경과 시간, 응답 헤더, 부분 응답 본문, 파싱된 부분 스트림 콘텐츠 및 스택 추적을 포함하는 시도별 전송 타임라인을 기록합니다. - **개발자 모드 패널**: 설정에 개발자 전용 진단 패널이 포함되어 있으며, "개발자 모드"를 켰을 때만 표시됩니다. 진단 호출 경로 선택 및 선택한 모드에 대한 반복적인 안정성 프로브 실행을 지원합니다. - **재설계된 사이드바**: 기본 제공 작업이 명확한 레이블, 실시간 상태, 취소 가능한 진행률 및 복사 가능한 로그와 함께 집중된 섹션으로 그룹화되어 사이드바의 복잡함을 줄였습니다. 진행률/로그 바닥글은 모든 섹션이 확장된 상태에서도 계속 표시되며, 준비 상태는 더 명확한 대기 진행 트랙을 사용합니다. - **사이드바 상호작용 및 가독성 다듬기**: 사이드바 버튼은 이제 더 명확한 호버/프레스/포커스 피드백을 제공하며, `One-Click Extract` 및 `제목에서 일괄 생성`을 포함한 다채로운 CTA(Call to Action) 버튼은 다양한 테마에서 가독성을 높이기 위해 더 강한 텍스트 대비를 사용합니다. - **단일 파일 CTA 매핑**: 다채로운 CTA 스타일은 이제 단일 파일 작업 전용입니다. 일괄/폴더 수준 작업 및 혼합 워크플로우는 작업 범위에 대한 오클릭을 줄이기 위해 비 CTA 스타일을 사용합니다. - **사용자 정의 원클릭 워크플로우**: 기본 제공 사이드바 유틸리티를 사용자 정의 이름과 조립된 작업 체인을 가진 재사용 가능한 사용자 정의 버튼으로 변환합니다. 기본 워크플로우 `One-Click Extract`가 기본 제공됩니다. ### 지식 그래프 강화 - **자동 위키 링크**: LLM 출력을 기반으로 처리된 노트 내의 주요 개념을 식별하고 `[[wiki-links]]`를 추가합니다. - **개념 노트 생성 (선택 사항 및 사용자 정의 가능)**: 지정된 보관함 폴더에 발견된 개념에 대한 새 노트를 자동으로 생성합니다. - **사용자 정의 가능한 출력 경로**: 처리된 파일과 새로 생성된 개념 노트를 저장하기 위해 보관함 내에 별도의 상대 경로를 구성합니다. - **사용자 정의 가능한 출력 파일명 (링크 추가)**: 링크 처리 시 기본값인 `_processed.md` 대신 **원본 파일을 덮어쓰거나** 사용자 정의 접미사/교체 문자열을 사용하도록 선택할 수 있습니다. - **링크 무결성 유지**: 보관함 내에서 노트의 이름이 변경되거나 삭제될 때 링크를 업데이트하는 기본 처리 기능을 제공합니다. - **순수 개념 추출**: 원본 문서를 수정하지 않고 개념을 추출하고 해당 개념 노트를 생성합니다. 이는 원본을 변경하지 않고 기존 문서에서 지식 베이스를 구축하는 데 이상적입니다. 이 기능은 최소한의 개념 노트를 생성하고 백링크를 추가하기 위한 구성 가능한 옵션을 제공합니다. ### 번역 - **AI 기반 번역**: - 구성된 LLM을 사용하여 노트 내용을 번역합니다. - **대용량 파일 지원**: LLM으로 보내기 전에 `청크 단어 수` 설정에 따라 대용량 파일을 자동으로 작은 조각으로 나눕니다. 번역된 조각은 나중에 하나의 문서로 매끄럽게 합쳐집니다. - 여러 언어 간의 번역을 지원합니다. - 설정 또는 UI에서 대상 언어를 사용자 정의할 수 있습니다. - 읽기 편하도록 원문 오른쪽에 번역된 텍스트를 자동으로 엽니다. - **일괄 번역**: - 선택한 폴더 내의 모든 파일을 번역합니다. - "일괄 병렬화 활성화"가 켜져 있을 때 병렬 처리를 지원합니다. - 구성된 경우 번역에 사용자 정의 프롬프트를 사용합니다. - 파일 탐색기 컨텍스트 메뉴에 "이 폴더 일괄 번역" 옵션을 추가합니다. - **자동 번역 비활성화**: 이 옵션이 켜져 있으면 번역 이외의 작업은 출력을 특정 언어로 강제하지 않고 원래 언어 문맥을 유지합니다. 명시적인 "번역" 작업은 설정에 따라 계속 번역을 수행합니다. ### 웹 리서치 및 콘텐츠 생성 - **웹 리서치 및 요약**: - Tavily(API 키 필요) 또는 DuckDuckGo(실험적)를 사용하여 웹 검색을 수행합니다. - **검색 견고성 개선**: DuckDuckGo 검색은 레이아웃 변경을 처리하고 신뢰할 수 있는 결과를 보장하기 위해 향상된 파싱 로직(Regex 폴백이 포함된 DOMParser)을 갖추고 있습니다. - 구성된 LLM을 사용하여 검색 결과를 요약합니다. - 요약 결과의 출력 언어는 설정에서 사용자 정의할 수 있습니다. - 요약 내용을 현재 노트에 추가합니다. - LLM으로 전송되는 리서치 콘텐츠에 대한 토큰 제한을 구성할 수 있습니다. - **제목 기반 콘텐츠 생성**: - 노트 제목을 사용하여 기존 내용을 대체하고 LLM을 통해 초기 콘텐츠를 생성합니다. - **리서치 옵션**: 생성 시 문맥을 제공하기 위해 웹 리서치(선택한 제공업체 사용)를 수행할지 여부를 구성할 수 있습니다. - **제목 기반 일괄 콘텐츠 생성**: 선택한 폴더 내의 모든 노트에 대해 제목을 기반으로 콘텐츠를 생성합니다(리서치 옵션 설정 준수). 성공적으로 처리된 파일은 재처리를 방지하기 위해 **구성 가능한 "완료" 하위 폴더**(예: `[폴더명]_complete` 또는 사용자 정의 이름)로 이동됩니다. - **Mermaid 자동 수정 연결**: Mermaid 자동 수정이 활성화된 경우, Mermaid 관련 워크플로우는 처리 후 생성된 파일이나 출력 폴더를 자동으로 수정합니다. 이는 처리, 제목 기반 생성, 제목 기반 일괄 생성, 리서치 및 요약, Mermaid로 요약, 번역 워크플로우에 적용됩니다. ### 유틸리티 기능 - **Mermaid 다이어그램으로 요약**: - 이 기능을 사용하면 노트 내용을 Mermaid 다이어그램으로 요약할 수 있습니다. - Mermaid 다이어그램의 출력 언어는 설정에서 사용자 정의할 수 있습니다. - **Mermaid 출력 폴더**: 생성된 Mermaid 다이어그램 파일을 저장할 폴더를 구성합니다. - **Mermaid 출력 요약 번역**: 생성된 Mermaid 다이어그램 내용을 구성된 대상 언어로 번역할 수 있는 옵션입니다. SUMM - **간단한 수식 형식 수정**: - 단일 `$`로 구분된 한 줄 수식을 표준 이중 `$$` 블록으로 신속하게 수정합니다. - **단일 파일**: 사이드바 버튼 또는 명령 팔레트를 통해 현재 파일을 처리합니다. - **일괄 수정**: 사이드바 버튼 또는 명령 팔레트를 통해 선택한 폴더의 모든 파일을 처리합니다. - **현재 파일의 중복 체크**: 이 명령은 활성 파일 내에서 잠재적인 중복 용어를 식별하는 데 도움이 됩니다. - **중복 감지**: 현재 처리 중인 파일 내용 내의 중복 단어에 대한 기본 체크(결과는 콘솔에 기록됨). - **중복 개념 노트 체크 및 제거**: 폴더 외부의 노트와 비교하여 정확한 이름 일치, 복수형, 정규화 및 단일 단어 포함 여부를 기반으로 구성된 **개념 노트 폴더** 내의 잠재적인 중복 노트를 식별합니다. 비교 범위(개념 폴더 외부의 어떤 노트를 체크할지)는 **보관함 전체**, **특정 포함 폴더** 또는 **특정 폴더를 제외한 모든 폴더**로 구성할 수 있습니다. 이유와 충돌하는 파일이 포함된 상세 목록을 제시한 다음, 식별된 중복 파일을 시스템 휴지통으로 이동하기 전에 확인을 요청합니다. 제거 중 진행 상황을 표시합니다. - **일괄 Mermaid 수정**: 사용자가 선택한 폴더 내의 모든 Markdown 파일에 Mermaid 및 LaTeX 구문 수정을 적용합니다. - **워크플로우 준비 완료**: 독립형 유틸리티로 사용하거나 사용자 정의 원클릭 워크플로우 버튼의 단계로 사용할 수 있습니다. - **오류 보고**: 처리 후에도 잠재적인 Mermaid 오류가 포함된 파일을 나열하는 `mermaid_error_{foldername}.md` 보고서를 생성합니다. - **오류 파일 이동**: 오류가 발견된 파일을 수동 검토를 위해 지정된 폴더로 이동할 수 있는 옵션입니다. - **지능형 감지**: 수정을 시도하기 전에 `mermaid.parse`를 사용하여 파일의 구문 오류를 지능적으로 체크함으로써 처리 시간을 절약하고 불필요한 편집을 피합니다. - **안전한 처리**: 구문 수정이 Mermaid 코드 블록에만 적용되도록 보장하여 Markdown 표나 다른 콘텐츠가 실수로 수정되는 것을 방지합니다. 공격적인 디버깅 수정으로부터 표 구문(예: `| :--- |`)을 보호하기 위한 강력한 보호 조치가 포함되어 있습니다. - **심층 디버그 모드**: 초기 수정 후에도 오류가 남아있는 경우 고급 심층 디버그 모드가 실행됩니다. 이 모드는 다음과 같은 복잡한 예외 상황을 처리합니다: - **주석 통합**: 끝에 있는 주석(`%`로 시작)을 에지 레이블로 자동으로 병합합니다(예: `A -- Label --> B; % Comment`가 `A -- "Label(Comment)" --> B;`로 변환됨). - **잘못된 화살표**: 따옴표에 흡수된 화살표를 수정합니다(예: `A -- "Label -->" B`가 `A -- "Label" --> B`로 수정됨). - **인라인 서브그래프**: 인라인 서브그래프 레이블을 에지 레이블로 변환합니다. - **역방향 화살표 수정**: 비표준 `X <-- Y` 화살표를 `Y --> X`로 수정합니다. - **방향 키워드 수정**: 서브그래프 내부의 `direction` 키워드가 소문자인지 확인합니다(예: `Direction TB` -> `direction TB`). - **주석 변환**: `//` 주석을 에지 레이블로 변환합니다(예: `A --> B; // 주석` -> `A -- "주석" --> B;`). - **중복 레이블 수정**: 반복되는 대괄호 레이블을 단순화합니다(예: `Node["레이블"]["레이블"]` -> `Node["레이블"]`). - **잘못된 화살표 수정**: 잘못된 화살표 구문 `--|>`를 표준 `-->`로 변환합니다. - **견고한 레이블 및 노트 처리**: 특수 문자(예: `/`)를 포함하는 레이블 처리를 개선하고 사용자 정의 노트 구문(`note for ...`)에 대한 지원을 강화하여 끝 대괄호와 같은 잔여물을 깔끔하게 제거합니다. - **고급 수정 모드**: 공백, 특수 문자 또는 중첩된 대괄호를 포함하는 따옴표 없는 노드 레이블(예: `Node[레이블 [텍스트]]` -> `Node["레이블 [텍스트]"]`)에 대한 견고한 수정을 포함하여 항성 진화 경로와 같은 복잡한 다이어그램과의 호환성을 보장합니다. 또한 잘못된 에지 레이블(예: `--["레이블["-->`를 `-- "레이블" -->`로)도 수정합니다. 추가로 인라인 주석(`Consensus --> Adaptive; # 고급 합의`를 `Consensus -- "고급 합의" --> Adaptive`로)을 변환하고 줄 끝의 불완전한 따옴표(끝의 `;"`를 `"]`로)를 수정합니다. - **노트 변환**: 독립형 `note right/left of` 및 `note :` 주석을 표준 Mermaid 노드 정의 및 연결로 자동 변환하여(예: `note right of A: text`를 `A`에 연결된 `NoteA["Note: text"]`로 변환) 구문 오류를 방지하고 레이아웃을 개선합니다. 이제 화살표 링크(`-->`)와 실선 링크(`---`)를 모두 지원합니다. - **확장된 노트 지원**: `note for Node "내용"` 및 `note of Node "내용"`을 표준 연결된 노트 노드로 자동 변환하여(예: `Node`에 연결된 `NoteNode[" 내용"]`) 사용자 확장 구문과의 호환성을 보장합니다. - **향상된 노트 수정**: 여러 개의 노트가 있을 때 별칭 문제를 방지하기 위해 일련번호(예: `Note1`, `Note2`)를 사용하여 노트 이름을 자동으로 변경합니다. - **평행사변형/도형 수정**: 잘못된 노드 도형 정의(예: `[/["레이블["/]`를 표준 `["레이블"]`로)를 수정하여 생성된 콘텐츠와의 호환성을 보장합니다. - **파이프 레이블 표준화**: 파이프가 포함된 에지 레이블을 자동으로 수정하고 표준화하여 따옴표가 올바르게 처리되도록 합니다(예: `-->|텍스트|`는 `-->|"텍스트"|`로, `-->|Math|^2|`는 `-->|"Math|^2"|`로 변환). - **잘못 위치한 파이프 수정**: 화살표 앞에 나타나는 잘못 위치한 에지 레이블을 수정합니다(예: `>|"레이블"| A --> B`가 `A -->|"레이블"| B`로 수정됨). - **이중 레이블 병합**: 단일 에지에 있는 복잡한 이중 레이블(예: `A -- 레이블1 -- 레이블2 --> B` 또는 `A -- 레이블1 -- 레이블2 --- B`)을 감지하여 줄 바꿈이 포함된 하나의 깨끗한 레이블(`A -- "레이블1
레이블2" --> B`)로 병합합니다. - **따옴표 없는 레이블 수정**: 문제가 될 수 있는 문자(예: 따옴표, 등호, 수학 연산자)를 포함하지만 외부 따옴표가 없는 노드 레이블에 자동으로 따옴표를 추가하여(예: `Plot[Plot "A"]`가 `Plot["Plot "A""]`로 수정됨) 렌더링 오류를 방지합니다. - **중간 노드 수정**: 중간 노드 정의를 포함하는 에지를 두 개의 별도 에지로 분할하여(예: `A -- B[...] --> C`가 `A --> B[...]` 및 `B[...] --> C`가 됨) 유효한 Mermaid 구문을 보장합니다. - **연결된 레이블 수정**: ID가 레이블과 연결된 노드 정의를 견고하게 수정합니다(예: `SubdivideSubdivide...`가 `Subdivide["Subdivide..."]`가 됨). 파이프 레이블이 앞에 오거나 중복이 정확하지 않은 경우에도 알려진 노드 ID와 대조하여 유효성을 검사하여 수정합니다. - **특정 원문 텍스트 추출**: - 설정에서 질문 목록을 정의합니다. - 활성 노트에서 이 질문에 답하는 원문 텍스트 세그먼트를 추출합니다. - **병합 쿼리 모드**: 효율성을 높이기 위해 모든 질문을 단일 API 호출로 처리하는 옵션입니다. - **번역**: 출력물에 추출된 텍스트의 번역을 포함하는 옵션입니다. - **사용자 정의 출력**: 추출된 텍스트 파일의 저장 경로 및 파일명 접미사를 구성할 수 있습니다. - **LLM 연결 테스트**: 활성 제공업체의 API 설정을 검증합니다. ## 설치 Install ### Obsidian 마켓플레이스에서 설치 (권장) 1. Obsidian **Settings** → **Community plugins**를 엽니다. 2. "Restricted mode"가 **꺼져** 있는지 확인합니다. 3. 커뮤니티 플러그인의 **Browse**를 클릭하고 "Notemd"를 검색합니다. 4. **Install**을 클릭합니다. 5. 설치가 완료되면 **Enable**을 클릭합니다. ### 수동 설치 1. [GitHub Releases 페이지](https://github.com/Jacobinwwey/obsidian-NotEMD/releases)에서 최신 릴리스 에셋을 다운로드합니다. 각 릴리스에는 참조용으로 `README.md`가 포함되어 있지만, 수동 설치에는 `main.js`, `styles.css`, `manifest.json`만 필요합니다. 2. Obsidian 보관함 구성 폴더인 `/.obsidian/plugins/`로 이동합니다. 3. `notemd`라는 이름의 새 폴더를 만듭니다. 4. `main.js`, `styles.css`, `manifest.json`을 `notemd` 폴더에 복사합니다. 5. Obsidian을 재시작합니다. 6. **Settings** → **Community plugins**로 이동하여 "Notemd"를 활성화합니다. ## 설정 플러그인 설정은 다음을 통해 액세스할 수 있습니다: **Settings** → **Community plugins** → **Notemd** (톱니바퀴 아이콘 클릭). ### LLM 제공업체 구성 1. **활성 제공업체**: 드롭다운 메뉴에서 사용하려는 LLM 제공업체를 선택합니다. 2. **제공업체 설정**: 선택한 제공업체에 대한 특정 설정을 구성합니다: * **API 키**: 대부분의 클라우드 제공업체(예: OpenAI, Anthropic, DeepSeek, Qwen, Qwen Code, Doubao, Moonshot, GLM, Z AI, MiniMax, Huawei Cloud MaaS, Baidu Qianfan, SiliconFlow, Google, Mistral, Azure OpenAI, OpenRouter, xAI, Groq, Together, Fireworks, Requesty)에 필요합니다. Ollama에는 필요하지 않습니다. 엔드포인트가 익명 또는 플레이스홀더 액세스를 허용하는 경우 LM Studio 및 일반 `OpenAI Compatible` 프리셋에서는 선택 사항입니다. * **기준 URL / 엔드포인트**: 서비스의 API 엔드포인트입니다. 기본값이 제공되지만 로컬 모델(LMStudio, Ollama), 게이트웨이(OpenRouter, Requesty, OpenAI Compatible) 또는 특정 Azure 배포의 경우 변경해야 할 수 있습니다. **Azure OpenAI의 경우 필수입니다.** * **모델**: 사용할 특정 모델 이름/ID입니다(예: `gpt-4o`, `claude-3-5-sonnet-20240620`, `google/gemini-flash-1.5`, `grok-4`, `moonshotai/kimi-k2-instruct-0905`, `accounts/fireworks/models/kimi-k2p5`, `anthropic/claude-3-7-sonnet-latest`). 모델이 해당 엔드포인트/제공업체에서 사용 가능한지 확인하세요. * **온도**: LLM 출력의 무작위성을 제어합니다(0=결정적, 1=최대 창의성). 낮은 값(예: 0.2-0.5)은 일반적으로 구조화된 작업에 더 적합합니다. * **API 버전 (Azure 전용)**: Azure OpenAI 배포에 필요합니다(예: `2024-02-15-preview`). 3. **연결 테스트**: 활성 제공업체의 "연결 테스트" 버튼을 사용하여 설정을 검증합니다. OpenAI 호환 제공업체는 이제 제공업체별 체크를 사용합니다. `Qwen`, `Qwen Code`, `Doubao`, `Moonshot`, `GLM`, `Z AI`, `MiniMax`, `Huawei Cloud MaaS`, `Baidu Qianfan`, `SiliconFlow`, `Groq`, `Together`, `Fireworks`, `LMStudio`, `OpenAI Compatible` 등의 엔드포인트는 `chat/completions`를 직접 조사하는 반면, 신뢰할 수 있는 `/models` 엔드포인트를 가진 제공업체는 여전히 모델 목록을 먼저 사용할 수 있습니다. 첫 번째 조사가 `ERR_CONNECTION_CLOSED`와 같은 일시적인 네트워크 연결 끊김으로 실패할 경우, Notemd는 즉시 실패하는 대신 자동으로 안정적인 재시도 시퀀스로 전환합니다. 4. **제공업체 구성 관리**: "Export Providers" 및 "Import Providers" 버튼을 사용하여 LLM 제공업체 설정을 플러그인 구성 디렉토리 내의 `notemd-providers.json` 파일에 저장하거나 불러올 수 있습니다. 이를 통해 백업 및 공유가 간편해집니다. 5. **프리셋 범위**: 기존 제공업체 외에도 Notemd는 이제 `Qwen`, `Qwen Code`, `Doubao`, `Moonshot`, `GLM`, `Z AI`, `MiniMax`, `Huawei Cloud MaaS`, `Baidu Qianfan`, `SiliconFlow`, `xAI`, `Groq`, `Together`, `Fireworks`, `Requesty` 및 LiteLLM, vLLM, Perplexity, Vercel AI Gateway 또는 사용자 정의 프록시를 위한 일반 `OpenAI Compatible` 타겟에 대한 프리셋 항목을 포함합니다. LLM ### 멀티 모델 구성 - **작업에 서로 다른 제공업체 사용**: * **비활성화 (기본값)**: 모든 작업에 대해 위에서 선택한 단일 "활성 제공업체"를 사용합니다. * **활성화**: 각 작업("링크 추가", "리서치 및 요약", "제목에서 생성", "번역", "개념 추출")에 대해 특정 제공업체를 선택하고 선택적으로 모델 이름을 덮어쓸 수 있습니다. 작업의 모델 덮어쓰기 필드를 비워 두면 해당 작업의 선택된 제공업체에 구성된 기본 모델이 사용됩니다. - **서로 다른 작업에 서로 다른 언어 선택**: * **비활성화 (기본값)**: 모든 작업에 대해 단일 "출력 언어"를 사용합니다. * **활성화**: 각 작업("링크 추가", "리서치 및 요약", "제목에서 생성", "Mermaid 다이어그램으로 요약", "개념 추출")에 대해 특정 언어를 선택할 수 있습니다. Multi-model ### 언어 아키텍처 (인터페이스 언어 vs 작업 출력 언어) - **인터페이스 언어**는 플러그인 인터페이스 텍스트(설정 레이블, 사이드바 버튼, 알림 및 대화 상자)만 제어합니다. 기본 `auto` 모드는 Obsidian의 현재 UI 언어를 따릅니다. - 지역별 또는 문자 체계 변형은 이제 곧바로 영어로 떨어지지 않고 가장 가까운 출시된 카탈로그로 매핑됩니다. 예를 들어 `fr-CA`는 프랑스어, `es-419`는 스페인어, `pt-PT`는 포르투갈어, `zh-Hans`는 중국어 간체, `zh-Hant-HK`는 중국어 번체를 사용합니다. - **작업 출력 언어**는 모델에 의해 생성된 작업 결과물(링크, 요약, 제목 생성, Mermaid 요약, 개념 추출, 번역 대상)을 제어합니다. - **작업별 언어 모드**를 사용하면 모듈별로 흩어진 덮어쓰기 대신 통합된 정책 레이어에서 각 작업이 자체 출력 언어를 결정할 수 있습니다. - **자동 번역 비활성화**는 번역 이외의 작업을 원래 언어 문맥으로 유지하는 반면, 명시적인 번역 작업은 구성된 대상 언어를 계속 적용합니다. - Mermaid 관련 생성 경로는 동일한 언어 정책을 따르며, 활성화된 경우 여전히 Mermaid 자동 수정을 실행할 수 있습니다. ### 안정적인 API 호출 설정 - **안정적인 API 호출 활성화 (재시도 로직)**: * **비활성화 (기본값)**: 단일 API 호출이 실패하면 현재 작업이 중단됩니다. * **활성화**: 실패한 LLM API 호출을 자동으로 재시도합니다(간헐적인 네트워크 문제나 속도 제한에 유용함). * **연결 테스트 폴백**: 일반 호출이 이미 안정 모드에서 실행되고 있지 않더라도, 제공업체 연결 테스트는 첫 번째 일시적 네트워크 오류 이후 동일한 재시도 시퀀스로 전환됩니다. * **실행 환경 전송 폴백 (환경 인식)**: `requestUrl`을 통해 일시적으로 끊기는 장기 작업 요청은 이제 먼저 환경 인식 폴백을 통해 동일한 시도를 재시도합니다. 데스크톱 빌드는 Node `http/https`를 사용하고, 비데스크톱 환경은 브라우저 `fetch`를 사용합니다. 이러한 폴백 시도는 이제 기본 제공 LLM 경로에서 프로토콜 인식 스트리밍 파싱을 사용하여 OpenAI 호환 SSE, Azure OpenAI SSE, Anthropic 메시지 SSE, Google Gemini SSE 및 Ollama NDJSON 출력을 지원하므로 느린 게이트웨이가 본문 청크를 더 일찍 반환할 수 있습니다. 나머지 OpenAI 스타일 직접 제공업체 진입점은 동일한 공유 폴백 경로를 재사용합니다. * **OpenAI 호환 안정적 순서**: 안정 모드에서 각 OpenAI 호환 시도는 실패한 시도로 계산되기 전에 `직접 스트리밍 -> 직접 버퍼 -> requestUrl (필요시 스트리밍 폴백 포함)` 순서를 따릅니다. 이는 하나의 전송 모드만 불안정한 경우의 과도하게 공격적인 실패를 방지합니다. - **재시도 간격 (초)**: (활성화된 경우에만 표시) 재시도 시도 사이의 대기 시간(1-300초)입니다. 기본값: 5. - **최대 재시도 횟수**: (활성화된 경우에만 표시) 최대 재시도 시도 횟수(0-10)입니다. 기본값: 3. - **API 오류 디버깅 모드**: * **비활성화 (기본값)**: 표준적이고 간결한 오류 보고를 사용합니다. * **활성화**: 모든 제공업체 및 작업(번역, 검색 및 연결 테스트 포함)에 대해 상세한 오류 로깅(DeepSeek의 상세 출력과 유사)을 활성화합니다. 여기에는 HTTP 상태 코드, 원시 응답 텍스트, 요청 전송 타임라인, 삭제된 요청 URL 및 헤더, 경과된 시도 시간, 응답 헤더, 부분 응답 본문, 파싱된 부분 스트림 출력 및 스택 추적이 포함되며, 이는 API 연결 문제 및 상위 게이트웨이 재설정을 해결하는 데 중요합니다. - **개발자 모드**: * **비활성화 (기본값)**: 일반 사용자에게 모든 개발자 전용 진단 컨트롤을 숨깁니다. * **활성화**: 설정에 개발자 전용 진단 패널을 표시합니다. - **개발자 제공업체 진단 (장기 요청)**: * **진단 호출 모드**: 조사별 실행 경로를 선택합니다. OpenAI 호환 제공업체는 실행 환경 모드 외에도 추가적인 강제 모드(`직접 스트리밍`, `직접 버퍼`, `requestUrl-only`)를 지원합니다. * **진단 실행**: 선택한 호출 모드로 장기 요청 조사를 실행하고 보관함 루트에 `Notemd_Provider_Diagnostic_*.txt`를 작성합니다. * **안정성 테스트 실행**: 선택한 호출 모드를 사용하여 구성 가능한 횟수(1-10)만큼 조사를 반복하고 집계된 안정성 보고서를 저장합니다. * **진단 타임아웃**: 실행당 구성 가능한 타임아웃(15-3600초)입니다. * **사용 이유**: 제공업체가 "연결 테스트"는 통과하지만 실제 장기 작업(예: 느린 게이트웨이에서의 번역)에서 실패할 때 수동 재현보다 빠릅니다. stable API calls ### 일반 설정 #### 처리된 파일 출력 - **처리된 파일 저장 경로 사용자 정의**: * **비활성화 (기본값)**: 처리된 파일(예: `YourNote_processed.md`)은 원본 노트와 *같은 폴더*에 저장됩니다. * **활성화**: 사용자 정의 저장 위치를 지정할 수 있습니다. - **처리된 파일 폴더 경로**: (위 옵션이 활성화된 경우에만 표시) 처리된 파일이 저장될 보관함 내의 *상대 경로*(예: `Processed Notes` 또는 `Output/LLM`)를 입력합니다. 폴더가 없으면 자동으로 생성됩니다. **절대 경로(C:\... 등)나 잘못된 문자를 사용하지 마세요.** - **'링크 추가'에 사용자 정의 출력 파일명 사용**: * **비활성화 (기본값)**: '링크 추가' 명령으로 생성된 처리된 파일은 기본 접미사인 `_processed.md`를 사용합니다(예: `YourNote_processed.md`). * **활성화**: 아래 설정을 사용하여 출력 파일명을 사용자 정의할 수 있습니다. - **사용자 정의 접미사/교체 문자열**: (위 옵션이 활성화된 경우에만 표시) 출력 파일명에 사용할 문자열을 입력합니다. * **비워 두면** 원본 파일이 처리된 내용으로 **덮어씌워집니다**. * 문자열(예: `_linked`)을 입력하면 원본 기본 이름 뒤에 추가됩니다(예: `YourNote_linked.md`). 접미사에 잘못된 파일명 문자가 포함되지 않도록 하세요. - **링크 추가 시 코드 펜스 제거**: * **비활성화 (기본값)**: 링크 추가 시 내용 내의 코드 펜스**(\`\\\`\`)**는 유지되고, **(\`\\\`markdown)**은 자동으로 삭제됩니다. * **활성화**: 링크 추가 전 내용에서 코드 펜스를 제거합니다. Processed file output #### 개념 노트 출력 - **개념 노트 경로 사용자 정의**: * **비활성화 (기본값)**: `[[연결된 개념]]`에 대한 자동 노트 생성이 비활성화됩니다. * **활성화**: 새 개념 노트가 생성될 폴더를 지정할 수 있습니다. - **개념 노트 폴더 경로**: (위 옵션이 활성화된 경우에만 표시) 새 개념 노트가 저장될 보관함 내의 *상대 경로*(예: `Concepts` 또는 `Generated/Topics`)를 입력합니다. 폴더가 없으면 자동으로 생성됩니다. **사용자 정의가 활성화된 경우 반드시 입력해야 합니다.** **절대 경로나 잘못된 문자를 사용하지 마세요.** concept note output #### 개념 로그 파일 출력 - **개념 로그 파일 생성**: * **비활성화 (기본값)**: 로그 파일이 생성되지 않습니다. * **활성화**: 처리 후 새로 생성된 개념 노트를 나열하는 로그 파일을 만듭니다. 형식은 다음과 같습니다: ``` xx개의 개념 md 파일 생성 1. concepts1 2. concepts2 ... n. conceptsn ``` - **로그 파일 저장 경로 사용자 정의**: ("개념 로그 파일 생성"이 활성화된 경우에만 표시) * **비활성화 (기본값)**: 로그 파일은 지정된 경우 **개념 노트 폴더 경로**에 저장되고, 그렇지 않으면 보관함 루트에 저장됩니다. * **활성화**: 로그 파일용 사용자 정의 폴더를 지정할 수 있습니다. - **개념 로그 폴더 경로**: (위 옵션이 활성화된 경우에만 표시) 로그 파일이 저장될 보관함 내의 *상대 경로*(예: `Logs/Notemd`)를 입력합니다. **사용자 정의가 활성화된 경우 반드시 입력해야 합니다.** - **로그 파일명 사용자 정의**: ("개념 로그 파일 생성"이 활성화된 경우에만 표시) * **비활성화 (기본값)**: 로그 파일명은 `Generate.log`입니다. * **활성화**: 로그 파일에 사용자 정의 이름을 지정할 수 있습니다. - **개념 로그 파일명**: (위 옵션이 활성화된 경우에만 표시) 원하는 파일명(예: `ConceptCreation.log`)을 입력합니다. **사용자 정의가 활성화된 경우 반드시 입력해야 합니다.** Concept log file output #### 개념 추출 작업 - **최소한의 개념 노트 생성**: * **활성화 (기본값)**: 새로 생성된 개념 노트에는 제목만 포함됩니다(예: `# 개념`). * **비활성화**: 아래 설정으로 비활성화하지 않는 한, 개념 노트에 "연결된 소스" 백링크와 같은 추가 내용이 포함될 수 있습니다. - **"연결된 소스" 백링크 추가**: * **비활성화 (기본값)**: 추출 중 개념 노트에 소스 문서에 대한 백링크를 추가하지 않습니다. * **활성화**: 소스 파일에 대한 백링크가 포함된 "연결된 소스" 섹션을 추가합니다. #### 특정 원문 텍스트 추출 - **추출 질문**: AI가 노트에서 문자 그대로의 답변을 추출하기를 원하는 질문 목록을 입력합니다(한 줄에 하나씩). - **결과물을 해당 언어로 번역**: * **비활성화 (기본값)**: 추출된 텍스트만 원래 언어로 출력합니다. * **활성화**: 이 작업에서 선택된 언어로 추출된 텍스트의 번역을 추가합니다. - **병합 쿼리 모드**: * **비활성화**: 각 질문을 개별적으로 처리합니다(정확도는 높지만 API 호출이 많음). * **활성화**: 모든 질문을 단일 프롬프트로 보냅니다(빠르고 API 호출이 적음). - **추출된 텍스트 저장 경로 및 파일명 사용자 정의**: * **비활성화**: 원본 파일과 같은 폴더에 접미사 `_Extracted`를 붙여 저장합니다. * **활성화**: 사용자 정의 출력 폴더 및 파일명 접미사를 지정할 수 있습니다. #### 일괄 Mermaid 수정 - **Mermaid 오류 감지 활성화**: * **비활성화 (기본값)**: 처리 후 오류 감지를 건너뜁니다. * **활성화**: 처리된 파일에서 남은 Mermaid 구문 오류를 스캔하고 `mermaid_error_{foldername}.md` 보고서를 생성합니다. - **Mermaid 오류가 있는 파일을 지정된 폴더로 이동**: * **비활성화**: 오류가 있는 파일이 제자리에 유지됩니다. * **활성화**: 수정 시도 후에도 여전히 Mermaid 구문 오류가 포함된 파일을 수동 검토를 위해 전용 폴더로 이동합니다. - **Mermaid 오류 폴더 경로**: (위 옵션이 활성화된 경우에만 표시) 오류 파일을 이동할 폴더입니다. #### 처리 매개변수 - **일괄 병렬화 활성화**: * **비활성화 (기본값)**: 일괄 처리 작업("폴더 처리" 또는 "제목에서 일괄 생성" 등)은 파일을 하나씩(순차적으로) 처리합니다. * **활성화**: 플러그인이 여러 파일을 동시에 처리할 수 있도록 허용하며, 이는 대규모 일괄 작업 속도를 크게 높일 수 있습니다. - **일괄 동시성**: (병렬화가 활성화된 경우에만 표시) 동시에 처리할 최대 파일 수를 설정합니다. 숫자가 높을수록 빨라질 수 있지만 리소스를 더 많이 사용하고 API 속도 제한에 걸릴 수 있습니다. (기본값: 1, 범위: 1-20) - **일괄 크기**: (병렬화가 활성화된 경우에만 표시) 단일 배치로 그룹화할 파일 수입니다. (기본값: 50, 범위: 10-200) - **배치 간 지연 (ms)**: (병렬화가 활성화된 경우에만 표시) 각 배치 처리 사이의 선택적 지연 시간(밀리초)으로, API 속도 제한을 관리하는 데 도움이 됩니다. (기본값: 1000ms) - **API 호출 간격 (ms)**: 각 개별 LLM API 호출 *전후*의 최소 지연 시간(밀리초)입니다. 저속 API나 429 오류 방지에 중요합니다. 인위적인 지연을 없애려면 0으로 설정하세요. (기본값: 500ms) - **청크 단어 수**: LLM으로 전송되는 각 청크의 최대 단어 수입니다. 대용량 파일의 API 호출 횟수에 영향을 미칩니다. (기본값: 3000) - **중복 감지 활성화**: 처리 중인 내용 내에서 중복 단어에 대한 기본 체크 여부를 전환합니다(결과는 콘솔에 표시). (기본값: 활성화) - **최대 토큰 수**: 각 응답 청크에 대해 LLM이 생성해야 하는 최대 토큰 수입니다. 비용과 상세도에 영향을 미칩니다. (기본값: 4096) Processing Parameters   Language settings #### 번역 - **기본 대상 언어**: 노트를 번역할 기본 언어를 선택합니다. 번역 명령을 실행할 때 UI에서 덮어쓸 수 있습니다. (기본값: 영어) - **번역된 파일 저장 경로 사용자 정의**: * **비활성화 (기본값)**: 번역된 파일은 원본 노트와 *같은 폴더*에 저장됩니다. * **활성화**: 번역된 파일이 저장될 보관함 내의 *상대 경로*(예: `Translations`)를 지정할 수 있습니다. 폴더가 없으면 생성됩니다. - **번역된 파일에 사용자 정의 접미사 사용**: * **비활성화 (기본값)**: 번역된 파일은 기본 접미사인 `_translated.md`를 사용합니다(예: `YourNote_translated.md`). * **활성화**: 사용자 정의 접미사를 지정할 수 있습니다. - **사용자 정의 접미사**: (위 옵션이 활성화된 경우에만 표시) 번역된 파일명에 추가할 사용자 정의 접미사를 입력합니다(예: `_ko` 또는 `_en`). translate #### 콘텐츠 생성 - **"제목에서 생성" 시 리서치 활성화**: * **비활성화 (기본값)**: "제목에서 생성" 시 제목만 입력으로 사용합니다. * **활성화**: 구성된 **웹 리서치 제공업체**를 사용하여 웹 리서치를 수행하고, 제목 기반 생성 중 LLM 프롬프트에 문맥으로 결과를 포함합니다. - **생성 후 자동으로 Mermaid 구문 수정 실행**: * **활성화 (기본값)**: 처리, 제목에서 생성, 제목에서 일괄 생성, 리서치 및 요약, Mermaid로 요약, 번역과 같은 Mermaid 관련 워크플로우 후에 자동으로 Mermaid 구문 수정을 실행합니다. * **비활성화**: 생성된 Mermaid 출력을 그대로 둡니다. 수동으로 `일괄 Mermaid 수정`을 실행하거나 사용자 정의 워크플로우에 추가해야 합니다. - **출력 언어**: (신규) "제목에서 생성" 및 "제목에서 일괄 생성" 작업에 대해 원하는 출력 언어를 선택합니다. * **영어 (기본값)**: 프롬프트가 영어로 처리되고 출력됩니다. * **기타 언어**: LLM이 영어로 추론을 수행하되 최종 문서는 선택한 언어(예: 스페인어, 프랑스어, 한국어, 아랍어, 힌디어 등)로 제공하도록 지시합니다. - **프롬프트 단어 변경**: (신규) * **프롬프트 단어 변경**: 특정 작업에 대한 프롬프트 단어를 변경할 수 있습니다. * **사용자 정의 프롬프트 단어**: 작업에 대한 사용자 정의 프롬프트 단어를 입력합니다. - **"제목에서 생성"에 사용자 정의 출력 폴더 사용**: * **비활성화 (기본값)**: 성공적으로 생성된 파일은 원본 폴더의 상위 폴더를 기준으로 `[원본폴더명]_complete`라는 하위 폴더로 이동됩니다(원본 폴더가 루트인 경우 `Vault_complete`). * **활성화**: 완료된 파일이 이동될 하위 폴더의 사용자 정의 이름을 지정할 수 있습니다. - **사용자 정의 출력 폴더명**: (위 옵션이 활성화된 경우에만 표시) 하위 폴더의 원하는 이름(예: `Generated Content`, `_complete`)을 입력합니다. 잘못된 문자는 허용되지 않습니다. 비워 두면 기본값은 `_complete`입니다. 이 폴더는 원본 폴더의 상위 디렉토리를 기준으로 생성됩니다. #### 원클릭 워크플로우 버튼 - **시각적 워크플로우 빌더**: DSL을 직접 작성할 필요 없이 기본 제공 작업에서 사용자 정의 워크플로우 버튼을 만들고, 편집하고, 순서를 정할 수 있습니다. - **사용자 정의 워크플로우 버튼 DSL**: 고급 사용자는 여전히 워크플로우 정의 텍스트를 직접 편집할 수 있습니다. 잘못된 DSL은 안전하게 기본 워크플로우로 폴백하며 사이드바/설정 UI에 경고를 표시합니다. - **워크플로우 오류 전략**: * **오류 시 중지 (기본값)**: 단계가 실패하면 워크플로우를 즉시 중단합니다. * **오류 시 계속**: 이후 단계의 실행을 계속하고 마지막에 실패한 작업 수를 보고합니다. - **기본 워크플로우 포함**: `One-Click Extract`는 `파일 처리 (링크 추가)` -> `제목에서 일괄 생성` -> `일괄 Mermaid 수정`을 차례로 실행합니다. #### 사용자 정의 프롬프트 설정 이 기능을 사용하면 특정 작업에 대해 LLM으로 전송되는 기본 지침(프롬프트)을 덮어써서 결과물을 세밀하게 제어할 수 있습니다. - **특정 작업에 대한 사용자 정의 프롬프트 활성화**: * **비활성화 (기본값)**: 플러그인은 모든 작업에 대해 기본 제공되는 기본 프롬프트를 사용합니다. * **활성화**: 아래에 나열된 작업에 대해 사용자 정의 프롬프트를 설정하는 기능을 활성화합니다. 이것이 이 기능의 마스터 스위치입니다. - **[작업 이름]에 사용자 정의 프롬프트 사용**: (위 옵션이 활성화된 경우에만 표시) * 지원되는 각 작업("링크 추가", "제목에서 생성", "리서치 및 요약", "개념 추출")에 대해 사용자 정의 프롬프트를 개별적으로 활성화하거나 비활성화할 수 있습니다. * **비활성화**: 이 특정 작업은 기본 프롬프트를 사용합니다. * **활성화**: 이 작업은 아래 해당 "사용자 정의 프롬프트" 텍스트 영역에 입력한 텍스트를 사용합니다. - **사용자 정의 프롬프트 텍스트 영역**: (작업의 사용자 정의 프롬프트가 활성화된 경우에만 표시) * **기본 프롬프트 표시**: 참고를 위해 플러그인이 해당 작업에 일반적으로 사용하는 기본 프롬프트가 표시됩니다. **"Copy Default Prompt"** 버튼을 사용하여 이 텍스트를 복사하고 나만의 사용자 정의 프롬프트를 위한 시작점으로 삼을 수 있습니다. * **사용자 정의 프롬프트 입력**: 여기에 LLM에 대한 나만의 지침을 작성할 수 있습니다. * **플레이스홀더**: 프롬프트에서 특수 플레이스홀더를 사용할 수 있으며(사용해야 합니다), 플러그인은 요청을 LLM으로 보내기 전에 이를 실제 내용으로 대체합니다. 각 작업에서 사용 가능한 플레이스홀더는 기본 프롬프트를 참조하세요. 일반적인 플레이스홀더는 다음과 같습니다: * `{TITLE}`: 현재 노트의 제목. * `{RESEARCH_CONTEXT_SECTION}`: 웹 리서치에서 수집된 내용. * `{USER_PROMPT}`: 처리 중인 노트의 내용. Content generation   output Duplicate check scope   Custom prompt settings #### 중복 체크 범위 - **중복 체크 범위 모드**: 개념 노트 폴더의 노트를 잠재적인 중복을 찾기 위해 어떤 파일과 비교할지 제어합니다. * **보관함 전체 (기본값)**: 개념 노트를 보관함의 다른 모든 노트와 비교합니다(개념 노트 폴더 자체는 제외). * **특정 폴더만 포함**: 아래 나열된 폴더 내의 노트와만 개념 노트를 비교합니다. * **특정 폴더 제외**: 아래 나열된 폴더(및 개념 노트 폴더)를 *제외한* 모든 노트와 개념 노트를 비교합니다. * **개념 폴더만**: 개념 노트를 *개념 노트 폴더 내의 다른 노트*와만 비교합니다. 이는 생성된 개념 내에서만 중복을 찾는 데 유용합니다. - **폴더 포함/제외**: (모드가 '포함' 또는 '제외'인 경우에만 표시) 포함하거나 제외할 폴더의 *상대 경로*를 **한 줄에 하나씩** 입력합니다. 경로는 대소문자를 구분하며 `/`를 구분자로 사용합니다(예: `Reference Material/Papers` 또는 `Daily Notes`). 이 폴더들은 개념 노트 폴더와 같거나 그 내부에 있어서는 안 됩니다. #### 웹 리서치 제공업체 - **검색 제공업체**: `Tavily`(API 키 필요, 권장)와 `DuckDuckGo`(실험적, 검색 엔진에 의해 자동 요청이 자주 차단됨) 중에서 선택합니다. "주제 리서치 및 요약" 및 선택적으로 "제목에서 생성"에 사용됩니다. - **Tavily API 키**: (Tavily 선택 시에만 표시) [tavily.com](https://tavily.com/)에서 받은 API 키를 입력합니다. - **Tavily 최대 결과 수**: (Tavily 선택 시에만 표시) Tavily가 반환해야 하는 검색 결과의 최대 개수(1-20)입니다. 기본값: 5. - **Tavily 검색 깊이**: (Tavily 선택 시에만 표시) `basic`(기본값) 또는 `advanced` 중에서 선택합니다. 참고: `advanced`는 더 나은 결과를 제공하지만 검색당 1개가 아닌 2개의 API 크레딧을 소비합니다. - **DuckDuckGo 최대 결과 수**: (DuckDuckGo 선택 시에만 표시) 분석할 검색 결과의 최대 개수(1-10)입니다. 기본값: 5. - **DuckDuckGo 내용 가져오기 타임아웃**: (DuckDuckGo 선택 시에만 표시) 각 DuckDuckGo 결과 URL에서 내용을 가져오려고 시도할 때 기다릴 최대 시간(초)입니다. 기본값: 15. - **최대 리서치 내용 토큰 수**: 요약 프롬프트에 포함할 통합 웹 리서치 결과(스니펫/가져온 내용)의 대략적인 최대 토큰 수입니다. 문맥 창 크기와 비용을 관리하는 데 도움이 됩니다. (기본값: 3000) Web research provider #### 집중 학습 분야 - **집중 학습 분야 활성화**: * **비활성화 (기본값)**: LLM으로 전송되는 프롬프트에 표준적인 일반 지침을 사용합니다. * **활성화**: LLM의 문맥 이해도를 높이기 위해 하나 이상의 연구 분야를 지정할 수 있습니다. - **학습 분야**: (위 옵션이 활성화된 경우에만 표시) 특정 분야를 입력합니다(예: '재료 과학', '고분자 물리학', '기계 학습'). 이렇게 하면 프롬프트 시작 부분에 "관련 분야: [...]"라는 줄이 추가되어 LLM이 특정 연구 분야에 대해 더 정확하고 관련성 높은 링크와 콘텐츠를 생성하는 데 도움이 됩니다. focused learning domain ## 사용 가이드 ### 빠른 워크플로우 및 새로운 사이드바 - Notemd 사이드바를 열어 핵심 처리, 생성, 번역, 지식 관리, 유틸리티를 위한 그룹화된 작업 섹션에 액세스하세요. - 사이드바 상단의 **빠른 워크플로** 영역을 사용하여 사용자 정의 다단계 버튼을 실행하세요. - 기본 **One-Click Extract** 워크플로우는 `파일 처리 (링크 추가)` -> `제목에서 일괄 생성` -> `일괄 Mermaid 수정`을 실행합니다. - 워크플로우 진행 상황, 단계별 로그 및 실패 정보가 사이드바에 표시되며, 고정된 바닥글은 확장된 섹션에 의해 진행률 표시줄과 로그 영역이 밀려나지 않도록 보호합니다. - 진행 상황 카드는 상태 텍스트, 전용 백분율 표시 및 남은 시간을 한눈에 확인할 수 있도록 유지하며, 동일한 사용자 정의 워크플로우를 설정에서 다시 구성할 수 있습니다. ### 기존 처리 (위키 링크 추가) 개념을 식별하고 `[[wiki-links]]`를 추가하는 데 중점을 둔 핵심 기능입니다. **중요:** 이 프로세스는 `.md` 또는 `.txt` 파일에서만 작동합니다. PDF 파일은 추가 처리 전에 [Mineru](https://github.com/opendatalab/MinerU) 등을 사용하여 무료로 MD 파일로 변환할 수 있습니다. 1. **사이드바 사용**: * Notemd 사이드바를 엽니다(마법 지팡이 아이콘 또는 명령 팔레트). * `.md` 또는 `.txt` 파일을 엽니다. * **"파일 처리 (링크 추가)" (Process File (Add Links))**를 클릭합니다. * 폴더 처리 시: **"폴더 처리 (링크 추가)" (Process Folder (Add Links))**를 클릭하고 폴더를 선택한 다음 "Process"를 클릭합니다. * 진행 상황이 사이드바에 표시됩니다. 사이드바의 "Cancel Processing" 버튼을 사용하여 작업을 취소할 수 있습니다. * *폴더 처리 참고:* 파일은 에디터에서 열리지 않고 백그라운드에서 처리됩니다. image 2. **명령 팔레트 사용**(`Ctrl+P` 또는 `Cmd+P`): * **단일 파일**: 파일을 열고 `Notemd: Process Current File`을 실행합니다. * **폴더**: `Notemd: Process Folder`를 실행한 다음 폴더를 선택합니다. 파일은 에디터에서 열리지 않고 백그라운드에서 처리됩니다. * 명령 팔레트 작업 시 취소 버튼이 포함된 진행률 모달이 나타납니다. * *참고:* 플러그인은 저장 전 최종 처리된 내용에서 발견되는 시작 줄 `\boxed{`와 끝 줄 `}`을 자동으로 삭제합니다. ### 신규 기능 1. **Mermaid 다이어그램으로 요약**: * 요약하려는 노트를 엽니다. * `Notemd: Summarise as Mermaid diagram` 명령을 실행합니다(명령 팔레트 또는 사이드바 버튼 이용). * 플러그인이 Mermaid 다이어그램이 포함된 새 노트를 생성합니다. 2. **노트/선택 영역 번역**: * 노트에서 텍스트를 선택하여 해당 선택 영역만 번역하거나, 선택 없이 명령을 호출하여 노트 전체를 번역합니다. * `Notemd: Translate Note/Selection` 명령을 실행합니다(명령 팔레트 또는 사이드바 버튼 이용). * **대상 언어**(설정에 지정된 값이 기본값)를 확인하거나 변경할 수 있는 모달이 나타납니다. * 플러그인은 구성된 **LLM 제공업체**(멀티 모델 설정 기반)를 사용하여 번역을 수행합니다. * 번역된 내용은 적절한 접미사와 함께 구성된 **번역 저장 경로**에 저장되며, 쉽게 비교할 수 있도록 원본 내용 **오른쪽의 새 창**에서 열립니다. * 사이드바 버튼이나 모달의 취소 버튼을 통해 이 작업을 취소할 수 있습니다. 3. **일괄 번역**: * 명령 팔레트에서 `Notemd: Batch Translate Folder`를 실행하고 폴더를 선택하거나, 파일 탐색기에서 폴더를 마우스 오른쪽 버튼으로 클릭하고 "이 폴더 일괄 번역"을 선택합니다. * 플러그인이 선택한 폴더 내의 모든 Markdown 파일을 번역합니다. * 번역된 파일은 구성된 번역 경로에 저장되지만 자동으로 열리지는 않습니다. * 이 프로세스는 진행률 모달을 통해 취소할 수 있습니다. image 3. **주제 리서치 및 요약**: * 노트에서 텍스트를 선택하거나 노트에 제목이 있는지 확인합니다(이것이 검색 주제가 됩니다). * `Notemd: Research and Summarize Topic` 명령을 실행합니다(명령 팔레트 또는 사이드바 버튼 이용). * 플러그인은 구성된 **검색 제공업체**(Tavily/DuckDuckGo)와 적절한 **LLM 제공업체**(멀티 모델 설정 기반)를 사용하여 정보를 찾아 요약합니다. * 요약 내용이 현재 노트에 추가됩니다. * 사이드바 버튼이나 모달의 취소 버튼을 통해 이 작업을 취소할 수 있습니다. * *참고:* DuckDuckGo 검색은 봇 감지로 인해 실패할 수 있습니다. Tavily를 권장합니다. image 4. **제목에서 콘텐츠 생성**: * 노트를 엽니다(빈 노트여도 무방합니다). * `Notemd: Generate Content from Title` 명령을 실행합니다(명령 팔레트 또는 사이드바 버튼 이용). * 플러그인은 적절한 **LLM 제공업체**(멀티 모델 설정 기반)를 사용하여 노트 제목을 기반으로 콘텐츠를 생성하고 기존 내용을 대체합니다. * **"제목에서 생성" 시 리서치 활성화"** 설정이 켜져 있으면, 먼저 웹 리서치를 수행하고(구성된 **웹 리서치 제공업체** 사용) 해당 문맥을 LLM으로 전송되는 프롬프트에 포함합니다. * 사이드바 버튼이나 모달의 취소 버튼을 통해 이 작업을 취소할 수 있습니다. 5. **제목에서 일괄 콘텐츠 생성**: * `Notemd: Batch Generate Content from Titles` 명령을 실행합니다(명령 팔레트 또는 사이드바 버튼 이용). * 처리하려는 노트가 포함된 폴더를 선택합니다. * 플러그인은 폴더 내의 각 `.md` 파일(`_processed.md` 파일 및 지정된 "완료" 폴더 내 파일 제외)을 순회하며 노트 제목을 기반으로 콘텐츠를 생성하고 기존 내용을 대체합니다. 파일은 에디터에서 열리지 않고 백그라운드에서 처리됩니다. * 성공적으로 처리된 파일은 구성된 "완료" 폴더로 이동됩니다. * 이 명령은 처리되는 각 노트에 대해 **"제목에서 생성" 시 리서치 활성화"** 설정을 준수합니다. * 사이드바 버튼이나 모달의 취소 버튼을 통해 이 작업을 취소할 수 있습니다. * 진행 상황과 결과(수정된 파일 수, 오류)가 사이드바 로그/모달에 표시됩니다. image 6. **중복 개념 노트 체크 및 제거**: * 설정에서 **개념 노트 폴더 경로**가 올바르게 구성되었는지 확인합니다. * `Notemd: Check and Remove Duplicate Concept Notes`를 실행합니다(명령 팔레트 또는 사이드바 버튼 이용). * 플러그인은 개념 노트 폴더를 스캔하고 여러 규칙(정확한 일치, 복수형, 정규화, 포함)을 사용하여 파일 이름을 폴더 외부의 노트와 비교합니다. * 잠재적인 중복이 발견되면 파일 목록, 플래그 지정 이유 및 충돌하는 파일이 나열된 모달 창이 나타납니다. * 목록을 주의 깊게 검토하세요. 식별된 중복 파일을 시스템 휴지통으로 이동하려면 **"Delete Files"**를 클릭하고, 아무 작업도 하지 않으려면 **"Cancel"**을 클릭합니다. * 진행 상황과 결과가 사이드바 로그/모달에 표시됩니다. 7. **개념 추출 (순수 모드)**: * 이 기능을 사용하면 원본 파일을 변경하지 않고 문서에서 개념을 추출하고 해당 개념 노트를 생성할 수 있습니다. 일련의 문서에서 지식 베이스를 신속하게 구축하는 데 완벽합니다. * **단일 파일**: 파일을 열고 명령 팔레트에서 `Notemd: Extract concepts (create concept notes only)` 명령을 실행하거나 사이드바의 **"개념 추출 (현재 파일)" (Extract concepts (current file))** 버튼을 클릭합니다. * **폴더**: 명령 팔레트에서 `Notemd: Batch extract concepts from folder` 명령을 실행하거나 사이드바의 **"개념 추출 (폴더)" (Extract concepts (folder))** 버튼을 클릭한 다음 폴더를 선택하여 그 안의 모든 노트를 처리합니다. * 플러그인이 파일을 읽고 개념을 식별하여 지정된 **개념 노트 폴더**에 새 노트를 생성하며, 원본 파일은 그대로 유지됩니다. 8. **선택 영역에서 위키 링크 생성 및 노트 생성**: * 이 강력한 명령은 새 개념 노트를 만들고 내용을 채우는 과정을 간소화합니다. * 에디터에서 단어나 문구를 선택합니다. * `Notemd: Create Wiki-Link & Generate Note from Selection` 명령을 실행합니다(이 명령에 `Cmd+Shift+W`와 같은 단축키를 할당하는 것이 좋습니다). * 플러그인은 다음과 같이 동작합니다: 1. 선택한 텍스트를 `[[wiki-link]]`로 대체합니다. 2. **개념 노트 폴더** 내에 해당 제목의 노트가 이미 존재하는지 체크합니다. 3. 존재한다면 현재 노트에 대한 백링크를 추가합니다. 4. 존재하지 않는다면 새 빈 노트를 만듭니다. 5. 그런 다음 새 노트 또는 기존 노트에 대해 **"Generate Content from Title"** 명령을 자동으로 실행하여 AI가 생성한 내용을 채웁니다. 9. **개념 추출 및 제목 생성**: * 이 명령은 간소화된 워크플로우를 위해 두 가지 강력한 기능을 결합합니다. * 명령 팔레트에서 `Notemd: Extract Concepts and Generate Titles`를 실행합니다(단축키 할당을 권장합니다). * 플러그인은 다음과 같이 동작합니다: 1. 먼저, 현재 활성 파일에 대해 **"개념 추출 (현재 파일)" (Extract concepts (current file))** 작업을 실행합니다. 2. 그런 다음, 설정에서 **개념 노트 폴더 경로**로 지정한 폴더에 대해 **"제목에서 일괄 생성" (Batch generate from titles)** 작업을 자동으로 실행합니다. * 이를 통해 먼저 소스 문서에서 새 개념을 추출하여 지식 베이스를 구축한 다음, 한 번의 단계로 해당 새 개념 노트들을 AI 생성 콘텐츠로 즉시 보강할 수 있습니다. 10. **특정 원문 텍스트 추출**: * 설정의 "특정 원문 텍스트 추출"에서 질문을 구성합니다. * 사이드바의 "특정 원문 텍스트 추출" 버튼을 사용하여 활성 파일을 처리합니다. * **병합 모드**: 모든 질문을 단일 프롬프트로 보내 더 빠른 처리를 가능하게 합니다. * **번역**: 추출된 텍스트를 설정된 언어로 번역할 수 있는 옵션입니다. * **사용자 정의 출력**: 추출된 파일이 저장될 위치와 방식을 구성합니다. 11. **일괄 Mermaid 수정**: * 사이드바의 "일괄 Mermaid 수정" 버튼을 사용하여 폴더를 스캔하고 일반적인 Mermaid 구문 오류를 수정합니다. * 플러그인은 여전히 오류가 포함된 파일들을 `mermaid_error_{foldername}.md` 파일에 보고합니다. * 필요에 따라 이러한 문제가 있는 파일들을 검토를 위해 별도의 폴더로 이동하도록 플러그인을 구성할 수 있습니다. ## 지원되는 LLM 제공업체 | 제공업체 | 유형 | API 키 필요 | 비고 | |--------------------|---------|-----------------------|-----------------------------------------------------------------------| | DeepSeek | 클라우드 | 예 | 추론 모델 처리가 포함된 DeepSeek 네이티브 엔드포인트 | | Qwen | 클라우드 | 예 | Qwen / QwQ 모델용 DashScope 호환 모드 프리셋 | | Qwen Code | 클라우드 | 예 | Qwen coder 모델용 DashScope 코드 집중 프리셋 | | Doubao | 클라우드 | 예 | Volcengine Ark 프리셋. 일반적으로 모델 필드에 엔드포인트 ID를 설정합니다 | | Moonshot | 클라우드 | 예 | Kimi / Moonshot 공식 엔드포인트 | | GLM | 클라우드 | 예 | Zhipu BigModel 공식 OpenAI 호환 엔드포인트 | | Z AI | 클라우드 | 예 | GLM/Zhipu 인터내셔널 공식 OpenAI 호환 엔드포인트. `GLM`을 보완 | | MiniMax | 클라우드 | 예 | MiniMax 공식 chat-completions 엔드포인트 | | Huawei Cloud MaaS | 클라우드 | 예 | 호스팅된 모델용 Huawei ModelArts MaaS OpenAI 호환 엔드포인트 | | Baidu Qianfan | 클라우드 | 예 | ERNIE 모델 등을 위한 Baidu Qianfan 공식 OpenAI 호환 엔드포인트 | | SiliconFlow | 클라우드 | 예 | 호스팅된 OSS 모델용 SiliconFlow 공식 OpenAI 호환 엔드포인트 | | OpenAI | 클라우드 | 예 | GPT 모델 및 o 시리즈 지원 | | Anthropic | 클라우드 | 예 | Claude 시리즈 지원 | | Google | 클라우드 | 예 | Gemini 시리즈 지원 | | Mistral | 클라우드 | 예 | Mistral 및 Codestral 제품군 지원 | | Azure OpenAI | 클라우드 | 예 | 엔드포인트, API 키, 배포 이름 및 API 버전 필요 | | OpenRouter | 게이트웨이| 예 | OpenRouter 모델 ID를 통해 많은 제공업체에 액세스 | | xAI | 클라우드 | 예 | Grok 네이티브 엔드포인트 | | Groq | 클라우드 | 예 | 호스팅된 OSS 모델용 고속 OpenAI 호환 추론 | | Together | 클라우드 | 예 | 호스팅된 OSS 모델용 OpenAI 호환 엔드포인트 | | Fireworks | 클라우드 | 예 | OpenAI 호환 추론 엔드포인트 | | Requesty | 게이트웨이| 예 | 단일 API 키 기반의 멀티 제공업체 라우터 | | OpenAI Compatible | 게이트웨이| 선택 사항 | LiteLLM, vLLM, Perplexity, Vercel AI Gateway 등을 위한 일반 프리셋 | | LMStudio | 로컬 | 선택 사항 (`EMPTY`) | LM Studio 서버를 통해 로컬에서 모델 실행 | | Ollama | 로컬 | 아니요 | Ollama 서버를 통해 로컬에서 모델 실행 | *참고: 로컬 제공업체(LMStudio, Ollama)의 경우, 각 서버 애플리케이션이 실행 중이고 구성된 기준 URL에서 액세스 가능한지 확인하세요.* *참고: OpenRouter 및 Requesty의 경우 게이트웨이에 표시된 전체/제공업체 접두사가 포함된 모델 식별자(예: `google/gemini-flash-1.5` 또는 `anthropic/claude-3-7-sonnet-latest`)를 사용하세요.* *참고: `Doubao`는 일반적으로 모델 필드에 원시 모델 이름 대신 Ark 엔드포인트/배포 ID를 요구합니다. 설정 화면에서 플레이스홀더 값이 여전히 있는 경우 경고를 표시하며, 실제 엔드포인트 ID로 교체할 때까지 연결 테스트를 차단합니다.* *참고: `Z AI`는 인터내셔널 회선 `api.z.ai`를 대상으로 하며, `GLM`은 중국 본토의 BigModel 엔드포인트를 유지합니다. 계정 지역에 맞는 프리셋을 선택하세요.* *참고: 중국 집중형 프리셋은 chat-first 연결 체크를 사용하므로 테스트 시 API 키 액세스뿐만 아니라 실제 구성된 모델/배포의 유효성도 검증합니다.* *참고: `OpenAI Compatible`은 사용자 정의 게이트웨이 및 프록시를 위한 것입니다. 제공업체 문서에 따라 기준 URL, API 키 정책 및 모델 ID를 설정하세요.* ## 네트워크 사용 및 데이터 처리 Notemd는 Obsidian 내에서 로컬로 실행되지만 일부 기능은 외부 요청을 보냅니다. ### LLM 제공업체 호출 (구성 가능) - 트리거: 파일 처리, 생성, 번역, 리서치 요약, Mermaid 요약 및 연결/진단 작업. - 엔드포인트: Notemd 설정에 구성된 제공업체 기준 URL. - 전송 데이터: 처리에 필요한 프롬프트 텍스트 및 작업 내용. - 데이터 처리 참고: API 키는 플러그인 설정에 로컬로 저장되며 기기에서 요청에 서명하는 데 사용됩니다. ### 웹 리서치 호출 (선택 사항) - 트리거: 웹 리서치가 켜져 있고 검색 제공업체가 선택된 경우. - 엔드포인트: Tavily API 또는 DuckDuckGo 엔드포인트. - 전송 데이터: 검색 쿼리 및 필요한 요청 메타데이터. ### 개발자 진단 및 디버그 로그 (선택 사항) - 트리거: API 디버그 모드 및 개발자 진단 작업. - 저장 위치: 진단 및 오류 로그는 보관함 루트에 작성됩니다(예: `Notemd_Provider_Diagnostic_*.txt` 및 `Notemd_Error_Log_*.txt`). - 위험 참고: 로그에는 요청/응답 일부가 포함될 수 있습니다. 공개적으로 공유하기 전에 로그를 검토하세요. ### 로컬 저장소 - 플러그인 설정은 `.obsidian/plugins/notemd/data.json`에 저장됩니다. - 생성된 파일, 보고서 및 선택적 로그는 설정에 따라 보관함 내에 저장됩니다. ## 문제 해결 ### 일반적인 문제 - **플러그인이 로드되지 않음**: `manifest.json`, `main.js`, `styles.css`가 올바른 폴더(`/.obsidian/plugins/notemd/`)에 있는지 확인하고 Obsidian을 재시작하세요. 시작 시 오류는 개발자 콘솔(`Ctrl+Shift+I` 또는 `Cmd+Option+I`)에서 확인하세요. - **처리 실패 / API 오류**: 1. **파일 형식 확인**: 처리하거나 확인하려는 파일의 확장자가 `.md` 또는 `.txt`인지 확인하세요. Notemd는 현재 이러한 텍스트 기반 형식만 지원합니다. 2. "LLM 연결 테스트" 명령/버튼을 사용하여 활성 제공업체 설정을 검증하세요. 3. API 키, 기준 URL, 모델 이름, API 버전(Azure의 경우)을 다시 확인하세요. API 키가 올바르고 크레딧/권한이 충분한지 확인하세요. 4. 로컬 LLM 서버(LMStudio, Ollama)가 실행 중이고 기준 URL이 올바른지 확인하세요(예: LMStudio의 경우 `http://localhost:1234/v1`). 5. 클라우드 제공업체의 경우 인터넷 연결을 확인하세요. 6. **단일 파일 처리 오류의 경우:** 상세한 오류 메시지는 개발자 콘솔을 확인하세요. 필요한 경우 오류 모달의 버튼을 사용하여 복사하세요. 7. **일괄 처리 오류의 경우:** 실패한 각 파일에 대한 상세한 오류 메시지는 보관함 루트의 `error_processing_filename.log`를 확인하세요. 개발자 콘솔이나 오류 모달에 요약 또는 일반적인 배치 오류가 표시될 수 있습니다. 8. **자동 오류 로그:** 프로세스가 실패하면 플러그인은 보관함 루트 디렉토리에 `Notemd_Error_Log_[Timestamp].txt`라는 상세 로그 파일을 자동으로 저장합니다. 이 파일에는 오류 메시지, 스택 추적 및 세션 로그가 포함되어 있습니다. 지속적인 문제가 발생하면 이 파일을 확인하세요. 설정에서 "API 오류 디버깅 모드"를 활성화하면 이 로그에 더욱 상세한 API 응답 데이터가 채워집니다. 9. **실제 엔드포인트 장기 요청 진단 (개발자)**: - 플러그인 내부 경로 (가장 권장): **Settings -> Notemd -> 개발자 제공업체 진단 (장기 요청)**을 사용하여 활성 제공업체에 대해 런타임 조사를 실행하고 보관함 루트에 `Notemd_Provider_Diagnostic_*.txt`를 생성합니다. - CLI 경로 (Obsidian 런타임 외부): 버퍼링 방식과 스트리밍 방식 간의 엔드포인트 레벨 재현 비교를 위해 다음을 사용하세요: ```bash npm run diagnose:llm -- \ --transport openai-compatible \ --provider-name OpenRouter \ --base-url https://openrouter.ai/api/v1 \ --api-key "$OPENROUTER_API_KEY" \ --model anthropic/claude-3.7-sonnet \ --prompt-file ./tmp/prompt.txt \ --content-file ./tmp/content.txt \ --mode compare \ --timeout-ms 360000 \ --output ./tmp/openrouter-diagnostic.txt ``` 생성된 보고서에는 시도별 타이밍(`First Byte`, `Duration`), 삭제된 요청 메타데이터, 응답 헤더, 원시/부분 본문 청크, 파싱된 스트림 조각 및 전송 계층 실패 지점이 포함됩니다. - **LM Studio/Ollama 연결 문제**: * **연결 테스트 실패**: 로컬 서버(LM Studio 또는 Ollama)가 실행 중이고 올바른 모델이 로드/사용 가능한지 확인하세요. * **CORS 오류 (Windows 기반 Ollama)**: Windows에서 Ollama를 사용할 때 CORS(Cross-Origin Resource Sharing) 오류가 발생하면 `OLLAMA_ORIGINS` 환경 변수를 설정해야 할 수 있습니다. Ollama를 시작하기 전에 명령 프롬프트에서 `set OLLAMA_ORIGINS=*`를 실행하여 이를 수행할 수 있습니다. 이렇게 하면 모든 원본으로부터의 요청이 허용됩니다. * **LM Studio에서 CORS 활성화**: LM Studio의 경우 서버 설정에서 CORS를 직접 활성화할 수 있습니다. Obsidian이 브라우저에서 실행되거나 엄격한 원본 정책이 있는 경우 이 작업이 필요할 수 있습니다. - **폴더 생성 오류 ("File name cannot contain...")**: * 이는 일반적으로 설정에 입력한 경로(**처리된 파일 폴더 경로** 또는 **개념 노트 폴더 경로**)가 *Obsidian에 대해* 유효하지 않음을 의미합니다. * **반드시 상대 경로를 사용하고**(예: `Processed`, `Notes/Concepts`) **절대 경로를 사용하지 마세요**(예: `C:\Users\...`, `/Users/...`). * 잘못된 문자가 있는지 확인하세요: `* " \ / < > : | ? # ^ [ ]`. Obsidian 경로에서는 Windows에서도 `\`가 유효하지 않음에 유의하세요. 경로 구분자로는 `/`를 사용하세요. - **성능 문제**: 대용량 파일이나 많은 파일을 처리하는 데 시간이 걸릴 수 있습니다. 더 빠른(그러나 더 잦은) API 호출을 위해 "청크 단어 수" 설정을 낮춰 보세요. 다른 LLM 제공업체나 모델을 사용해 보세요. - **예상치 못한 링크**: 링크 품질은 LLM과 프롬프트에 크게 좌우됩니다. 다른 모델이나 온도 설정을 시도해 보세요. ## 기여하기 기여는 언제나 환영합니다! 가이드라인은 GitHub 저장소를 참조하세요: [https://github.com/Jacobinwwey/obsidian-NotEMD](https://github.com/Jacobinwwey/obsidian-NotEMD) ## 유지 관리자 문서 - [릴리스 워크플로우 (영어)](./docs/maintainer/release-workflow.md) - [릴리스 워크플로우 (简体中文)](./docs/maintainer/release-workflow.zh-CN.md) ## 라이선스 MIT 라이선스 - 자세한 내용은 [LICENSE](LICENSE) 파일을 참조하세요. --- *Notemd v1.9.3 - AI로 Obsidian 지식 그래프를 강화하세요.* ## 개발 연대기 이 분기별 연대기는 [repo-saga](https://github.com/teee32/repo-saga)의 원래 시각 스타일을 유지하며, 분기 단위 분할도 이제 repo-saga 자체가 직접 생성합니다. ![Notemd Development Chronicle](./docs/repo-saga/notemd-development-history.ko.svg) _릴리스 태그 `1.9.4` 기준으로 2026-07-21에 마지막 새로고침을 완료했습니다. 최신 커밋 날짜: 2026-07-21._ ## Star History Star History Chart ## 설정 탐색, 다이어그램 기록, CircuitikZ 및 안전한 일괄 처리 폴더 Notemd의 설정 페이지에서는 모호한 검색 기능, 대규모 카테고리 탐색 기능, 그리고 현재 Vault에 저장된 각 설정별 즐겨찾기 기능을 제공합니다. - 다이어그램 기록은 Vault 범위 내에 저장되며, 가장 최신 순서대로 정렬됩니다. 20개씩 그룹화하여 검색하고 페이지를 넘길 수 있습니다. 기록을 삭제해도 생성된 파일들은 삭제되지 않습니다. - 다이어그램 미리보기 내보내기 시 PPI 설정을 통해 PNG 및 PDF의 선명도를 조절할 수 있습니다. SVG는 벡터 기반 형식으로 유지됩니다. - 선호하는 다이어그램 유형과 선호하는 소스 형식은 별도의 선택 항목입니다. - 데스크톱 사용자는 선택 사항인 CircuitikZ 네이티브 컴파일 환경을 열어 시스템에 설치된 Tectonic/pdflatex를 재사용하거나, 사용자 정의 컴파일러를 선택하거나, 고정된 관리형 Tectonic 런타임을 명시적으로 설치할 수 있습니다. 미리보기, SVG, PNG, 미리보기용 PDF 내보내기에는 LaTeX가 필요하지 않습니다. - 고급 일괄 처리 파일 선택 기능을 통해 저장된 선택 프로필과 규칙 미리보기를 활용할 수 있습니다. - 일괄 처리 대상 폴더가 없는 경우 확인 후 새로 만들 수 있으며, 앞으로 폴더가 빠질 때 자동으로 생성하도록 기억하도록 하는 옵션도 제공됩니다. - 이미 존재하는 비어 있지 않은 폴더의 경우 전체 일괄 처리를 진행하기 전에 한 번만 확인하면 되며, 생성되는 각 파일마다 별도로 확인할 필요는 없습니다. - 개발자 모드에서는 공급업체 관련 진단 정보와 고급 문제 해결 도구를 확인할 수 있습니다.