<목차>
1. DSPy 기초적인 사용법 탐구하기, 생기부 작성 예제
1. AI 에이전트란?
최근, 단순한 AI를 넘어서 AI 에이전트(Agent)의 개념으로 다가가고 있다. 쉽게 말해 "스스로 주변 환경에 따라 판단하고 어떤 목표를 달성하기 위해 행동하는 인공지능 프로그램"이다.
예를 들어 일반 프로그램은 특정 기능만 하는 '정해진 도구' 로 볼 수 있다. 망치, 계산기 등 우리가 직접 들고 사용하거나, 구체적인 버튼을 눌러야만 작동한다. 그러나 AI 에이전트는 유능한 '조수'에 가까운 것으로 '김 조수, 이번 주 내 회의 일정 조율 좀 해줘' 라고 하면 조수는 (1) 지시자의 일정과 다른 사람들의 일정을 인식하고, (2) 가장 적절한 시간을 찾아내서 판단하고, (3) 회의 참석자에게 연락하여 시간을 확정하고, (4) 최종 확정된 일정을 다시 지시자에게 알려주는 것이다.
재미있게 설명하는 동영상을 첨부한다.
https://www.youtube.com/watch?v=eu5H0iRJsJ4
이러한 과정을 구현하는 방법 중 하나로 하나의 큰 동작을 잘게 쪼개고, 각 역할을 담당하는 AI를 둔 다음 서로 유기적으로 상호작용하는 방법을 생각해 볼 수 있는데 이를 '워크플로우(Workflow)'라고 한다. 이러한 워크플로우를 이용하여 AI 에이전트를 만들 수 있다.
2. 단일 AI 작업의 문제점과 단점
이전 시간에 작성한 코드는 모든 입력을 받고 한번에 처리하는 과정이다.
class School_record(dspy.Signature):
instruction = dspy.InputField(desc="생활기록부 작성, 지침과 작업에 대한 설명입니다.")
context = dspy.InputField(desc="1년동안의 물리학I 활동 내용입니다. 성적, 물리의 재구성, 심화 탐구, 교사 관찰 내용이 있습니다.")
one_shot = dspy.InputField(desc="생활기록부 예시(one shot) 입니다. 반드시! 예시의 형식을 준수하여 작성하세요!")
input_data = dspy.InputField(desc="생활기록부 작성이 필요한 실제 데이터입니다.")
output = dspy.OutputField(desc="입력(input_data)에 대한 생활기록부를 작성합니다.")
이러한 방식으로 복합적인 작업을 AI 모델에게 단일 예측 단계로 처리하도록 지시하면 아래와 같은 잠재적인 문제점을 야기할 수 있다.
- 정보 과부하 및 중요 정보 누락 가능성:
- AI 모델은 instruction, context, one_shot, input_data 등 여러 종류의 정보를 동시에 처리해야 한다. 이 정보의 양이나 복잡성이 커질수록, 모델이 모든 정보를 동등하게 고려하거나 중요도를 판단하는 데 어려움을 겪을 수 있다.
- 결과적으로, input_data 내의 특정 활동 내용이나 교사 관찰 내용과 같은 핵심적이고 구체적인 정보가 누락되거나 피상적으로만 언급될 위험이 있다.
- 다중 제약 조건 및 지침 준수 실패:
- 생활기록부 작성은 '특정 문체 사용', '부정적인 표현 사용 금지(예: 학생 주관 평가)', '특정 길이 준수', '예시 형식 따르기' 등 여러 복잡한 제약 조건과 지침을 동시에 요구한다.
- 단일 예측 단계에서는 AI 모델이 이러한 모든 제약 조건을 일관되고 정확하게 적용하는 데 실패할 확률이 높다. 특정 문체를 지키지 못하거나, 금지된 표현을 사용하거나, 글자 수를 초과/미달하거나, 예시 형식을 따르지 않는 등의 문제가 발생할 수 있다.
- 논리적 일관성 및 구조화의 어려움:
- 고품질의 생활기록부는 학생의 활동, 역량, 성장 과정 등을 논리적으로 연결하고 구조화된 형태로 제시해야 한다.
- 단일 단계 처리 시, AI 모델이 입력된 여러 파편적인 정보들(특히 input_data)을 보고 일관된 스토리 라인을 만들거나 자연스러운 문단 구성을 하는 데 한계를 보일 수 있다. 정보들이 매끄럽게 연결되지 않고 나열되는 느낌을 줄 수 있다.
- 오류 발생 시 원인 파악 및 개선의 어려움 (Black Box 문제):
- 만약 생성된 생활기록부 초안에 문제가 있다면 (예: 특정 내용 누락, 형식 오류, 어색한 문장 등), 이것이 입력 데이터를 잘못 분석했기 때문인지, 형식 적용에 실패했기 때문인지, 아니면 제약 조건을 놓쳤기 때문인지 등 원인을 정확히 파악하기 매우 어렵다.
- 단일 단계로 이루어지므로, AI 모델의 내부적인 '생각 과정(Rationale)'을 상세히 들여다보고 문제의 특정 지점을 찾아 수정하기가 사실상 불가능하다. 이는 결과 품질 개선을 위한 디버깅 및 프롬프트 수정 과정을 비효율적으로 만든다.
- 비일관적인 결과 품질:
- AI 모델의 내부적인 작동 방식이나 추론 경로는 매 실행마다 미묘하게 달라질 수 있다. 복잡한 단일 태스크일수록 이러한 비일관성이 결과물의 품질에 더 큰 영향을 미칠 수 있다.
- 어떤 학생의 데이터로는 훌륭한 초안이 나오지만, 다른 학생의 데이터로는 기대 이하의 결과가 나오는 등 일관된 품질을 유지하기 어렵다.
이러한 문제점들은 특히 코딩에 익숙하지 않은 사용자(일반 교사들) 입장에서 결과물을 신뢰하고 사용하기 어렵게 만들며, 결국 AI가 생성한 초안을 상당 부분 직접 수정해야 하는 상황으로 이어질 수 있다. 복잡한 작업을 효과적으로 처리하기 위해서는 작업을 더 작고 관리 가능한 단계로 분해하여 각 단계의 정확도를 높이고 전체 과정을 투명하게 만드는 접근 방식이 유리하다.
3. 간단한 AI 에이전트(워크 플로우) 구현하기
이번 시간엔 기초 개념을 잡아가기 위해 간단한 순방향 AI 에이전트(워크 플로우)를 구현해 볼 것이다. 핵심은 이전 시간에는 혼자서 서(Student_record) 다 했다면, 이번에는 2개의 역할로 분리(요약자: Core_Summarizer, 작성자: SR_Writer)하고 각 역할에 대해 AI 객체를 부여하는 것이다.
class Core_Summarizer(dspy.Signature):
instruction = dspy.InputField(desc="요약을 어떻게 해야 하는지에 대한 설명입니다.")
context = dspy.InputField(desc="학생 활동, 평가 등에 대한 정보입니다.")
input_data = dspy.InputField(desc="생활기록부 작성이 필요한 실제 데이터입니다.")
core_summary = dspy.OutputField(desc="요약문입니다.")
class SR_Writer(dspy.Signature):
instruction = dspy.InputField(desc="생활기록부 작성, 지침과 작업에 대한 설명입니다.")
core_summary = dspy.InputField(desc="핵심 요소 추출 결과 입니다.")
one_shot = dspy.InputField(desc="생활기록부 예시(one shot) 입니다. 반드시! 예시의 형식을 준수하여 작성하세요!")
student_record = dspy.OutputField(desc="생활기록부입니다.")
class MySR_Agent(dspy.Module):
def __init__(self):
super().__init__()
self.summarizer = dspy.ChainOfThought(Core_Summarizer)
self.writer = dspy.ChainOfThought(SR_Writer)
def forward(self, core_prompt, context, input_data, write_prompt, one_shot):
summary = self.summarizer(instruction=core_prompt, context=context, input_data=input_data).core_summary
output = self.writer(instruction=write_prompt, core_summary=summary, one_shot=one_shot).student_record
return output
이를 비유하자면 "두 명의 비서가 각자 맡은 일을 순서대로 처리하여 최종 결과물을 만드는 시스템"으로 볼 수 있다.
- 시스템 구성:
- 핵심 요약 담당 비서 (self.summarizer): 이 비서는 '원본 서류를 보고 핵심 내용만 깔끔하게 요약하는 작업'을 전문으로 한다. (CoT를 사용하여 꼼꼼하게 요약할 것이다.)
- 보고서 작성 담당 비서 (self.writer): 이 비서는 '요약된 내용과 다른 지침/예시를 보고 최종 보고서를 작성하는 작업'을 전문으로 한다. (마찬가지로 CoT를 사용하여 지침을 따르며 작성한다.)
- 총괄 매니저 (MySR_Agent 클래스 자체): 이 매니저는 전체 과정을 관리한다.
- 작업 흐름 (forward 메소드):
- 매니저가 원본 서류를 핵심 요약 담당 비서에게 넘겨주며 "이거 요약해 줘"라고 지시한다.
(summary = self.summarizer(...)) - 핵심 요약 담당 비서가 요약된 내용을 매니저에게 다시 전달한다
- 매니저는 그 요약된 내용을 보고서 작성 담당 비서에게 넘겨주며 "이 요약본이랑 다른 자료를 보고 최종 보고서 써줘"라고 지시한다. (output = self.writer(core_summary=summary, ...)). 즉, 앞선 단계의 결과물이 다음 단계의 입력이 된다.
- 보고서 작성 담당 비서가 최종 보고서를 완성하여 매니저에게 전달하고, 매니저는 이를 최종 결과물로 내놓는다.
- 매니저가 원본 서류를 핵심 요약 담당 비서에게 넘겨주며 "이거 요약해 줘"라고 지시한다.
4. AI 에이전트의 장점
- 정보 과부하 해소 및 핵심 정보 집중:
- 단일 방식의 문제점: 모든 원본 데이터와 지침을 한 번에 처리하느라 중요 정보를 놓칠 수 있다.
- AI 에이전트 해결: MySR_Agent는 1단계(summarizer)에서 방대한 "학생 활동 및 교사 평가 자료" 원문에서 핵심 요소를 '정확히 추출'하는 데 집중한다. 이 과정에서 AI는 복잡한 원문 속에서 필요한 정보만을 걸러내는 데 역량을 발휘한다. 2단계(writer)는 원문 전체 대신, 1단계에서 깔끔하게 정리된 '핵심 요소 추출 결과'만을 입력받는다. 이는 2단계 모듈이 정보 과부하 없이 생활기록부 작성 본연의 태스크(문체, 형식, 구성)에 집중할 수 있게 한다.
- 다중 제약 조건의 분담 및 준수력 향상:
- 단일 방식의 문제점: 여러 종류의 제약(내용 추출, 문체, 형식, 분량 등)을 한 번에 지키기 어렵습니다.
- AI 에이전트 해결: MySR_Agent는 제약 조건을 단계별로 분담시킨다.
- 1단계(summarizer)는 **'원문에서 특정 요소를 가공 없이 정확하게 추출하여 목록화'**하는 제약에 집중한다. (정확성 및 추출 형식 관련).
- 2단계(writer)는 1단계 결과를 받아 '교사의 관점', '명사형 종결', '금지 표현 회피', '글자 수 준수', '예시 형식 준수' 등 글쓰기 형식 및 문체 관련 제약에 집중한다.
- 각 단계가 더 적고 명확한 제약 집합에 집중함으로써, AI 모델은 각 제약을 훨씬 더 안정적으로 준수할 가능성이 높아진다.
- 강제적인 논리적 구성 및 구조화:
- 단일 방식의 문제점: 파편적인 정보에서 자연스러운 글 흐름을 만들기가 어려울 수 있다.
- AI 에이전트 해결: MySR_Agent의 파이프라인 자체가 구조를 강제한다. 1단계의 결과물인 '핵심 요소 추출 목록'은 2단계 글쓰기의 명확한 '개요' 또는 '작성 가이드라인' 역할을 한다. 2단계(writer) 모듈은 이 추출된 핵심 요소들을 빠짐없이 활용하여 생활기록부 본문을 구성해야 하므로, 정보들이 논리적으로 연결되고 구조화된 글이 생성될 가능성이 대폭 향상된다. AI는 unstructured data에서 바로 글을 쓰는 대신, structured outline (핵심 요소 목록)을 기반으로 글을 쓰는 셈이다.
- 디버깅 용이성 및 투명성 확보:
- 단일 방식의 문제점: 결과 오류 시 원인 파악이 어렵다. (블랙박스).
- AI 에이전트 해결: MySR_Agent는 중간 결과물(summary = 핵심 요소 추출 결과)을 확인할 수 있다.
- 만약 최종 생활기록부가 잘못되었다면, 먼저 1단계의 핵심 요소 추출 결과(summary)를 확인한다. 핵심 요소 추출이 잘못되었다면 1단계(summarizer 모듈)의 문제이고, 추출은 잘 되었는데 글쓰기가 문제라면 2단계(writer 모듈)의 문제이다.
- 이처럼 문제를 발생 지점에 따라 '분석/추출 오류' 또는 **'작성/형식 오류'**로 명확히 분리하여 파악하고, 해당 단계의 시그니처나 설정만 집중적으로 개선할 수 있다. 이는 복잡한 AI 파이프라인의 디버깅 효율성을 비약적으로 높인다.
- 일관성 및 품질 향상:
- 단일 방식의 문제점: 결과 품질이 들쭉날쭉할 수 있다.
- AI 에이전트 해결: 작업을 더 작고 명확한 단계로 분해하고 각 단계를 최적화함으로써, 전체 과정이 더 안정적으로 동작한다. 각 모듈(summarizer, writer)을 개별적으로 튜닝하거나 DSPy 컴파일러로 최적화할 수 있으므로, 각 단계의 정확도가 높아지고 이는 최종 결과물의 일관성과 품질 향상으로 이어진다. 저성능 모델을 사용하더라도, 단일 모델에 큰 부담을 주는 대신 역할을 분담시켜 전체 시스템의 성능을 높이는 효과를 얻을 수 있다.
MySR_Agent와 같은 AI 에이전트 기반의 다단계 구성은 생활기록부 작성과 같이 복잡한 작업을 *정보 분석 및 추출'과 규격에 맞는 글쓰기'와 같은 더 작고 관리 가능한 하위 태스크로 분해한다. 이를 통해 각 단계의 AI 모듈이 해당 태스크에 집중하여 정보 과부하 없이, 제약 조건을 더 잘 준수하며, 논리적인 중간 결과물(개요)을 생성하고, 이 중간 결과물을 바탕으로 최종 결과물을 효과적으로 작성하도록 만든다.
이는 단일 단계 AI 처리의 한계를 극복하고, 디버깅을 용이하게 하며, 최종 결과물의 일관성과 품질을 크게 향상시키는 핵심적인 방법론이 될 수 있다. 특히 비교적 저성능 모델을 활용할 때, 이러한 구조적인 접근 방식은 모델의 잠재력을 최대한 이끌어내어 기대 이상의 성과를 달성하게 한다.
5. 생기부 AI 에이전트 코드
더 구현할 과정이 많다. 일단 두 가지 역할로 분리한 생기부 AI 에이전트 코드는 아래와 같다.
첫 번째로, 이전 시간에 탐구했던 코드를 그대로 가져오겠다.
import dspy
lm = dspy.LM(model="ollama_chat/gemma3:12b-it-q4_K_M", \
api_base='http://localhost:11434',
api_key="", temperature=0.7)
dspy.configure(lm=lm)
instruction = r"""당신은 물리 교사입니다.
당신은 학생이 학교생활 중 실시한 물리학I 활동을 객관적으로 기록하고 이를 대학교에 학생을 추천하는데 사용하는 '생활기록부'를 입력해야 합니다.
생활기록부는 당신이 학생을 대학에 추천할 수 있는 추천서와 같습니다. 추천서는 ‘~~임’, ‘~~함.’ 으로 문장이 끝납니다.
따라서 학생의 역량이 매우 잘 드러나게 작성해야 합니다.
아래 <context>의 '1년동안 물리학I 활동 내용'인 [물리 점수], [물리의 재구성], [물리 심화 탐구], [교과선생님 관찰내용]을 참고하고
<one_shot>의 생활기록부 예시를 참고하여 <input_data>의 내용에 대한 생활기록부를 <output>에 구체적으로 반드시 1000자로 완성하세요."""
context = r"""1년동안 물리학I 활동 내용
[물리 점수]
첫 번째 시험 내용: 변위, 속도, 가속도, 뉴턴 법칙, 운동량과 충격량, 일과 운동에너지, 역학적 에너지, 열역학 1법칙, 열역학 2법칙
두 번째 시험 내용: 특수상대성이론, 핵융합, 핵분열, 전기력, 원자핵, 스펙트럼, 에너지 준위, 보어원자모형
세 번째 시험 내용: 에너지띠, 다이오드, 전기전도성, 전류에 의한 자기장, 물질의 자성, 전자기유도
네 번째 시험 내용: 파동의 정의, 파동의 굴절, 파동의 중첩, 전자기파, 광전 효과, 물질의 이중성
[물리의 재구성]
1.문제 선정 이유,
2.문제에서 제시된 물리량과 확인해야 하는 물리량,
3.확인해야 하는 물리량 구하는 법,
4.재구성한 물리 현상 방법,
5.재구성한 물리 현상과 기존 물리현상의 공통점과 차이점,
6.재구성한 물리 현상으로 확인해야 하는 물리량 구하기,
7.탐구를 통해 무엇을 배웠는지 구체적으로 설명하기,
8.추가 계획 1가지 이상 제시하기
[물리 심화 탐구]
1.주제 선정에 대해 작성하세요,
2.자료 수집에 대해 작성하세요,
3.자료 분석에 대해 작성하세요,
4.결론 도출에 대해 작성하세요,
5.탐구 고찰에 대해 작성하세요
[교과선생님 관찰내용]
그 밖에 교과선생님이 적는 경우가 있습니다."""
one_shot = r"""<생활기록부 예시>
창의력과 집중력, 직관과 통찰이 우수한 학생임. 연필심의 길이에 따른 전기전도도 측정 실험에서 연필심, 전지, 전압계가 병렬로 연결되어 있으므로 전압이 연필심의 길이에 무관해야 함에도 불구하고 변한 이유를 연필심의 온도 변화에 의한 것으로 해석하고, 모둠 구성원에게 스위치 개폐시간에 대한 유의사항을 안내함. 직선 도선 전류 주위의 자기장 측정 실험에서 나침반의 회전 각도를 레이저 포인터를 이용하여 보다 정확하게 측정하는 방법을 고안하는 방식으로 실험 설계에서 창의력을 발휘하였으며, 전류에 의한 자기장의 이용의 사례로 자기 공명 영상 장치와 자기부상 열차의 구조에 대해 분석하고 작동 원리에 대해 탐구함. 네오디뮴 자석과 건전지, 철심을 이용해 간이 전동기를 만들어보며 전동기의 원리를 학습함. 물과 글리세린으로 각각 채워진 반원통에 입사각에 따라 달라지는 굴절각을 측정한 후 스넬의 법칙에 적용하여 굴절률을 구하는 실험 활동을 수행함. 실험 중 팀원들과의 소통 과정에서 뛰어난 협업 능력과 리더십을 보임."""
input_data = r"""[물리 점수] 68, 75, 72, 65 [물리의 재구성] 선정한 문제: 빛의 파장이 500nm인 단색광을 어떤 금속판에 비추었더니 광전자가 방출되었다. 이 금속의 일함수는 2.0eV이다. 방출되는 광전자의 최대 운동 에너지는 몇 eV인가? (단, 플랑크 상수 h = 6.63 × 10⁻³⁴ J·s, 빛의 속도 c = 3 × 10⁸ m/s, 1eV = 1.6 × 10⁻¹⁹ J로 계산한다. 또는 hc ≈ 1240 eV·nm를 사용해도 좋다.) 1. 문제 선정 이유 광전 효과는 빛의 입자성을 명확하게 보여주는 현상으로, 현대 물리학의 중요한 개념 중 하나라고 생각했습니다. 빛의 에너지와 금속의 일함수, 그리고 방출되는 광전자의 운동 에너지 사이의 관계를 정확히 이해하고 싶었고, 다양한 변수를 적용하여 응용해보고자 이 문제를 선택했습니다. 교과과정: IV 파동과 입자의 성질 - 2. 빛과 물질의 이중성 - 광전 효과 2. 문제에서 제시된 물리량과 확인해야 하는 물리량 제시된 물리량: 입사광의 파장(λ = 500nm), 금속의 일함수(W = 2.0eV), 플랑크 상수(h), 빛의 속도(c), 전자볼트와 줄의 환산 관계. 확인해야 하는 물리량: 광전자의 최대 운동 에너지(K_max). 3. 확인해야 하는 물리량 구하는 법 (기존 문제 풀이) 광전 효과의 기본 공식은 E_photon = W + K_max 입니다. 입사광의 에너지(E_photon) 계산: E_photon = hc/λ 여기서 hc ≈ 1240 eV·nm를 사용하면 편리합니다. E_photon = 1240 eV·nm / 500 nm = 2.48 eV 광전자의 최대 운동 에너지(K_max) 계산: K_max = E_photon - W K_max = 2.48 eV - 2.0 eV = 0.48 eV 따라서 방출되는 광전자의 최대 운동 에너지는 0.48 eV입니다. 4. 재구성한 물리 현상 방법 (새로운 문제) 어떤 금속에 빛을 비추었더니 광전자가 방출되었고, 이 광전자를 멈추게 하는 데 필요한 정지 전압(저지 전압)이 0.8V였다. 이 금속의 문턱 진동수가 6.0 × 10¹⁴ Hz라면, 이 금속에 비춘 빛의 파장은 몇 nm인가? (단, 플랑크 상수 h = 6.63 × 10⁻³⁴ J·s, 빛의 속도 c = 3 × 10⁸ m/s, 전자의 전하량 e = 1.6 × 10⁻¹⁹ C, hc ≈ 1240 eV·nm를 사용해도 좋다.) 5. 재구성한 물리 현상과 기존 물리현상의 공통점과 차이점 공통점: 두 문제 모두 광전 효과의 기본 원리(E_photon = W + K_max)를 이용합니다. 빛의 에너지, 금속의 특성(일함수 또는 문턱 진동수), 광전자의 운동 에너지(또는 정지 전압) 사이의 관계를 다룹니다. 차이점: 기존 문제: 파장과 일함수를 주고 최대 운동 에너지를 구하는 문제. 재구성한 문제: 정지 전압과 문턱 진동수를 주고 입사광의 파장을 구하는 문제. 즉, 구하고자 하는 미지수와 주어진 조건이 다릅니다. 재구성한 문제는 일함수를 직접 주지 않고 문턱 진동수를 통해 계산하도록 하였고, 최대 운동 에너지를 정지 전압을 통해 구하도록 하여 한 단계 더 생각해야 합니다. 6. 재구성한 물리 현상으로 확인해야 하는 물리량 구하기 (새로운 문제 풀이) 광전자의 최대 운동 에너지(K_max) 계산: 정지 전압 V_s = 0.8V 이므로, K_max = eV_s = 0.8 eV 입니다. 금속의 일함수(W) 계산: 문턱 진동수 f₀ = 6.0 × 10¹⁴ Hz 이므로, W = hf₀ 입니다. W = (6.63 × 10⁻³⁴ J·s) × (6.0 × 10¹⁴ Hz) = 3.978 × 10⁻¹⁹ J 이를 eV 단위로 환산하면, W = (3.978 × 10⁻¹⁹ J) / (1.6 × 10⁻¹⁹ J/eV) ≈ 2.486 eV (약 2.49 eV로 계산) 입사광의 에너지(E_photon) 계산: E_photon = W + K_max E_photon = 2.49 eV + 0.8 eV = 3.29 eV 입사광의 파장(λ) 계산: E_photon = hc/λ 이므로, λ = hc/E_photon λ = 1240 eV·nm / 3.29 eV ≈ 376.9 nm (약 377 nm) 따라서 이 금속에 비춘 빛의 파장은 약 377 nm입니다. 7. 탐구를 통해 무엇을 배웠는지 구체적으로 설명하기 이번 '물리의 재구성' 활동을 통해 광전 효과의 핵심 공식을 다양한 상황에 적용하는 연습을 할 수 있었습니다. 단순히 공식을 암기하는 것을 넘어, 각 물리량(파장, 진동수, 일함수, 문턱 진동수, 최대 운동 에너지, 정지 전압)이 서로 어떻게 유기적으로 연결되는지 깊이 이해하게 되었습니다. 특히, 일함수를 문턱 진동수로, 최대 운동 에너지를 정지 전압으로 변환하여 생각하는 과정에서 개념 간의 관계를 명확히 파악할 수 있었습니다. 또한, 문제의 조건을 바꾸어 새로운 문제를 만들고 해결하는 과정에서 문제 해결 능력과 응용력을 기를 수 있었습니다. 8. 추가 계획 1가지 이상 제시하기 광전 효과와 빛의 세기 관계 탐구: 빛의 세기가 광전류의 세기에는 영향을 주지만 광전자의 최대 운동 에너지에는 영향을 주지 않는 이유를 그래프와 함께 분석하고, 이를 설명하는 실험을 설계해보고 싶습니다. 다양한 금속의 일함수 비교: 여러 가지 금속의 일함수 값을 조사하고, 각 금속에 대해 광전 효과가 일어나기 위한 빛의 최소 진동수(문턱 진동수)와 최대 파장(한계 파장)을 계산하여 비교 분석해보고 싶습니다. [물리 심화 탐구] 1. 주제 선정에 대해 작성하세요 수업 시간에 '전자기 유도' 현상을 배우면서 자기장의 변화가 전류를 만들어낸다는 사실에 큰 흥미를 느꼈습니다. 특히, 코일과 자석을 이용한 간단한 실험 외에 이러한 원리가 실생활에서 어떻게 대규모로 활용되는지 궁금해졌습니다. 그중에서도 비접촉식으로 물체를 가열할 수 있는 '인덕션 히터(유도 가열기)'의 작동 원리가 전자기 유도와 깊은 관련이 있다는 것을 알게 되어, "인덕션 히터의 작동 원리와 효율성에 대한 물리적 탐구"라는 주제를 선정하게 되었습니다. 2. 자료 수집에 대해 작성하세요 고등학교 물리 교과서 및 참고서의 '전자기 유도', '교류 회로' 단원 내용을 복습했습니다. 온라인 과학 학술 데이터베이스(Google Scholar, RISS 등)에서 '유도 가열(Induction Heating)', '와전류(Eddy Current)', '전자기 유도 효율' 등의 키워드로 관련 논문 및 기술 자료를 검색했습니다. 유명 과학 유튜브 채널 및 교육 웹사이트에서 인덕션 히터의 작동 원리를 시각적으로 설명하는 자료들을 참고했습니다. 가전제품 제조사의 기술 설명 자료 및 특허 정보를 통해 실제 제품에 적용된 기술적 세부 사항을 파악하려 노력했습니다. 3. 자료 분석에 대해 작성하세요 수집한 자료를 바탕으로 인덕션 히터의 핵심 원리를 다음과 같이 분석했습니다. 전자기 유도: 인덕션 히터 내부의 코일에 고주파 교류 전류를 흘려주면, 코일 주변에 시간에 따라 빠르게 변화하는 자기장이 형성됩니다. (패러데이의 전자기 유도 법칙) 와전류(Eddy Current) 발생: 이 변화하는 자기장이 금속 용기(냄비 등) 바닥을 통과하면서 용기 내부에 유도 전류, 즉 와전류를 발생시킵니다. (렌츠의 법칙) 줄 발열(Joule Heating): 금속 용기는 고유한 전기 저항을 가지고 있으므로, 와전류가 흐르면서 용기 자체에서 열이 발생합니다 (P = I²R). 이 열이 음식을 조리하는 데 사용됩니다. 표피 효과(Skin Effect): 고주파 교류를 사용할 경우 전류가 도체의 표면 근처에 집중되어 흐르는 현상으로, 이로 인해 용기 표면에서 더 효과적인 가열이 일어납니다. 효율성: 인덕션 히터는 용기 자체를 직접 가열하므로 열 손실이 적어 에너지 효율이 높습니다. 가스레인지나 일반 전기레인지(하이라이트)에 비해 예열 시간이 짧고, 주변으로 방출되는 열이 적어 쾌적한 조리 환경을 제공합니다. 4. 결론 도출에 대해 작성하세요 인덕션 히터는 전자기 유도 법칙에 의해 코일에서 발생한 변화하는 자기장이 금속 용기에 와전류를 유도하고, 이 와전류가 용기의 전기 저항에 의해 줄 열을 발생시켜 음식을 가열하는 장치입니다. 고주파 교류와 표피 효과를 이용하여 가열 효율을 높이며, 직접 가열 방식으로 에너지 손실을 최소화하여 높은 열효율을 달성합니다. 이는 물리학적 원리가 실생활의 편의를 증진시키는 대표적인 사례임을 확인했습니다. 5. 탐구 고찰에 대해 작성하세요 이번 탐구를 통해 전자기 유도 현상이 단순히 이론에 머무르지 않고, 우리 생활 깊숙이 들어와 유용하게 활용되고 있음을 실감했습니다. 인덕션 히터의 원리를 이해하면서 와전류, 표피 효과 등 심화된 물리 개념까지 접할 수 있어 지식의 폭을 넓힐 수 있었습니다. 다만, 실제 인덕션 히터의 코일 설계, 주파수 최적화, 사용 가능한 용기의 재질 제한(자성체 또는 특정 비자성체 금속) 등 공학적인 측면까지 깊이 있게 다루지 못한 점은 아쉬움으로 남습니다. 앞으로 전자기학 관련 심화 학습을 통해 이러한 부분에 대한 이해를 높이고 싶다는 생각을 했습니다. 또한, 에너지 효율이 높은 인덕션 기술이 산업 현장에서는 어떻게 응용되는지(예: 금속 용해, 열처리) 추가적으로 조사해보고 싶습니다. [교과선생님 관찰내용] 수업 참여도 적극적이며, 질문을 통해 이해를 명확히 하려는 자세가 돋보임."""
요약자와 생기부 작성자를 분리하였으므로, 각 역할에 대해 설명해야 하는 프롬프트를 작성해야 한다.
core_prompt = r"""당신은 학생의 학교생활 기록을 분석하는 전문가입니다. 입력된 "학생 활동 및 교사 평가 자료" 원문에서 다음 **8가지 핵심 요소를 정확하게 추출**하여 목록화해주세요. 추출 시 원문의 내용을 가공하거나 요약하지 말고, 해당 요소에 해당하는 **구체적인 내용만을 찾아내세요.**
**추출할 핵심 요소:**
1. **핵심 활동:** 학생이 참여하거나 수행한 주요 프로젝트, 실험, 발표, 연구, 과제 등 구체적인 활동 내용
2. **깨달은 점:** 활동을 통해 학생이 새롭게 배우거나 느낀 점, 얻은 통찰, 이전과 달라진 인식 등
3. **드러난 행동:** 활동 과정에서 관찰된 학생의 구체적인 행위, 태도, 접근 방식, 문제 해결 시도 등 (예: 적극적으로 질문함, 꾸준히 자료를 탐색함, 친구의 어려움을 도움)
4. **주도적인 내용:** 학생 스스로 계획하고 실행하거나, 남들이 생각지 못한 아이디어를 내거나, 문제를 해결하기 위해 적극적으로 나선 부분, 리더십을 발휘한 사례 등
5. **도출한 결론:** 활동이나 탐구의 결과로 얻게 된 결론, 발견 사실, 분석 결과 등 객관적인 성과나 지식
6. **공동체 요소:** 팀 활동에서의 협력, 다른 학생과의 소통 방식, 그룹 목표 달성을 위한 기여, 나눔이나 배려 등 공동체 속에서의 역할이나 상호작용
7. **교사 관찰 및 평가:** 학생의 학습 과정, 태도, 역량에 대한 교사의 구체적인 관찰 내용, 평가, 피드백 등 원문에 명시된 교사의 의견 (예: 수업 참여도 높음, 개념 이해가 빠름, 어려운 문제에 대해 질문하는 것을 즐김)
8. **향후 발전 가능성 및 기대:** 학생의 현재 모습(역량, 태도 등)을 바탕으로 원문에서 언급되거나 유추되는 앞으로의 성장 가능성, 특정 분야에서의 기대, 진로와의 연관성 등
**출력 형식:**
* 각 핵심 요소별로 명확한 제목을 붙여 구분합니다.
* 해당 요소에서 추출된 내용을 간결한 문장 또는 구문으로 목록화합니다. (예: `- 실험 과정에서 발생한 변수를 통제하는 방법의 중요성 깨달음.`)
* 만약 원문에 특정 요소에 해당하는 내용이 없다면, 해당 요소 제목 아래에 "해당 내용 없음"이라고 표시하거나 해당 요소 항목 자체를 생략합니다. (생략하는 것이 더 간결할 수 있습니다.)
* 반드시 한글로 출력합니다.
"""
write_prompt = r"""당신은 [물리학I] 교사이며, 학생의 학교생활기록부 항목을 작성하는 전문가입니다.
**입력되는 데이터는 두 가지입니다:**
1. **"학생 활동 및 교사 평가 자료" 원문:** 학생의 활동에 대한 상세한 설명과 교사의 평가가 담긴 원본 자료입니다.
2. **"핵심 요소 추출 결과":** 위 원문에서 **핵심 활동, 깨달은 점, 드러난 행동, 주도적인 내용, 도출한 결론, 공동체 요소, 교사 관찰 및 평가, 향후 발전 가능성 및 기대** 등 총 8가지 핵심 요소를 목록 형태로 추출한 자료입니다.
**작성 목표:**
입력된 "핵심 요소 추출 결과"를 주요 내용 구성의 **가이드라인**으로 삼아, "학생 활동 및 교사 평가 자료" 원문의 구체적인 내용을 바탕으로 [물리학I] 과목의 학교생활기록부 항목을 작성합니다. 학생의 역량, 학업 성취 및 성장을 효과적으로 드러내며, 특히 **교사의 관찰 및 평가 내용과 학생의 향후 발전 가능성을 자연스럽게 포함**하여 기술합니다.
**작성 지침:**
1. **내용 구성:** 추출된 8가지 핵심 요소를 바탕으로 학생의 물리학I 학습 과정에서의 특성, 변화, 성과를 통합적으로 기술합니다. 특히 **교사가 관찰한 학생의 강점과 태도를 명확히 언급**하고, 이를 통해 기대되는 **학생의 잠재력이나 향후 발전 가능성을 서술의 일부로 포함**합니다.
2. **문체 및 형식:**
* **반드시 ‘~~임’, ‘~~함.’과 같은 명사형 종결을 사용합니다.**
* **교사의 객관적인 관찰 및 평가 관점에서 작성합니다.** 학생의 주관적인 감정이나 자기 평가를 직접 서술하지 않고, **교사가 관찰한 구체적인 행동, 성취, 변화, 그리고 이를 통해 드러난 학생의 역량 및 잠재력**을 기술합니다.
* 학교생활기록부 형식에 맞는 전문적이고 간결한 문체를 사용합니다.
3. **길이:** 전체 내용을 **700글자 내외**로 완성합니다.
4. **언어:** 반드시 한글로 출력합니다.
5. **결과물:** 완성된 생활기록부 항목은 하나의 연속된 문단 형태로 제시합니다.
**★★ 중요 주의사항 ★★**
* **다음과 같은 '학생 스스로를 평가하는 듯한' 문구는 사용하지 마십시오.** 학교생활기록부는 교사의 객관적인 관찰 기록입니다.
* **예시:** ~을 알아봄, 이해함, 알게됨, 익힘, 계기가 됨, 자신의 능력에 대한 믿음이 생김, 큰 도움이 됨, 흥미를 느낌, 중요성을 깨달음 등 학생의 주관적인 감정, 자기 평가, 내면의 변화를 직접 서술하는 표현
* **대신,** 교사의 관점에서 학생의 **구체적인 행동, 노력, 성과, 변화된 태도** 등을 객관적으로 묘사하고, 이를 통해 학생의 **역량이 드러나거나 향상되었음**을 서술하는 방식으로 표현합니다. 학생의 **향후 발전 가능성 또한 교사가 관찰한 구체적인 근거(특정 역량, 태도 등)에 기반하여 객관적으로 기술**합니다. (예: ~을 통해 ~한 문제 해결 능력을 보임, ~한 노력을 꾸준히 기울여 ~한 성과를 달성함, ~한 역량을 바탕으로 향후 ~ 분야에서 큰 성취를 이룰 것으로 기대됨 등)
핵심 요소 추출 결과(8가지)를 참고하되, 서술의 구체성과 상세함은 원문 자료에서 가져와 생기부 문체에 맞게 재구성하여 작성해주세요. 학생의 강점, 성장, 그리고 **교사의 관찰 및 평가, 미래에 대한 기대**가 교사의 객관적인 기록을 통해 명확히 드러나도록 집중합니다.
"""
위에서 소개한 AI 에이전트를 정의한다.
class Core_Summarizer(dspy.Signature):
instruction = dspy.InputField(desc="요약을 어떻게 해야 하는지에 대한 설명입니다.")
context = dspy.InputField(desc="학생 활동, 평가 등에 대한 정보입니다.")
input_data = dspy.InputField(desc="생활기록부 작성이 필요한 실제 데이터입니다.")
core_summary = dspy.OutputField(desc="요약문입니다.")
class SR_Writer(dspy.Signature):
instruction = dspy.InputField(desc="생활기록부 작성, 지침과 작업에 대한 설명입니다.")
core_summary = dspy.InputField(desc="핵심 요소 추출 결과 입니다.")
one_shot = dspy.InputField(desc="생활기록부 예시(one shot) 입니다. 반드시! 예시의 형식을 준수하여 작성하세요!")
student_record = dspy.OutputField(desc="생활기록부입니다.")
class MySR_Agent(dspy.Module):
def __init__(self):
super().__init__()
self.summarizer = dspy.ChainOfThought(Core_Summarizer)
self.writer = dspy.ChainOfThought(SR_Writer)
def forward(self, core_prompt, context, input_data, write_prompt, one_shot):
summary = self.summarizer(instruction=core_prompt, context=context, input_data=input_data).core_summary
output = self.writer(instruction=write_prompt, core_summary=summary, one_shot=one_shot).student_record
return output
result = MySR_Agent()
result(core_prompt, context, input_data, write_prompt, one_shot)
<2단계 생기부 AI 에이전트 출력 결과>
"빛의 파장이 500nm인 단색광을 금속판에 비추어 광전 효과 현상을 관찰하고, 인덕션 히터의
작동 원리와 효율성에 대한 물리적 탐구를 수행하는 과정에서 뛰어난 문제 해결 능력을 보임.
특히, 광전 효과 공식의 다양한 상황 적용 연습을 통해 각 물리량 간의 유기적인 연결 관계를
깊이 이해하고, 전자기 유도 현상이 이론을 넘어 실생활에 활용되고 있음을 실감하게 되었음.
수업 참여도가 적극적이며, 질문을 통해 이해를 명확히 하려는 자세는 다른 학생들에게도
긍정적인 영향을 미치고 있음. '물리의 재구성' 활동을 통해 광전 효과의 핵심 공식을 다양한 상황에
적용하는 연습을 꾸준히 했으며, 인덕션 히터의 작동 원리를 분석하고 관련 자료를 수집 및 분석하는
과정에서 논리적 사고력과 응용력을 발휘함. 인덕션 히터는 전자기 유도 법칙에 의해 코일에서
발생한 변화하는 자기장이 금속 용기에 와전류를 유도하고, 이 와전류가 용기의 전기 저항에 의해
줄 열을 발생시켜 음식을 가열하는 장치라는 결론을 도출하는 과정에서 비판적 사고 능력을 보여줌.
향후 광전 효과와 빛의 세기 관계 탐구를 통해 빛의 세기가 광전류의 세기에 미치는 영향을 분석하고
실험을 설계하며, 다양한 금속의 일함수를 비교하고 각 금속에 대한 광전 효과를 분석하는 등
물리학 분야에 대한 깊이 있는 탐구를 이어갈 것으로 기대됨."
<단일 생기부 AI 출력 결과(이전시간)>
"김OO 학생은 물리학I 학습 과정에서 뛰어난 잠재력과 성장 가능성을 보여주었습니다.
학업 성취도는 훌륭하며, 특히 문제 해결 능력과 창의적인 사고방식이 돋보입니다.
'물리의 재구성' 활동에서 김OO 학생은 광전 효과 관련 문제를 선택하여, 주어진 조건과 미지수를
변형하여 새로운 문제를 직접 창조하고 해결하는 과정에서 뛰어난 문제 해결 능력을 입증했습니다.
단순히 공식 적용을 넘어, 파장, 진동수, 일함수, 최대 운동 에너지, 정지 전압 간의 관계를
깊이 이해하고, 이를 활용하여 복잡한 문제를 해결하는 능력이 돋보였습니다.
특히, 일함수를 문턱 진동수로, 최대 운동 에너지를 정지 전압으로 변환하여 사고하는 과정에서
개념 간의 유기적인 연결을 명확히 파악하는 능력이 인상적입니다.
'물리 심화 탐구' 활동에서 김OO 학생은 인덕션 히터의 작동 원리에 대한 탐구를 통해 전자기 유도
현상에 대한 깊이 있는 이해를 보여주었습니다. 와전류, 표피 효과 등 심화된 물리 개념을 학습하고,
이를 실제 생활 응용 사례에 연결하는 능력이 뛰어납니다. 탐구 과정에서 과학적 방법론을 체계적으로
적용하고, 분석적인 결론을 도출하는 과정은 깊이 있는 학습 태도를 보여줍니다.
수업 참여도 또한 매우 적극적이며, 질문을 통해 이해를 명확히 하려는 자세는 학습 의욕이 높음을
보여줍니다. 김OO 학생은 물리학 분야에 대한 깊은 관심과 뛰어난 잠재력을 지니고 있으며,
대학에서 물리학 관련 학문 분야를 전공할 경우 큰 성과를 낼 것으로 기대합니다."
둘을 비교해 보자. 지침을 명확하게 하였을 때 이전보다 출력이 훨씬 깔끔하고 지침을 잘 지킨 것을 알 수 있다.
문제점으로, <이전 출력>에서는 36초가 걸렸는데 이번 출력은 1분 36초가 걸렸다. AI의 역할을 분리하고 세세하게 분배할 수록 시간이 오래 걸릴 수 밖에 없다. 이 점은 감안해야 한다. 물론 openai나 gemini 등 상용 AI의 api를 활용하면 큰 차이는 없을 것이다.
'파이썬 프로그래밍 > 파이썬 개발' 카테고리의 다른 글
4. DSPy 생기부 AI 에이전트-3 (1) | 2025.05.16 |
---|---|
3. DSPy 생기부 AI 에이전트-2 (2) | 2025.05.14 |
1. DSPy 기초적인 사용법 탐구하기, 생기부 작성 예제 (2) | 2025.05.11 |
생활기록부 AI 에이전트 만들기 프로젝트 (0) | 2025.05.10 |
등가속도 운동 분석기 개발 과정(with Gemini AI, 노코딩) (0) | 2025.05.02 |