프롬프트 엔지니어링 • 챕터 5 / 6
┌─────────────┐ ┌───────┐ ┌────────────┐
│ IN │ ──────►│ LLM │──────► │ OUT │
└─────────────┘ └───┬───┘ └────────────┘
│
┌──────┴──────┐
│ Retrieval │
│ Tools │
│ Memory │
└─────────────┘| 요소 | 설명 |
|---|---|
| Retrieval | 주어진 질문에 관해 검색 후 검색 결과에 따라 답변 |
| Tools | LLM이 사용할 수 있는 외부 함수나 모듈 |
| Memory | 대화 히스토리 저장 및 활용 |
┌────────┐ ┌────────┐
│ 질문 │ ───────► │ 답변 │
└────────┘ └────────┘┌────────┐ Retriever ┌─────────────┐
│ 질문 │ ──────────────► │ Context │
└────────┘ └──────┬──────┘
│
검색 결과와 함께 답변| 장점 | 설명 |
|---|---|
| 최신 정보 활용 | 실시간 정보 검색 가능 |
| 도메인 지식 보강 | 특정 분야 지식 추가 |
| 환각(Hallucination) 감소 | 검색 결과 기반 답변 |
| 출처 추적 가능 | 정보의 근거 제시 |
Tool/함수(Function) 의 역할:
| Tool 유형 | 기능 | 예시 |
|---|---|---|
| 웹 검색 | 실시간 정보 검색 | SerpApi, Tavily |
| 코드 실행 | Python 코드 실행 | Python REPL |
| 외부 API | GitHub, Slack, Gmail 등 | GitHub API, Slack API |
| 특징 | 설명 |
|---|---|
| 텍스트로 구성 | Tool 정의는 텍스트 형태 |
| Prompt 필요 | LLM에 입력할 Prompt 포함 |
| 자동 실행 | LLM이 판단하여 Tool 호출 |
User: "61번 서버 상태 확인해줘"
│
▼
┌─────────┐
│ LLM │
└────┬────┘
│
▼
Function Call: {Tool: Retrieve_Status, Query: '61'}
│
▼
Tool: {"Result": 504}
│
▼
LLM: "504 Error로, 게이트웨이 타임아웃으로 추정됩니다."| 요소 | 설명 |
|---|---|
| Human | User의 요청 |
| Tool | 실행할 도구/함수 |
| AI | LLM의 판단과 응답 |
| System Message | 사용 가능한 Tool 설명 |
1단계: 외부 함수를 Prompt로 전달
# 활용할 수 있는 외부 함수를 Prompt로 전달
# 파싱 가능한 출력을 LLM이 생성하면,
# 이를 자동으로 실행하여 결과를 LLM에 전달2단계: LLM의 Function Call 생성
{
"Tool": "Retrieve_Status",
"Query": "61"
}3단계: 결과 반환 및 해석
Tool: {"Result": 504}
LLM: "504 Error로, 게이트웨이 타임아웃으로 추정됩니다."예시 흐름:
User: "정리해서 report.txt에 저장해줘"
│
▼
Function Call: {Tool: Write_file, Content: '# 최종 정리 내용...'}
│
▼
Tool: {"Result": "저장 완료!"}
│
▼
LLM: "리포트 저장이 완료되었습니다!"양방향 활용
외부 Tool과 Text로 소통할 수 있는 인터페이스만 주어지면 양방향 활용이 가능합니다. 예: GitHub 이슈 해결 및 커밋, 웹 게시물 Upload
from pydantic import BaseModel, Field
class get_news(BaseModel):
"""query를 이용하여 뉴스 검색"""
query: str = Field(description="검색어(3단어 이하)")
tools = [openai.pydantic_function_tool(get_news)]{
"type": "function",
"function": {
"name": "get_news",
"strict": true,
"parameters": {
"description": "query를 이용하여 뉴스 검색",
"properties": {
"query": {
"description": "검색어(3단어 이하)",
"type": "string"
}
},
"required": ["query"]
}
}
}| 효과 | 설명 |
|---|---|
| 상황 판단 | 상황을 판단하고, 지시하고, 제어할 수 있는 능력 |
| 컨트롤 타워 | LLM의 여러 기능을 활용할 수 있는 컨트롤 타워 역할 |
| 다양한 분야 적용 | Robotics, 업무 자동화, 스케줄링 등 |
| 분야 | 활용 예시 |
|---|---|
| Robotics | 로봇 제어, 동작 명령 |
| 업무 자동화 | 워크플로우 관리, 작업 스케줄링 |
| 스케줄링 | 일정 관리, 리마인더 |
| 개발 보조 | 코드 생성, 디버깅, 테스트 |
Short-term memory Long-term memory
┌──────────────────┐ ┌─────────────────┐
│ Human message │ │ 장기 저장소 │
│ AI message │ │ (Store) │
│ Human message │ └─────────────────┘
│ AI message │ │
└──────────────────┘ ▼
(Checkpointer) ┌────────┐
│ LLM │
└────────┘| 특징 | 설명 |
|---|---|
| 범위 | Session 단위의 짧은 Memory |
| 저장 내용 | 현재 대화 내용 |
| 구조 | Human message ↔ AI message 교환 |
| 특징 | 설명 |
|---|---|
| 범위 | User, 작업 별 정보를 따로 저장 |
| 저장 내용 | 사용자 선호도, 이전 작업 내역 등 |
| 목적 | 장기적 컨텍스트 유지 |
| 가치 | 설명 |
|---|---|
| 대화 컨텍스트 유지 | 이전 대화 내용 참조 |
| 개인화된 응답 | 사용자 맞춤 답변 |
| 이전 작업 참조 | 작업 연속성 유지 |
| 서비스 품질 향상 | 일관된 사용자 경험 |
| 요소 | 역할 |
|---|---|
| Retrieval | 외부 정보 검색 및 활용 |
| Tools | 외부 함수/API 실행 |
| Memory | 대화 히스토리 관리 |
| 개념 | 설명 |
|---|---|
| Taker | LLM이 Tool 결과를 받음 |
| Giver | LLM이 Tool을 통해 작업 수행 |
| Function Call | JSON 형식의 함수 호출 |
| 유형 | 설명 |
|---|---|
| Short-term | 세션 단위 대화 저장 |
| Long-term | 사용자별 장기 정보 저장 |