RAG (Retrieval-Augmented Generation)는 Vector Database와 LLM을 결합하여 검색된 데이터를 활용해 문맥 기반 응답을 생성하는 기술이다.
all-MiniLM-L6-v2, bge-m3, E5, OpenAI ada-002 등 사용 목적에 맞는 모델 선택K개의 문서를 검색 한다. (일반적으로 K=3~5)실시간 검색 API는 다양하지만 간단히 두가지만 비교해 보았다.
| 비교 항목 | GoogleSearchAPIWrapper() | SerpAPI |
|---|---|---|
| 사용 목적 | Google Custom Search API 사용 | Google, Bing, YouTube, Baidu 등 다양한 검색 지원 |
| 지원 검색 엔진 | Google만 지원 | ✅ Google, Bing, DuckDuckGo, YouTube, Baidu, Yahoo 등 |
| LangChain 내장 지원 | ✅ LangChain에서 기본 제공 | ✅ LangChain에서 SerpAPIWrapper로 지원 |
| 설치 필요 여부 | ❌ (LangChain에 기본 포함) | ✅ serpapi 라이브러리 설치 필요 (pip install google-search-results) |
| API 키 필요 여부 | ✅ Google Custom Search API 키 필요 | ✅ SerpAPI API 키 필요 |
| 무료 사용 | ❌ 100개 요청 후 유료 | ❌ 무료 요청 제한 있음 (100회/월) |
| 응답 속도 | 보통 | 빠름 |
Chain of Thought (CoT)는 LLM이 복잡한 문제를 해결하기 위해 단계적 사고 과정을 명시적으로 전개하도록 설계된 프롬프트 전략이다. 이는 수학 문제, 논리 퍼즐, 과학적 추론 등 복잡한 작업에서 정확성을 향상시킨다.
CoT는 복잡한 문제를 해결하는 데 필수적인 도구로, Zero-shot 및 Few-shot CoT 전략으로 다양한 작업에 활용할 수 있다.
LLM은 강력한 자연어 처리 능력을 가지고 있지만, 복잡한 문제를 해결하는 데 한계를 가지고 있다.
# CoT 없이
Q: What is 12 × 15?
A: 180
# CoT 적용
Q: Solve step by step: What is 12 × 15?
A: First, calculate 12 × 10 = 120.
Then, calculate 12 × 5 = 60.
Add them: 120 + 60 = 180.
CoT는 프롬프트를 통해 논리적 사고가 가능하도록 유도하는 기법으로 Zero-Shot CoT과 Few-Shot CoT가 있다.
# Zero-shot CoT 적용 프롬프트
cot_prompt = '단계별로 생각해보세요: 123 x 31은 얼마인가요?'
cot_res = client.chat.completions.create(
model='gpt-4',
messages=[{"role":"user", "content": cot_prompt}]
cot_res.choices[0].message.content
# Zero-shot CoT 응답
123 x 31을 계산하기 위해 다음과 같은 단계를 따릅니다:
1. 먼저, 1 (31의 일의 자리)을 123에 곱합니다: 1 x 123 = 123
2. 다음으로, 3 (31의 십의 자리)을 123에 곱하고, 그 결과에 10을 곱합니다 (왜냐하면 3은 십의 자리에 있음): 3 x 123 x 10 = 3690
3. 마지막으로, 두 결과를 더합니다: 123 (1단계의 결과) + 3690 (2단계의 결과) = 3813 따라서, 123 x 31 = 3813입니다.
)
# Few-shot CoT 적용 프롬프트
few_shot_cot = """
Q: 123 x 31을 단계별로 계산해 보겠습니다.
A:
1. 123를 분해합니다:
123 = 100 + 20 + 3
2. 각 항을 31과 곱합니다:
- 100 x 31 = 3100
- 20 x 31 = 620
- 3 x 31 = 93
3. 이제 이 결과들을 더합니다:
- 3100 + 620 + 93
4. 계산을 진행하면:
- 3100 + 620 = 3720
- 3720 + 93 = 3813
따라서, 123 x 31 = 3813입니다.
Q: 789 x 56 은 얼마인가요?
A:
"""
res = client.chat.completions.create(
model='gpt-4',
messages=[{"role":"user", "content":few_shot_cot}]
)
res.choices[0].message.content
# Few-shot CoT 응답
1. 789를 분해합니다:
789 = 700 + 80 + 9
2. 각 항을 56과 곱합니다:
- 700 x 56 = 39200
- 80 x 56 = 4480
- 9 x 56 = 504
3. 이제 이 결과들을 더합니다:
- 39200 + 4480 + 504
4. 계산을 진행하면:
- 39200 + 4480 = 43680
- 43680 + 504 = 44184
따라서, 789 x 56 = 44184입니다.