3~4μ£Όμ°¨κ° μ§νλλ ν κ³Όμ λ₯Ό λ¬Άμ΄μ νλμ λ¬Έμλ‘ μ 리ν΄λ³΄μμ΅λλ€.
1. AI Coding Assitant λꡬ μ‘°μ¬ λ° λΉκ΅ λΆμ
- Amazon CodeWhisperer
- Code
- Cursor
- Tablin
- Codeium
- GitHub Copilot
- replit GhostWriter
1-1. Amazon CodeWhisperer
AWS νκ²½μμμ κ°λ°μ μ΅μ ννλ€λ νΉμ§μ κ°μ§κ³ μλ€.
μ£Όμ νΉμ§ : μλ μμ±, λ€μν νλ‘κ·Έλλ° μΈμ΄ μ§μ, μ£Όμ κΈ°λ° μ½λ μμ±, AWS μλΉμ€μμ ν΅ν©
1-2. Codex
νμ¬ Github Copilot, TabNineλ±κ³Ό κ°μ AI coding assistantλ Third-party extensionsλ‘μ Codexλ₯Ό μ¬μ©(leverage)νκ³ μλ€.
μ£Όμ νΉμ§ : Coding assistantμ νΉνλ λͺ¨λΈμ μ¬μ©, 12κ° μ΄μμ μΈμ΄, μμ°μ΄ μ²λ¦¬
1-3. Cursor
Cursorλ κΈ°μ‘΄ νλ¬κ·ΈμΈ λ°©μμ΄ μλ VS Codeλ₯Ό κΈ°λ°μΌλ‘ λ§λ€μ΄μ§ νΈμ§κΈ°μ΄λ€.
μ£Όμ νΉμ§ : μλ μμ±, μ½λ μμ±, νΈμ§ λ° λ¦¬ν©ν λ§, Chat, μ€μκ° μ€λ₯ κ°μ§ λ° μμ , λ©ν° νμΌ λΆμ
1-4. Tabnine
Tabnineμ μ¬μ©μκ° μ λ ₯νλ μ½λλ₯Ό 곡κ°νμ§ μκ³ μ ν΄μ§ λ²μ μμμ μννΈμ¨μ΄ κ°λ°μ μ½κ³ λΉ λ₯΄κ² ν μ μλ€.
| μ λͺ© | μ£Όμ κΈ°λ₯ | κ°κ²© |
| PRO | μ΅κ³ μ AIλͺ¨λΈ μ μ©, AIμ±ν μμ΄μ νΈ, 보μμ·¨μ½μ νν°λ§, κ°μΈμ 보보νΈ, μμ μκ° μ§μ | μ $12 |
| Enterprise | SaaS λλ On-premiseμμ κ΅¬μΆ κ°λ₯, κ°μΈν AI μ±ν μμ΄μ νΈ, Confluence ν΅ν©, μμ μκ° μ§μ λ° κ΄λ ¨ κ΅μ‘ | μ $39 |
| Basic | 무λ£, AIμ±ν (μλ μ ν) | μ $0 |
1-5. Codeium
μ λ°μ μΌλ‘ Github Copilotμ μ μ¬ν κΈ°λ₯λ€μ μ 곡νλ©΄μ λ¬΄λ£ ν°μ΄λ‘ μ¬μ©ν μ μλ€.
μ£Όμ νΉμ§ : μλ μμ±, μμ°μ΄λ‘ Command μμ±, Chat, μ°ν΄λ¦μΌλ‘ μ΅μ
μ κ·Ό κ°λ₯
1-6. GitHub Copilot
μ£Όμ νΉμ§ : μλ μμ±, Chat, Pull request μμ½
1-7. replit GhostWriter
Replit νλ«νΌμμλ§ μ¬μ©ν μ μμΌλ©°, λ‘컬 κ°λ° νκ²½μμλ μ¬μ©ν μ μλ λμ νμκ³Ό μ€μκ° νμ μ΄ κ°λ₯νλ€λ νΉμ§μ΄ μλ€.
μ£Όμ νΉμ§ : μλ μμ±, νΈμ§ λ° λ¦¬ν©ν λ§, λλ²κΉ
, μ€μκ° νμ
2. Continueμ νΉμ₯μ
Continueλ VSCode, JetBrains λ±μ κ°λ° νκ²½κ³Ό ν΅ν©λμ΄ μ¬μ©μμ μ½λ© μμ
μ μ§μνλ λꡬμ΄λ€.
GitHub Copilotκ³Ό μ μ¬ν κΈ°λ₯μ μ 곡νλ©΄μλ, μμ ν μ€νμμ€ ννλ‘ μ¬μ©μκ° AI λͺ¨λΈμ 컀μ€ν°λ§μ΄μ§ν μ μλ μ μ΄ νΉμ§μ΄λ€.
μ£Όμ νΉμ§ : λ¬Έλ§₯ μΈμ λν, Chat, Command, Customize code, μλ μμ±μ₯μ : μλ λ°μ΄ν° μμ§, μ€νμμ€, 무λ£, λͺ¨λΈ μ νμ μ μ°μ±, 컨ν
μ€νΈ λ€μμ±, νμ₯μ±
[!TIP] λꡬ μ ν κ°μ΄λλΌμΈ λ° μΆμ²
- κ΅μ‘ λ° κΈ°μ μ§μ νμμ±
- νμ¬μμ λμ νκ³ μ ν λμλ μ½λ μ΄μμ€ν΄νΈ μ¬μ© λ°©λ²μ λν κ΅μ‘ λ° μ΄μ μ§μμ λ°μ μ μλ μ½λ μ΄μμ€ν΄νΈλ₯Ό μ νν΄μΌ νλ€.
2. 보μ μμ€ κ²ν
- κ°μΈμ΄ μ·¨λ―Έ λ±μΌλ‘ μ¬μ© μμλ 보μ μ΄μκ° μμ΄ μμ λ‘κ² μ νμ΄ κ°λ₯νκ² μ§λ§ κΈ°μ μμ λμ νλ κ²½μ° μ½λμ μΈλΆ μ μΆ μ°λ €κ° μμΌλ―λ‘ μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ 립μ μΌλ‘ ꡬμ±μ΄ κ°λ₯ν΄μΌ νκ³ , νμ¬μμ μμ±ν μ½λλ₯Ό μ μ₯ λ° κ³΅μ λκ±°λ νμ΅μ μ¬μ©νμ§ μλ μ΄μμ€ν΄νΈλ₯Ό μ νν΄μΌ νλ€.
3. Continue μ€μΉ/μ€μ
VSCode/JetBrains μ€ μ¬μ©νλ IDEμμ κ° μ΅μ€ν μ /νλ¬κ·ΈμΈ νμμ μ€μΉκ° κ°λ₯νλ€.
3-1. Continueμμ μ¬μ©νλ Model μ ν/μ°λ μ ν
- Autocomplete Model
- Chat Model
- Embeddings Model
- Reranking Model
3-1-1. Autocomplete Model
μ€κ° μ±μ°κΈ°-FIM-κΈ°λ²μΌλ‘ νλ ¨λ νΉμν μΈμ΄ λͺ¨λΈ. μ½λ νμΌμ μμκ³Ό λ λΆλΆμ΄ μ£Όμ΄μ‘μ λ μ€κ°μ λ€μ΄κ° λ΄μ©μ μμΈ‘νλλ‘ μ€κ³λ λλΆμ μλμ μΌλ‘ μμ κ·λͺ¨-3B λ§€κ°λ³μ-μ λͺ¨λΈλ‘λ μ°μν μ±λ₯μ λ°νν μ μλ€. (λ°λ©΄, μΌλ°μ μΈ λνν λͺ¨λΈμ κ·λͺ¨κ° λ ν¬λλΌλ μ΄ νΉμ μμ μμλ μ±λ₯μ΄ λ¨μ΄μ§ μ μλ€.)
Continueμμλ μ£Όλ‘ μ½λ μμ± μ μ€μκ°μΌλ‘ μΈλΌμΈ μ μμ μ 곡νλ λ° νμ©λλ€.
[!TIP] μΆμ² λͺ¨λΈ
Continueμμλ μλ μμ± λͺ¨λΈλ‘ Mistralμ Codestral λͺ¨λΈμ μΆμ²νλ©°, λ‘컬 λͺ¨λΈλ‘λ Ollama Providerμ ν¨κ»
Starcoder2-3Bλͺ¨λΈμ μ¬μ©νλ κ²μ κΆμ₯νλ€.
3-1-2. Chat model
- λν νμμΌλ‘ μλ΅νλλ‘ νμ΅λ LLM.
- μΌλ°μ μΈ μ§λ¬Έμ λ΅λ³νκ³ λ³΅μ‘ν μ½λλ₯Ό μμ±ν μ μμ΄μΌ ν΄μ μ΅κ³ μ±λ₯μ μ±ν λͺ¨λΈμ λ³΄ν΅ 405B μ΄μμ λ§€κ°λ³μλ₯Ό κ°μ§ λν λͺ¨λΈμ΄λ€.
- Chat, Edit, Action κΈ°λ₯μ μ¬μ©νλ€.
[!TIP] μΆμ² λͺ¨λΈ
Claude 3.5 Sonnetμ κ°μ₯ μΆμ²νλ©°, λ€λ₯Έ μ΅μ μΌλ‘λ GPT-4o, Gemini 1.5 Pro, Llama3.1 405Bλ₯Ό κΆμ₯νλ€.
3-1-3. Embeddings model
- ν μ€νΈλ₯Ό 벑ν°λ‘ λ³ννλλ‘ νλ ¨λ λͺ¨λΈ.
- μμ±λ 벑ν°λ λμ€μ λ€λ₯Έ 벑ν°λ€κ³Ό λΉ λ₯΄κ² λΉκ΅νμ¬ ν μ€νΈ κ°μ μ μ¬μ±μ νλ¨νλ λ° μ¬μ©λλ€.
- μλ² λ© λͺ¨λΈμ μΌλ°μ μΌλ‘ LLMλ³΄λ€ ν¨μ¬ μμ λͺ¨λΈμ΄λ©°, λ°λΌμ λΉκ΅μ μΌλ‘ λ§€μ° λΉ λ₯΄κ³ μ λ ΄νλ€.
Continueμμλ μΈλ±μ± κ³Όμ μ€μ μλ² λ©μ μμ±νκ³ , μ΄λ₯Ό @codebase κΈ°λ₯μμ νμ©νμ¬ μ½λλ² μ΄μ€ μ 체μ λν μ μ¬μ± κ²μμ μννλ κ²μ ν΅ν΄ κ°μ₯ κ΄λ ¨μ± μλ 컨ν μ€νΈλ₯Ό μν¬μ€νμ΄μ€μμ μλμΌλ‘ κ°μ Έμ¬ μ μλ€.
[!TIP] μΆμ² λͺ¨λΈ
μ΄λ€ λͺ¨λΈμ΄λ μΈ μ μλ€λ©΄ voyage-code-2λ₯Ό μΆμ²νλ©°, λ‘컬 νκ²½μμ μλ² λ©μ μμ±νκ³ μΆλ€λ©΄ Ollamaμ ν¨κ» nomic-embed-textλ₯Ό μ¬μ©νλ κ²μ κΆμ₯νλ€.
μ΄μΈμ Transformers.jsλ₯Ό μ¬μ©ν΄ λ‘컬 μλ² λ©μ μμ±ν μ μμΌλ©°, μ체 μλ² λ© μλν¬μΈνΈλ₯Ό ꡬμΆνκ³ μΆμ κ²½μ° Hugging Face Text Embeddings Inferenceλ₯Ό μ¬μ©ν μ μλ€.
3-1-4. Reranking model
- λ κ°μ ν μ€νΈ-μ£Όλ‘ μ¬μ©μμ μ§λ¬Έκ³Ό λ¬Έμ-λ₯Ό μ λ ₯λ°μ ν΄λΉ λ¬Έμκ° μ§λ¬Έμ λ΅λ³νλ λ° μΌλ§λ μ μ©ν μ§ 0μμ 1 μ¬μ΄μ κ΄λ ¨μ± μ μλ₯Ό λ°ννλλ‘ νλ ¨λ λͺ¨λΈ.
- μΌλ°μ μΌλ‘ LLMλ³΄λ€ ν¨μ¬ μκ³ λΉ λ₯΄κ³ μ λ ΄νλ€.
- @codebase κΈ°λ₯μμ 리λνΉ λͺ¨λΈμ μ¬μ©νλ€.
[!TIP] μΆμ² λͺ¨λΈ
μ΄λ€ λͺ¨λΈμ΄λ μ¬μ©ν μ μλ€λ©΄, Voyage AIμ
rerank-1μ μΆμ²νλ€. νΉμ Cohereμμ μ 곡νλ 리λνΉ λͺ¨λΈμ μ¬μ©ν μλ μλ€.λ§μ½ LLMλ§ μ¬μ©ν μ μλ μνλΌλ©΄ LLM λͺ¨λΈμ 리λνΉ λͺ¨λΈλ‘ μ¬μ©ν μλ μμ§λ§, ν¨μ¬ λΉμΈκ³ μ νλκ° λ¨μ΄μ§λ―λ‘ κΌ νμν κ²½μ°κ° μλλ©΄ κΆμ₯νμ§ μλλ€. κ·Έλ¦¬κ³ λ무 λ§μ λ³λ ¬ μμ²μ μνν΄μΌ νκΈ° λλ¬Έμ Ollamaμ κ°μ λ‘컬 λͺ¨λΈμμλ μ¬μ©ν μ μλ€.
3-2. Continue λͺ¨λΈ μ°λ μ ν
Continueμμ μ¬μ©μλ Providerλ₯Ό μ€μ νμ¬ λͺ¨λΈκ³Ό μ°λν νλ«νΌμ μ ννκ³ , κ° Providerκ° μ 곡νλ AI λͺ¨λΈμ μ νν μ μλ€.
μλΉμ€μ μ£Όμ κΈ°λ₯, μ€ν νκ²½, νΉνλ κΈ°λ₯μ κΈ°μ€μΌλ‘ λ€μκ³Ό κ°μ΄ μ¬μ― κ°μ§ μ νμΌλ‘ λΆλ₯νλ€.
- AI λͺ¨λΈ μ 곡 λ° κ°λ° νλ«νΌ
- ν΄λΌμ°λ AI μλΉμ€
- AI λͺ¨λΈ λ°°ν¬ λ° κ΄λ¦¬ λꡬ
- λ‘컬 AI μ€ν λꡬ
- AI μν¬νλ‘μ° λ° ν΅ν© λꡬ
- νΉνλ AI μλΉμ€
3-2-1. AI λͺ¨λΈ μ 곡 λ° κ°λ° νλ«νΌ
μ체 AI λͺ¨λΈμ κ°λ°νκ³ κ°λ°ν λͺ¨λΈμ λν APIλ₯Ό μ 곡νλ€.
- Mistral
Mistral Large: 볡μ‘ν μμ μ κ°μ₯ μ’μ μΆλ‘ μ΄ κ°λ₯ν λͺ¨λΈλ‘ νκ΅μ΄λ₯Ό ν¬ν¨ν΄ λ€μν μΈμ΄λ₯Ό μ§μνκ³ 128K ν ν°μ νλ²μ μ²λ¦¬ν μ μλ€.(Context window)Codestra Codestra: μ½λ μμ μ μν΄ νλ‘κ·Έλλ° μΈμ΄ 80κ° μ΄μμ λν΄ νμ΅ν λͺ¨λΈλ‘ λ€λ₯Έ λͺ¨λΈλ³΄λ€ μλ΅μ΄ λΉ λ₯΄λ€. 32K ν ν°μ μ²λ¦¬ν μ μλ€.Mistral Embed Mistral Embbed: ν μ€νΈλ₯Ό μΆμΆνκΈ° μν΄ μ¬μ©λλ λͺ¨λΈλ‘μ νμ¬λ μμ΄λ§ μ§μνλ€.
- Anthropic
Haiku: κ°λ³κ³ λΉ λ₯΄κ² μ¬μ©νκΈ° μν λͺ¨λΈSonnet: μ±λ₯κ³Ό μλμ μ μ ν μμ€μ λͺ¨λΈOpus: μ±λ₯μ΄ κ°μ₯ μ°μν λͺ¨λΈλ‘ μ΄λ €μ΄ μνκ³Ό νλ‘κ·Έλλ°μ μ¬μ©νλ λͺ¨λΈ
- Deepseek
- Continueμμλ μ±ν
λͺ¨λΈλ‘
deepSeek-chat, μλ μμ± λͺ¨λΈμλdeepseek-coderμ¬μ©μ μΆμ²νλ©° μλ² λ©, re-Ranking λͺ¨λΈμ μ 곡νμ§ μλλ€.
- Continueμμλ μ±ν
λͺ¨λΈλ‘
- Gemini
- ꡬκΈμ΄ λ§λ AI μ±λ΄
- Continueμμλ μ±ν
λͺ¨λΈλ‘
Gemini 1.5 Pro, μλ² λ© λͺ¨λΈμλmodels/text-embedding-004μ¬μ©μ μΆμ²νλ©° μλμμ±, re-Ranking λͺ¨λΈμ μ 곡νμ§ μλλ€.
- Ollama
- Ollamaλ λ‘컬μμ LLMμ ꡬλν μ μλλ‘ νλ μ€νμμ€μ΄λ€.
- Continueμμλ μ±ν
λͺ¨λΈλ‘
llama3.1:8, μλ μμ± λͺ¨λΈλ‘starcoder2:3b, μλ² λ© λͺ¨λΈλ‘nomic-embed-textλ₯Ό μΆμ²νλ©° re-Rankig λͺ¨λΈμ μ 곡νμ§ μλλ€.
- OpenAI
- Continueμμλ μ±ν
λͺ¨λΈλ‘
GPT-4o, μλ μμ± λͺ¨λΈλ‘starcoder2:3b, μλ² λ© λͺ¨λΈλ‘text-embedding-3-largeλ₯Ό μΆμ²νλ©° re-Rankig λͺ¨λΈμ μ 곡νμ§ μλλ€.
- Continueμμλ μ±ν
λͺ¨λΈλ‘
3-2-2. ν΄λΌμ°λ AI μλΉμ€
λκ·λͺ¨ ν΄λΌμ°λ μ 곡μ μ²΄κ° μ 곡νλ AI λ° λ¨Έμ λ¬λ μλΉμ€μ΄κ³ , λͺ¨λΈ νλ ¨/λ°°ν¬/κ΄λ¦¬λ₯Ό μν μ’ ν©μ μΈ νλ«νΌμ μ κ³΅ν΄ μ£Όλ μλΉμ€μ΄λ€.
λ€μμ λνμ μΈ νλ«νΌ λ κ°μ΄λ€.
- Azure OpenAI
- Microsoftμ¬μ Public Cloud μλΉμ€λ₯Ό μ 곡νλ CSPμ¬
- μ¬λ¬ AI λͺ¨λΈ 곡κΈμ¬λ‘λΆν° λͺ¨λΈμ 곡κΈλ°μ μλΉμ€λ₯Ό νλ ννμ΄λ€.
- Continueμμλ μ±ν
λͺ¨λΈλ‘
GPT-4oλͺ¨λΈμ μΆμ²νλ©° μλ μμ± λͺ¨λΈλ‘Codestral, μλ² λ©μλtext-embedding-3-largeλͺ¨λΈ μ¬μ©μ μΆμ²νλ€. re-Ranking λͺ¨λΈμ μ 곡νμ§ μλλ€.
- Amazon Bedrock
- AWS νκ²½μμ LLMμ κ°λ°νκ³ λ°°ν¬ν μ μλ νλ«νΌ
- Continueμμλ μ±ν
λͺ¨λΈλ‘
Claude 3.5 Sonnetλͺ¨λΈμ μΆμ²νλ©° μλ² λ©μλamazon.titan-embed-text-v2:0λͺ¨λΈ μ¬μ©μ μΆμ²νλ€. μλμμ±, re-Ranking λͺ¨λΈμ μ 곡νμ§ μλλ€.
ν΄λΌμ°λ AI μ¬μ©μ μ₯λ¨μ
- μ₯μ :
ν΄λΌμ°λ AI Providerλ₯Ό μ¬μ©ν κ²½μ°, 물리μ μΈ μΈνλΌλ₯Ό ꡬμΆν νμμμ΄ μ¬μ©νλ§νΌλ§ μ§λΆνλ ꡬ쑰(Pay-as-you-go)λ₯Ό ν΅ν΄ μ΄κΈ° ν¬μ λΉμ©μ ν¬κ² μ κ°ν μ μλ€.
- λ¨μ :
- APIλ₯Ό μ΄μ©ν΄μ λ°μ΄ν°λ₯Ό μ μ‘νκΈ° λλ¬Έμ λ°μ΄ν°κ° μ 3μμ 곡μ λ μ μλ μνμ±μ΄ μ‘΄μ¬νλ€. (λ¬Όλ‘ OpenAI μν°νλΌμ΄μ¦ κ³ κ°μ λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ μλΉμ€ κ°μ μ΄λ λͺ¨λΈ νλ ¨μ μ¬μ©νμ§ μκ² λ€κ³ λͺ μνλ λ± λ³΄νΈ μ‘°μΉκ° μ‘΄μ¬νλ€.)
- μ₯κΈ°μ μΌλ‘λ μ¬μ©λμ΄ μ¦κ°νλ©΄ μ§μμ μΌλ‘ λ°μνλ λΉμ©μ΄ λ λ€ μλ μλ€.
3-2-3. AI λͺ¨λΈ λ°°ν¬ λ° μλ²λ¦¬μ€ νλ«νΌ
Cloudflare Workers AIHuggingFace Inference EndpointsDeepInfraTogethervLLM
3-2-4. λ‘컬 AI μ€ν λꡬ
- Ollama
- LlamaCpp
- LlamaFile
- LM Studio
- TextGenWebUI
3-2-5. AI μν¬νλ‘μ° λ° ν΅ν© λꡬ
AI λͺ¨λΈμ κΈ°μ‘΄μ μμ€ν μ΄λ μν¬νλ‘μ°μ μ½κ² ν΅ν©ν μ μκ² ν΄μ£Όλ λꡬμ΄λ©° ν΄λΉ μ νμ μλΉμ€λ€μ AI κΈ°μ μ μ κ·Όμ±μ λμ΄κ³ νμ©λλ₯Ό μ¦κ°μν¨λ€.
- flowise
- Kindo
3-2-6. νΉνλ AI μλΉμ€
νΉμ λΆμΌλ κΈ°μ μ νΉνλ AI μλΉμ€. λ©ν°λͺ¨λ¬ AI, κ³ μ±λ₯ μΆλ‘ , νλμ¨μ΄ μ΅μ ν λ± νΉμ λμ¦λ₯Ό μΆ©μ‘±μν€λ μ루μ μ μ 곡νλ€.
- Gemini
- Groq
- IPES LLM
- Replicate
3-3. Free-Trial
Continueλ μλ Chat Modelμ λν΄ μ΅λ 50ν μ¬μ© κ°λ₯ν Free-Trialμ μ 곡νλ€.
- Claude 3 Sonnet
- GPT-4o
- Llama3 70b
- Codestral
"models": [
{
"title": "Claude 3 Sonnet (Free Trial)",
"provider": "free-trial",
"model": "claude-3-sonnet-20240229"
},
],
4. LLM completion options & continueμμ μ€μ νκΈ°, ν¨κ³Όμ μΈ ν둬νν (system, user)
LLM μ΄λ ?
"λκ·λͺ¨ μΈμ΄ λͺ¨λΈ"λ‘, κ΅μ₯ν λ§μ λ°μ΄ν°λ₯Ό νμ΅ν AI λͺ¨λΈ. λνμ μΈ LLMμ ChatGPTκ° μλ€.
LLM Completion Options λ ?
μΈμ΄ λͺ¨λΈμ΄ ν μ€νΈλ₯Ό μμ±νλ λ°©μμ μ‘°μ νλ μ€μ λ€λ‘, μΆλ ₯λλ ν μ€νΈμ κΈΈμ΄, λ€μμ±, μΌκ΄μ± λ±μ μν₯μ λ―ΈμΉλ€. λ¨, κ° λͺ¨λΈλ€μ΄ μ§μνλ Optionλ€λ μ½κ°μ© μμ΄νλ©° λμΌν κ°μ μ£ΌλλΌλ λͺ¨λΈλ§λ€ μλ΅ λ³νμ νΈμ°¨κ° μμ μ μλ€.
4-1. Continueμμ completionOption μ€μ νλ λ²
Continueμμ Completion Optionsλ₯Ό μμ νκ³ μΆλ€λ©΄ config.jsonλ₯Ό ν΅ν΄ μμ ν΄μΌ νλ€.
"completionOptions": {
"stream": "boolean",
"teperature": "number",
"topP": "number",
"topK": "integer",
"presencePenalty": "number",
"frequencePenalty": "number",
"mirostat": "number",
"stop": "string[]",
"maxTokens": "number",
"numThreads": "integer",
"keepAlive": "integer",
}
stream: LLM μλ΅μ streamingμΌλ‘ λ°μμ§ μ ννλ μ΅μ temperature: λͺ¨λΈμ΄ μμ±νλ μλ΅μ μ°½μμ±μ΄λ λλ€μ±μ μ‘°μ topP: LLMμμ μμ±ν λ¨μ΄λ₯Ό μ ννλ κ³Όμ μμ νλ₯ λΆν¬ μμ P%μ λ¨μ΄λ€λ§ μ ννμ¬ μλ΅μ μμ±νλ λ°©μ.topK: LLMμμ μλ΅μ μμ±ν λ κ³ λ €ν ν보 λ¨μ΄λ€μ κ°μλ₯Ό μ ννλ μ΅μ presencePenalty: λͺ¨λΈμ΄ μ΄λ―Έ μΈκΈν λ¨μ΄λ₯Ό λ€μ μ¬μ©νλ κ²μ μΌλ§λ μ΅μ ν μ§ μ‘°μ νλ μ΅μ frequencePenalty: λ¨μ΄μ λΉλλ₯Ό μ΅μ νκ±°λ νμ©ν μ μμΌλ©°, λͺ¨λΈμ΄ κ°μ λ¨μ΄λ 문ꡬλ₯Ό λ°λ³΅μ μΌλ‘ μ¬μ©νμ§ μλλ‘ μ μ΄νλ μ΅μ mirostat: LLMμμ μ€μκ°μΌλ‘ μλ΅μ μΌκ΄μ±κ³Ό νμ§μ μ§μμ μΌλ‘ μ‘°μ νκΈ° μν λμ μνλ§ μκ³ λ¦¬μ¦stop: λͺ¨λΈμ΄ ν μ€νΈλ₯Ό μμ±νλ λμ€ νΉμ ν ν°μ΄λ λ¬Έμμ΄μ΄ λ±μ₯νλ©΄ μλ΅ μμ±μ μ€λ¨νλ μ΅μ maxTokens: λͺ¨λΈμ΄ νλμ ν둬ννΈμ λν΄ μλ΅ν λ μμ±ν ν μ€νΈμ κΈΈμ΄λ₯Ό μ νnumThreads: μμ± κ³Όμ μμ μ¬μ©λλ μ€λ λμ μλ₯Ό μ‘°μ νλ μ΅μ keepAlive: μμ²μ΄ μλ κ²½μ° λͺ¨λΈμ λ©λͺ¨λ¦¬μμ μΈλ‘λνκΈ°κΉμ§μ μκ°. (κΈ°λ³Έ κ°:60 * 30 = 30λΆ)
4-1-1. config.json > completionOption
μ μμ μΌλ‘ μ€μ νλ λ°©λ². μ¬κΈ°μ μ€μ ν completionOption κ°λ€μ λͺ¨λΈμ μκ΄μμ΄ Continueμμ λͺ¨λ μμ
μ λμΌνκ² μ μ©λλ€.
{
"completionOptions": {
"temperature": 0.7,
"topP": 0.9,
"maxTokens": 150
}
}
4-1-2. config.json > models > completionOptions
λͺ¨λ λͺ¨λΈμ λν κΈ°λ³Έκ°μ΄ μλλΌ νΉμ λͺ¨λΈμ λν μ€μ μ λ³λλ‘ μ μνκ³ μΆμ λ μ¬μ©νλ€.
μλ₯Ό λ€λ©΄ Mstyμ gpt-4o-miniμ κ°κ° λ€λ₯Έ completionOptions μ€μ μ λΆμ¬ν μλ μλ€.
{
"models": [
{
"title": "Msty",
"provider": "msty",
"model": "deepseek-coder:6.7b",
"completionOptions": {
"temperature": 0.9,
"topP": 0.7,
"maxTokens": 100
}
},
{
"title": "GPT-4o Mini",
"provider": "openai",
"model": "gpt-4o-mini",
"completionOptions": {
"temperature": 0.6,
"topP": 0.8,
"maxTokens": 200
}
}
]
}
4-2. Context Provider 컀μ€ν νκΈ°
Context Provider λ ?
LLMμ νΉμ ν μ½ν
μΈ λ₯Ό μ 곡νλ κΈ°λ₯μΌλ‘, @λ₯Ό μ
λ ₯νλ©΄ LLMμ contextλ‘ μ 곡ν μ μλ μ½ν
μΈ λλ‘λ€μ΄-LLMμκ² μ 곡λλ μΆκ° μ 보(νμΌ λ΄μ©, νλ‘μ νΈ μ½λ, κΉ λ³κ²½ μ¬ν, κΉ μ΄μ, ν°λ―Έλ μΆλ ₯, μΉ νμ΄μ§ λ΄μ©, λ¬Έμ λ±)-μ λ³Ό μ μλ€.
Continueλ κΈ°λ³Έμ μΌλ‘ μλμ κ°μ built-in context providerλ₯Ό μ 곡νλ€.
"contextProviders": [
{
"name": "code",
"params": {}
},
{
"name": "docs",
"params": {}
},
{
"name": "diff",
"params": {}
},
{ "name": "open", "params": { "onlyPinned": true } },
{
"name": "issue",
"params": {
"repos": [
{
"owner": "continuedev",
"repo": "continue"
}
],
"githubToken": "ghp_xxx"
}
}
...
]
Built-in Context Providers :
@file: νμ¬ μν¬μ€νμ΄μ€μ νμΌμ contextλ‘ μ 곡.@code: νλ‘μ νΈ λ΄ νΉμ ν¨μλ ν΄λμ€λ₯Ό contextλ‘ μ 곡.@Git Diff: νμ¬ λΈλμΉμ λ³κ²½ μ¬νμ contextλ‘ μ 곡.@terminal: IDEμ ν°λ―Έλ λ΄μ©μ contextλ‘ μ 곡.@open: νμ¬ μ΄λ € μλ νμΌμ λ΄μ©λ€μ contextλ‘ μ 곡.@folder: νμ¬ μν¬μ€νμ΄μ€μ ν΄λλ₯Ό contextλ‘ μ 곡.@codebaseμ λμΌν κ²μ λ©μ»€λμ¦μ μ¬μ©νμ§λ§ λ¨μΌ ν΄λμμλ§ κ²μν μ μλ€.@codebase: μν¬μ€νμ΄μ€ μ 체μμ κ°μ₯ κ΄λ ¨μ± λμ μ½ν μΈ λ₯Ό μλμΌλ‘ κ°μ Έμ¬ μ μλλ‘ codebase λ₯Ό μμΈν@url: νΉμ URLμ λ΄μ©μ markdown νμμΌλ‘ contextλ‘ μ 곡.@issue: GitHub issueμ λνλ₯Ό contextλ‘ μ 곡 (κ°μΈ μ κ·Ό ν ν° νμ).@docs: Continueμμ λ¬Έμμ μνΈ μμ©ν μ μκ² ν΄μ€. μ μ μ¬μ΄νΈλ GitHub νμ΄μ§λ₯Ό μμΈννμ¬ μ½κ² μ κ·Ό κ°λ₯.
Custom Context Provider
λͺ¨λ Context Providerλ νλ¬κ·ΈμΈμΌλ‘, κΈ°λ³ΈμΌλ‘ μ 곡νλ νλ¬κ·ΈμΈ μΈμλ νμν μμ€λ₯Ό μ 곡νμ§ μλ κ²½μ° μλ‘μ΄ Context Providerλ₯Ό μμ² νΉμ κ°λ°ν μ μκ³ , REST APIλ₯Ό ν΅ν΄ μΈλΆ λ°μ΄ν°λ² μ΄μ€μμ μ 보λ₯Ό κ²μνκ³ κ²°κ³Όλ₯Ό λ°μ CustomContextProviderλ₯Ό ꡬνν μ μλ€.
context providerμ 3κ°μ§ μ’
λ₯(ContextProviderType) :
- normal: κΈ°λ³Έ μ€μ . λ³λμ μ ν(submenu) λ° μΏΌλ¦¬ μμ΄ μ¬μ© κ°λ₯
- query: μ μ κ° ν
μ€νΈ λ°μ€λ‘ μ
λ ₯νμ¬ context νλͺ© μμ±.
"type": "query"λ‘ μ€μ - submenu: μ μ κ° μ νν μ μλ νλͺ©μ μ 곡.
"type": "submenu"λ‘ μ€μ ν΄μΌ νλ©°,loadSubmenuItemsμgetContextItemsλͺ¨λ ꡬνν΄μΌ νλ€
// ~/.continue/config.ts
interface CustomContextProvider {
title: string;
displayTitle?: string;
description?: string;
renderInlineAs?: string;
type?: ContextProviderType;
getContextItems(
query: string,
extras: ContextProviderExtras
): Promise<ContextItem[]>;
loadSubmenuItems?: (
args: LoadSubmenuItemsArgs
) => Promise<ContextSubmenuItem[]>;
}
const RagContextProvider: CustomContextProvider = {
title: "rag",
displayTitle: "RAG",
description:
"Retrieve snippets from our vector database of internal documents",
getContextItems: async (
query: string,
extras: ContextProviderExtras
): Promise<ContextItem[]> => {
const response = await fetch("https://internal_rag_server.com/retrieve", {
method: "POST",
body: JSON.stringify({ query }),
});
const results = await response.json();
return results.map((result) => ({
name: result.title,
description: result.title,
content: result.contents,
}));
},
};
export function modifyConfig(config: Config): Config {
if (!config.contextProviders) {
config.contextProviders = [];
}
config.contextProviders.push(RagContextProvider);
return config;
}
4-3. Custom slash commands
4-3-1. .prompt νμΌ μμ±νκΈ°
- μν¬μ€νμ΄μ€ μ΅μλ¨μ
.prompts/ν΄λλ₯Ό μ§μ μμ±νκ±°λ, chat box λ°μ Build a custom promptλ₯Ό λλ₯΄λ©΄ μν¬μ€νμ΄μ€ μ΅μλ¨μ.promptsλΌλ ν΄λκ° μμ±λλ€. .promptsν΄λμμ μμ±ν .prompt νμΌμ μ΄λ¦μ ν둬ννΈλ₯Ό μμ±νλ λ° μ¬μ©ν μ¬λμ λͺ λ Ήμ΄μ μ΄λ¦μ΄ λλ€. ( e.g.,test.prompt⇒/test)- νμΌμ ν둬ννΈ λ΄μ©μ μμ±νλ©΄ chat νλ©΄μμ μ¬λμ(/)+ ν둬ννΈνμΌλͺ + ENTERλ₯Ό ν΅ν΄ ν둬ννΈμμ μ§μν λ΄μ©μ λ°λ₯΄κ² λλ€.
temperature: 0.5
maxTokens: 4096
---
<system>
You will be acting as a senior software engineer helping a colleague document their code.
</system>
You will follow the guidelines for writing great code comments:
{{{ url "https://stackoverflow.blog/2021/12/23/best-practices-for-writing-code-comments/" }}}
---
Using this information, write a comment for the following code:
{{{ input }}}
- μλ¬Έ
- System νκ·Έ
- Context Provider
- λ΄μ₯ λ³μ : νμ¬ μ¬μ© κ°λ₯ν κΈ°λ³Έ μ 곡 λ³μλ λ€μκ³Ό κ°μ΅λλ€.
{{{ input }}},{{{ currentFile }}},{{{ ./path/to/file.js }}}
4-3-2. μμ°μ΄ ν둬ννΈ (customCommands μμ±, config.json)
config.json νμΌμ customCommands μμ±μ μΆκ°νλ κ²μΌλ‘, μμ°μ΄λ‘ μμ±λ λͺ
λ Ήμ΄λ₯Ό μ μνλ custom slash commandsλ₯Ό λ§λ€ μ μλ€.
customCommands=[{
"name": "check",
"description": "Check for mistakes in my code",
"prompt": "{{{ input }}}\n\nPlease read the highlighted code and check for any mistakes. You should look for the following, and be extremely vigilant:\n- Syntax errors\n- Logic errors\n- Security vulnerabilities\n- Performance issues\n- Anything else that looks wrong\n\nOnce you find an error, please explain it as clearly as possible, but without using extra words. For example, instead of saying 'I think there is a syntax error on line 5', you should say 'Syntax error on line 5'. Give your answer as one bullet point per mistake found."
}]
name: μ¬λμ λͺ λ Ήμ νΈμΆνλ λ° μ λ ₯ν μ΄λ¦description: λλ‘λ€μ΄ λ©λ΄μ νμλλ μ€λͺprompt: Handlebars ꡬ문μ μ¬μ©ν ν νλ¦Ώ μμ±μ μ§μinput: μ¬λμ λͺ λ ΉμΌλ‘ μ λ ₯ν μΆκ° μ λ ₯.file name: μ λ κ²½λ‘λ νμ¬ μμ λλ ν 리λ₯Ό κΈ°μ€μΌλ‘ ν μλ κ²½λ‘λ₯Ό μ 곡νμ¬ λͺ¨λ νμΌμ μ°Έμ‘°ν μ μμ΅λλ€.
4-3-3. ν¨μλ₯Ό μμ±νλ ν둬ννΈ (slashCommands μμ±, config.ts)
customCommandsλ‘ μ¬μ©μ μ§μ λͺ
λ Ήμ μμ±νλ κ²λ³΄λ€ ν λ¨κ³ λ λμκ°λ €λ©΄ μλ΅μ λ°ννλ μ¬μ©μ μ§μ ν¨μλ₯Ό μμ±ν μ μμ΅λλ€.
μ΄λ₯Ό μν΄μλ config.json λμ config.tsλ₯Ό μ¬μ©ν΄μΌ νλλ°, μ΄κ³³μμ slashCommands λ°°μ΄μ μλ‘μ΄ slashCommand κ°μ²΄λ₯Ό μΆκ°ν©λλ€.
export function modifyConfig(config: Config): Config {
config.slashCommands?.push({
name: "commit",
description: "Write a commit message",
run: async function* (sdk) {
const diff = await sdk.ide.getDiff();
for await (const message of sdk.llm.streamComplete(
`${diff}\n\nWrite a commit message for the above changes. Use no more than 20 tokens to give a brief description in the imperative mood (e.g. 'Add feature' not 'Added feature'):`,
{
maxTokens: 20,
}
)) {
yield message;
}
},
});
return config;
}
4-4. ν¨κ³Όμ μΈ ν둬ννΈ μμ§λμ΄λ§
4-4-1. LLMμ μλ΅μ νμ§μ λμ± ν₯μμν€κΈ°
μ¬μ©μλ ν둬ννΈ λμμΈμ λ€μν μ λ΅κ³Ό κΈ°λ²μ ν΅ν΄ ν¨κ³Όμ μΌλ‘ μ§λ¬Έν¨μΌλ‘μ¨, LLMμ μ±λ₯μ μ΅μ ννμ¬ λ λμ μλ΅ κ²°κ³Όλ₯Ό λμΆν μ μλ€.
- μ§λ¬ΈνκΈ° μ μκ° κ΅¬μ‘°ννκΈ°
- μ§λ¬Έμ νκΈ° μ μ μκ°μ μ°κ²°κ³ 리(Chain-of-Thought, CoT)λ₯Ό ν΅ν΄ λλ΅μ μ λ
"μ°¨κ·Όμ°¨κ·Ό λ¨κ³μ μΌλ‘ μκ°ν΄ μ€"
- μ§λ¬Έμ νκΈ° μ μ μκ°μ μ°κ²°κ³ 리(Chain-of-Thought, CoT)λ₯Ό ν΅ν΄ λλ΅μ μ λ
- ν둬ννΈμκ² νλ₯΄μλ λΆμ¬νκΈ°
- ν둬ννΈμκ² μν , λ§₯λ½κ³Ό λ°°κ²½μ λΆμ¬
"λλ ~ μν μ΄κ³ , λλ μ΄λ¬ν λ΅λ³μ΄ νμν ~ μ¬λμ΄μΌ."
- λ΅λ³ λμ΄λλ₯Ό κ²°μ νλ 문체λ₯Ό μ§μ
"μ‘Έμ λ Όλ¬Έμ μμ±ν μ μμ μ λλ‘ μ λ¬Έμ μΌλ‘ μλ €μ€" λλ "μ΄λ±νμλ μ½κ² μ΄ν΄ν μ μμ μ λλ‘ μ€λͺ ν΄μ€"
- ν둬ννΈμκ² μν , λ§₯λ½κ³Ό λ°°κ²½μ λΆμ¬
- λͺ
ννκ³ κ΅¬μ²΄μ μΌλ‘ μ§μνκΈ°
- λ²μλ₯Ό μ’νμ μ§λ¬Έ
- μ΄λ€ ν¬λ§·μΌλ‘ μΆλ ₯ν μ§ λͺ μ
- μ΄λ€ λ°©λ²μΌλ‘ μΆμΆν μ§ λͺ
νν μ§μ
"300μ μ΄λ΄μ μλ‘ , λ³Έλ‘ , κ²°λ‘ μΌλ‘ μλ €μ€", "νλ‘ μλ €μ€", "~ κ΄λ ¨ν΄μ 10κ°μ§λ₯Ό μλ €μ€"
- μμ΄λ‘ λ²μν΄μ μ§λ¬ΈνκΈ°
- λλΆλΆμ AIκ° μμ΄λ₯Ό κΈ°λ°μΌλ‘ μμ±λμκΈ° λλ¬Έμ μμ΄λ‘ μ§λ¬Έν λ λ΅λ³μ ν리ν°κ° λ μ’μ λκ° λ§λ€.
- 보μ μ μνκΈ°
- μ§λ¬Έμ μλ΅ν λ λκΈ°λ₯Ό λΆμ¬νκΈ° μν΄ λ³΄μμ μ μ
"μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ©΄ λ€μ λ¨κ³λ‘ λμ΄κ° μ μμ΄."
- μ§λ¬Έμ μλ΅ν λ λκΈ°λ₯Ό λΆμ¬νκΈ° μν΄ λ³΄μμ μ μ
- μ²λ² μΈκΈνκΈ°
- μλ΅μ΄ μκ±°λ λΆμ νν κ²½μ°μ κ²°κ³Όλ₯Ό μΈκΈνμ¬ μ νν μλ΅μ μ λ
"λ΅λ³μ΄ ν리면 μκ°μ΄ λλΉλ κ±°μΌ."
- μλ΅μ΄ μκ±°λ λΆμ νν κ²½μ°μ κ²°κ³Όλ₯Ό μΈκΈνμ¬ μ νν μλ΅μ μ λ
- μμ°μ€λ¬μ΄ λν μ λνκΈ°
- μΈκ°μ μΈ λν μ€νμΌμ μ λνμ¬ λ³΄λ€ λ μμ°μ€λ¬μ΄ λ΅λ³μ μμ²
"μΉκ·Όνκ² μ΄μΌκΈ°νλ― μ€λͺ ν΄ μ€."
- μΈκ°μ μΈ λν μ€νμΌμ μ λνμ¬ λ³΄λ€ λ μμ°μ€λ¬μ΄ λ΅λ³μ μμ²
- μ 보 μΆ©λΆν μꡬνκΈ°
- μ§λ¬Έμ΄ λΆμμ ν κ²½μ° λ λ§μ μ 보λ₯Ό μμ²
"λ λ§μ μΈλΆμ¬νμ μ κ³΅ν΄ μ€ μ μμ΄?"
- μ§λ¬Έμ΄ λΆμμ ν κ²½μ° λ λ§μ μ 보λ₯Ό μμ²
- ν
μ€νΈ ν¬ν¨ μμ²νκΈ°
- μμ±λ λ΅λ³μ ν
μ€νΈν μ μλ νμμΌλ‘ μ 곡
"μ΄ μ½λλ₯Ό μ€ν κ°λ₯ν μνλ‘ μ κ³΅ν΄ μ€."
- μμ±λ λ΅λ³μ ν
μ€νΈν μ μλ νμμΌλ‘ μ 곡
- κ΅¬λΆ κΈ°νΈ μ¬μ©νκΈ°
- νΉμ λ¨μ΄λ₯Ό κ°μ‘°νκ±°λ ꡬ쑰νλ λ΅λ³μ μμ²ν λ κ΅¬λΆ κΈ°νΈλ₯Ό μ¬μ©
"κ° νλͺ©μ '•' κΈ°νΈλ‘ ꡬλΆν΄μ λμ΄ν΄ μ€."
- νΉμ λ¨μ΄λ₯Ό κ°μ‘°νκ±°λ ꡬ쑰νλ λ΅λ³μ μμ²ν λ κ΅¬λΆ κΈ°νΈλ₯Ό μ¬μ©
- λ¨μ΄ λ°λ³΅ μ¬μ©νκΈ°
- νΉμ λ¨μ΄λ₯Ό κ°μ‘°νκ±°λ μ£Όμ κ°λ
μ λ°λ³΅νμ¬ μ€λͺ
νλλ‘ μμ²
"μ΄ κ°λ μ μ¬λ¬ λ² λ°λ³΅ν΄μ κ°μ‘°ν΄ μ€."
- νΉμ λ¨μ΄λ₯Ό κ°μ‘°νκ±°λ μ£Όμ κ°λ
μ λ°λ³΅νμ¬ μ€λͺ
νλλ‘ μμ²
- μΆλ ₯λ¬Έ ν¬ν¨νκΈ°
- λ΅λ³μ΄ νΉμ νμμΌλ‘ μΆλ ₯λλλ‘ μ§μ
"μ΄ μ½λλ₯Ό μΆλ ₯ νμμΌλ‘ μμ±ν΄ μ€."
- λ΅λ³μ΄ νΉμ νμμΌλ‘ μΆλ ₯λλλ‘ μ§μ
- μμΈν λ΄μ© μμ²νκΈ°
- λ ꡬ체μ μΈ μ 보λ₯Ό ν¬ν¨νμ¬ κΈμ μμ±νλλ‘ μμ²
"μ’ λ μμΈνκ² μ€λͺ ν΄ μ€."
- λ ꡬ체μ μΈ μ 보λ₯Ό ν¬ν¨νμ¬ κΈμ μμ±νλλ‘ μμ²
- μμ μμ²νκΈ°
- μ΄λ―Έ μμ±λ λ΄μ©μ μμ νμ¬ λ λμ κ²°κ³Όλ₯Ό μꡬ
"μ΄ λ΄μ©μ λ κ°κ²°νκ² λ€λ¬μ΄ μ€."
- μ΄λ―Έ μμ±λ λ΄μ©μ μμ νμ¬ λ λμ κ²°κ³Όλ₯Ό μꡬ
- μ½λ μμ± μμ²νκΈ°
- μ¬λ¬ νμΌμ κ±ΈμΉ μ½λλ₯Ό μμ±νκ±°λ νΉμ κ΅¬μ‘°λ‘ μ 곡
"μ΄ μ½λμ κ° ν¨μλ λ³λμ νμΌλ‘ λΆλ¦¬ν΄ μ€."
- μ¬λ¬ νμΌμ κ±ΈμΉ μ½λλ₯Ό μμ±νκ±°λ νΉμ κ΅¬μ‘°λ‘ μ 곡
- νΉμ ν
μ€νΈλ‘ μμνκΈ°
- μ£Όμ΄μ§ ν
μ€νΈλ 문ꡬλ₯Ό λ°νμΌλ‘ λ΅λ³μ μμ²
"μ΄ λ¬Έμ₯μ λ°νμΌλ‘ μΆκ° μ€λͺ μ μμ±ν΄ μ€."
- μ£Όμ΄μ§ ν
μ€νΈλ 문ꡬλ₯Ό λ°νμΌλ‘ λ΅λ³μ μμ²
- μꡬ μ¬ν λͺ
μνκΈ°
- ν
μ€νΈλ μ½λ μμ±μ νμν νΉμ μꡬ μ¬νμ λͺ
νν μ§μ
"μ΄ μꡬ μ¬νμ λ§μΆ° ν μ€νΈλ₯Ό μμ±ν΄ μ€."
- ν
μ€νΈλ μ½λ μμ±μ νμν νΉμ μꡬ μ¬νμ λͺ
νν μ§μ
- μ 곡λ μμ κΈ°λ° ν
μ€νΈ μμ±
- μ 곡λ μμμ μ μ¬ν μ€νμΌμ΄λ νμμΌλ‘ ν
μ€νΈλ₯Ό μμ±νλλ‘ μμ²
"μ΄ μμμ κ°μ νμμΌλ‘ ν μ€νΈλ₯Ό μμ±ν΄ μ€."
- μ 곡λ μμμ μ μ¬ν μ€νμΌμ΄λ νμμΌλ‘ ν
μ€νΈλ₯Ό μμ±νλλ‘ μμ²
4-4-2. Continueμ ν¨κ» κ°λ°μ νμ©νλ λ²
- @Codebases, @Files
- νΉμ ν¨μ λ΄μ© λ± μ½λ λΆμ
- λ²κ·Έλ μλ¬ μ°ΎκΈ°
- Comment
- μ£Όμ μμ±
- @Docs
- 곡μ λ¬Έμ μμ λ₯Ό λ°λ‘ μ°Έκ³ νμ¬ μμ±
- /Build a custom propmpt or command
- ν μ€νΈ μΌμ΄μ€ μμ± λ° κ²μ¬
- λ°λ³΅ν΄μΌ νλ μμ μ μλν
- /Chat, /Autocomplete
- κ°λ° λ¬Έμλ μμ μ΄μ μμ±
μ΄κΈ° μ§λ¬Έ μ§μμ¬νμ μ΄λ»κ² μ£Όλλμ λ°λΌ μκ°κ³Ό λΉμ©μ΄ ν¬κ² μ°¨μ΄λκΈ° λλ¬Έμ λ΄κ° λͺ¨λ₯΄λ κ²μ΄ 무μμ΄κ³ , μ΄λ»κ² μ λμμ λ°μ μ μμμ§μ λν 'λ©ν μΈμ§'κ° νμνλ€.
μ°Έκ³ μλ£
- ChatGPTμκ²μ μ’μ λλ΅μ μ΄λμ΄ λ΄λ λ°©λ² 7κ°μ§
- μ’μ μ§λ¬Έμ νλ λ°©λ², ꡬ쑰ν λ°©λ²
- Principled Instructions Are All You Need for Questioning
- ATLAS: An LLM Inquiry Principle Benchmark
5. Chat, Autocomplete
5-1. Chat
5-1-1. Chat_μ½λ νμ΄λΌμ΄ν
μ½λ λΈλ‘μ΄ νμν ꡬ문μ λλκ·Έν λ€, cmd/ctrl+L(VS Code) νΉμ md/ctrl+L(JetBrains)λ₯Ό μ΄μ©νμ¬ λν μμ ν¬ν¨νλ€.
[!TIP] π₯ ν€λ³΄λ μμ»· μΆ©λλ‘ cmd+L μΈμμ΄ μ λλ κ²½μ°
- 1)
shift+cmd+Lλ₯Ό μλ- 2)
μ½λ λλκ·Έ ν → μ°ν΄λ¦ → Continue → Add Highlighted Code to Contextμλ
5-1-2. λ νΌλ°μ€νκΈ°
@λ₯Ό μ΄μ©ν΄ μ½λλ² μ΄μ€, λ¬Έμ, IDE, νΉμ third-partyμ μ 보λ₯Ό 컨ν
μ€νΈμ ν¬ν¨μν¬ μ μλ€.
5-1-3. μ μ μ½λ μ μ©νκΈ°
μ μ© λ°©μμ μ½λ λΈλ μ°μΈ‘ μλ¨ μμ΄μ½μ λ°λΌ μ νν μ μλ€.
- Apply to current file
- Insert at cursor
- Copy
5-1-4. μλ‘μ΄ μΈμ μμνκΈ°
cmd/ctrl+L(VS Code) νΉμ md/ctrl+L(JetBrains)μΌλ‘ μλ‘μ΄ μΈμ
μ΄ μμλλ€.
5-1-5. λͺ¨λΈ λ³κ²½νκΈ°
λλ‘λ€μ΄μ μ¬μ©νκ±°λ cmd/ctrl + ’ μ μ
λ ₯νμ¬ μ€μΉν λͺ¨λΈμ μ νν μ μλ€.
5-1-6. Chat_Model Setup
[!NOTE]
μ λ°μ μΈ μ±ν νκ²½μ μ΅μ ννλ €λ©΄ 400B+ λ§€κ° λ³μ λͺ¨λΈ λλ νλ‘ ν°μ΄ λͺ¨λΈ μ€ νλλ₯Ό μ¬μ©νλ κ²μ μΆμ²νλ€.
- νλ‘ ν°μ΄ AI: κ³ λνλ, κ³ μ±λ₯ λͺ¨λΈ
- Continue 곡μ κΆμ₯ λͺ¨λΈ: Claude Sonnet 3.5 (Anthropic)
open-weight/open-source model
- open-weight model: λ§λλ λ², λͺ¨λΈ ꡬ쑰, μ¬μ©ν λ°μ΄ν° μ λ° λ΄μ© λͺ¨λλ₯Ό 곡κ°νμ§ μκ³ μμ±λ λͺ¨λΈ
- open source model: λ§λλ λ², λͺ¨λΈ ꡬ쑰, μ¬μ©ν λ°μ΄ν° λ± λͺ¨λΈκ³Ό κ΄λ ¨λ λλΆλΆμ λ΄μ©μ 곡κ°νμ¬ κ³΅μ νλ λͺ¨λΈ
5-1-7. Chat_Context Selection
[!NOTE]
μ±ν μ μ¬μ©μκ° νμ¬ μμ μ€μΈ 컨ν μ€νΈ(context)λ₯Ό μ νν μ μλ€. μ±ν μ μλ΅ μ νλλ₯Ό λμ΄λ €λ©΄ 컨ν μ€νΈλ₯Ό μ κ΄λ¦¬ν΄μΌ νλ€.
- 컨ν
μ€νΈ κ΄λ¦¬
- μλ 컨ν μ€νΈ: νλ‘μ νΈ νμΌ, μ½λλ² μ΄μ€ λ±μ μ 보λ₯Ό μλμΌλ‘ 컨ν μ€νΈλ‘ ν¬ν¨ν μ μλ€.
- μλ 컨ν μ€νΈ: νμν κ²½μ° μ¬μ©μκ° μ§μ 컨ν μ€νΈλ₯Ό μ§μ ν΄ AIμ μλ΅μ μ‘°μ ν μ μλ€.
- μμ μ€μΈ νμΌμ΄λ μ½λλ² μ΄μ€λ₯Ό μ νν μ€μ ν΄ λλ©΄ κ΄λ ¨λ λ΄μ©μ λ μ ννκ² λ΅ν μ μλ€.
- λΆνμν 컨ν μ€νΈλ₯Ό μ΅μννλ κ²μ΄ μ€μ
μ λ ₯ μ¬λ³Ό
[!NOTE]
μ λ ₯μ°½μ μ§λ¬Ένλ κ²μ΄ μ μΌν νμ 컨ν μ€νΈμ΄κ³ κ·Έ μΈμ λλ¨Έμ§λ μ ν μ¬ν
- νμ΄λΌμ΄ν
μ½λ λΈλ:
cmd/ctrl + L(VS Code)λλcmd/ctrl + J(JetBrains) - νμ¬ μ€ν νμΌ:
cmd/ctrl + opt + enter - νΉμ νμΌ:
@files - νΉμ ν΄λ:
@directory - μ 체 μ½λλ² μ΄μ€:
@codebase - λ¬Έμ μ¬μ΄νΈ:
@docs - IDE λ΄ ν°λ―Έλ:
@terminal - Git diff:
@diff
5-1-8. Chat_How it works
μ±μ μ΄λ»κ² λμν κΉ?
- μλν° μ°½μμ
cmd + Lλλ μ¬μ΄λλ° μ±ν μ°½μμ@λ‘ Contextλ₯Ό μ λ¬νλ€. - μ¬μ΄λ λ°μμ μΆκ°μ μΈ Promptλ₯Ό μ λ¬νλ€.
- LLM λͺ¨λΈμ μ λ¬λ°μ
ContextμPromptλ₯Ό κΈ°λ°μΌλ‘ μλ΅μ μ€νΈλ¦¬λ°νλ€.
5-1-9. FAQ
'κ·Έκ² μλκ³ ~' μμΌλ‘ μ½λλ μ 보λ΄κ³ νμ μ‘°μΉλ§ 보λ΄λ©΄ μ΄λ»κ² λ κΉ?
- μ΄μ μΈμ 컨ν μ€νΈλ μΌλΆ ν¬ν¨λλ€.
- μΆκ° 컨ν μ€νΈλ₯Ό μ 곡νμ§ μμλ λͺ¨λΈμ΄ λνμ νλ¦κ³Ό λ§₯λ½μ κΈ°μ΅νλ€.
λ°μ μλ΅μ μ΄λ»κ² μ μ©ν κΉ?
- μλ΅μ ν¬ν¨λ μ½λλ ν΄λΉ λΈλ‘μ λ°°μΉλλ©°
νμ¬ νμΌμ μ μ©,컀μμ μ½μ,볡μ¬λ₯Ό μ νν μ μμ΅λλ€.
μ§κΈκΉμ§ λ§₯λ½μ 무ν¨ννκ³ μλ‘μ΄ μΈμ μ μμνκ³ μΆλ€λ©΄?
cmd + Lλλ μ¬μ΄λλ° μ±ν μ°½μμμλ‘μ΄ μ±νμ ν΄λ¦ν©λλ€.
μ±ν λͺ¨λΈ μ€μ μ μ‘λ ν둬ννΈλ₯Ό λ³Ό μ μμκΉ?
- A. ν°λ―Έλ μμ
Outputμ΄κΈ° - B. λλ‘λ€μ΄μμ
Continue - LLM Prompts/Completionsμ ν - C. μ μ‘λ ν둬ννΈ νμΈ
κ°λ°κ³Ό 무κ΄ν λ΄μ©μ μμ²νλ©΄? (e.g., κΉμΉμ°κ° λ μνΌ μλ €μ€)
- Continueλ λ§€μ° μ±μ€νκ² μλ €μ€λλ€.
- λ°λ©΄, Copilotμ
"Sorry, I can't assist with that."λΌκ³ μλ΅ν©λλ€.
5-2. Autocomplete
- νμ΄ννλ λμ μΈλΌμΈ μ½λ μ μμ μ 곡νλ€.
- νμ±ννλ €λ©΄ IDE νλ¨ μ€λ₯Έμͺ½μ μν νμμ€μ μλ "Continue" λ²νΌμ ν΄λ¦νκ±°λ IDE μ€μ μμ "Enable Tab Autocomplete" μ΅μ μ 체ν¬νλ€.
- Accepting a full suggestion (press TAB key)
- Rejecting a full suggestion (press ESC key)
- Partially accepting a suggestion (cmd/ctrl + →)
5-2-1. Autocomplete_Model setup
Continue 곡μλ¬Έμμμλ μλμμ± κΈ°λ₯μ μ¬μ©ν λ Mistral API μμ μ 곡νλ Codestral λͺ¨λΈμ μ¬μ©νλ κ²μ μΆμ²νλ€.
λ§μ½ νκ³Ό api keyλ₯Ό 곡μ νκ±°λ mistral apiλ₯Ό μ¬μ©νλ €λ©΄ μλμ²λΌ apiBaseλ₯Ό μ€μ ν΄μΌ νλ€.
{
"tabAutocompleteModel": {
"title": "Codestral",
"provider": "mistral",
"model": "codestral-latest",
"apiKey": "YOUR_API_KEY",
"apiBase": "https://api.mistral.ai/v1" // μ΄λΆλΆ μΆκ°
}
}
5-2-2. Autocomplete_Local&Offline / Self-Hosted_ Experience
λ‘컬과 μ체 νΈμ€ν
μμλ StarCoder2-3b λͺ¨λΈμ μΆμ²νλ€.
{
"tabAutocompleteModel": {
"title": "StarCoder2-3b",
"model": "starcoder2:3b",
"provider": "ollama"
}
}
Alternative experiences
- νλμ¨μ΄κ° μ’μ§ μλ€λ©΄
deepseek-coder:1.3b-baseλ₯Ό μΆμ² - νλμ¨μ΄κ° μ’λ€λ©΄
deepseek-coder:6.7b-baseλͺ¨λΈμ μ¬μ©νλ©΄ λμ± κ³ νμ§μ μλμμ±μ μ 곡νλ€.
[!NOTE]
LM Studio μ¬μ©μμ κ²½μ° "My Models" μΉμ μΌλ‘ μ΄λνμ¬ μνλ λͺ¨λΈμ μ°Ύκ³ κ²½λ‘λ₯Ό 볡μ¬νμΈμ(μ: second-state/StarCoder2-3B-GGUF/starcoder2-3b-Q8_0.gguf). μ΄ κ²½λ‘λ₯Ό configμ
modelκ°μΌλ‘ μ¬μ©νμΈμ.
Autocomplete_Context_Selection
- μλ μμ±κΈ°λ₯μ νμ¬ μ»€μ μμΉλ₯Ό κΈ°λ°μΌλ‘ μλμΌλ‘ λ§₯λ½(context)μ κ²°μ ν©λλ€.
- ν둬ννΈμ ν¬ν¨ν λ΄μ©μ κ²°μ νκΈ° μν΄ μ¬μ©νλ κΈ°μ
- File prefix/suffix
- Definitions from the Language Server Protocol
6. RAG, RAG in continue
RAG(Retrieval-Augmented Generation) :
LLMμ΄ μ체 μ§μ κΈ°λ° μΈμλ μΈλΆ λ°μ΄ν°λ² μ΄μ€λ κ²μ μμ§μ νμ©νμ¬ λ μ ννκ³ μ΅μ μ μ 보λ₯Ό μ 곡νλ λ°©λ²
LLMμ κΈ°μ‘΄ λ¬Έμ μ :
- λ΅λ³μ΄ μμ λ νμ μ 보λ₯Ό μ 곡νλ€.
- μ¬μ©μκ° κ΅¬μ²΄μ μ΄κ³ μ΅μ μ μλ΅μ κΈ°λν λ μ€λλμκ±°λ μΌλ°μ μΈ μ 보λ₯Ό μ 곡νλ€.
- μ λ’°ν μ μλ μΆμ²λ‘λΆν° μλ΅μ μμ±νλ€.
- μ©μ΄ νΌλμΌλ‘ μΈν΄ μλ΅μ΄ μ ννμ§ μλ€.
RAGκ° μ€μν μ΄μ :
- μ λ’°ν μ μλ μ 보 μμ€ νμ©
- μ¬μ©μ μ λ’°λ ν₯μ
RAG μ₯μ :
- λΉμ© ν¨μ¨μ ꡬν
- μ΅μ μ 보 μ 곡
- μ¬μ©μ μ λ’° κ°ν
- κ°λ°μμ μ μ΄λ ₯ ν₯μ
6-1. RAG μ£Όμ κ°λ
- μΈλΆ λ°μ΄ν° μμ±
- μ§μ μμ±(Query Generation)
- μ 보 κ²μ(Retrieval)
- μλ΅ μμ±(Answer Generation)
Flow
![]()
Flow2

μ©μ΄
- Prompt :
- LLMμ μ§μ μ μΈ μ΅μ’ input
- LLMμ μ νλλ₯Ό μ¬λ¦¬κΈ° μνμ¬ μ¬μ©μμ 쿼리λ₯Ό λ°μμ λ€μνκ² μ¬κ΅¬μ±.
- Query :
- μ¬μ©μκ° μ λ ₯νλ raw ν μ€νΈ
RAG λ¨μ
- κ³μ° λΉμ©
- κ²μ νμ§ μμ‘΄μ±
6-2. RAG νμ© μμ
RAGλ LLM(λν μΈμ΄ λͺ¨λΈ)μ μ§μ νμ΅μν€λ κ²μ΄ μλλΌ, μΈλΆ λ°μ΄ν°λ₯Ό κ²μν΄ μ°Έμ‘°νλ λ°©μ. μ¦, LLMμ΄ νμν μ 보λ₯Ό μ€μκ°μΌλ‘ κ²μν΄μ κ·Έ λ°μ΄ν°λ₯Ό λ°νμΌλ‘ ν μ€νΈλ₯Ό μμ±νλ€. κ²μ λ¨κ³μμ μ 보λ₯Ό κ°μ Έμ€κ³ , κ·Έ μ 보λ₯Ό κΈ°λ°μΌλ‘ μ μ ν μλ΅μ μμ±νλ κ²μ΄ RAGμ ν΅μ¬μ λλ€. μ΄λ₯Ό ν΅ν΄ λ μ λ’°μ± μλ κ²°κ³Όλ₯Ό μ 곡ν μ μλ€.
RAGλ₯Ό μ¬μ©νλ μ΄μ :
RAGκ° LLMμ μ§μ νμ΅μν€μ§ μκ³ μΈλΆ λ°μ΄ν°λ₯Ό κ²μνλ λ°©μμΌλ‘ λμνλ μ΄μ λ μ€μκ° μ 보 μ λ°μ΄νΈμ λ©λͺ¨λ¦¬ νκ³ λλ¬Έμ΄λ€.
- μ€μκ° μ 보 μ κ·Ό κ°λ₯
- ν¨μ¨μ μΈ λ©λͺ¨λ¦¬ μ¬μ© κ°λ₯
μΌλ°μ μΈ RAG νμ© μμ :
- κ³ κ° μ§μ μ±λ΄
- λ²λ₯ /μλ£ λΆμΌ
- μ°κ΅¬ 보쑰 λꡬ
6-3. RAG μλλ°©μ
6-3-1. Chunking
- λκ·λͺ¨ λ¬Έμλ κ·Έλλ‘ μ²λ¦¬νκΈ° μ΄λ ΅κΈ° λλ¬Έμ, μ΄λ₯Ό μ¬λ¬ κ°μ μμ 'chunkλ‘ λλλ κ³Όμ μ΄ νμνλ€.
- μ΄ κ³Όμ μ μ€μν μ 보 μμ€μ μ΅μννλ©΄μλ κ° chunkκ° λ 립μ μΌλ‘ μ²λ¦¬λ μ μλλ‘ μ€κ³λλ€.
- μΌλ°μ μΌλ‘ λ¬Έμμ λ Όλ¦¬μ λ¨μλ λ¬Έλ¨μ κΈ°μ€μΌλ‘ μ²ν¬κ° λλλ©°, κ° chunkλ κ²μ λ° μμ± κ³Όμ μμ λ 립μ μΈ λ¨μλ‘ νμ©λλ€.
Chunking νλ λ°©λ² :
- Fixed Size Chunking
- κ°μ₯ λ¨μνκ² μ κ·Όνλ λ°©μμΌλ‘, κ³ μ λ λ¬Έμμ κΈΈμ΄λ‘ λ¬Έμλ₯Ό μλΌλ΄λ λ°©μ
- Content-Aware chunking
- λ¬Έλ§₯μ μΈμ§νλ λ°©μμΌλ‘ chunkingμ νλ λ°©λ²
- Recursive chunking
- μμμ μΈκΈλ λ Fixed Size chunkingκ³Ό Content Aware Chunkingμ νΌν©νμ¬ μ¬μ©νλ λ°©μ. Content Aware Chunkingμ νμ¬ 1μ°¨μ μΌλ‘ μλ₯Έ λ€, μ€μ ν κΈΈμ΄λ³΄λ€ κΈΈ κ²½μ°μλ Fixed Sizeλ‘ λ€μ μλ₯΄λ λ°©μμ΄λ€.
6-3-2. Document Embedding
- λ¬Έμ μλ² λ©μ λλμ λ¬Έμλ₯Ό 벑ν°λ‘ λ³ννλ κ³Όμ
- λ¬Έμ λ΄μ ν μ€νΈλ₯Ό κ³ μ°¨μ 곡κ°μ 벑ν°λ‘ λ³ννμ¬ λ¬Έμ κ°μ μ μ¬λλ₯Ό μ½κ² κ³μ°ν μ μλλ‘ νλ€. μ¬κΈ°μ μ¬μ©νλ μλ² λ© λͺ¨λΈμ μΌλ°μ μΌλ‘ μ¬μ νμ΅λ Transformer κΈ°λ° λͺ¨λΈμ μ¬μ©νλ€.
- λ¬Έμμ μλ―Έμ μ μ¬μ±μ λ°μν 벑ν°ν λλΆμ κ²μ λ¨κ³μμ κ΄λ ¨ λ¬Έμλ₯Ό μ½κ² μ°Ύμ μ μλ€.
- μλ² λ© λ λ¬Έμλ€μ Vector DBμ μ μ₯λ©λλ€. (νμ¬ νν μ°μ΄λ Vector DBλ Faiss λλ Chroma μ λμ΄λ€.)
6-3-3. Retrieval
- κ²μ λ¨κ³μμλ μ λ ₯ 쿼리μ λ§λ κ΄λ ¨ λ¬Έμ λλ μ²ν¬λ₯Ό κ²μνκ³ μμ μμ±λ μλ² λ© λ²‘ν°λ₯Ό κΈ°λ°μΌλ‘ 쿼리μ λ¬Έμ κ°μ μ μ¬λλ₯Ό κ³μ°νμ¬ κ°μ₯ κ΄λ ¨μ±μ΄ λμ λ¬Έμλ€μ μ ννλ€.
- μΌλ°μ μΌλ‘ λ²‘ν° μ μ¬λ κ²μμ μ¬μ©νμ¬, 쿼리 μλ² λ©κ³Ό μ¬μ μ μ₯λ λ¬Έμ(Chunk) μλ² λ© κ°μ μ½μ¬μΈ μ μ¬λ λλ μ μ¬ν 거리 μΈ‘μ λ°©λ²μ μ¬μ©νλ€.
Retrievalμ νλ λ°©μ :
VectorDBλ₯Ό μ¬μ©νλ λ°©λ²μ Dense λ°©μκ³Ό Sparse λ°©μμ΄ μλ€.
- Sparse Retriever : TF-IDFμ κ°μ κΈ°μ μ μ¬μ©νμ¬ ν μ€νΈ λ°μ΄ν°λ₯Ό ν¬μ 벑ν°λ‘ λ³ννκ³ , μ§μ 벑ν°μμ μ μ¬μ±μ λ°λΌ λ¬Έμλ₯Ό κ²μνλ€.
- Dense Retriever : BERTμ κ°μ μ κ²½λ§ λͺ¨λΈμ μ¬μ©νμ¬ ν μ€νΈ λ°μ΄ν°λ₯Ό λ°μ§ μλ² λ© λ²‘ν°λ‘ λ³ννκ³ , μ§μ 벑ν°μμ μ μ¬μ±μ λ°λΌ κ΄λ ¨ λ¬Έμλ₯Ό κ²μνλ€.
6-3-4. Reranking
Rerankingμ λ¨μν μλ² λ© μ μ¬λ κ³μ° μ΄μμ λ€μν μμλ₯Ό κ³ λ €νμ¬ μ€νλλ©°, λ¬Έμμ λ§₯λ½, ν μ€νΈ κΈΈμ΄ λ±μ κ³ λ €νμ¬ μ΅μ’ μ μΌλ‘ μμ λ¬Έμλ₯Ό κ²°μ νλ€.
Rerankingμ΄ νμν μ΄μ :
- LLMμ contextλ₯Ό λ§μ΄ λ£λλ€κ³ μ’μμ§λ κ²μ΄ μλκ³ κ΄λ ¨λ λ¬Έμλ₯Ό λ£μ΄μΌμ§ μνλ λ΅λ³μ μ»μ μ μκ² λλ€. λΏλ§ μλλΌ κ°μ λ¬Έμλ₯Ό λ£μ΄λ λ¬Έμλ₯Ό λ£λ μμμ λ°λΌ κ²°κ³Όκ° λ¬λΌμ§κΈ° λλ¬Έμ Rerankingμ ν΅ν΄ μ κ΅ν λ΅λ³μ μμ±ν μ μλλ‘ μ λν μ μλ€.
6-3-5. Generation
μ΅μ’ μ μΌλ‘ μ νλ λ¬Έμλ μ²ν¬λ₯Ό κΈ°λ°μΌλ‘ μμ± λͺ¨λΈμ μ¬μ©μμ 쿼리μ λ§λ λ΅λ³μ μμ±νλ€.
6-4. Continueμ RAG (Retrieval-Augmented Generation) μν¬νλ‘

νΉμ§
Continueλ μ£Όλ‘ @codebase κ²μ μ RAGλ₯Ό μ¬μ©νλ€.
- κ²½λνλ λ‘컬 μλ² λ©κ³Ό RAG
- νμμ λ°λΌ NLP taskλ‘ Rerankingμ 보μ
- LLM promptλ₯Ό μ΄μ©ν Reranking
- κΈ°λ³Έμ μΌλ‘ κ°λ²Όμ΄ μλ² λ© λͺ¨λΈμ μ¬μ©ν΄ Naive RAG(κΈ°λ³Έ RAG)λ₯Ό κ²½λννλ€.
- μ¬μ©μκ° μνλ©΄ Rerankingκ³Ό NLP taskλ₯Ό νμ±νν΄ μ νλλ₯Ό λμ΄λ μ λ΅μ μΈμ λ€.
6-4-1. RAGμ μ¬μ© λ°μ΄ν°λ² μ΄μ€
- κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ (RDBMS): SQLite
- μΈλ±μ±λ νμΌ κΈ°λ‘ μ μ§
- μ λ¬Έ κ²μ(Full-Text-Search) μΈλ±μ€ μ μ₯ λ° μ¬μ©
- BM25 μκ³ λ¦¬μ¦ νμ©
- LanceDB μΊμ κ΄λ¦¬ (lance_db_cache ν
μ΄λΈ)
- uuidλ₯Ό keyλ‘,
List[number]ννμ vectorλ₯Ό ν¬ν¨ν λͺ¨λ μ 보 μ μ₯
- uuidλ₯Ό keyλ‘,
- λ²‘ν° λ°μ΄ν°λ² μ΄μ€: LanceDB
- λ¬Έμ chunkμ μλ² λ© λ²‘ν° μ μ₯
- μ¬μ©μ queryμ λ¬Έμ chunk κ° μ μ¬λ κ²μ μν
6-4-2. RAG μν¬νλ‘ λ€μ΄μ΄κ·Έλ¨
graph TD
subgraph "1.Indexing Process"
A[Planning Layer] -->|SQLite| B[File Chunking]
B --> C[Embedding Generation]
C --> D[Vector DB Storage]
B --> E[Full-text Index]
end
subgraph "2.Query Process"
F[User Query] --> G[Similarity Search]
F --> H[Full-text Search]
F --> I[LLM Repo Map]
G & H & I --> J[Reranker]
J --> K[Top Results]
end
D -.-> G
E -.-> H
6-5. μ£Όμ λ¨κ³
6-5-1. μΈλ±μ± νλ‘μΈμ€ (λ¬Έμ μ μ²λ¦¬)
- κ³ν λ¨κ³
- SQLiteλ‘ μΈλ±μ±λ νμΌλ€μ κΈ°λ‘μ μ μ§
- λΈλμΉ λ³κ²½μ΄λ μλμ° λ¦¬λ‘λ μ μ€λ³΅ μμ μ λ°©μ§νλ€. (95%μ νμΌμ λ³κ²½λμ§ μμ)
- νμΌ μ²νΉ
- λ¬Έμλ₯Ό LLM μ λ ₯μ μ ν©ν ν¬κΈ°μ μμ λΆλΆ(chunk)μΌλ‘ λΆν
- μλ² λ© μμ±
- κ° chunkμ λν μλ² λ©μ AI λͺ¨λΈμ ν΅ν΄ 벑ν°ν
- λ‘컬 μλ² λ©μλ
transformers.jsλΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ© - API μλ² λ© λͺ¨λΈλ‘
voyage-code-2API λ±μ μ νμ μΌλ‘ μ¬μ© κ°λ₯
- λ²‘ν° DB μ μ₯
- μμ±λ μλ² λ©μ λ‘컬 λ²‘ν° λ°μ΄ν°λ² μ΄μ€μ μ μ₯
- SQLiteμ lance_db_cache ν
μ΄λΈμμ μΊμ±
- SQLiteμ
lance_db_cacheν μ΄λΈμμ vectorλembedding vector, contentsλtext chunkμ ν΄λΉνλ€.
- SQLiteμ
- μ λ¬Έ κ²μ μΈλ±μ€ μμ±
- κ²°κ³Ό 보κ°μ μν μ λ¬Έ κ²μ μΈλ±μ€λ₯Ό SQLiteμ μμ± λ° μ μ₯
6-5-2. 쿼리 νλ‘μΈμ€
- μ¬μ©μ 쿼리 μ μ
@codebaseκ°μ§ μ RAG νλ‘μΈμ€λ₯Ό μμ- 쿼리λ₯Ό chunkingνκ³ , μ μ₯ν 벑ν°μ λΉκ΅ν μ μλλ‘ μλ² λ©
- μ μ¬λ κ²μ (Similarity Search)
- λ²‘ν° λ°μ΄ν°λ² μ΄μ€(LanceDB)μμ μ μ¬λ κΈ°λ° κ²μμΌλ‘ κ²°κ³Ό λμΆ
-
// core/indexing/LanceDbIndex.ts const table = await db.openTable(tableName); let query = table.search(vector); if (directory) { // seems like lancedb is only post-filtering, so have to return a bunch of results and slice after query = query.where(`path LIKE '${directory}%'`).limit(300); } else { query = query.limit(n); } const results = await query.execute(); return results.slice(0, n) as any;
-
- λ²‘ν° λ°μ΄ν°λ² μ΄μ€(LanceDB)μμ μ μ¬λ κΈ°λ° κ²μμΌλ‘ κ²°κ³Ό λμΆ
- μ λ¬Έ κ²μ (Full-text Search)
- SQLiteμ μ λ¬Έ κ²μ μΈλ±μ€λ₯Ό νμ©νμ¬ μΆκ° κ²°κ³Όλ₯Ό κ²μ
- BM25 μκ³ λ¦¬μ¦ κΈ°λ°μΌλ‘ λνΉ
ftsν μ΄λΈ κΈ°μ€μΌλ‘fts_metadataν μ΄λΈ λ±μ JOIN ν΄ μ¬μ©
- LLM μ μ₯μ λ§΅ (LLM Repo Map)
- LLMμ "μ μ₯μ λ§΅"μ μ μνκ³ νμΌ μλ³μ μμ²
- λ€μκ³Ό κ°μ ν둬ννΈλ₯Ό μ¬μ©
-
// core/context/retrieval/repoMapRequest.ts const prompt = `${repoMap} Given the above repo map, your task is to decide which files are most likely to be relevant in answering a question. Before giving your answer, you should write your reasoning about which files/folders are most important. This thinking should start with a <reasoning> tag, followed by a paragraph explaining your reasoning, and then a closing </reasoning> tag on the last line. After this, your response should begin with a <results> tag, followed by a list of each file, one per line, and then a closing </results> tag on the last line. You should select between 5 and 10 files. The names that you list should be the full path from the root of the repo, not just the basename of the file. This is the question that you should select relevant files for: "${input}"`;
- μ¬μμν (Reranker)
- μ΄μ λ¨κ³μμ μ»μ λͺ¨λ μ μλ€λ‘, (FTS, μλ² λ©, μ΅κ·Ό νΈμ§ νμΌ, μ μ₯μ λ§΅)μ μμλ₯Ό μ¬μ‘°μ
- LLM κΈ°λ° μ¬μμ λͺ¨λΈμ μ¬μ©ν΄ μ΅μ’ μ μ
- λ€μκ³Ό κ°μ few-shot ν둬ννΈλ₯Ό μ¬μ©νλ€.
-
// core/context/rerankers/llm.ts const prompt = `You are an expert software developer responsible for helping detect whether the retrieved snippet of code is relevant to the query. For a given input, you need to output a single word: "Yes" or "No" indicating the retrieved snippet is relevant to the query. Query: Where is the FastAPI server? Snippet: \`\`\`/Users/andrew/Desktop/server/main.py from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {{"Hello": "World"}} \`\`\` Relevant: Yes Query: Where in the documentation does it talk about the UI? Snippet: \`\`\`/Users/andrew/Projects/bubble_sort/src/lib.rs fn bubble_sort<T: Ord>(arr: &mut [T]) {{ for i in 0..arr.len() {{ for j in 1..arr.len() - i {{ if arr[j - 1] > arr[j] {{ arr.swap(j - 1, j); }} }} }} }} \`\`\` Relevant: No Query: ${query} Snippet: \`\`\`${documentId} ${document} \`\`\` Relevant: `;
-
- μ΅μ’ κ²°κ³Ό μ 곡 (Top Results)
6-6. Custom RAG in Continue
6-6-1. μλ² λ© λͺ¨λΈ μ ν
[!TIP] μΆμ² λͺ¨λΈ
Continueμμ μΆμ²νλ λͺ¨λΈμ
voyage-code-2
6-6-2. λ²‘ν° DB μ ν
- λλΆλΆ λ²‘ν° DB μ¬μ©ν΄λ 무방νκΈ° λλ¬Έμ μ¬μ©μ±μ΄ μ’μ DBλ₯Ό κΆμ₯
- Continue κΆμ₯ DBλ
LanceDB: μΈ λ©λͺ¨λ¦¬ DB
6-6-3. μ²νΉ μ λ΅ μ ν
votage-code-2 λͺ¨λΈμ μ΅λ 16,000 ν ν°
- Truncate: λμΉλ 건 μλΌμ λ²λ¦°λ€. (1νμΌ 1μ²ν¬)
- chunks of a fixed length: κ³ μ λ κΈΈμ΄λ‘ μ²ν¬νλ€.
- recursive, (AST)-based strategy: μ ννμ§λ§, 볡μ‘νλ€. μμ€ μ½λλ₯Ό ν¨μ, 쑰건문, λΈλ‘ λ¨μλ‘ λλ μ μλ€.
6-6-4. μΈλ±μ± μ€ν¬λ¦½νΈ μμ±
λ°μ΄ν°λ₯Ό κ²μ κ°λ₯νλλ‘ κ΅¬μ‘°ννμ¬ μ μ₯νλ κ³Όμ
(μ²νΉ -> μλ² λ© μμ± -> λ²‘ν° DB μ½μ )
from lancedb.pydantic import LanceModel, Vector
from lancedb.embeddings import get_registry
db = lancedb.connect("/tmp/db")
func = get_registry().get("openai").create(
name="voyage-code-2",
base_url="https://api.voyageai.com/v1/",
api_key=os.environ["VOYAGE_API_KEY"],
)
class CodeChunks(LanceModel):
filename: str
text: str = func.SourceField()
# 1536 is the embedding dimension of the `voyage-code-2` model.
vector: Vector(1536) = func.VectorField()
table = db.create_table("code_chunks", schema=CodeChunks, mode="overwrite")
table.add([
{"text": "print('hello world!')", filename: "hello.py"},
{"text": "print('goodbye world!')", filename: "goodbye.py"}
])
query = "greetings"
actual = table.search(query).limit(1).to_pydantic(CodeChunks)[0]
print(actual.text)
6-6-5. μΈλ±μ± μ€ν¬λ¦½νΈ μ€ν
- νμΌμ΄ λ³κ²½λ λ ν΄λΉ νμΌλ§ μλμΌλ‘ μΈλ±μ±
- μ£ΌκΈ°μ μΌλ‘ μ 체 μΈλ±μ€λ₯Ό μλ‘ κ³ μΉλ κ²λ μΆ©λΆν ν¨κ³Όμ μ΄λ€.
6-6-6. μλ² μ€μ
- 컀μ€ν RAGμ μ μνκΈ° μν μλ²λ₯Ό λμμΌ νλ€.
[POST] /retrieve
@app.post("/retrieve")
async def create_item(item: ContextProviderInput):
results = [] # TODO: Query your vector database here.
# Construct the "context item" format expected by Continue
context_items = []
for result in results:
context_items.append({
"name": result.filename,
"description": result.filename,
"content": result.text,
})
return context_items
[!TIP] (μ΅μ ) re-ranking
Continueλ
rerank-1λͺ¨λΈμ μΆμ²νλ Voyage AIλrerank-2λͺ¨λΈμ μΆμ²νλ€.rerankingλ₯Ό μν λ³λμ μλ²λ₯Ό λμμΌ νλ€. (e.g.
/rerank)
6-7. FAQ
Custom RAGμ λ³λ μλ²κ° νμν μ΄μ
all embeddings are calculated locally with all-MiniLM-L6-v2 and stored locally in ~/.continue/index.
RAGμ νΈλ μ΄λ μ€νλ?
- μμ μ²ν¬λ μλ³Έ λ¬Έμμ μλ―Έλ₯Ό λΆμμ νκ² λνλΌ μ μλ€.
- μ²νΉ ν¬κΈ°λ₯Ό μ€μ΄λ©΄ κ²μ μλκ° λΉ¨λΌμ§μ§λ§ μ νλκ° λ¨μ΄μ§ μ μλ€. (λ°λμ κ²½μ°λ μ‘΄μ¬)
μλ² λ©λ 벑ν°λ 보μμ μΌλ‘ μμ ν κΉ?
- 벑ν°λ μμΉμ ννμ΄λ©° λ°μ΄ν° κ·Έ μμ²΄κ° μλλ€.
- 벑ν°λ₯Ό ν΅ν΄ μ μ¬ν μλ³Έ λ¬Έμ λλ λ°μ΄ν°λ₯Ό κ²μνμ¬ κ·Έκ²μ λ°ννλ κ²μ΄λ€.
6-8. Chat_Customize_with_RAG
- νλ‘μ νΈ μ 체 μ½λλ² μ΄μ€λ₯Ό λμμΌλ‘ μ 보λ₯Ό κ²μνκ±°λ, νΉμ ν΄λλ₯Ό λμμΌλ‘ ν μ μλ€.
- λ²‘ν° λ°μ΄ν°λ² μ΄μ€μμ
κ°μ Έμ¬ κ²°κ³Ό,μ¬μ©ν κ²½κ³Ό,μ¬λνΉ κΈ°λ₯ μ¬μ© μ¬λΆλ₯Ό μ€μ ν μ μλ€.
컀μ€ν RAG μμ±
- μλ² λ© λͺ¨λΈ μ ν, λ²‘ν° λ°μ΄νΈλ² μ΄μ€ μ€μ , ν μ€νΈ μ²νΉ μ λ΅ μ‘°μ
@docs μ€μ
- νΉμ λ¬Έμλ₯Ό μ 곡
- λΌμ΄λΈλ¬λ¦¬ 곡μλ¬Έμ URLμ μ§μ νλ λ±μΌλ‘ νμ©ν μ μλ€.
(e.g.,@docs API endpoints for Continue)
context provider μμ±
- κ³ μ ν νλ‘λ°μ΄λλ₯Ό μμ±ν μ μλ€.
(e.g., νμ¬ λ΄λΆμ λ§€λ΄μΌμ 컨ν μ€νΈλ‘ μ 곡νλ νλ‘λ°μ΄λ μμ± λ±)
[!IMPORTANT]
ν΅μ¬μ Chatμμ μ¬μ©ν Contextλ₯Ό μ΄λ»κ² μ 곡ν μ§ κ²°μ νλ κ²
6-9. Chat_LLM
6-9-1. λ°μ΄ν° μμ§
- λ€μν μΆμ²
- μΈμ΄ λ€μμ±
6-9-2. λ°μ΄ν° μ μ²λ¦¬
- ν ν°ν(Tokenization)
- μ΄ν μ¬μ ꡬμΆ
[!TIP]
μΌλ°μ μΈ μ°λ¦¬κ° μκ°νλ λ¨μ΄ λΏλ§ μλλΌ, μμ£Ό μ°μ΄λ λ¬Έμ₯ κ°μ κ²μ νλμ ν ν° λ¨μλ‘λ λ§λ€ μ μλ€.
6-9-3. λͺ¨λΈ νμ΅
- νΈλμ€ν¬λ¨Έ μν€ν μ²
- μΈμ΄ λͺ¨λΈλ§: λ€μ λ¨μ΄ μμΈ‘(Next Token Prediction) λλ λ§μ€νΉλ λ¨μ΄ 볡μ(Masked Language Modeling)μ ν΅ν΄ μΈμ΄ ν¨ν΄μ νμ΅
- → μ΄λ° λ°©λ²μ΄κΈ°μ Pretrainλ§ λμ΄μλ LLMμ λ€μ λ¨μ΄λ§ μμΈ‘ κ°λ₯νλ€.
- inputμΌλ‘ λ€μ΄κ° λ¬Έμ₯μ λ€μ κ²μ μμ°μ€λ½κ² μ΄μ΄μ£Όλλ‘ μμΈ‘
(λ€μ λ¨μ΄λ₯Ό μμΈ‘ν κ²μ μ¬μ©ν΄μ κ³μ μμΈ‘νκ³ , μ΅μ’ μΌλ‘ End ν ν°μ΄ λμ¬ λκΉμ§ κ³μ μμΈ‘)
6-9-4. λ―ΈμΈ μ‘°μ (Fine-tuning)
- νΉμ νμ€ν¬μ λ§μΆ μ‘°μ
LLMμ ν¨κ³Όμ μΈ μ±λ΄μΌλ‘ νμ©νκΈ° μν΄μλ λ¨μν μΈμ΄ μμ± λ₯λ ₯ μΈμλ μ¬μ©μμμ μνΈμμ©μ μννκ² νλ μΆκ°μ μΈ μμλ€μ΄ νμνλ€.
1. λν λ°μ΄ν°λ‘ λ―ΈμΈ μ‘°μ
- λνν λ°μ΄ν°μ μ¬μ©
- μν λΆμ¬
2. 컨ν μ€νΈ μ μ§ λ° κ΄λ¦¬
- λν νμ€ν 리 μΆμ
- μΈμ κ΄λ¦¬
- κΈ°μ΅ λ₯λ ₯ νμ₯
3. μμ νκ³ μ€λ¦¬μ μΈ μλ΅ μμ±
- νν°λ§ λ° κ²μ΄
- νΈν₯ μ κ±°
- μ€λ¦¬ κ°μ΄λλΌμΈ μ€μ
6-9-5. Multi-turn
μ¬μ©μμ μ±λ΄ κ°μ μ¬λ¬ μ°¨λ‘μ κ±ΈμΉ μνΈμμ©μ μλ―Ένλ©°, μμ°μ€λ½κ³ μ μλ―Έν λνλ₯Ό μν΄ νμμ μ΄λ€.
1. 컨ν μ€νΈ μ΄ν΄ λ° μ μ§
- μ°Έμ‘° ν΄μ
- μ£Όμ μ ν μ²λ¦¬
- μμμ μ 보 μΆλ‘
2. λν νλ¦ κ΄λ¦¬
- λν μν μΆμ (Dialogue State Tracking)
- λν μ μ± (Dialgue Policy)
- μλ¬ μ²λ¦¬ λ° λ³΅κ΅¬
3. κΈ°μ μ ꡬν
- λ©λͺ¨λ¦¬ λ©μ»€λμ¦
- μΈλΆ λ©λͺ¨λ¦¬ μ¬μ©
- μμ½ λ° μμΆ
7. Edit, Actions
7-1. Edit
- νμ¬ νμΌμ λ²μ΄λμ§ μκ³ μ½λ μμ μ μ½κ² ν μ μλ λ°©λ²
- μνλ μ½λ λΈλ‘μ νμ΄λΌμ΄νΈνκ³ ν둬ννΈλ₯Ό μ λ ₯νλ©΄ μνλ λ³κ²½ μ¬νμ΄ μΈλΌμΈμΌλ‘ νμΌμ μ€νΈλ¦¬λ°λμ΄ λνλκ³ , μ΄λ₯Ό accept / reject ν μ μλ€.
μ¬μ© λ°©λ²
- μ½λ λΈλ‘ νμ΄λΌμ΄νΈ (cmd/ctrl + i)
- λ³κ²½ μ¬ν μ€λͺ
- λ³κ²½ μ¬ν μμ© λλ κ±°λΆ :
- μ μλ λ³κ²½ μ¬νμ κ°μ‘°λ ν μ€νΈ λ΄μμ μΈλΌμΈ diffλ‘ λνλλ€.
- Accept : (
cmd/ctrl+opt+ y) - Reject : (
cmd/ctrl+opt+ n) - All Accept : (
cmd/ctrl+shift+enter) - All Reject : (
cmd/ctrl+shift+delete)
- μλ‘μ΄ μ μ μμ² : (
cmd/ctrl+ i)
[!TIP] π‘ Context Selection
- νμ΄λΌμ΄νΈλ μ½λ:
- μ¬μ©μκ° μ νν κ°μ‘° νμλ μ½λλ ν둬ννΈμ ν¬ν¨λλ©°, λͺ¨λΈμ΄ μμ ν μ½λ μΉμ μ΄ λλ€.
- λͺ¨λΈμ μ΄ μ½λ λΈλ‘λ§μ λμμΌλ‘ μμ μ μννλ€.
- νμ¬ νμΌ:
- νμ΄λΌμ΄νΈν μ½λκ° ν¬ν¨λ νμΌμ μ 체 λ΄μ©μ΄ μΆκ°μ μΈ μ»¨ν μ€νΈλ‘ μ 곡λλ€.
- μ΄λ λͺ¨λΈμ΄ μ½λ μμ μ λ μ μ ν νλ¨μ νλλ‘ λλλ€.
- λ§μ½ νμΌμ΄ λ무 컀μ 컨ν μ€νΈ μ°½μ λ§μ§ μλ κ²½μ°, νμΌ λ΄μ©μ μλΌλ΄μ΄ μ²λ¦¬νλ λ°©μμΌλ‘ μ§νλλ€.
μ¬μ© μ
- μ£Όμ μΆκ°
- λ¨μ ν μ€νΈ μμ±
- ν¨μ 리ν©ν λ§
7-2. Actions
μμ£Ό μ¬μ©νλ μμ μ λΉ λ₯΄κ² μνν μ μλ λ¨μΆν€ κΈ°λ₯μ΄λ€.
7-2-1. μ¬μ© λ°©λ²
1. Slash λͺ λ Ήμ΄ μ¬μ©νκΈ°:
- Slash λͺ
λ Ήμ΄λ κ°μ₯ μΌλ°μ μΈ λ°©λ²μΌλ‘,
/λ₯Ό μ λ ₯νλ©΄ λλ‘λ€μ΄ λ©λ΄κ° λνλλ€. - e.g.,
/editλͺ λ Ήμ΄λ₯Ό μ¬μ©νλ©΄ νΈμ§μ μ§μ μλν°μ μ€νΈλ¦¬λ° κ°λ₯
κΈ°λ³Έμ μΌλ‘ μ¬μ©ν μ μλ μ μ©ν λͺ
λ Ήμ΄λ /edit, /comment, /share
- Slash λͺ
λ Ήμ΄ μ€λͺ
λͺ¨μ
/edit/comment/share/cmd/commit/http/issue/so/onboard
Continueμ λ΄μ₯ Slash λͺ
λ Ήμ΄λ₯Ό μ¬μ©νλ €λ©΄ ~/.continue/config.json νμΌμμ slashCommands λͺ©λ‘μ μΆκ°ν΄μΌ νλ€.
2. ν둬ννΈ νμΌ μ¬μ©νκΈ°:
.promptνμΌμ μμ±ν΄μ νμΌ, URL, κ°μ‘°λ μ½λ λ±μ μ°Έμ‘°νλ μμ λ§μ Slash λͺ λ Ήμ΄λ₯Ό μ μ κ°λ₯- e.g.,
test.promptνμΌμ λ§λ€μ΄jestλ₯Ό μ¬μ©νλ λ¨μ ν μ€νΈ μμ± λͺ λ Ήμ΄λ₯Ό μ μν μ μλ€.
- e.g.,
- λΉ λ₯Έ μμμ μν΄ μ 곡λ
.promptνμΌ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν μλ μλ€.
7-2-2. κΈ°ν νΈλ¦¬κ±°
1. Quick Actions
- μμ ν΄λμ€λ ν¨μ μμ λ²νΌ ννλ‘ λνλλ©°, ν λ²μ ν΄λ¦μΌλ‘ μ‘μ μ μνν μ μλ€.
.promptνμΌμ μ¬μ©ν΄ 컀μ€ν ν΅ μ‘μ μ μ€μ ν μ μλ€.- κΈ°λ³Έμ μΌλ‘ λΉνμ±ν μνμ΄λ©°, VS Code μ€μ μμ "Continue: Enable Quick Actions"λ₯Ό ν΅ν΄ νμ±νν μ μλ€.
2. Right Click Actions
- μνλ μ½λ λΈλ‘μ κ°μ‘°νκ³ , μ€λ₯Έμͺ½ ν΄λ¦ ν μ‘μ μ μ ννμ¬ μ€ν
3. Debug Action
- ν°λ―Έλμ λ΄μ©μ λΉ λ₯΄κ² 볡μ¬νκ³ ,
cmd/ctrl + shift + Rμ λλ¬ μ±ν μ¬μ΄λλ°μ λΆμ¬λ£μ΄ λλ²κΉ μ‘°μΈμ λ°μ μ μλ€.
4. Quick Fixes
- μ½λμ λΉ¨κ°μ/λ Έλμ λ°μ€μ΄ μμ κ²½μ°, κ·Όμ²μ 컀μλ₯Ό λμΌλ©΄ μ ꡬ μμ΄μ½ μμ±
- μ ꡬλ₯Ό ν΄λ¦νκ±°λ
cmd/ctrl + .μ λλ¬ ν΅ ν½μ€λ₯Ό νμ±ννκ³ , "Ask Continue" μ‘μ μ μ ν
μ₯μ
- λΉ λ₯Έ μ‘μΈμ€
- 컀μ€ν°λ§μ΄μ§ κ°λ₯
- ν΅ν©
λ¨μ
- μ νλ μλν°
- 볡μ‘μ±
7-3. μ£Όμμ¬ν λ° μ¬μ©ν
Edit
- Editμ νΉμ§μ IDE μ λ ₯μ°½μμ λ°λ‘ μμ μ΄ μ΄λ£¨μ΄μ§λ€λ κ².
- κ·Έλ¬λ μ¦κ°μ μΈ μμ μ νΉνλ λ§νΌ, λ무 κ³Όλν μμ μμ²μ μ€νλ € νμ§ μ νλ‘ μ΄μ΄μ§ μ μλ€. (μ½λ μΌλΆκ° λλ½λ κ°λ₯μ±λ μλ€)
- Edit κΈ°λ₯μ νμ΄λΌμ΄νΈλ λΆλΆμ μ§μ€νλ―λ‘, νμΌ μ 체μ λν μ΄ν΄κ° νμν μμ μ΄λΌλ©΄ Chatμ΄λ Actionsλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
Actions
- λ€μν κΈ°λ₯μ Actionsλ‘ νμ©ν΄ λ³λμ ν둬ννΈ μμ± μμ΄ λ°λ‘ μ¬μ©ν μ μλ€.
- 컀μ€ν°λ§μ΄μ§μ΄ κ°λ₯νλ€λ μ₯μ μ΄ μλ€. μμ£Ό μ¬μ©νλ λ°λ³΅μ μΈ μμ μ Actionsμ promptλ‘ μ ν΄λλ©΄ μμ μλμ μ νλκ° ν¬κ² ν₯μλ μ μλ€.
- Actions promptλ₯Ό λ무 κΈΈκ² μμ±νλ©΄ Contextλ₯Ό μ κ² λ£μ μλ°μ μμΌλ LLM μ΅μ ν κΈ°λ² λ±μ νμ©ν΄ κ°κ²°νκ³ ν¨μ¨μ μΈ ν둬ννΈλ₯Ό μμ±νλ κ²μ μΆμ²νλ€.
- Actionsλ₯Ό νμ©νλ©΄ ν°λ―Έλμμ λ°μν μ€λ₯μ λν΄μλ Continueλ₯Ό μ¬μ©ν μ μλ€.
[!TIP]
Edit, Actions λͺ¨λ 곡ν΅μ μΌλ‘ νλΌλ―Έν°κ° 400λΉλ¦¬μΈ μ΄μμΈ λͺ¨λΈμ μ¬μ©ν΄μΌ νλ€.
'What I Learn' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| scroll μ΄λ²€νΈλ₯Ό μ¬μ©ν 무ν μ€ν¬λ‘€ ꡬν (1) | 2024.10.27 |
|---|---|
| Next.js λ³λ ¬ λΌμ°ν & κ²½λ‘ κ°λ‘μ±κΈ°λ₯Ό ν΅ν λͺ¨λ¬ νμ΄μ§ ꡬν (1) | 2024.10.27 |
| next-authλ₯Ό μ¬μ©ν μΉ΄μΉ΄μ€ λ‘κ·ΈμΈ (4) | 2024.10.22 |
| exclude a page from next.js root layout (0) | 2024.10.16 |
| OSSCA: customize prompt & set a completionOptions in Continue (2) | 2024.10.02 |