AI 기반 분석

Noir를 대규모 언어 모델(LLM, 클라우드/로컬/ACP 에이전트)에 연결하여 심층 코드 분석을 수행합니다. 미지원 언어와 프레임워크에서도 엔드포인트를 식별할 수 있습니다.

빠른 예제

OpenAI로 스캔:

noir scan . --ai-provider openai --ai-model gpt-5.5 --ai-key $OPENAI_API_KEY

로컬 Ollama로 스캔 (API 키 불필요):

noir scan . --ai-provider ollama --ai-model gemma4

ACP 에이전트로 스캔 (모델/키 불필요):

noir scan . --ai-provider acp:codex

사용법

AI 제공업체, 모델 및 API 키를 지정합니다:

noir scan . --ai-provider <PROVIDER> --ai-model <MODEL_NAME> --ai-key <YOUR_API_KEY>

ACP 제공자(acp:*)에서는 --ai-model이 선택 사항이며 --ai-key가 보통 필요하지 않습니다:

noir scan . --ai-provider acp:codex

명령줄 플래그

플래그 설명
--ai-provider 제공업체 접두사 (예: openai, ollama, acp:codex) 또는 사용자 정의 API URL
--ai-model 모델 이름 (예: gpt-5.5), acp:*에서는 선택 사항
--ai-key API 키 (NOIR_AI_KEY 환경 변수로도 설정 가능)
--ai-agent 에이전트 기반 AI 워크플로우 활성화 (반복적 도구 호출 루프)
--ai-agent-max-steps AI 에이전트 루프 최대 단계 수 (기본값: 20)
--ai-native-tools-allowlist 네이티브 도구 호출 허용 제공업체 목록 (쉼표 구분, 기본값: openai,xai,github)
--ai-max-token AI 요청 최대 토큰 수 (선택사항)
--cache-disable LLM 응답 캐시 비활성화
--cache-clear 실행 전 LLM 캐시 삭제

지원되는 AI 제공업체

Noir는 다음 AI 제공업체 프리셋을 지원합니다:

접두사 기본 호스트
openai https://api.openai.com
xai https://api.x.ai
github https://models.github.ai
azure https://models.inference.ai.azure.com
openrouter https://openrouter.ai/api/v1
vllm http://localhost:8000
ollama http://localhost:11434
lmstudio http://localhost:1234
acp:codex npx @zed-industries/codex-acp
acp:gemini gemini --experimental-acp
acp:claude npx @zed-industries/claude-agent-acp

사용자 정의 제공업체는 전체 API URL을 사용합니다: --ai-provider=http://my-custom-api:9000.

원본 ACP/에이전트 stderr 로그가 필요하면 NOIR_ACP_RAW_LOG=1을 설정합니다.

작동 방식

flowchart TB
    Start([AI 분석 시작]) --> InitAdapter[LLM 어댑터 초기화]
    InitAdapter --> ProviderCheck{제공자 타입?}

    ProviderCheck -->|OpenAI/xAI/등| GeneralAdapter[General Adapter
OpenAI 호환 API] ProviderCheck -->|Ollama/Local| OllamaAdapter[Ollama Adapter
컨텍스트 재사용] ProviderCheck -->|ACP 에이전트| ACPAdapter[ACP Adapter
Codex/Gemini/Claude/Custom] GeneralAdapter --> FileSelection OllamaAdapter --> FileSelection ACPAdapter --> FileSelection FileSelection[파일 선택] --> FileCount{파일 개수?} FileCount -->|≤ 10개 파일| AnalyzeAll[모든 파일 분석] FileCount -->|> 10개 파일| LLMFilter[LLM 기반 필터링] LLMFilter --> CacheCheck1{캐시 있음?} CacheCheck1 -->|예| UseCached1[캐시된 필터 사용] CacheCheck1 -->|아니오| FilterLLM[FILTER 프롬프트로
LLM 호출] FilterLLM --> StoreCache1[캐시에 저장] UseCached1 --> TargetFiles StoreCache1 --> TargetFiles TargetFiles[선택된 대상 파일] --> BundleCheck{대량 파일 및
토큰 제한?} AnalyzeAll --> BundleCheck BundleCheck -->|예| BundleMode[번들 분석 모드] BundleCheck -->|아니오| SingleMode[단일 파일 모드] BundleMode --> CreateBundles[토큰 제한 내에서
파일 번들 생성] CreateBundles --> ParallelBundles[번들 동시 처리] ParallelBundles --> BundleLoop{각 번들마다} BundleLoop --> CacheCheck2{캐시 있음?} CacheCheck2 -->|예| UseCached2[캐시된 분석 사용] CacheCheck2 -->|아니오| BundleLLM[BUNDLE_ANALYZE
프롬프트로 LLM 호출] BundleLLM --> StoreCache2[캐시에 저장] UseCached2 --> ParseEndpoints1 StoreCache2 --> ParseEndpoints1 ParseEndpoints1[응답에서
엔드포인트 파싱] --> BundleLoop BundleLoop -->|완료| Combine SingleMode --> FileLoop{각 파일마다} FileLoop --> CacheCheck3{캐시 있음?} CacheCheck3 -->|예| UseCached3[캐시된 분석 사용] CacheCheck3 -->|아니오| AnalyzeLLM[ANALYZE 프롬프트로
LLM 호출] AnalyzeLLM --> StoreCache3[캐시에 저장] UseCached3 --> ParseEndpoints2 StoreCache3 --> ParseEndpoints2 ParseEndpoints2[응답에서
엔드포인트 파싱] --> FileLoop FileLoop -->|완료| Combine Combine[모든 엔드포인트 결합] --> LLMOptCheck{LLM 최적화
활성화?} LLMOptCheck -->|예| FindCandidates[최적화 후보 찾기] FindCandidates --> OptLoop{각 후보마다} OptLoop --> OptimizeLLM[OPTIMIZE 프롬프트로
LLM 호출] OptimizeLLM --> ApplyOpt[엔드포인트에
최적화 적용] ApplyOpt --> OptLoop OptLoop -->|완료| FinalResults LLMOptCheck -->|아니오| FinalResults[최종 최적화 결과] FinalResults --> End([종료]) style Start fill:#e1f5e1 style End fill:#e1f5e1 style LLMFilter fill:#fff4e1 style FilterLLM fill:#e1f0ff style BundleLLM fill:#e1f0ff style AnalyzeLLM fill:#e1f0ff style OptimizeLLM fill:#e1f0ff style CacheCheck1 fill:#ffe1e1 style CacheCheck2 fill:#ffe1e1 style CacheCheck3 fill:#ffe1e1 style UseCached1 fill:#e1ffe1 style UseCached2 fill:#e1ffe1 style UseCached3 fill:#e1ffe1

주요 구성 요소

LLM 어댑터 레이어

제공자 독립적 어댑터: General (OpenAI 호환 API), Ollama (서버 측 컨텍스트 재사용), ACP (acp:codex 등 에이전트 런타임).

지능형 파일 필터링

10개 이상의 파일이 있는 프로젝트에서 LLM이 엔드포인트를 포함할 가능성이 높은 파일을 사전 필터링합니다.

번들 분석

파일을 토큰 제한 내의 번들로 묶어 동시 처리하여 대규모 코드베이스의 처리량을 극대화합니다.

응답 캐싱

LLM 응답은 디스크에 캐시됩니다 (SHA256 키). 위치: ~/.local/share/noir/cache/ai/. --cache-disable 또는 --cache-clear로 제어합니다.

LLM 옵티마이저

URL과 파라미터 이름을 정규화하고 RESTful 규칙을 적용하여 엔드포인트 품질을 개선하는 선택적 후처리 단계입니다.

Esc