diff --git a/lib/make_slide_for_260724_seminar/SLIDE.md b/lib/make_slide_for_260724_seminar/SLIDE.md index 0d8f0b9..603fc02 100644 --- a/lib/make_slide_for_260724_seminar/SLIDE.md +++ b/lib/make_slide_for_260724_seminar/SLIDE.md @@ -72,6 +72,9 @@ marp: true 사용자가 최종 목표만 주면 스스로 실행 가능한 단계별 세부 태스크를 설계하고, 진행 과정에서 문제가 생기면 계획을 유연하게 수정하는 능력입니다. +- **Task Decomposition (작업 분해)**: 복잡한 목표를 실행 가능한 작은 단위의 세부 태스크로 분할 (예: Chain of Thought, Tree of Thoughts 등) +- **Self-Reflection (자기 성찰 및 피드백)**: 행동 결과를 스스로 분석하고 실수를 교정하여 향후 계획을 실시간으로 수정 (예: ReAct, Reflexion 프레임워크) + * **실제 예시**: 에이전트에게 "블로그 기사 작성"을 요청하면, 스스로 **'키워드 조사 ➡️ 개요 작성 ➡️ 본문 집필 ➡️ 오탈자 검사'** 순으로 계획을 세웁니다. 만약 맞춤법 검사 도중 치명적인 논리 오류를 발견하면, 본문 작성 단계로 스스로 되돌아가 계획을 수정하고 다시 쓰는 자가 성찰(Self-Reflection)을 거칩니다. @@ -81,6 +84,9 @@ marp: true 현재 나누는 대화의 즉각적인 흐름(단기 기억)뿐만 아니라, 과거의 경험과 누적된 지식(장기 기억)을 필요할 때마다 영속적으로 꺼내어 쓰는 능력입니다. +- **Short-term Memory (단기 기억)**: 현재 대화나 컨텍스트 윈도우 내에서 실시간으로 유지되는 즉각적인 맥락 정보 +- **Long-term Memory (장기 기억)**: 외부 데이터베이스나 벡터 DB를 활용하여 과거 대화 기록 및 지식을 RAG 기법으로 바인딩하는 정보 보존 공간 + * **실제 예시**: 에이전트에게 "어제 작업하던 파이썬 소스코드의 오류를 이어서 수정해줘"라고 요청하는 경우입니다. 에이전트는 데이터베이스에 누적된 과거 대화 히스토리와, 벡터 DB에 저장되어 있는 소스코드의 예전 상태 정보를 동적으로 인출(Retrieval)해 와 대화 맥락을 끊김 없이 이어갑니다. @@ -108,6 +114,8 @@ marp: true 현재 에이전트 기술에서 가장 중요한 변화 중 하나는, 과거에 에이전트 제어 시스템(Scaffolding, 에이전트의 구동을 돕는 외부 뼈대 구조)이 수동으로 제어하던 기능들이 점점 AI 모델 내부로 흡수되고 있는 현상입니다. +- https://arca.live/b/characterai/174977057?category=%EB%89%B4%EC%8A%A42&p=1 + - **스스로 생각하는 모델의 등장 (Test-time Compute, 추론 시점 추가 연산)** 최근 출시된 Gemini Thinking이나 OpenAI o1/o3 같은 모델들은 외부 시스템이 루프를 돌려주지 않아도, 모델 스스로 출력을 내보내기 전에 내부적으로 계획을 세우고(Planning) 스스로 오류를 성찰(Reflection)하는 과정을 완료합니다. - **인지와 집행의 명확한 역할 분담** @@ -119,41 +127,73 @@ marp: true # 1. AI 에이전트 구현을 위한 3대 핵심 엔지니어링 기법 -## AI 모델(LLM) vs AI 에이전트 -AI 에이전트(AI Agent)는 단순히 사용자의 텍스트 입력을 받아 응답을 생성하는 대화형 인터페이스(Chatbot)를 넘어, 주어진 최종 목표(Goal)를 자율적으로 달성하기 위해 환경을 인식(Perceive)하고, 스스로 계획(Planning) 및 추론(Reasoning)하며, 도구를 사용해 물리적/디지털적 행동(Action)을 수행하는 LLM 기반 소프트웨어 시스템입니다. +성공적인 AI 에이전트 시스템을 구현하기 위해서는 단순히 모델에게 프롬프트를 입력하는 것을 넘어, **모델 제어**, **정보 연동**, **물리적 환경 연결**을 유기적으로 엮어내는 3가지 핵심 엔지니어링 기법이 필요합니다. -LLM 기반 에이전트 시스템 아키텍처는 크게 다음 3가지 핵심 요소로 구성됩니다: -1. **Planning (계획 및 추론)** - - **Task Decomposition (작업 분해)**: 복잡한 목표를 실행 가능한 작은 단위의 세부 태스크로 분할 (예: Chain of Thought, Tree of Thoughts 등) - - **Self-Reflection (자기 성찰 및 피드백)**: 행동 결과를 스스로 분석하고 실수를 교정하여 향후 계획을 실시간으로 수정 (예: ReAct, Reflexion 프레임워크) -2. **Memory (기억 장치)** - - **Short-term Memory (단기 기억)**: 현재 대화나 컨텍스트 윈도우 내에서 실시간으로 유지되는 즉각적인 맥락 정보 - - **Long-term Memory (장기 기억)**: 외부 데이터베이스나 벡터 DB를 활용하여 과거 대화 기록 및 지식을 RAG 기법으로 바인딩하는 정보 보존 공간 +1. **프롬프트 엔지니어링 (Prompt Engineering)**: 에이전트의 페르소나와 사고 방식(추론 가이드라인)을 규정하는 작업입니다. +2. **컨텍스트 엔지니어링 (Context Engineering)**: 대화 흐름을 끊김 없이 보존하고 관련 데이터를 적시에 제공하는 정보 정리 작업입니다. +3. **하네스 엔지니어링 (Harness Engineering)**: 격리된 환경에서 다양한 소프트웨어 도구를 안전하게 조작할 수 있는 물리적 손발을 달아주는 작업입니다. -- https://arca.live/b/characterai/174977057?category=%EB%89%B4%EC%8A%A42&p=1 +--- -## 3대 핵심 엔지니어링 기법 -성공적인 AI 에이전트 구현을 위해서는 모델 제어, 정보 연동, 물리적 환경 연결을 최적화하는 3대 엔지니어링 기법이 필수적으로 수반되어야 합니다. +### 1️⃣ 프롬프트 엔지니어링 (Prompt Engineering) -- ### 프롬프트 엔지니어링 (Prompt Engineering) - 에이전트에게 명확한 역할 페르소나와 추론 가이드라인을 설계하고, 효율적인 추론 경로를 유도하기 위해 프롬프트 구조와 예시(Few-shot)를 최적화하는 기법입니다. - - **역할 페르소나 설계**: 에이전트가 특정 전문 도메인 지식과 행동 양식을 고수할 수 있도록 페르소나를 규정 - - **추론 가이드라인 설계**: ReAct와 같은 사고 단계를 정의하여 모델이 계획 단계를 건너뛰지 않고 순차적으로 사고하도록 제어 - - **Few-shot 최적화**: 최적의 추론 경로 및 응답 포맷 예시를 프롬프트에 제공하여 응답 일관성을 극대화 +에이전트가 주체적으로 판단하고 행동의 방향성을 잃지 않도록 역할 페르소나를 설계하고, **ReAct(Reason + Action)**와 같은 단계별 사고 흐름(Thought ➡️ Action ➡️ Observation)을 유도하는 기법입니다. -- ### 컨텍스트 엔지니어링 (Context Engineering) - 대화 상태(State)와 흐름을 보존하며, 외부 데이터베이스나 기억(Memory) 장치로부터 필요한 정보를 적시에 모델의 컨텍스트 윈도우에 효율적으로 바인딩하고 공급하는 기술입니다. 단일 에이전트 관점에서는 제한된 컨텍스트 공간 내에서 정보 밀도를 극대화하는 설계가 핵심입니다. - - **대화 상태 및 흐름 보존**: 이전 턴의 작업 상태와 대화 맥락을 유실 없이 세션 전반에 유지 - - **적시 동적 바인딩**: 외부 RAG 검색기나 메모리 캐시로부터 관련성이 가장 높은 데이터만을 선별하여 컨텍스트 윈도우에 결합 - - **메모리 압축 및 정리**: 불필요한 과거 로그를 요약하거나 중요 상태 구조체 위주로 정제하여 토큰 윈도우 효율성 제고 +* **핵심 설계 요소**: + - **페르소나 설계**: 전문 도메인 지식과 행동 양식(예: "너는 주니어 개발자를 코칭하는 꼼꼼한 테크리더 에이전트다") 부여 + - **추론 가이드라인**: 계획을 건너뛰고 섣부른 답변을 내지 않도록 논리적인 생각 단계를 의도적으로 설정 +* **실제 프롬프트 구조 예시**: + ```text + [System Prompt] + 너는 복잡한 수식을 계산하는 수학 에이전트다. 다음 형식으로 사고해라: + - Thought: 문제 해결을 위한 다음 행동 계획을 작성해라. + - Action: 호출할 도구 이름과 인자값을 JSON으로 적어라. (예: Calculator) + - Observation: 도구 실행 결과가 여기에 채워질 것이다. + - Thought: 실행 결과를 바탕으로 성찰하고, 필요하면 다음 Action을 설계해라. + ``` -- ### 하네스 엔지니어링 (Harness Engineering) - 에이전트가 계산기, 웹 브라우저, 외부 API 및 파일 시스템 등의 물리적 도구(Tools/Tool Use)에 안전하고 유연하게 연결되어 명령을 실행할 수 있도록 연결 고리를 결합하는 도구 연동 인터페이스 기술입니다. - - **물리 인터페이스 결합**: LLM의 도구 호출 의도(Tool Call)를 가로채어 실제 운영체제나 네트워크 상의 실행 스크립트로 전달하고 실행 결과를 모델에 반환 - - **보안 샌드박싱**: 임의 코드 실행이나 파일 훼손 방지를 위해 파일 시스템 격리 및 API 호출 권한 등의 안전 제어막 형성 - - **도구 활용 (Tool Use)**: 에이전트가 학습되지 않은 외부 정보에 접근하거나 외부 시스템에 영향을 미치기 위해 계산기, 코드 실행용 샌드박스, 웹 브라우저, 외부 API 등을 주도적으로 호출하는 능력 +--- - ![Screenshot 2026-06-25 at 9.39.07 pm](../../assets/images/Screenshot%202026-06-25%20at%209.39.07%20pm.png) +### 2️⃣ 컨텍스트 엔지니어링 (Context Engineering) + +에이전트가 다루는 대화 맥락과 작업 상태(State)를 효율적으로 정제하고, 수많은 외부 정보 중 **지금 꼭 필요한 관련 데이터(RAG)**만을 선별하여 제한된 AI의 기억 공간(컨텍스트 윈도우)에 밀도 높게 채워 넣는 기술입니다. + +* **핵심 설계 요소**: + - **대화 상태 보존**: 이전 턴의 작업 결과를 유실 없이 보존 + - **동적 바인딩**: 외부 RAG 검색기에서 관련도 높은 중요 데이터만 적시에 필터링하여 공급 + - **메모리 압축**: 불필요한 과거 로그는 요약하고, 핵심 현재 상태 구조체만 유지해 토큰 낭비 방지 +* **에이전트 상태 보존 예시 (State JSON)**: + ```json + { + "task_id": "job_10294", + "current_working_directory": "/workspace/src", + "error_logs": ["SyntaxError: unexpected EOF while parsing at line 14"], + "completed_subtasks": ["1. 소스코드 로드 완료", "2. 오류 라인 식별"], + "next_action_required": "오류 라인 14의 괄호 닫힘 확인 및 수정 스크립트 작성" + } + ``` + +--- + +### 3️⃣ 하네스 엔지니어링 (Harness Engineering) + +에이전트가 파일 시스템 제어, 브라우저 조작, 외부 API 호출 등 컴퓨터 세상의 다양한 도구들을 안전하게 가동할 수 있도록 **물리적 인터페이스(연결 고리)**를 구성하는 기술입니다. + +* **핵심 설계 요소**: + - **도구 호출 가로채기(Intercepting)**: 모델이 내놓은 도구 호출 의도(JSON 등)를 감지하고, 실제 터미널이나 프로그램의 함수로 전달해 구동함 + - **보안 샌드박싱 (Sandboxing)**: 에이전트가 악성 코드나 파괴적인 명령어를 무단 실행하지 않도록 격리된 가상 환경을 구축하고 권한을 통제함 +* **물리 인터페이스 도구 결합 예시**: + ``` + [LLM의 출력] ──> "Action: execute_command, args: { cmd: 'ls -la' }" + │ (하네스가 이를 가로챔) + ▼ + [하네스 제어기] ──> 격리된 Docker 샌드박스 내부에서 'ls -la' 실제 실행 + │ (실행 결과 가로챔) + ▼ + [LLM의 입력] <── "Observation: total 12\ndrwxr-xr-x 3 user..." (모델에 반환) + ``` + + ![Harness Diagram](../../assets/images/Screenshot%202026-06-25%20at%209.39.07%20pm.png) --- diff --git a/lib/make_slide_for_260724_seminar/chapters/0_intro.md b/lib/make_slide_for_260724_seminar/chapters/0_intro.md index b1673bf..157f173 100644 --- a/lib/make_slide_for_260724_seminar/chapters/0_intro.md +++ b/lib/make_slide_for_260724_seminar/chapters/0_intro.md @@ -69,6 +69,9 @@ marp: true 사용자가 최종 목표만 주면 스스로 실행 가능한 단계별 세부 태스크를 설계하고, 진행 과정에서 문제가 생기면 계획을 유연하게 수정하는 능력입니다. +- **Task Decomposition (작업 분해)**: 복잡한 목표를 실행 가능한 작은 단위의 세부 태스크로 분할 (예: Chain of Thought, Tree of Thoughts 등) +- **Self-Reflection (자기 성찰 및 피드백)**: 행동 결과를 스스로 분석하고 실수를 교정하여 향후 계획을 실시간으로 수정 (예: ReAct, Reflexion 프레임워크) + * **실제 예시**: 에이전트에게 "블로그 기사 작성"을 요청하면, 스스로 **'키워드 조사 ➡️ 개요 작성 ➡️ 본문 집필 ➡️ 오탈자 검사'** 순으로 계획을 세웁니다. 만약 맞춤법 검사 도중 치명적인 논리 오류를 발견하면, 본문 작성 단계로 스스로 되돌아가 계획을 수정하고 다시 쓰는 자가 성찰(Self-Reflection)을 거칩니다. @@ -78,6 +81,9 @@ marp: true 현재 나누는 대화의 즉각적인 흐름(단기 기억)뿐만 아니라, 과거의 경험과 누적된 지식(장기 기억)을 필요할 때마다 영속적으로 꺼내어 쓰는 능력입니다. +- **Short-term Memory (단기 기억)**: 현재 대화나 컨텍스트 윈도우 내에서 실시간으로 유지되는 즉각적인 맥락 정보 +- **Long-term Memory (장기 기억)**: 외부 데이터베이스나 벡터 DB를 활용하여 과거 대화 기록 및 지식을 RAG 기법으로 바인딩하는 정보 보존 공간 + * **실제 예시**: 에이전트에게 "어제 작업하던 파이썬 소스코드의 오류를 이어서 수정해줘"라고 요청하는 경우입니다. 에이전트는 데이터베이스에 누적된 과거 대화 히스토리와, 벡터 DB에 저장되어 있는 소스코드의 예전 상태 정보를 동적으로 인출(Retrieval)해 와 대화 맥락을 끊김 없이 이어갑니다. @@ -105,6 +111,8 @@ marp: true 현재 에이전트 기술에서 가장 중요한 변화 중 하나는, 과거에 에이전트 제어 시스템(Scaffolding, 에이전트의 구동을 돕는 외부 뼈대 구조)이 수동으로 제어하던 기능들이 점점 AI 모델 내부로 흡수되고 있는 현상입니다. +- https://arca.live/b/characterai/174977057?category=%EB%89%B4%EC%8A%A42&p=1 + - **스스로 생각하는 모델의 등장 (Test-time Compute, 추론 시점 추가 연산)** 최근 출시된 Gemini Thinking이나 OpenAI o1/o3 같은 모델들은 외부 시스템이 루프를 돌려주지 않아도, 모델 스스로 출력을 내보내기 전에 내부적으로 계획을 세우고(Planning) 스스로 오류를 성찰(Reflection)하는 과정을 완료합니다. - **인지와 집행의 명확한 역할 분담** diff --git a/lib/make_slide_for_260724_seminar/chapters/1_engineering.md b/lib/make_slide_for_260724_seminar/chapters/1_engineering.md index 4dffaf0..14b7b7b 100644 --- a/lib/make_slide_for_260724_seminar/chapters/1_engineering.md +++ b/lib/make_slide_for_260724_seminar/chapters/1_engineering.md @@ -4,40 +4,70 @@ marp: true # 1. AI 에이전트 구현을 위한 3대 핵심 엔지니어링 기법 -## AI 모델(LLM) vs AI 에이전트 -AI 에이전트(AI Agent)는 단순히 사용자의 텍스트 입력을 받아 응답을 생성하는 대화형 인터페이스(Chatbot)를 넘어, 주어진 최종 목표(Goal)를 자율적으로 달성하기 위해 환경을 인식(Perceive)하고, 스스로 계획(Planning) 및 추론(Reasoning)하며, 도구를 사용해 물리적/디지털적 행동(Action)을 수행하는 LLM 기반 소프트웨어 시스템입니다. +성공적인 AI 에이전트 시스템을 구현하기 위해서는 단순히 모델에게 프롬프트를 입력하는 것을 넘어, **모델 제어**, **정보 연동**, **물리적 환경 연결**을 유기적으로 엮어내는 3가지 핵심 엔지니어링 기법이 필요합니다. -LLM 기반 에이전트 시스템 아키텍처는 크게 다음 3가지 핵심 요소로 구성됩니다: -1. **Planning (계획 및 추론)** - - **Task Decomposition (작업 분해)**: 복잡한 목표를 실행 가능한 작은 단위의 세부 태스크로 분할 (예: Chain of Thought, Tree of Thoughts 등) - - **Self-Reflection (자기 성찰 및 피드백)**: 행동 결과를 스스로 분석하고 실수를 교정하여 향후 계획을 실시간으로 수정 (예: ReAct, Reflexion 프레임워크) -2. **Memory (기억 장치)** - - **Short-term Memory (단기 기억)**: 현재 대화나 컨텍스트 윈도우 내에서 실시간으로 유지되는 즉각적인 맥락 정보 - - **Long-term Memory (장기 기억)**: 외부 데이터베이스나 벡터 DB를 활용하여 과거 대화 기록 및 지식을 RAG 기법으로 바인딩하는 정보 보존 공간 - -- https://arca.live/b/characterai/174977057?category=%EB%89%B4%EC%8A%A42&p=1 - -## 3대 핵심 엔지니어링 기법 -성공적인 AI 에이전트 구현을 위해서는 모델 제어, 정보 연동, 물리적 환경 연결을 최적화하는 3대 엔지니어링 기법이 필수적으로 수반되어야 합니다. - -- ### 프롬프트 엔지니어링 (Prompt Engineering) - 에이전트에게 명확한 역할 페르소나와 추론 가이드라인을 설계하고, 효율적인 추론 경로를 유도하기 위해 프롬프트 구조와 예시(Few-shot)를 최적화하는 기법입니다. - - **역할 페르소나 설계**: 에이전트가 특정 전문 도메인 지식과 행동 양식을 고수할 수 있도록 페르소나를 규정 - - **추론 가이드라인 설계**: ReAct와 같은 사고 단계를 정의하여 모델이 계획 단계를 건너뛰지 않고 순차적으로 사고하도록 제어 - - **Few-shot 최적화**: 최적의 추론 경로 및 응답 포맷 예시를 프롬프트에 제공하여 응답 일관성을 극대화 - -- ### 컨텍스트 엔지니어링 (Context Engineering) - 대화 상태(State)와 흐름을 보존하며, 외부 데이터베이스나 기억(Memory) 장치로부터 필요한 정보를 적시에 모델의 컨텍스트 윈도우에 효율적으로 바인딩하고 공급하는 기술입니다. 단일 에이전트 관점에서는 제한된 컨텍스트 공간 내에서 정보 밀도를 극대화하는 설계가 핵심입니다. - - **대화 상태 및 흐름 보존**: 이전 턴의 작업 상태와 대화 맥락을 유실 없이 세션 전반에 유지 - - **적시 동적 바인딩**: 외부 RAG 검색기나 메모리 캐시로부터 관련성이 가장 높은 데이터만을 선별하여 컨텍스트 윈도우에 결합 - - **메모리 압축 및 정리**: 불필요한 과거 로그를 요약하거나 중요 상태 구조체 위주로 정제하여 토큰 윈도우 효율성 제고 - -- ### 하네스 엔지니어링 (Harness Engineering) - 에이전트가 계산기, 웹 브라우저, 외부 API 및 파일 시스템 등의 물리적 도구(Tools/Tool Use)에 안전하고 유연하게 연결되어 명령을 실행할 수 있도록 연결 고리를 결합하는 도구 연동 인터페이스 기술입니다. - - **물리 인터페이스 결합**: LLM의 도구 호출 의도(Tool Call)를 가로채어 실제 운영체제나 네트워크 상의 실행 스크립트로 전달하고 실행 결과를 모델에 반환 - - **보안 샌드박싱**: 임의 코드 실행이나 파일 훼손 방지를 위해 파일 시스템 격리 및 API 호출 권한 등의 안전 제어막 형성 - - **도구 활용 (Tool Use)**: 에이전트가 학습되지 않은 외부 정보에 접근하거나 외부 시스템에 영향을 미치기 위해 계산기, 코드 실행용 샌드박스, 웹 브라우저, 외부 API 등을 주도적으로 호출하는 능력 - - ![Screenshot 2026-06-25 at 9.39.07 pm](../../../assets/images/Screenshot%202026-06-25%20at%209.39.07%20pm.png) +1. **프롬프트 엔지니어링 (Prompt Engineering)**: 에이전트의 페르소나와 사고 방식(추론 가이드라인)을 규정하는 작업입니다. +2. **컨텍스트 엔지니어링 (Context Engineering)**: 대화 흐름을 끊김 없이 보존하고 관련 데이터를 적시에 제공하는 정보 정리 작업입니다. +3. **하네스 엔지니어링 (Harness Engineering)**: 격리된 환경에서 다양한 소프트웨어 도구를 안전하게 조작할 수 있는 물리적 손발을 달아주는 작업입니다. --- + +### 1️⃣ 프롬프트 엔지니어링 (Prompt Engineering) + +에이전트가 주체적으로 판단하고 행동의 방향성을 잃지 않도록 역할 페르소나를 설계하고, **ReAct(Reason + Action)**와 같은 단계별 사고 흐름(Thought ➡️ Action ➡️ Observation)을 유도하는 기법입니다. + +* **핵심 설계 요소**: + - **페르소나 설계**: 전문 도메인 지식과 행동 양식(예: "너는 주니어 개발자를 코칭하는 꼼꼼한 테크리더 에이전트다") 부여 + - **추론 가이드라인**: 계획을 건너뛰고 섣부른 답변을 내지 않도록 논리적인 생각 단계를 의도적으로 설정 +* **실제 프롬프트 구조 예시**: + ```text + [System Prompt] + 너는 복잡한 수식을 계산하는 수학 에이전트다. 다음 형식으로 사고해라: + - Thought: 문제 해결을 위한 다음 행동 계획을 작성해라. + - Action: 호출할 도구 이름과 인자값을 JSON으로 적어라. (예: Calculator) + - Observation: 도구 실행 결과가 여기에 채워질 것이다. + - Thought: 실행 결과를 바탕으로 성찰하고, 필요하면 다음 Action을 설계해라. + ``` + +--- + +### 2️⃣ 컨텍스트 엔지니어링 (Context Engineering) + +에이전트가 다루는 대화 맥락과 작업 상태(State)를 효율적으로 정제하고, 수많은 외부 정보 중 **지금 꼭 필요한 관련 데이터(RAG)**만을 선별하여 제한된 AI의 기억 공간(컨텍스트 윈도우)에 밀도 높게 채워 넣는 기술입니다. + +* **핵심 설계 요소**: + - **대화 상태 보존**: 이전 턴의 작업 결과를 유실 없이 보존 + - **동적 바인딩**: 외부 RAG 검색기에서 관련도 높은 중요 데이터만 적시에 필터링하여 공급 + - **메모리 압축**: 불필요한 과거 로그는 요약하고, 핵심 현재 상태 구조체만 유지해 토큰 낭비 방지 +* **에이전트 상태 보존 예시 (State JSON)**: + ```json + { + "task_id": "job_10294", + "current_working_directory": "/workspace/src", + "error_logs": ["SyntaxError: unexpected EOF while parsing at line 14"], + "completed_subtasks": ["1. 소스코드 로드 완료", "2. 오류 라인 식별"], + "next_action_required": "오류 라인 14의 괄호 닫힘 확인 및 수정 스크립트 작성" + } + ``` + +--- + +### 3️⃣ 하네스 엔지니어링 (Harness Engineering) + +에이전트가 파일 시스템 제어, 브라우저 조작, 외부 API 호출 등 컴퓨터 세상의 다양한 도구들을 안전하게 가동할 수 있도록 **물리적 인터페이스(연결 고리)**를 구성하는 기술입니다. + +* **핵심 설계 요소**: + - **도구 호출 가로채기(Intercepting)**: 모델이 내놓은 도구 호출 의도(JSON 등)를 감지하고, 실제 터미널이나 프로그램의 함수로 전달해 구동함 + - **보안 샌드박싱 (Sandboxing)**: 에이전트가 악성 코드나 파괴적인 명령어를 무단 실행하지 않도록 격리된 가상 환경을 구축하고 권한을 통제함 +* **물리 인터페이스 도구 결합 예시**: + ``` + [LLM의 출력] ──> "Action: execute_command, args: { cmd: 'ls -la' }" + │ (하네스가 이를 가로챔) + ▼ + [하네스 제어기] ──> 격리된 Docker 샌드박스 내부에서 'ls -la' 실제 실행 + │ (실행 결과 가로챔) + ▼ + [LLM의 입력] <── "Observation: total 12\ndrwxr-xr-x 3 user..." (모델에 반환) + ``` + + ![Harness Diagram](../../../assets/images/Screenshot%202026-06-25%20at%209.39.07%20pm.png) diff --git a/lib/make_slide_for_260724_seminar/chapters/1_engineering_script.md b/lib/make_slide_for_260724_seminar/chapters/1_engineering_script.md new file mode 100644 index 0000000..2b0df0e --- /dev/null +++ b/lib/make_slide_for_260724_seminar/chapters/1_engineering_script.md @@ -0,0 +1,53 @@ +# 🎙️ 특강 발표 대본 스크립트 — 1. Engineering + +본 문서는 `1_engineering.md` 슬라이드에 대응하는 발표용 대본 스크립트입니다. 청중의 이해를 돕기 위해 친절한 구어체 존댓말로 작성되었습니다. + +--- + +### 🎴 Slide 1: 1장 타이틀 및 개요 +* **슬라이드 제목**: 1. AI 에이전트 구현을 위한 3대 핵심 엔지니어링 기법 +* **대본**: + > "그럼 이제 본격적으로 1장, **AI 에이전트 구현을 위한 3대 핵심 엔지니어링 기법**을 살펴보겠습니다. + > 단순히 똑똑한 AI 모델을 가져온다고 해서 알아서 일하는 에이전트가 완성되지는 않습니다. + > 모델을 정밀하게 제어하고, 실시간 대화 정보를 관리하며, 실제 물리적 환경에 연결하기 위해 세 가지 엔지니어링 분야가 유기적으로 작동해야 합니다. + > 첫 번째는 머리를 세팅하는 **프롬프트 엔지니어링**, 두 번째는 기억을 구성하는 **컨텍스트 엔지니어링**, 세 번째는 실제 손발을 달아주는 **하네스 엔지니어링**입니다. + > 각 기법이 구체적으로 어떤 의미를 가졌는지 실제 사례와 함께 짚어보겠습니다." + +--- + +### 🎴 Slide 2: 1️⃣ 프롬프트 엔지니어링 (Prompt Engineering) +* **슬라이드 제목**: 1️⃣ 프롬프트 엔지니어링 (Prompt Engineering) +* **대본**: + > "첫 번째 기둥인 **프롬프트 엔지니어링**입니다. + > 단순히 예쁜 문장으로 질문하는 기술을 넘어서, 에이전트의 역할과 자율적인 문제 해결 사고방식을 규정하는 고도의 기법입니다. + > 핵심은 에이전트에게 전문가적 태도를 주입하는 **'페르소나 설계'**와, 논리적이고 순차적으로 생각하게 만드는 **'추론 가이드라인 설계'**입니다. + > 슬라이드 아래의 프롬프트 예시를 보시죠. 우리는 모델에게 단순히 '문제를 풀어봐'라고 하지 않습니다. + > 대신 'Thought(네 생각을 먼저 적어라) ➡️ Action(네가 호출하고 싶은 실제 도구를 골라라) ➡️ Observation(도구의 실행 결과를 보고 분석해라)'이라는 사고 체계, 즉 ReAct 루프를 템플릿화하여 시스템 프롬프트로 강제합니다. + > 이렇게 구조화된 생각의 틀을 제공함으로써, AI가 섣불리 엉터리 답을 짐작하지 않고 신중하게 계획을 세워 행동하도록 유도하는 것입니다." + +--- + +### 🎴 Slide 3: 2️⃣ 컨텍스트 엔지니어링 (Context Engineering) +* **슬라이드 제목**: 2️⃣ 컨텍스트 엔지니어링 (Context Engineering) +* **대본**: + > "두 번째 기둥은 **컨텍스트 엔지니어링**입니다. + > AI 모델의 기억 공간인 '컨텍스트 윈도우'는 무한하지 않고 비용이 듭니다. + > 따라서 대화 흐름을 압축하여 유지하고, 수많은 소스코드나 문서 중에서 지금 당장 필요한 핵심 데이터만 적시에 필터링하여 꽂아주는 기술이 필수적입니다. + > 슬라이드 오른쪽의 에이전트 상태 보존 예시를 보겠습니다. + > 에이전트는 사용자와 주고받은 20번의 긴 대화 내용을 날것 그대로 모델에 던지지 않습니다. + > 대신 현재 작업 ID가 무엇인지, 지금 작업 디렉터리는 어디인지, 발생한 에러 로그는 무엇인지, 그리고 이미 끝낸 작업과 다음에 할 일은 무엇인지 등을 JSON 형태의 구조화된 데이터 상태로 압축하고 요약하여 보존합니다. + > 이렇게 상태를 효율적으로 캐싱하고 정제하여 모델에 알려줌으로써, 불필요한 비용을 줄이고 답변의 정확도를 극대화할 수 있습니다." + +--- + +### 🎴 Slide 4: 3️⃣ 하네스 엔지니어링 (Harness Engineering) +* **슬라이드 제목**: 3️⃣ 하네스 엔지니어링 (Harness Engineering) +* **대본**: + > "마지막 세 번째는 에이전트에게 진짜 실행 능력을 부여하는 **하네스 엔지니어링**입니다. + > 아무리 모델이 훌륭한 수정 계획을 세워도, 실제 디스크에 저장하거나 코드를 컴파일할 수 없다면 에이전트라고 부를 수 없습니다. + > 하네스는 모델이 내린 판단을 감지해 실제 컴퓨터 명령어(ls, python3 run 등)로 변환해 실행하고, 그 실행 결과를 다시 모델에게 바인딩해 주는 인터페이스 인프라입니다. + > 슬라이드의 다이어그램을 보시면 흐름이 잘 보입니다. + > 모델이 'Action: 파일 목록을 보고 싶어'라고 텍스트로 내놓으면, 에이전트 하네스 시스템이 이를 가로채서(Intercept) 실제 격리된 컴퓨터 환경(Docker 샌드박스 등)에서 명령을 수행합니다. + > 그리고 그 실행 결과를 다시 'Observation: 결과는 다음과 같아'라고 정형화해 모델의 눈앞에 가져다줍니다. + > 또한, 모델이 혹시나 컴퓨터를 망가뜨릴 수 있는 명령을 내리지 못하도록 안전망(Sandboxing)을 씌워주는 것 역시 하네스 엔지니어링의 핵심 의무입니다. + > 이 3대 기술이 완벽히 맞물렸을 때, 비로소 자율형 에이전트가 단독으로 기동할 수 있게 됩니다." diff --git a/lib/make_slide_for_260724_seminar/paper_draft/SLIDE.md b/lib/make_slide_for_260724_seminar/paper_draft/SLIDE.md index 0d8f0b9..603fc02 100644 --- a/lib/make_slide_for_260724_seminar/paper_draft/SLIDE.md +++ b/lib/make_slide_for_260724_seminar/paper_draft/SLIDE.md @@ -72,6 +72,9 @@ marp: true 사용자가 최종 목표만 주면 스스로 실행 가능한 단계별 세부 태스크를 설계하고, 진행 과정에서 문제가 생기면 계획을 유연하게 수정하는 능력입니다. +- **Task Decomposition (작업 분해)**: 복잡한 목표를 실행 가능한 작은 단위의 세부 태스크로 분할 (예: Chain of Thought, Tree of Thoughts 등) +- **Self-Reflection (자기 성찰 및 피드백)**: 행동 결과를 스스로 분석하고 실수를 교정하여 향후 계획을 실시간으로 수정 (예: ReAct, Reflexion 프레임워크) + * **실제 예시**: 에이전트에게 "블로그 기사 작성"을 요청하면, 스스로 **'키워드 조사 ➡️ 개요 작성 ➡️ 본문 집필 ➡️ 오탈자 검사'** 순으로 계획을 세웁니다. 만약 맞춤법 검사 도중 치명적인 논리 오류를 발견하면, 본문 작성 단계로 스스로 되돌아가 계획을 수정하고 다시 쓰는 자가 성찰(Self-Reflection)을 거칩니다. @@ -81,6 +84,9 @@ marp: true 현재 나누는 대화의 즉각적인 흐름(단기 기억)뿐만 아니라, 과거의 경험과 누적된 지식(장기 기억)을 필요할 때마다 영속적으로 꺼내어 쓰는 능력입니다. +- **Short-term Memory (단기 기억)**: 현재 대화나 컨텍스트 윈도우 내에서 실시간으로 유지되는 즉각적인 맥락 정보 +- **Long-term Memory (장기 기억)**: 외부 데이터베이스나 벡터 DB를 활용하여 과거 대화 기록 및 지식을 RAG 기법으로 바인딩하는 정보 보존 공간 + * **실제 예시**: 에이전트에게 "어제 작업하던 파이썬 소스코드의 오류를 이어서 수정해줘"라고 요청하는 경우입니다. 에이전트는 데이터베이스에 누적된 과거 대화 히스토리와, 벡터 DB에 저장되어 있는 소스코드의 예전 상태 정보를 동적으로 인출(Retrieval)해 와 대화 맥락을 끊김 없이 이어갑니다. @@ -108,6 +114,8 @@ marp: true 현재 에이전트 기술에서 가장 중요한 변화 중 하나는, 과거에 에이전트 제어 시스템(Scaffolding, 에이전트의 구동을 돕는 외부 뼈대 구조)이 수동으로 제어하던 기능들이 점점 AI 모델 내부로 흡수되고 있는 현상입니다. +- https://arca.live/b/characterai/174977057?category=%EB%89%B4%EC%8A%A42&p=1 + - **스스로 생각하는 모델의 등장 (Test-time Compute, 추론 시점 추가 연산)** 최근 출시된 Gemini Thinking이나 OpenAI o1/o3 같은 모델들은 외부 시스템이 루프를 돌려주지 않아도, 모델 스스로 출력을 내보내기 전에 내부적으로 계획을 세우고(Planning) 스스로 오류를 성찰(Reflection)하는 과정을 완료합니다. - **인지와 집행의 명확한 역할 분담** @@ -119,41 +127,73 @@ marp: true # 1. AI 에이전트 구현을 위한 3대 핵심 엔지니어링 기법 -## AI 모델(LLM) vs AI 에이전트 -AI 에이전트(AI Agent)는 단순히 사용자의 텍스트 입력을 받아 응답을 생성하는 대화형 인터페이스(Chatbot)를 넘어, 주어진 최종 목표(Goal)를 자율적으로 달성하기 위해 환경을 인식(Perceive)하고, 스스로 계획(Planning) 및 추론(Reasoning)하며, 도구를 사용해 물리적/디지털적 행동(Action)을 수행하는 LLM 기반 소프트웨어 시스템입니다. +성공적인 AI 에이전트 시스템을 구현하기 위해서는 단순히 모델에게 프롬프트를 입력하는 것을 넘어, **모델 제어**, **정보 연동**, **물리적 환경 연결**을 유기적으로 엮어내는 3가지 핵심 엔지니어링 기법이 필요합니다. -LLM 기반 에이전트 시스템 아키텍처는 크게 다음 3가지 핵심 요소로 구성됩니다: -1. **Planning (계획 및 추론)** - - **Task Decomposition (작업 분해)**: 복잡한 목표를 실행 가능한 작은 단위의 세부 태스크로 분할 (예: Chain of Thought, Tree of Thoughts 등) - - **Self-Reflection (자기 성찰 및 피드백)**: 행동 결과를 스스로 분석하고 실수를 교정하여 향후 계획을 실시간으로 수정 (예: ReAct, Reflexion 프레임워크) -2. **Memory (기억 장치)** - - **Short-term Memory (단기 기억)**: 현재 대화나 컨텍스트 윈도우 내에서 실시간으로 유지되는 즉각적인 맥락 정보 - - **Long-term Memory (장기 기억)**: 외부 데이터베이스나 벡터 DB를 활용하여 과거 대화 기록 및 지식을 RAG 기법으로 바인딩하는 정보 보존 공간 +1. **프롬프트 엔지니어링 (Prompt Engineering)**: 에이전트의 페르소나와 사고 방식(추론 가이드라인)을 규정하는 작업입니다. +2. **컨텍스트 엔지니어링 (Context Engineering)**: 대화 흐름을 끊김 없이 보존하고 관련 데이터를 적시에 제공하는 정보 정리 작업입니다. +3. **하네스 엔지니어링 (Harness Engineering)**: 격리된 환경에서 다양한 소프트웨어 도구를 안전하게 조작할 수 있는 물리적 손발을 달아주는 작업입니다. -- https://arca.live/b/characterai/174977057?category=%EB%89%B4%EC%8A%A42&p=1 +--- -## 3대 핵심 엔지니어링 기법 -성공적인 AI 에이전트 구현을 위해서는 모델 제어, 정보 연동, 물리적 환경 연결을 최적화하는 3대 엔지니어링 기법이 필수적으로 수반되어야 합니다. +### 1️⃣ 프롬프트 엔지니어링 (Prompt Engineering) -- ### 프롬프트 엔지니어링 (Prompt Engineering) - 에이전트에게 명확한 역할 페르소나와 추론 가이드라인을 설계하고, 효율적인 추론 경로를 유도하기 위해 프롬프트 구조와 예시(Few-shot)를 최적화하는 기법입니다. - - **역할 페르소나 설계**: 에이전트가 특정 전문 도메인 지식과 행동 양식을 고수할 수 있도록 페르소나를 규정 - - **추론 가이드라인 설계**: ReAct와 같은 사고 단계를 정의하여 모델이 계획 단계를 건너뛰지 않고 순차적으로 사고하도록 제어 - - **Few-shot 최적화**: 최적의 추론 경로 및 응답 포맷 예시를 프롬프트에 제공하여 응답 일관성을 극대화 +에이전트가 주체적으로 판단하고 행동의 방향성을 잃지 않도록 역할 페르소나를 설계하고, **ReAct(Reason + Action)**와 같은 단계별 사고 흐름(Thought ➡️ Action ➡️ Observation)을 유도하는 기법입니다. -- ### 컨텍스트 엔지니어링 (Context Engineering) - 대화 상태(State)와 흐름을 보존하며, 외부 데이터베이스나 기억(Memory) 장치로부터 필요한 정보를 적시에 모델의 컨텍스트 윈도우에 효율적으로 바인딩하고 공급하는 기술입니다. 단일 에이전트 관점에서는 제한된 컨텍스트 공간 내에서 정보 밀도를 극대화하는 설계가 핵심입니다. - - **대화 상태 및 흐름 보존**: 이전 턴의 작업 상태와 대화 맥락을 유실 없이 세션 전반에 유지 - - **적시 동적 바인딩**: 외부 RAG 검색기나 메모리 캐시로부터 관련성이 가장 높은 데이터만을 선별하여 컨텍스트 윈도우에 결합 - - **메모리 압축 및 정리**: 불필요한 과거 로그를 요약하거나 중요 상태 구조체 위주로 정제하여 토큰 윈도우 효율성 제고 +* **핵심 설계 요소**: + - **페르소나 설계**: 전문 도메인 지식과 행동 양식(예: "너는 주니어 개발자를 코칭하는 꼼꼼한 테크리더 에이전트다") 부여 + - **추론 가이드라인**: 계획을 건너뛰고 섣부른 답변을 내지 않도록 논리적인 생각 단계를 의도적으로 설정 +* **실제 프롬프트 구조 예시**: + ```text + [System Prompt] + 너는 복잡한 수식을 계산하는 수학 에이전트다. 다음 형식으로 사고해라: + - Thought: 문제 해결을 위한 다음 행동 계획을 작성해라. + - Action: 호출할 도구 이름과 인자값을 JSON으로 적어라. (예: Calculator) + - Observation: 도구 실행 결과가 여기에 채워질 것이다. + - Thought: 실행 결과를 바탕으로 성찰하고, 필요하면 다음 Action을 설계해라. + ``` -- ### 하네스 엔지니어링 (Harness Engineering) - 에이전트가 계산기, 웹 브라우저, 외부 API 및 파일 시스템 등의 물리적 도구(Tools/Tool Use)에 안전하고 유연하게 연결되어 명령을 실행할 수 있도록 연결 고리를 결합하는 도구 연동 인터페이스 기술입니다. - - **물리 인터페이스 결합**: LLM의 도구 호출 의도(Tool Call)를 가로채어 실제 운영체제나 네트워크 상의 실행 스크립트로 전달하고 실행 결과를 모델에 반환 - - **보안 샌드박싱**: 임의 코드 실행이나 파일 훼손 방지를 위해 파일 시스템 격리 및 API 호출 권한 등의 안전 제어막 형성 - - **도구 활용 (Tool Use)**: 에이전트가 학습되지 않은 외부 정보에 접근하거나 외부 시스템에 영향을 미치기 위해 계산기, 코드 실행용 샌드박스, 웹 브라우저, 외부 API 등을 주도적으로 호출하는 능력 +--- - ![Screenshot 2026-06-25 at 9.39.07 pm](../../assets/images/Screenshot%202026-06-25%20at%209.39.07%20pm.png) +### 2️⃣ 컨텍스트 엔지니어링 (Context Engineering) + +에이전트가 다루는 대화 맥락과 작업 상태(State)를 효율적으로 정제하고, 수많은 외부 정보 중 **지금 꼭 필요한 관련 데이터(RAG)**만을 선별하여 제한된 AI의 기억 공간(컨텍스트 윈도우)에 밀도 높게 채워 넣는 기술입니다. + +* **핵심 설계 요소**: + - **대화 상태 보존**: 이전 턴의 작업 결과를 유실 없이 보존 + - **동적 바인딩**: 외부 RAG 검색기에서 관련도 높은 중요 데이터만 적시에 필터링하여 공급 + - **메모리 압축**: 불필요한 과거 로그는 요약하고, 핵심 현재 상태 구조체만 유지해 토큰 낭비 방지 +* **에이전트 상태 보존 예시 (State JSON)**: + ```json + { + "task_id": "job_10294", + "current_working_directory": "/workspace/src", + "error_logs": ["SyntaxError: unexpected EOF while parsing at line 14"], + "completed_subtasks": ["1. 소스코드 로드 완료", "2. 오류 라인 식별"], + "next_action_required": "오류 라인 14의 괄호 닫힘 확인 및 수정 스크립트 작성" + } + ``` + +--- + +### 3️⃣ 하네스 엔지니어링 (Harness Engineering) + +에이전트가 파일 시스템 제어, 브라우저 조작, 외부 API 호출 등 컴퓨터 세상의 다양한 도구들을 안전하게 가동할 수 있도록 **물리적 인터페이스(연결 고리)**를 구성하는 기술입니다. + +* **핵심 설계 요소**: + - **도구 호출 가로채기(Intercepting)**: 모델이 내놓은 도구 호출 의도(JSON 등)를 감지하고, 실제 터미널이나 프로그램의 함수로 전달해 구동함 + - **보안 샌드박싱 (Sandboxing)**: 에이전트가 악성 코드나 파괴적인 명령어를 무단 실행하지 않도록 격리된 가상 환경을 구축하고 권한을 통제함 +* **물리 인터페이스 도구 결합 예시**: + ``` + [LLM의 출력] ──> "Action: execute_command, args: { cmd: 'ls -la' }" + │ (하네스가 이를 가로챔) + ▼ + [하네스 제어기] ──> 격리된 Docker 샌드박스 내부에서 'ls -la' 실제 실행 + │ (실행 결과 가로챔) + ▼ + [LLM의 입력] <── "Observation: total 12\ndrwxr-xr-x 3 user..." (모델에 반환) + ``` + + ![Harness Diagram](../../assets/images/Screenshot%202026-06-25%20at%209.39.07%20pm.png) ---