AI Agents for Beginners - 9. Metacognition in AI Agents

Metacognition in AI agents — self-reflection, corrective RAG, pre-emptive context loading, goal bootstrapping, intent-aware search, code generation, and SQL as RAG.
June 9, 2026

AI Agents for Beginners - 9. Metacognition in AI Agents

이 글은 Microsoft의 AI Agents for Beginners 강좌 Lesson 09를 기반으로 정리한 내용입니다.

What is Metacognition?

Metacognition은 "자신의 생각에 대한 생각(thinking about thinking)"입니다.
AI Agent에서 메타인지는 에이전트가 자신의 내부 프로세스를 인식하고, 행동을 모니터링·조절·적응할 수 있는 능력을 의미합니다.
메타인지가 해결하는 주요 과제:
과제설명
Transparency에이전트가 자신의 추론과 결정을 설명할 수 있어야 함
Reasoning정보를 종합하고 올바른 결정을 내리는 능력 향상
Adaptation새로운 환경·조건 변화에 적응
Perception환경 데이터를 정확하게 인식하고 해석하는 정확도 향상
메타인지가 에이전트 설계에 중요한 이유:
Importance of Metacognition
Mermaid
flowchart LR MC["Metacognition\n자신의 사고 과정 인식"] MC --> SR["Self-Reflection\n성능 평가·개선 영역 파악"] MC --> AD["Adaptability\n과거 경험 기반 전략 수정"] MC --> EC["Error Correction\n오류 자율 감지·수정"] MC --> RM["Resource Management\n시간·연산 자원 최적화"]
메타인지의 핵심 예시:
  • "저렴한 항공편을 우선했는데… 직항편을 놓쳤을 수 있다. 다시 확인해보자."
  • "사용자가 '너무 복잡하다'고 할 때마다 내가 인기도 기준으로 추천한 것이 문제였다."
에이전트 구성 요소인 Persona·Tools·Skills가 결합되어 특정 태스크를 수행하는 "전문성 단위"를 만들고, 메타인지가 이 단위가 스스로 개선되도록 합니다.

Planning in Agents

Planning은 목표 달성을 위한 단계를 설계하고, 현재 상태·리소스·장애물을 고려하는 AI Agent 행동의 핵심 요소입니다.
여행 에이전트의 9단계 계획 프로세스:
Travel Agent Planning Flow
Mermaid
flowchart TD P1["1. Gather Preferences\n날짜·예산·관심사 수집"] --> P2["2. Retrieve Information\n항공·숙박·관광지 검색"] --> P3["3. Generate Recommendations\n개인화 일정 작성"] --> P4["4. Present to User\n일정 공유"] --> P5["5. Collect Feedback\n사용자 의견 수집"] --> P6["6. Adjust Based on Feedback\n일정 수정"] --> P7["7. Final Confirmation\n최종 확인"] --> P8["8. Book & Confirm\n예약 진행"] --> P9["9. Ongoing Support\n여행 중 지원"]
메타인지를 적용한 Travel Agent 구현:
travel_agent_metacognition.py
python
Metacognition Loop
Mermaid
flowchart TD G["gather_preferences()\n선호도 초기화"] --> R["generate_recommendations()\n항공·숙박·관광지 검색 + 일정 생성"] --> U["사용자에게 일정 제공"] --> FB["User Feedback\n{liked, disliked}"] FB --> Adj["adjust_based_on_feedback()\nexperience_data 누적\n선호도 재조정"] Adj -->|"Updated Preferences"| R
experience_data에 피드백을 누적하고, adjust_based_on_feedback로 선호도를 재조정한 뒤 새 일정을 생성하는 것이 메타인지 루프의 핵심입니다.

Corrective RAG System

두 가지 정보 접근 전략을 비교합니다:
Corrective RAGPre-emptive Context Load
방식쿼리 시점에 외부 소스에서 정보 검색처리 전 관련 컨텍스트를 미리 로드
업데이트실시간 정보사전 로드된 정보
속도검색 지연 발생즉각적 응답
정확성피드백 기반 오류 수정고정된 컨텍스트
적합 상황동적 데이터, 오류 수정 필요 시알려진 도메인, 빠른 응답 필요 시
RAG Tool Calling vs Pre-Emptive Context Load
Mermaid
%%{init: {'look': 'handDrawn'}}%% flowchart TD subgraph RAG["RAG Tool Calling"] direction TD LLM1["LLM"] LLM1 --> T1["Tool"] LLM1 --> T2["Tool"] LLM1 --> T3["Tool"] T1 & T2 & T3 --> R1["Response"] end subgraph PCL["Pre-Emptive Context Load"] direction TD LLM2["LLM"] LLM2 --> CTX["Context\n(쿼리 처리 전 제공)"] CTX --> R2["Response"] end

Corrective RAG 접근법

Corrective RAG는 세 가지 요소로 오류를 수정하고 정확도를 높입니다:
요소설명
Prompting Technique관련 정보를 검색하도록 에이전트를 유도하는 구체적인 프롬프트 작성
Tool검색된 정보의 관련성을 평가하고 정확한 응답을 생성하는 알고리즘·메커니즘 구현
Evaluation에이전트 성능을 지속적으로 평가하고 정확도·효율을 개선하기 위한 조정 반복

Corrective RAG 단계별 구현 예시

Travel Agent에 Corrective RAG를 적용하는 5단계:
Step 1 — 사용자 입력 수집
목적지·날짜·예산·관심사 등 여행 선호도를 수집합니다.
step1_preferences.py
python
Step 2 — 정보 검색 및 초기 추천 생성
수집된 선호도를 기반으로 항공·숙박·관광지를 검색하고 초기 일정을 생성합니다.
step2_retrieve.py
python
Step 3 — 사용자 피드백 수집
초기 추천에 대한 사용자의 긍정·부정 피드백을 수집합니다.
step3_feedback.py
python
Step 4 — Corrective RAG 적용
  • Prompting Technique: 피드백을 반영해 새 검색 쿼리 작성
step4_prompting.py
python
  • Tool: 업데이트된 선호도로 재검색 및 새 일정 생성
step4_tool.py
python
  • Evaluation: 피드백을 선호도에 반영하는 지속 평가 함수
step4_evaluation.py
python
Step 5 — 종합: Corrective RAG Travel Agent
위 단계를 하나의 클래스로 통합한 최종 예시입니다. adjust_based_on_feedback가 피드백 누적 → 선호도 갱신 → 새 일정 생성까지 한 번에 처리합니다.
corrective_rag_travel_agent.py
python
Corrective RAG Travel Agent Flow
Mermaid
flowchart TD GP["gather_preferences()\n목적지·예산·관심사 저장"] --> GR["generate_recommendations()\nretrieve_information() 호출"] GR --> RT["search_flights + hotels + attractions"] RT --> CI["create_itinerary()"] CI --> SU["사용자에게 일정 제공"] SU --> FB["User Feedback\n{liked, disliked}"] FB --> AF["adjust_based_on_feedback()\nexperience_data.append(feedback)\nadjust_preferences() → 선호도 갱신"] AF -->|"Updated user_preferences"| GR

Corrective RAG 흐름

Corrective RAG Flow
Mermaid
flowchart TD User["사용자 입력\n목적지·예산·관심사"] --> Retrieve["정보 검색\n항공·숙박·관광지"] --> Gen["초기 일정 생성"] --> Feedback["사용자 피드백 수집"] Feedback --> Adjust{피드백 분석} Adjust -->|"disliked 항목"| NewQuery["쿼리 재작성\npreferences['avoid'] 추가"] NewQuery --> Retrieve Adjust -->|"만족"| Done["최종 일정 확정"]

Pre-emptive Context Load

처리 전 알려진 도메인 정보를 메모리에 미리 로드해 외부 검색 없이 즉시 응답합니다:
preemptive_context.py
python
Pre-emptive Context Load Flow
Mermaid
flowchart TD Init["__init__()\nself.context 미리 로드\n{Paris, Tokyo, NY, Sydney}"] --> Query["사용자 목적지 쿼리"] --> Get["get_destination_info(destination)\nself.context.get(destination)"] Get --> Check{컨텍스트 존재?} Check -->|"Yes"| Hit["country·currency·language·attractions\n즉각 반환 (외부 검색 없음)"] Check -->|"No"| Miss["'정보 없음' 반환"]

Bootstrapping a Plan with a Goal Before Iterating

목표를 미리 정의한 뒤 반복적으로 계획을 개선하는 접근법입니다.
bootstrap_plan으로 초기 계획을 수립하고, iterate_plan으로 점진적으로 최적화합니다:
bootstrap_plan.py
python
Goal Bootstrapping Loop
Mermaid
flowchart TD Goal["명확한 목표 정의\n(예: 만족도 최대화, budget ≤ $2000)"] --> Bootstrap["bootstrap_plan\n목표·예산 기반 초기 계획 수립"] --> Execute["계획 실행"] --> Eval{결과 평가} Eval -->|"개선 가능"| Iterate["iterate_plan\n더 나은 목적지로 교체"] Iterate --> Execute Eval -->|"최적"| Done["최종 여행 계획 확정"]

Taking advantage of LLM for Re-ranking and Scoring

LLM Re-ranking은 초기 검색 결과를 그대로 사용하는 대신, LLM이 각 후보의 관련성·품질을 평가하고 최적 순서로 재정렬하는 기법입니다.
단계설명
Retrieval쿼리 기반으로 후보 문서·응답을 초기 검색
Re-rankingLLM이 후보를 관련성·품질 기준으로 재정렬 — 가장 유용한 정보가 상위에 위치
ScoringLLM이 각 후보에 점수를 부여해 최적 응답·문서 선택
여행 에이전트에서 사용자 선호도 기반으로 목적지를 LLM이 재순위·스코어링하는 예시:
llm_reranking.py
python
LLM Re-ranking & Scoring Flow
Mermaid
flowchart TD Query["사용자 선호도\nactivity: sightseeing\nculture: diverse"] --> Retrieve["초기 후보 목록\n(Paris, Tokyo, NYC, Sydney)"] --> Prompt["generate_prompt()\n선호도 + 목적지 설명 포함"] --> LLM["LLM (Azure OpenAI)\n관련성·품질 평가"] LLM --> Rerank["Re-ranking\n가장 적합한 목적지 상위 정렬"] Rerank --> Score["Scoring\n각 후보에 점수 부여"] Score --> Result["최종 추천 목록\n(순위 + 점수 포함)"]

RAG: Prompting Technique vs Tool

RAG는 프롬프팅 기법과 통합 도구 두 가지 방식으로 활용할 수 있습니다:
측면Prompting TechniqueTool
방식각 쿼리마다 수동으로 프롬프트 작성검색·생성 자동화
제어검색 과정에 대한 세밀한 제어 가능전 과정 자동 처리
유연성특정 요구에 맞는 커스텀 프롬프트대규모 구현에 더 효율적
복잡도프롬프트 작성·조정 필요AI Agent 아키텍처에 통합 용이
rag_prompting_vs_tool.py
python

Evaluating Relevancy

Relevancy 평가는 에이전트가 검색·생성한 정보가 사용자 쿼리에 적합하고 정확한지 지속적으로 확인하는 과정입니다.
관련성 평가의 핵심 개념:
개념설명
Context Awareness쿼리의 문맥을 이해해 관련 정보 검색 (예: 사용자 예산·취향 고려)
Accuracy제공 정보가 사실적으로 정확하고 최신이어야 함
User Intent쿼리 이면의 목적을 추론해 가장 관련성 높은 정보 제공
Feedback Loop사용자 피드백을 지속 수집·분석해 관련성 평가 프로세스 개선
실용적인 관련성 평가 기법:
relevancy_techniques.py
python
Travel Agent에 관련성 평가를 적용한 전체 예시:
travel_agent_relevancy.py
python
Relevancy Evaluation Flow
Mermaid
flowchart TD Pref["User Preferences\n{destination, budget, interests}"] --> GenRec["generate_recommendations()\n일정 생성 시작"] GenRec --> Retrieve["retrieve_information()\n항공·숙박·관광지 검색"] Retrieve --> Rank["filter_and_rank(hotels)\nrelevance_score 기준 정렬 → 상위 10개"] Rank --> Score["relevance_score(item, query)\ncategory·price·location 매칭 점수"] Score --> Itin["create_itinerary()\n최종 일정 생성"] Itin --> FB["User Feedback\n{liked, disliked}"] FB --> Adjust["adjust_based_on_feedback()\nrelevance +1 / -1 조정"] Adjust -->|"다음 추천에 반영"| Rank

Search with Intent

Intent-aware Search는 키워드 매칭을 넘어 사용자 쿼리의 실제 목적을 파악해 더 관련성 높은 결과를 제공합니다.
세 가지 인텐트 유형:
Intent설명예시
Informational정보 탐색"파리에서 가볼 만한 박물관은?"
Navigational특정 웹사이트·페이지 이동"루브르 박물관 공식 사이트"
Transactional예약·구매 등 트랜잭션 수행"파리행 항공편 예약"
search_with_intent.py
python
Intent-Aware Search Flow
Mermaid
zenuml title Intent-Aware Search Flow User->Agent: "best museums in Paris" Agent->IntentClassifier: identify_intent(query) IntentClassifier->Agent: "informational" Agent->ContextAnalyzer: analyze_context(query, user_history) ContextAnalyzer->Agent: current + history context Agent->SearchEngine: search informational query with preferences SearchEngine->Agent: raw results Agent->Personalizer: personalize_results(results, user_history) Personalizer->Agent: filtered top 10 Agent->User: personalized recommendations

Generating Code as a Tool

Code Generating Agent는 AI 모델을 사용해 코드를 작성·실행하며 복잡한 문제를 해결합니다.
주요 활용 분야: 자동 코드 생성, SQL as RAG, 데이터 분석 자동화.
Travel Agent를 예시로 단계별로 구현합니다.
Step 1 — 사용자 선호도 수집
step1_agent.py
python
Step 2 — 데이터 검색 코드 동적 생성
에이전트가 선호도에 맞는 코드 스니펫을 직접 생성합니다.
step2_generate_code.py
python
Step 3 — 생성된 코드 실행
step3_execute.py
python
Step 4 — 일정 생성
step4_itinerary.py
python
Step 5 — 피드백 기반 코드 재생성
피드백을 반영해 선호도를 갱신하고, 갱신된 선호도로 코드를 다시 생성·실행합니다.
step5_feedback_regen.py
python
Code Generating Agent Flow
Mermaid
flowchart TD S1["Step 1\ngather_preferences()\n사용자 선호도 수집"] --> S2["Step 2\ngenerate_code_to_fetch_data()\ngenerate_code_to_fetch_hotels()\n코드 동적 생성"] --> S3["Step 3\nexecute_code()\n생성된 코드 실행 → flights, hotels"] --> S4["Step 4\ngenerate_itinerary()\n항공·숙박·관광지 조합"] --> S5["Step 5\nadjust_based_on_feedback()\n선호도 갱신 → 코드 재생성·재실행"] S5 -->|"Updated Preferences"| S2

Leveraging Environmental Awareness and Reasoning

Schema 기반 환경 인식은 테이블 스키마를 이해하고 피드백에 따라 어떤 필드를 어떻게 조정할지 추론하는 방법입니다.
schema_awareness.py
python
Schema-Aware Feedback Adjustment Flow
Mermaid
flowchart TD FB["User Feedback\n{liked, disliked}"] SC["Schema\n{favorites·avoid: +/-/default}"] FB & SC --> AdjFn["adjust_based_on_feedback()\nfavorites·avoid 직접 갱신"] AdjFn --> Loop["schema 필드 순회"] Loop --> EnvFn["adjust_based_on_environment()\n필드별 조정값 결정"] EnvFn --> UPref["Updated Preferences"] UPref --> GenF["generate_code_to_fetch_data()"] UPref --> GenH["generate_code_to_fetch_hotels()"] GenF --> ExF["execute_code() → flights"] GenH --> ExH["execute_code() → hotels"] ExF & ExH --> Itin["generate_itinerary()\nUpdated Itinerary"]

Using SQL as a Retrieval-Augmented Generation (RAG) Technique

SQL as RAG는 사용자 입력 기반으로 동적 SQL 쿼리를 생성해 데이터베이스에서 정보를 검색합니다:
sql_as_rag.py
python
동적으로 생성되는 SQL 쿼리 예시:
example_queries.sql
sql
SQL as RAG: Query Generation & Execution Flow
Mermaid
flowchart TD Pref["User Preferences\n{destination, budget, dates, interests}"] --> GenRec["generate_recommendations(preferences)"] GenRec --> FQ["generate_sql_query('flights')\nSELECT * FROM flights WHERE ..."] GenRec --> HQ["generate_sql_query('hotels')\nSELECT * FROM hotels WHERE ..."] GenRec --> AQ["generate_sql_query('attractions')\nSELECT * FROM attractions WHERE ..."] FQ --> EF["execute_sql_query()\n→ flight results"] HQ --> EH["execute_sql_query()\n→ hotel results"] AQ --> EA["execute_sql_query()\n→ attraction results"] EF & EH & EA --> Dict["{flights, hotels, attractions}\nItinerary Dict"]

Example of Metacognition

지금까지 배운 개념을 통합한 메타인지 구현 예제입니다.
에이전트가 초기 결정을 내리고 → 자기 반성을 통해 오류를 인식하고 → 전략을 수정하는 3단계 사이클을 구현합니다:
hotel_metacognition.py
python
Metacognition: Reflect & Adjust Loop
Mermaid
flowchart TD Start["초기 결정\nrecommend_hotel('cheapest')"] --> Eval["자기 반성\nreflect_on_choice()"] Eval --> Feedback{User Feedback} Feedback -->|"'bad'\nprice < 100 or quality < 7"| Switch["전략 전환\n'cheapest' → 'highest_quality'"] Switch --> Retry["재추천\nrecommend_hotel('highest_quality')"] Retry --> Eval Feedback -->|"'good'"| Done["추천 확정"]
이것이 메타인지의 핵심입니다:
  • 초기 결정: cheapest 전략으로 Budget Inn 선택
  • 자기 반성: quality 6 → "bad" 피드백 인식
  • 전략 수정: 최종적으로 Luxury Stay 추천
에이전트는 단순히 최종 추천만 바꾸는 것이 아니라, 자신의 의사결정 방식 자체를 수정합니다.

Summary

Lesson 09 Summary
Mermaid
flowchart LR Root["Metacognition\nin AI Agents"] Root --> MC["메타인지 루프"] Root --> RAG["RAG 전략"] Root --> Search["Intent Search"] Root --> Code["Code Generation"] MC --> M1["Self-Reflection\n성능 평가"] MC --> M2["Error Detection\n오류 인식"] MC --> M3["Strategy Adjustment\n전략 수정"] RAG --> R1["Corrective RAG\n피드백 기반 재검색"] RAG --> R2["Pre-emptive Load\n사전 컨텍스트 로드"] RAG --> R3["SQL as RAG\n동적 쿼리 생성"] Search --> S1["Informational"] Search --> S2["Navigational"] Search --> S3["Transactional"] Code --> C1["generate_code\n동적 코드 생성"] Code --> C2["execute_code\n실행·결과 반영"]
  • Metacognition은 에이전트가 자신의 의사결정 방식을 인식하고 수정하는 능력으로, 단순한 결과 수정이 아닌 추론 전략 자체의 개선입니다
  • Corrective RAG는 사용자 피드백을 prefer/avoid로 반영해 쿼리를 재작성하고 재검색하는 반복적 자기 수정 루프를 구현합니다
  • Pre-emptive Context Load는 알려진 도메인 정보를 미리 메모리에 로드해 외부 검색 없이 즉각 응답하는 방식으로, 속도가 중요할 때 유효합니다
  • Intent-aware Search로 Informational·Navigational·Transactional 인텐트를 분류하면 키워드 매칭보다 훨씬 관련성 높은 결과를 제공합니다
  • Code Generation + SQL as RAG로 에이전트가 동적으로 코드를 작성·실행해 실시간 데이터를 검색하고 복잡한 태스크를 자동화합니다
Jooojub
System S/W engineer
Explore Tags
Series
    Recent Post
    © 2026. jooojub. All right reserved.