미세 조정과 RAG: 언제 무엇을 사용해야 할까요?
AI 애플리케이션 개발에 있어 가장 중요한 결정 중 하나는 선택입니다. 사이에 미세 조정 e 검색 증강 생성(RAG). 두 접근 방식 모두 LLM의 동작을 사용자 정의할 수 있지만 근본적으로 다른 방식으로 작동하며 다양한 시나리오에 적합합니다.
이 시리즈의 여섯 번째 기사에서는 웹 개발자를 위한 AI, 우리는 분석할 것입니다 두 가지 기술을 심층적으로 활용하여 실용적인 의사결정 프레임워크를 구축합니다. 각 접근 방식의 구체적인 예를 구현하겠습니다. 결국 당신은 각 프로젝트에 적합한 전략을 선택하는 도구입니다.
무엇을 배울 것인가
- 미세 조정과 RAG의 근본적인 차이점 이해
- 미세 조정, RAG 또는 하이브리드 접근 방식을 사용하는 것이 가장 좋은 시기를 식별합니다.
- OpenAI API로 미세 조정 구현
- 효율적인 미세 조정을 위한 LoRA 및 QLoRA 이해
- 각 접근 방식의 비용, 시간, 복잡성을 분석합니다.
- 순서도 결정 프레임워크 사용
- 실제 사례 연구 살펴보기
- 하이브리드 미세 조정 + RAG 접근 방식 구현
시리즈 개요
| # | Articolo | 집중하다 |
|---|---|---|
| 1 | RAG 소개 | 기본 개념 |
| 2 | TypeScript 및 LangChain을 사용한 RAG | 실제 구현 |
| 3 | 벡터 데이터베이스 비교 | Chromadb, 솔방울, Weaviate |
| 4 | OpenAI 및 Anthropic API | API 통합 |
| 5 | Ollama와 함께하는 LLM 로컬 | 클라우드 없는 AI |
| 6 | 미세 조정과 RAG(현재 위치) | 언제 무엇을 사용할 것인가 |
| 7 | AI 에이전트 | 에이전트 기반 아키텍처 |
| 8 | CI/CD의 AI | 지능형 자동화 |
1. 기본 개념
두 가지 접근 방식을 비교하기 전에 두 접근 방식이 수행하는 작업을 이해하는 것이 중요합니다. 정확히 그리고 언어 모델의 동작을 어떻게 변경하는지.
미세 조정이란 무엇입니까?
Il 미세 조정 계속해서 모델을 훈련시키는 것으로 구성됩니다. 귀하의 도메인에 특정한 데이터 세트로 사전 학습되었습니다. 이것은 내가 변화한다 내부 가중치 신경망의 모델에 새로운 패턴을 가르치고, 영구적인 부분이 되는 응답 스타일 또는 전문 지식 모델 자체의.
RAG 란 무엇입니까?
La 검색 증강 생성(RAG) 프롬프트를 풍부하게 한다 당시 외부 소스에서 검색한 정보와 함께 모델로 전송됨 요청의. 모델은 변경되지 않습니다. 단순히 수신만 할 뿐입니다. 정확한 답변을 생성할 수 있는 보다 풍부한 컨텍스트 업데이트되었습니다.
개념적 비교
| 나는 기다린다 | 미세 조정 | 조각 |
|---|---|---|
| 모델로 변경 | 예 - 수정된 내부 가중치 | 아니요 - 모델이 변경되지 않았습니다. |
| 지식이 사는 곳 | 모델 매개변수에서 | 외부 소스(데이터베이스, 문서) |
| 데이터 업데이트 | 재교육 필요 | 소스 즉시 업데이트 |
| 인용 부호 | 출처를 인용할 수 없습니다. | 특정 문서를 인용할 수 있음 |
| 초기비용 | 높음(GPU, 데이터 세트, 시간) | 중형(벡터 DB, 임베딩) |
| 요청당 비용 | 낮음(전용 모델) | 최고(검색 + 생성) |
| 숨어 있음 | 낮음(직접 추론) | 높음(검색 + 추론) |
| 환각 | 가능하지만 통제가 어렵다 | 검증된 컨텍스트 덕분에 감소됨 |
2. 미세 조정을 사용하는 경우
미세 조정은 수정이 필요할 때 최선의 선택입니다. 행동 자신의 모델이 아닌 모델의 지식. 미세 조정이 탁월한 시나리오는 다음과 같습니다.
미세 조정을 위한 이상적인 시나리오
| 대본 | Esempio | 미세 조정하기 때문에 |
|---|---|---|
| 응답 스타일 | 특정 톤의 비즈니스 챗봇 | 스타일은 반복된 지시 없이 일관되어야 합니다. |
| 출력 형식 | 특정 구조화된 JSON 생성 | 형식은 정확하고 신뢰할 수 있어야 합니다. |
| 도메인 언어 | 의료 또는 법적 용어 | 템플릿에는 전문 용어가 포함되어야 합니다. |
| 반복적인 작업 | 지원 티켓 분류 | 모델은 동일한 패턴을 수천 번 실행해야 합니다. |
| 신속한 감소 | 긴 시스템 지침 제거 | 대용량에 대한 토큰 및 비용 절약 |
| 특정 행동 | 특정 유형의 요청을 거부합니다. | 규칙은 모델에 고유해야 합니다. |
미세 조정을 사용하지 말아야 할 경우
- 자주 변경되는 데이터: 뉴스, 가격, 재고 - RAG 사용
- 소규모 데이터세트(예시 100개 미만): 미세 조정에는 수백 또는 수천 개의 예제가 필요합니다.
- 필요한 인용: 미세 조정으로는 소스를 표시할 수 없습니다.
- 제한된 예산: 미세 조정에는 상당한 계산 리소스가 필요합니다.
- 프로토타이핑: 빠른 반복을 하기에는 너무 느림, 신속한 엔지니어링 사용
3. RAG를 사용해야 하는 경우
모델을 제공해야 할 때 RAG가 최선의 선택입니다. 구체적이고 업데이트된 지식 모델 자체를 수정하지 않고. 대량의 동적 정보를 처리하는 데 탁월합니다.
RAG에 대한 이상적인 시나리오
| 대본 | Esempio | 왜 RAG인가? |
|---|---|---|
| 동적 데이터 | 업데이트된 제품 설명서 | 정보가 자주 변경됩니다. |
| 대형 말뭉치 | 수천 개의 문서로 구성된 기업 지식 기반 | 모델 가중치에 맞추기에는 데이터가 너무 많습니다. |
| 추적성 | 규정을 참조한 법적 답변 | 특정 출처를 인용해야 함 |
| 다중 테넌트 | 각 고객은 자신만의 지식 기반을 가지고 있습니다. | 하나의 모델, 다양한 데이터 소스 |
| 규정 준수 | 회사 정책에 따른 대응 | 답변은 검증 가능해야 합니다. |
| 저렴한 비용 | 제한된 예산으로 스타트업 | 교육 비용 없음 |
4. OpenAI로 미세 조정 구현
OpenAI는 프로세스를 단순화하는 관리형 미세 조정 서비스를 제공합니다. GPU나 인프라를 관리할 필요가 없습니다. 데이터 세트를 업로드하고, 작업을 시작하고 바로 사용할 수 있는 사용자 정의 템플릿을 얻습니다.
데이터 세트 준비
데이터 세트는 JSONL 형식(JSON 라인)이어야 합니다. 완전한 대화의 예를 나타냅니다. 데이터 세트의 품질 이는 미세 조정의 성공을 위한 가장 중요한 요소입니다.
// training-data.jsonl (un oggetto JSON per riga)
{"messages": [{"role": "system", "content": "Sei un assistente per il supporto tecnico della piattaforma Acme. Rispondi in modo conciso e professionale."}, {"role": "user", "content": "Non riesco ad accedere al mio account"}, {"role": "assistant", "content": "Mi dispiace per l'inconveniente. Ecco i passaggi per recuperare l'accesso:\n1. Vai su acme.com/reset\n2. Inserisci la tua email\n3. Controlla la casella di posta\n4. Segui il link di reset\n\nSe il problema persiste, verifica che la tua email sia corretta o contatta il supporto su support@acme.com."}]}
{"messages": [{"role": "system", "content": "Sei un assistente per il supporto tecnico della piattaforma Acme. Rispondi in modo conciso e professionale."}, {"role": "user", "content": "Come posso aggiornare il mio piano?"}, {"role": "assistant", "content": "Per aggiornare il piano:\n1. Accedi alla Dashboard\n2. Vai su Impostazioni > Fatturazione\n3. Seleziona il nuovo piano\n4. Conferma il pagamento\n\nIl cambio sarà effettivo dal prossimo ciclo di fatturazione."}]}
{"messages": [{"role": "system", "content": "Sei un assistente per il supporto tecnico della piattaforma Acme. Rispondi in modo conciso e professionale."}, {"role": "user", "content": "L'API restituisce errore 403"}, {"role": "assistant", "content": "L'errore 403 indica un problema di autorizzazione. Verifica:\n1. Che la tua API key sia valida e non scaduta\n2. Che il piano attivo includa l'accesso API\n3. Che gli scope della chiave coprano l'endpoint richiesto\n\nPuoi rigenerare la chiave da Dashboard > API Keys."}]}
미세 조정 시작
// src/scripts/fine-tune.ts
import OpenAI from 'openai';
import fs from 'fs';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
async function startFineTuning() {
// 1. Caricare il file di training
console.log('Caricamento dataset...');
const file = await openai.files.create({
file: fs.createReadStream('./training-data.jsonl'),
purpose: 'fine-tune',
});
console.log(`File caricato: ${file.id}`);
// 2. Creare il job di fine-tuning
console.log('Avvio fine-tuning...');
const job = await openai.fineTuning.jobs.create({
training_file: file.id,
model: 'gpt-4o-mini-2024-07-18',
hyperparameters: {
n_epochs: 3,
batch_size: 'auto',
learning_rate_multiplier: 'auto',
},
suffix: 'acme-support', // nome personalizzato
});
console.log(`Job creato: ${job.id}`);
// 3. Monitorare il progresso
console.log('Monitoraggio progresso...');
let status = job.status;
while (status !== 'succeeded' && status !== 'failed') {
await new Promise(r => setTimeout(r, 30000)); // attendi 30s
const updated = await openai.fineTuning.jobs.retrieve(job.id);
status = updated.status;
console.log(`Stato: ${status}`);
if (status === 'succeeded') {
console.log(`Modello pronto: ${updated.fine_tuned_model}`);
return updated.fine_tuned_model;
}
if (status === 'failed') {
console.error('Fine-tuning fallito:', updated.error);
throw new Error('Fine-tuning fallito');
}
}
}
// 4. Usare il modello fine-tuned
async function useFineTunedModel(modelId: string) {
const response = await openai.chat.completions.create({
model: modelId, // es: "ft:gpt-4o-mini-2024-07-18:org:acme-support:abc123"
messages: [
{
role: 'user',
content: 'Come posso integrare il webhook?'
}
],
});
console.log(response.choices[0].message.content);
}
startFineTuning();
5. LoRA 및 QLoRA: 효율적인 미세 조정
기존의 미세 조정에는 모든 모델 매개변수를 업데이트해야 합니다. 메모리와 계산 측면에서 비용이 많이 드는 프로세스입니다. 로라 (낮은 순위 적응) 마 QLoRA (Quantized LoRA) 대안을 제시하다 훨씬 더 효율적입니다.
LoRA 작동 방식
LoRA는 수십억 개의 매개변수를 모두 업데이트하는 대신 원래 가중치를 동결합니다. 그리고 작은 피팅 행렬을 추가합니다(어댑터) 매우 순위가 높은 낮다. 이는 유지하면서 훈련 가능한 매개변수의 수를 99% 이상 줄입니다. 완전한 미세 조정에 필적하는 품질입니다.
미세 조정 방법 비교
| 방법 | 훈련 가능한 매개변수 | VRAM 필요 | 시간 | 품질 |
|---|---|---|---|---|
| 전체 미세 조정 | 100% (전체) | 80GB 이상(7B의 경우) | 시간/일 | 가능한 한 최선 |
| 로라 | 0.1-1% | 16~24GB(7B용) | 분/시간 | 풀하우스와 매우 가깝습니다. |
| QLoRA | 0.1-1% + 양자화 | 6~10GB(7B용) | 분/시간 | 약간 낮음 |
# Nota: il fine-tuning con LoRA richiede Python e PyTorch
# Questo e un esempio concettuale per comprendere il processo
# requirements.txt
# transformers==4.38.0
# peft==0.8.0
# bitsandbytes==0.42.0
# datasets==2.17.0
# trl==0.7.0
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, TaskType
from trl import SFTTrainer, SFTConfig
from datasets import load_dataset
# Carica il modello base
model_name = "meta-llama/Llama-3.1-8B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_4bit=True, # QLoRA: quantizzazione 4-bit
device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Configura LoRA
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=16, # rango delle matrici di adattamento
lora_alpha=32, # fattore di scala
lora_dropout=0.05, # dropout per regolarizzazione
target_modules=[ # moduli da adattare
"q_proj", "k_proj", "v_proj",
"o_proj", "gate_proj", "up_proj", "down_proj"
],
)
# Applica LoRA al modello
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# Output: trainable params: 13,631,488 || all params: 8,043,925,504
# Percentuale: 0.17% dei parametri totali
# Carica e prepara il dataset
dataset = load_dataset("json", data_files="training-data.jsonl")
# Configura e avvia il training
training_config = SFTConfig(
output_dir="./output",
num_train_epochs=3,
per_device_train_batch_size=4,
learning_rate=2e-4,
warmup_steps=100,
logging_steps=10,
save_steps=500,
)
trainer = SFTTrainer(
model=model,
args=training_config,
train_dataset=dataset["train"],
tokenizer=tokenizer,
)
# Avvia il fine-tuning
trainer.train()
# Salva il modello LoRA (solo gli adapter, pochi MB)
model.save_pretrained("./acme-support-lora")
TypeScript 개발자를 위한 LoRA
LoRA로 미세 조정하려면 Python이 필요하지만 TypeScript 개발자로서 Ollama를 통해 로컬에서 미세 조정된 모델을 활용할 수 있습니다. 훈련이 끝난 후, 모델을 GGUF 형식으로 변환하고 Ollama로 가져와서 사용하세요. 이전 기사에서 본 것과 동일한 REST API를 통해.
6. 비용 분석
미세 조정과 RAG 중에서 선택할 때 비용이 결정적인 요소인 경우가 많습니다. 다음을 고려하여 두 접근 방식의 실제 비용을 분석해 보겠습니다. 하루에 요청이 10,000개 있는 애플리케이션입니다.
비용 비교(요청 10,000건/일)
| 비용 항목 | 미세 조정(OpenAI) | RAG(솔방울 + GPT-4o) |
|---|---|---|
| 초기 설정 | $50-200(교육 작업) | $0~100(초기 임베딩) |
| 하부 구조 | $0(OpenAI에서 호스팅하는 모델) | $70/월(파인콘 스타터) |
| 요청당 비용 | ~$0.001 (미니 미세 조정 모델) | ~$0.003(임베딩 + 검색 + 생성) |
| 월간 비용(10,000/일) | ~$300 | ~$970 |
| 데이터 업데이트 | 재교육당 $50-200 | 업데이트된 문서당 ~$0.01 |
메모: 비용은 2026년 2월 가격을 기준으로 한 추정치입니다. 볼륨, 복잡성에 따라 크게 달라질 수 있습니다. 프롬프트와 선택한 모델.
고려해야 할 숨겨진 비용
- 미세 조정: 데이터세트 준비 시간(사람의 작업 시간/일)
- 미세 조정: 데이터 변경 시 재훈련 비용
- 조각: 인덱싱 파이프라인 유지 관리
- 조각: 추가된 각 문서의 임베딩 비용
- 둘 다: 통합 개발 및 테스트 시간
7. 의사결정 프레임워크
더 쉽게 선택할 수 있도록 다음과 같은 형태의 의사결정 프레임워크가 있습니다. 흐름도. 거기에 도달하려면 질문에 순서대로 답하세요. 귀하의 케이스에 가장 적합한 추천을 받아보세요.
// Framework decisionale: Fine-tuning vs RAG
function decidiApproccio(requisiti: Requisiti): Approccio {
// DOMANDA 1: I dati cambiano frequentemente?
if (requisiti.datiDinamici) {
// I dati cambiano spesso -> RAG e quasi sempre meglio
if (requisiti.necessitaCitazioni) {
return 'RAG'; // Dati dinamici + citazioni = RAG
}
if (requisiti.stilePersonalizzato) {
return 'IBRIDO'; // Dati dinamici + stile = ibrido
}
return 'RAG';
}
// DOMANDA 2: Serve uno stile/formato specifico?
if (requisiti.stilePersonalizzato || requisiti.formatoOutput) {
if (requisiti.datasetDisponibile && requisiti.dataset.size > 100) {
return 'FINE_TUNING'; // Stile + dataset buono = fine-tuning
}
return 'PROMPT_ENGINEERING'; // Stile ma poco dataset = prompt eng.
}
// DOMANDA 3: Il corpus di conoscenza e grande?
if (requisiti.corpusDocumenti > 50) {
return 'RAG'; // Troppi documenti per il contesto
}
// DOMANDA 4: Serve ridurre i costi per richiesta?
if (requisiti.volumeAlto && requisiti.taskRipetitivo) {
return 'FINE_TUNING'; // Alto volume + task fisso = fine-tuning
}
// Default: inizia con RAG (più flessibile)
return 'RAG';
}
빠른 결정 가이드
| 필요한 경우... | 미국 |
|---|---|
| 업데이트된 회사 문서를 기반으로 한 응답 | 조각 |
| 특정 톤과 개성을 지닌 챗봇 | 미세 조정 |
| 정확한 JSON 형식으로 출력 생성 | 미세 조정 |
| 제품 카탈로그에 대한 질문에 답변 | 조각 |
| 지원 티켓 자동 분류 | 미세 조정 |
| 규제 관련 참고자료가 있는 법률 보조원 | 조각 |
| 업계 용어로 번역 | 미세 조정 |
| FAQ 봇 인용 문서 | 조각 |
| 어조와 지식 기반을 갖춘 전문가 비서 | 잡종 |
8. 하이브리드 접근 방식: 미세 조정 + RAG
많은 실제 시나리오에서 최상의 솔루션은 두 가지 접근 방식을 결합합니다. 모델은 스타일, 형식 및 동작을 포착하도록 미세 조정되었습니다. RAG는 현재 최신 지식을 제공합니다. 요청의.
// src/lib/hybrid-ai.ts
import OpenAI from 'openai';
import { VectorStore } from './vector-store';
interface HybridConfig {
fineTunedModel: string; // Modello fine-tuned per stile
embeddingModel: string; // Modello per embeddings
vectorStore: VectorStore; // Database vettoriale per RAG
topK: number; // Numero di documenti da recuperare
}
export class HybridAI {
private openai: OpenAI;
constructor(private config: HybridConfig) {
this.openai = new OpenAI();
}
async answer(query: string): Promise<{
content: string;
sources: string[];
}> {
// FASE 1: Retrieval (RAG)
// Recupera i documenti rilevanti dal vector store
const relevantDocs = await this.config.vectorStore.search(
query,
this.config.topK
);
// Costruisci il contesto dai documenti recuperati
const context = relevantDocs
.map((doc, i) =>
`[Fonte ${i + 1}: ${doc.metadata.title}]\n${doc.content}`
)
.join('\n\n---\n\n');
// FASE 2: Generazione (con modello fine-tuned)
// Il modello fine-tuned sa GIA come rispondere nel tono giusto
// e nel formato corretto - non servono istruzioni dettagliate
const response = await this.openai.chat.completions.create({
model: this.config.fineTunedModel,
messages: [
{
role: 'user',
content: `Contesto:\n${context}\n\nDomanda: ${query}`,
}
],
temperature: 0.3,
});
return {
content: response.choices[0].message.content ?? '',
sources: relevantDocs.map(d => d.metadata.title),
};
}
}
// Utilizzo
const hybrid = new HybridAI({
fineTunedModel: 'ft:gpt-4o-mini:org:acme-support:abc123',
embeddingModel: 'text-embedding-3-small',
vectorStore: myPineconeStore,
topK: 5,
});
const result = await hybrid.answer(
'Come configuro il webhook per gli eventi di pagamento?'
);
console.log('Risposta:', result.content);
console.log('Fonti:', result.sources);
9. 실제 사례 연구
차이점을 구체화하기 위해 세 가지 실제 시나리오를 분석해 보겠습니다. 접근 방식의 선택은 최종 결과에 영향을 미칩니다.
사례 1: API 문서 도우미
대본
SaaS 회사는 개발자가 API를 사용하는 데 도움이 되는 챗봇을 원합니다. 설명서는 각 릴리스마다 업데이트됩니다(2주마다).
선택한 접근 방식: RAG
- 문서는 2주마다 변경됩니다. 미세 조정에는 비용이 너무 많이 듭니다.
- 개발자는 특정 문서에 대한 링크를 원합니다.
- 자료는 크고(200페이지 이상) 지속적으로 증가하고 있습니다.
결과: 관련 페이지 링크를 통한 정확한 답변, 문서를 배포할 때마다 자동 업데이트됩니다.
사례 2: 이메일 분류기 지원
대본
지원팀은 분류가 필요한 이메일을 하루에 500개 이상 받습니다. 12개 카테고리로 분류되어 해당 부서에 배정됩니다.
선택한 접근 방식: 미세 조정
- 카테고리가 고정되어 있고 잘 정의되어 있습니다.
- 작업이 반복적이고 양이 많습니다.
- 출력 형식이 구조화됩니다(카테고리 + 우선순위 + 부서).
- 외부 인용이나 출처가 필요하지 않습니다.
결과: 분류 정확도 94%, 당 비용 신속한 엔지니어링을 통해 이메일이 GPT-4o에 비해 80% 감소했습니다.
사례 3: 디지털 세금 자문
대본
회계 회사는 AI 비서가 세금 관련 질문에 답변하기를 원합니다. 올바른 규정을 인용하고 적절한 기술 언어를 사용합니다.
선택한 접근 방식: 하이브리드
- 미세 조정 기술 세금 언어 및 응답 형식
- 조각 업데이트된 규정 및 국세청 회보를 검색합니다.
- 규정이 자주 변경됨(재정, 법령)
- 응답에서는 특정 법률 조항을 인용해야 합니다.
결과: 인용문과 함께 예상되는 전문적인 어조로 응답 정확하고 업데이트된 규정.
10. 참조 RAG 파이프라인
비교를 완료하기 위해 다음은 파이프라인의 참조 구현입니다. 프로젝트의 기초로 사용할 수 있는 RAG입니다. 이 구현 프로세스를 조정하기 위해 LangChain을 사용합니다.
// src/lib/rag-pipeline.ts
import { ChatOpenAI } from '@langchain/openai';
import { OpenAIEmbeddings } from '@langchain/openai';
import { MemoryVectorStore } from 'langchain/vectorstores/memory';
import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter';
import { Document } from '@langchain/core/documents';
export class RAGPipeline {
private vectorStore: MemoryVectorStore | null = null;
private llm: ChatOpenAI;
private embeddings: OpenAIEmbeddings;
constructor() {
this.llm = new ChatOpenAI({
modelName: 'gpt-4o',
temperature: 0.3,
});
this.embeddings = new OpenAIEmbeddings({
modelName: 'text-embedding-3-small',
});
}
// Indicizza i documenti
async indexDocuments(documents: string[]): Promise<void> {
const splitter = new RecursiveCharacterTextSplitter({
chunkSize: 1000,
chunkOverlap: 200,
});
const docs = documents.map(
(text, i) => new Document({
pageContent: text,
metadata: { source: `doc-${i}` },
})
);
const splits = await splitter.splitDocuments(docs);
this.vectorStore = await MemoryVectorStore.fromDocuments(
splits,
this.embeddings
);
}
// Rispondi a una domanda
async query(question: string): Promise<string> {
if (!this.vectorStore) {
throw new Error('Indicizza i documenti prima di fare query');
}
// Recupera i documenti rilevanti
const relevantDocs = await this.vectorStore
.similaritySearch(question, 4);
// Costruisci il prompt con contesto
const context = relevantDocs
.map(d => d.pageContent)
.join('\n\n');
const prompt = `Basandoti sul seguente contesto, rispondi alla domanda.
Se il contesto non contiene informazioni sufficienti, dillo chiaramente.
Contesto:
${context}
Domanda: ${question}
Risposta:`;
const response = await this.llm.invoke(prompt);
return response.content as string;
}
}
요약: 선택할 접근 방식
| 표준 | 미세 조정 | 조각 | 잡종 |
|---|---|---|---|
| 설정 복잡성 | 높은 | 평균 | 매우 높음 |
| 첫 번째 결과까지의 시간 | Giorni | 시간 | Settimane |
| 유연성 | 낮은 | 높은 | 최고 |
| 유지 | 정기적인 재교육 | 소스 업데이트 | 둘 다 |
| 확장성 | 제한된 | 높은 | 높은 |
| 출력 품질 | 스타일에 탁월 | 정확성이 뛰어남 | 훌륭한 |
황금률
항상 RAG로 시작하세요. 구현이 더 빠르고 쉽습니다. 반복하고 더욱 유연해졌습니다. 증거가 있는 경우에만 미세 조정으로 이동 구체적으로 신속한 엔지니어링과 RAG는 귀하의 요구 사항을 충족하지 않습니다. 스타일, 형식 또는 비용. 하이브리드 접근 방식을 고려해야 합니다. 두 가지 접근 방식을 개별적으로 검증한 후에만 가능합니다.
결론
미세 조정과 RAG 사이의 선택은 어느 것이 "더 나은가"의 문제가 아니라, 그러나 특정 사용 사례에 가장 적합한 것은 무엇입니까? 미세 조정 모델을 삼다 ~처럼 모델이 반응하고 RAG는 무엇 모델은 알고 있어요. 두 가지가 모두 필요한 경우 하이브리드 접근 방식이 가장 좋습니다. 두 세계의.
다음 기사에서는 AI 에이전트: 아키텍처 언어 모델이 추론하고, 계획하고, 행동할 수 있도록 하는 것 복잡한 다단계 작업을 자율적으로 완료합니다.







