<목차>
1. DSPy 기초적인 사용법 탐구하기, 생기부 작성 예제
1. 분류자(Discriminator)의 필요성
이전시간에는 요약자와 평가자를 나누어 생기부 작성 작업을 처리하였다. 여기서 문제가 하나 더 생기는데 학생들의 활동 결과물 내용 및 퀄리티가 같지 않다는 것이다. 과목1등이지만 활동은 잘 하지 않는 학생, 성적은 조금 낮지만 발표, 활동, 토론 등에 적극적으로 참여하는 학생, 어중간한 학생, 아무것도 하지 않고 엎드려 있는 학생 등등 교실에는 오만군상이 존재한다.
본인은 개인적으로 학생 활동 결과를 4가지로 나눈다.
1. 적극적으로 참여하고 활동도 열심히 한 학생 → good
2. 적극적이지 않으나 활동엔 빠지지 않고 참여한 학생 → normal
3. 모든 활동에 참여하지 않고 한 두개 활동만 참여하는 소극적 학생 → bad
4. 아무것도 하지 않은 학생 → nothing
각각의 학생들에 대해 생활기록부를 작성할 때 아래와 같은 규칙을 적용한다.
1. 적극적으로 참여하고 활동도 열심히 한 학생: 핵심 요소 추출후 학생 활동을 핵심 요소 중심으로 기술
2. 적극적이지 않으나 활동엔 빠지지 않고 참여한 학생: 학생활동 위주로 기술
3. 모든 활동에 참여하지 않고 한 두개 활동만 참여하는 소극적 학생 : 학생활동 + 부족한 부분은 성취기준으로 보충
4. 아무것도 하지 않은 학생 : 성취기준으로 간단히 작성
※ 성취기준은 정말 써줄말이 없을 때 작성하는 것으로 학생에 대한 개인적인 학업능력을 표현하기 어렵다.
이 역할을 수행할 인공지능을 분류자(Discriminator)로 지정한다. 분류자는 학생 데이터를 입력받고 평가 후 'good', 'normal', 'bad', 'nothing'을 출력한다.
good이라면 요약자로 입력하여 핵심 요소 추출 후 생활기록부를 작성
normal은 요약하지 않고 학생 활동만으로 생활기록부를 작성
bad는 학생활동과 성취기준으로 생활기록부를 작성
nothing은 성취기준만으로만 생활기록부를 작성
2. 전체적 작동 과정
1단계 (항상 시작): 분류자 (Discriminator) 모듈 실행
- 입력: 원본 학생 자료(input_data)와 품질 판별 지침(instruction)을 입력받는다.
- 처리: 분류자(Discriminator)는 instruction에 정의된 기준에 따라 input_data의 내용 유무, 충실도, 깊이 등을 분석한다.
- 출력: 분석 결과에 따라 데이터 품질을 'good', 'normal', 'bad', 'nothing' 중 하나로 판별하여 출력한다. 이 판별 결과가 후속 단계의 데이터 흐름과 작성 전략을 결정한다.
2단계 (품질에 따른 후속 모듈 실행 및 데이터 흐름 결정) - Activity 및 Achievement 활용 상세:
- 경우 1: Input Data 품질이 'good' 일 때
- 데이터 흐름: 분류자가 'good'을 출력하면, 원본 학생 자료(input_data), 활동 내역(activity), 그리고 핵심 요소 추출 지침(good instruction/summary)이 요약자(Core_summarizer) 모듈로 전달된다.
- 요약자 역할: 요약자는 input_data의 풍부한 내용을 activity가 제공하는 활동 구조 정보(예: 물리 재구성의 8가지 항목, 심화 탐구의 5가지 항목 등)를 참고하여 분석한다. 이 과정을 통해 input_data에서 학생 활동의 8가지 핵심 요소를 상세하고 정확하게 추출한다. 추출된 결과는 핵심 요약(context)으로서 다음 단계로 전달된다. activity는 이 추출 작업의 효율성과 정확성을 높이는 데 구조적 가이드라인을 제공한다.
- SR_Writer 입력: 작성자(SR_Writer)는 요약자가 생성한 핵심 요약(context), 원본 input_data, 활동 내역(activity), 그리고 'good' 품질에 특화된 작성 프롬프트(Write prompt)를 입력받는다. 성취기준(Achievement) 데이터는 직접 입력되지 않는다.
- SR_Writer 작성 전략: 작성자는 'good' Write prompt의 지침에 따라 핵심 요약(context)을 전체 글의 명확한 로드맵으로 삼는다. 원본 input_data의 상세하고 구체적인 내용을 바탕으로 활동 내역(activity)이 제공하는 활동 구조에 맞춰 내용을 풍성하게 기술한다. 학생의 뛰어난 역량, 심도 깊은 학업 성취, 유의미한 성장, 교사의 긍정적 평가, 밝은 잠재력을 구체적이고 설득력 있게 서술하는 데 집중한다. activity는 글의 전체적인 틀과 섹션 구성을 제공한다.
- 경우 2: Input Data 품질이 'normal' 일 때
- 데이터 흐름: 분류자가 'normal'을 출력하면, 원본 학생 자료(input_data)와 활동 내역(activity)이 작성자(SR_Writer) 모듈로 직접 전달된다. 요약자(Core_summarizer) 및 성취기준(Achievement) 데이터는 이 단계에서 사용되지 않는다.
- SR_Writer 입력: 작성자(SR_Writer)는 원본 input_data, 활동 내역(activity), 그리고 'normal' 품질에 특화된 작성 프롬프트(Write prompt)를 입력받는다.
- SR_Writer 작성 전략: 작성자는 'normal' Write prompt의 지침에 따라 원본 input_data의 내용을 기반으로 생활기록부를 작성한다. activity가 제공하는 활동 구조를 참고하여 글의 틀을 잡는다. input_data의 정보가 다소 부족하더라도, 그 안에서 파악되는 학생의 노력의 흔적, 기본적인 이해 수준, 수업 참여 태도 등을 중심으로 객관적으로 서술한다. activity는 내용이 부실한 input_data에 구조적인 맥락을 부여하고, 언급할 활동 유형을 제시하는 역할을 한다.
- 경우 3: Input Data 품질이 'bad' 일 때
- 데이터 흐름: 분류자가 'bad'를 출력하면, 원본 학생 자료(input_data), 활동 내역(activity), 그리고 성취기준(Achievement) 데이터가 작성자(SR_Writer) 모듈로 직접 전달된다. 요약자(Core_summarizer)는 사용되지 않는다.
- SR_Writer 입력: 작성자(SR_Writer)는 원본 input_data, 활동 내역(activity), 성취기준(Achievement), 그리고 'bad' 품질에 특화된 작성 프롬프트(Write prompt)를 입력받는다.
- SR_Writer 작성 전략: 작성자는 'bad' Write prompt의 지침에 따라 생활기록부를 작성한다. 원본 input_data에서 파악되는 극히 적은 정보를 먼저 기술한다. 이후 활동 내역(activity)이 제공하는 활동 구조적 틀과 성취기준(Achievement) 목록을 주요 내용 구성의 기반으로 활용한다. activity는 성취기준 내용을 학생의 맥락(어떤 활동 관련 성취기준인지 등)에 연결하는 데 필요한 활동 유형 프레임을 제공한다. 성취기준 내용을 학생의 실제 '달성 성과'가 아닌, 교사가 관찰 가능한 '관련 학습 과정 참여'나 '노력의 흔적' 위주로 객관적으로 서술한다. 원문 내용이 부족한 상당 부분을 성취기준 관련 내용으로 채워 분량을 확보한다.
- 경우 4: Input Data 품질이 'nothing' 일 때
- 데이터 흐름: 분류자가 'nothing'을 출력하면, 활동 내역(activity)과 성취기준(Achievement) 데이터가 작성자(SR_Writer) 모듈로 직접 전달된다. 원본 input_data는 내용이 없어 실질적으로 사용되지 않으며, 요약자(Core_summarizer)도 사용되지 않는다.
- SR_Writer 입력: 작성자(SR_Writer)는 활동 내역(activity), 성취기준(Achievement), 그리고 'nothing' 품질에 특화된 작성 프롬프트(Write prompt)를 입력받는다. 이 때 activity는 "없음"으로 정의한다.
- SR_Writer 작성 전략: 작성자는 'nothing' Write prompt의 지침에 따라 생활기록부를 작성한다. 학생의 구체적인 활동 내용이 전혀 없으므로, 성취기준(Achievement) 목록만을 활용하며 학생이 해당 과목에서 '이러이러한 성취기준과 관련된 학습 내용을 접했다'는 내용을 기술하는 데 구조적인 도움을 제공한다. 교사가 관찰한 일반적인 수업 참여 태도나 성실성 등을 중심으로, 최소한의 분량(예: 300자 내외)으로 간결하게 서술한다.
3단계 (항상 마지막): SR_Writer의 최종 Output
- 출력: 최종적으로, 작성자(SR_Writer) 모듈은 해당 품질에 맞는 데이터(input_data, activity, Achievement 등)와 작성 프롬프트 지침을 모두 활용하여 완성된 생활기록부 항목 텍스트를 출력한다.
3. Discriminator 함수 정의
input_data1 = r"""[물리 점수] 86, 75, 72, 85 [물리의 재구성] 선정한 문제: 빛의 파장이 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. 탐구 고찰에 대해 작성하세요 이번 탐구를 통해 전자기 유도 현상이 단순히 이론에 머무르지 않고, 우리 생활 깊숙이 들어와 유용하게 활용되고 있음을 실감했습니다. 인덕션 히터의 원리를 이해하면서 와전류, 표피 효과 등 심화된 물리 개념까지 접할 수 있어 지식의 폭을 넓힐 수 있었습니다. 다만, 실제 인덕션 히터의 코일 설계, 주파수 최적화, 사용 가능한 용기의 재질 제한(자성체 또는 특정 비자성체 금속) 등 공학적인 측면까지 깊이 있게 다루지 못한 점은 아쉬움으로 남습니다. 앞으로 전자기학 관련 심화 학습을 통해 이러한 부분에 대한 이해를 높이고 싶다는 생각을 했습니다. 또한, 에너지 효율이 높은 인덕션 기술이 산업 현장에서는 어떻게 응용되는지(예: 금속 용해, 열처리) 추가적으로 조사해보고 싶습니다. [교과선생님 관찰내용] 수업 참여도 적극적이며, 질문을 통해 이해를 명확히 하려는 자세가 돋보임."""
input_data2 = r"""[물리 점수] 66, 54, 51, 49 [물리의 재구성] 선정한 문제: 교과서에 나온 쉬운 운동 문제 중에서 낙하하는 물체의 운동 관련 문제 하나를 골랐습니다. 문제 선정 이유: 중력 때문에 물체가 아래로 떨어지는 것은 우리가 매일 보는 현상이라서 궁금했습니다. 교과서에서 관련된 문제를 보니 해보고 싶다는 생각이 들었습니다. 다른 문제들보다는 좀 쉬워 보여서 골랐습니다. 문제에서 제시된 물리량과 확인해야 하는 물리량: 문제에서 처음 속도, 시간 같은 것이 주어졌고, 나중 속도나 이동 거리를 구하는 것이었습니다. 확인해야 하는 물리량 구하는 법 (기존 문제 풀이): 등가속도 운동 공식 (v=v0+at, s=v0t+1/2at^2)을 사용해서 풀었습니다. 문제에 주어진 숫자들을 공식에 넣어서 계산했습니다. 책에 풀이가 있어서 보고 따라 했습니다. 재구성한 물리 현상 방법 (새로운 문제): 기존 문제에서 숫자를 조금 바꿔서 새로운 문제를 만들었습니다. 예를 들어, 떨어지는 시간을 2초에서 3초로 바꾼다거나 하는 식으로요. 재구성한 물리 현상과 기존 물리현상의 공통점과 차이점: 사용한 공식은 똑같습니다. 문제 내용이나 숫자가 달라졌습니다. 재구성한 물리 현상으로 확인해야 하는 물리량 구하기 (새로운 문제 풀이): 바꾼 숫자를 공식에 넣어서 다시 계산했습니다. 계산 실수를 안 하려고 노력했습니다. 탐구를 통해 무엇을 배웠는지 구체적으로 설명하기: 등가속도 운동 공식을 문제에 적용하는 연습을 할 수 있었습니다. 공식이 왜 그렇게 생겼는지는 잘 모르겠지만, 문제 푸는 방법은 조금 알게 되었습니다. 속도나 거리를 구하는 계산이 중요하다는 것을 배웠습니다. 추가 계획 1가지 이상 제시하기: 등가속도 운동 다른 문제들도 더 풀어보고 싶습니다. [물리 심화 탐구] 주제 선정에 대해 작성하세요: 왜 하늘이 파란색으로 보이는지 평소에 궁금했습니다. 과학적으로 이유가 있을 것 같아서 찾아보고 싶었습니다. 자료 수집에 대해 작성하세요: 인터넷 검색을 많이 했습니다. 유튜브 영상도 보고, 집에 있는 과학 책에서 빛 관련 부분도 찾아봤습니다. 자료 분석에 대해 작성하세요: 태양 빛이 지구 대기를 지나면서 공기 분자 같은 것에 부딪혀서 빛이 여기저기로 흩어진다고 합니다. 이걸 산란이라고 하는 것 같습니다. 파란색 빛이 다른 빨간색이나 노란색 빛보다 더 많이 흩어져서 하늘이 파랗게 보인다고 합니다. 결론 도출에 대해 작성하세요: 하늘이 파랗게 보이는 것은 태양 빛이 대기 중에서 산란되기 때문이고, 특히 파란색 빛이 잘 산란되기 때문입니다. 탐구 고찰에 대해 작성하세요: 매일 보는 하늘 색깔에 이런 과학적인 원리가 숨어있다는 것이 신기했습니다. 빛의 산란이라는 현상에 대해 처음 알게 되었습니다. 물리가 우리 생활 주변에 있다는 것을 다시 느꼈습니다. 다만, 왜 파란색 빛이 다른 색보다 더 잘 흩어지는지는 아직 잘 이해되지 않았습니다. 기회가 되면 더 공부하고 싶습니다. [교과선생님 관찰내용] 수업 시간에 성실하게 참여하려는 태도를 보임. 기본적인 개념 설명은 이해하려 노력하나, 심화되거나 응용이 필요한 문제에서는 어려움을 겪는 모습이 관찰됨. 개념을 정확히 적용하는 연습이 더 필요함. 꾸준히 노력한다면 조금씩 나아질 것으로 기대됨."""
input_data3 = r"""[물리 점수] 28, 35, 31, 25 [물리의 재구성] 미작성 [물리 심화 탐구] 주제 선정: 소리가 어떻게 들리는지 궁금해서 골랐습니다. 자료 수집: 인터넷으로 소리 관련 정보 찾아봤습니다. 자료 분석: 소리가 떨림으로 전달된다는 것 같습니다. 결론 도출: 떨림이 귀에 오면 소리가 들립니다. 탐구 고찰: 소리가 신기하다는 것을 알게 되었고, 물리가 생활에 있다는 것을 느꼈습니다. [교과선생님 관찰내용] 수업 시간에 조용히 참여함. 복잡한 개념에 대한 깊은 이해는 부족해 보임."""
input_data4 = r"""아무 활동을 하지 않음"""
discriminator_prompt = r"""당신은 고등학생의 특정 과목 활동 기록(예: 물리 활동, 탐구 보고서 등)의 내용 유무 및 품질 수준을 평가하는 전문가입니다. 다음 입력된 '학생 활동 데이터'를 분석하여, 그 내용의 존재 유무, 충실도, 깊이, 구체성 등을 기준으로 **'good', 'normal', 'bad', 'nothing'** 중 하나의 카테고리로 판별하세요.
**판별 기준:**
1. **good:**
* 활동 내용이 **매우 상세하고 구체적**이며, 문제 해결 과정이나 탐구 절차가 **논리적이고 체계적으로** 기술되어 있습니다.
* 물리 개념에 대한 **심도 깊은 이해와 분석**이 드러나며, 개념 간의 유기적인 연결이나 응용 시도가 명확히 보입니다.
* 활동을 통해 얻은 **구체적인 깨달음, 성과, 또는 도출한 결론**이 명확하고 의미 있습니다.
* **두드러지는 노력, 주도성, 창의적인 시도**가 관찰됩니다.
* 전반적으로 고등학생의 심화 활동 기록으로서 기대되는 **높은 수준의 품질**을 보입니다.
2. **normal:**
* 활동 내용은 어느 정도 기술되어 있으나, **구체성이나 분석의 깊이가 다소 부족**할 수 있습니다.
* 물리 개념에 대한 **기본적인 이해 수준**을 보이며, 복잡한 개념 적용이나 심층적인 분석 시도는 미약할 수 있습니다.
* 깨달음이나 결론이 **다소 피상적이거나 일반적인 수준**에 머무를 수 있습니다.
* 활동 참여 및 노력의 흔적은 보이나, **두드러지는 주도성이나 차별화된 시도는 부족**할 수 있습니다.
* 고등학생 활동 기록으로서 **평균적인 수준의 품질**을 보입니다. **'good'에 미치지 못하지만, 유의미한 내용이 최소한으로라도 있는 경우**에 해당합니다.
3. **bad:**
* 활동 내용은 **있기는 하지만, 극도로 짧거나 내용이 매우 부실**하여 활동의 흔적만 겨우 남은 경우입니다.
* 필수 항목이 다수 누락되었거나, 작성된 내용이 극히 형식적이거나 의미 없는 문장들로 채워져 있습니다.
* 구체적인 내용이나 의미 있는 활동, 깨달음, 결과 등을 거의 찾아볼 수 없습니다.
* **아무것도 하지 않았다고 보기는 어렵지만, 최소한의 노력조차 부족**했다고 판단되는 수준입니다. (예: 제목만 있거나, 한두 문장으로 모든 내용을 때우거나)
4. **nothing:**
* 제공된 '학생 활동 데이터'가 **전혀 없거나, 빈 문자열("") 또는 의미 없는 몇 개의 공백 문자**로만 구성되어 있습니다.
* 학생이 해당 활동을 **전혀 수행하지 않았거나 기록을 제출하지 않았다고 판단**되는 경우에 해당합니다.
**출력 형식:**
당신의 출력은 판별 결과인 **단 하나의 영문 소문자 단어**여야 합니다: **'good'**, **'normal'**, **'bad'**, 또는 **'nothing'**. 어떠한 추가 설명, 문장 부호, 개행 문자도 포함하지 마십시오.
**예시:**
[학생 데이터]: ... (여기에 실제 학생 데이터 텍스트가 들어갑니다) ...
출력:
normal
(또는 good, bad, nothing)
**중요:** 판별은 오직 제공된 '학생 활동 데이터'의 **내용 유무와 품질 자체**에만 근거해야 합니다.
"""
from typing import Literal
class Discriminator(dspy.Signature):
instruction = dspy.InputField(desc="입력데이터의 품질을 어떻게 판별해야 하는지에 대한 설명입니다.")
input_data = dspy.InputField(desc="생활기록부 작성이 필요한 실제 데이터입니다.")
quality: Literal['good', 'normal', 'bad', 'nothing'] = dspy.OutputField(desc="반드시 넷 중 하나를 선택하여 출력합니다")
def decision(quality):
if quality == 'good':
result = f"입력 품질은 {quality}입니다. 핵심 추출 작업과 원문을 바탕으로 생활기록부를 작성해야 합니다"
elif quality == 'normal':
result = f"입력 품질은 {quality}입니다. 원문을 바탕으로 생활기록부를 작성해야 합니다."
elif quality == 'bad':
result = f"입력 품질은 {quality}입니다. 원문을 바탕으로 작성하지만 부족한 부분은 성취기준으로 작성해야 합니다."
elif quality == 'nothing':
result = f"입력 품질은 {quality}입니다. 성취기준을 바탕으로 작성해야 합니다."
else:
result = "알 수 없는 품질 결과입니다."
return result
result = dspy.ChainOfThought(Discriminator)
predict = result(instruction=discriminator_prompt, input_data=input_data2).quality
print(decision(predict))
<출력 결과>
- 시그니처 정의 (Discriminator 클래스):
- Discriminator 시그니처를 정의하면서 AI에게 수행시킬 작업(품질 판별)의 입출력 형태를 명시한다.
- 여기서 quality: Literal['good', 'normal', 'bad', 'nothing'] = dspy.OutputField(...)
- Literal의 역할: Literal은 파이썬의 타입 힌트 기능 중 하나로, 어떤 변수나 필드가 가질 수 있는 값을 미리 정해진 특정 값들로만 제한하고 싶을 때 사용한다. 여기서 Literal['good', 'normal', 'bad', 'nothing']는 quality라는 출력 필드가 가질 수 있는 값이 오직 'good', 'normal', 'bad', 'nothing' 이 네 개의 문자열 리터럴 중 하나여야 함을 강력하게 명시한다.
- DSPy에서의 Literal 활용: DSPy는 이 Literal 타입 힌트를 보고, AI 모델에게 프롬프트를 생성할 때 "네 답변(quality)은 반드시 'good', 'normal', 'bad', 'nothing' 넷 중에 하나여야 해"라는 지침을 추가한다. 또한 AI의 응답을 파싱할 때, 이 필드에 해당하는 결과가 정의된 Literal 값 중 하나인지 검증하는 데 사용될 수 있다. 이렇게 하면 AI가 예상치 못한 다른 형태의 응답을 내놓는 것을 방지하고, 프로그램이 AI의 출력을 더 안정적으로 처리할 수 있게 된다.
- 결론적으로, Literal은 AI에게 출력해야 할 값의 선택지를 명확히 제한하여, AI가 정확하고 구조화된 응답을 생성하도록 돕는 핵심적인 역할을 한다.
- 후처리 함수 정의 (get_quality_message):
- get_quality_message 함수는 AI가 예측한 quality 값을 입력으로 받아, 이 값이 'good', 'normal', 'bad', 'nothing' 중 무엇인지에 따라 다른 안내 메시지를 반환한다. 이 함수는 AI의 예측이 끝난 후에 사용될 단순한 파이썬 로직이다.
- AI 모듈 인스턴스 생성 (dspy.ChainOfThought(Discriminator)):
- dspy.ChainOfThought(Discriminator)는 Discriminator 시그니처(AI 작업의 설계도)를 사용하여, AI에게 이 작업을 수행하되 '생각하는 과정(CoT)'을 거치도록 지시하는 실행 가능한 모듈(result)을 만든다.
- AI 모듈 실행 및 예측 수행 (result(...).quality):
- result(...)를 호출하여 AI에게 실제 작업을 시작하게 한다.
- AI는 입력된 지침과 학생 데이터를 보고, Discriminator 시그니처에 정의된 대로(특히 quality 필드는 Literal에 정의된 네 값 중 하나로 출력해야 한다는 제약을 인지하며) 품질을 판단하는 추론 과정을 거친다.
- AI는 추론 후 최종적으로 quality 필드에 해당하는 값(예: 'bad')을 예측하고, DSPy는 이 값을 추출하여 predict 변수에 저장한다. Literal 타입 힌트 덕분에 이 predict 변수에는 'good', 'normal', 'bad', 'nothing' 중 하나의 문자열만 저장된다.
- 예측 결과를 활용하여 메시지 출력 (print(get_quality_message(predict))):
- AI가 판별한 품질 값(predict)을 get_quality_message 함수에 전달한다.
- 함수는 전달받은 값(예: 'bad')이 어떤 Literal 값에 해당하는지 확인하여, 그에 맞는 안내 메시지를 생성하고 반환한다.
- print() 함수가 최종 메시지를 화면에 출력한다.
4. 작업을 위한 프롬프트 정의
첫 번째로 학생 입력 데이터 품질에 따라 생활기록부 작성하는 프롬프트를 다르게 주는 write_prompt 4개를 정의한다. 그리고 bad와 nothing에 입력할 성취기준인 archievement도 정의한다.
archievement = r"""
1. 여러 가지 물체의 운동 사례를 찾아 속력의 변화와 운동 방향의 변화에 따라 분류할 수 있다.
2. 뉴턴 운동 법칙을 이용하여 직선 상에서 물체의 운동을 정량적으로 예측할 수 있다.
3. 뉴턴의 제3법칙의 적용 사례를 찾아 힘이 상호 작용임을 설명할 수 있다.
4. 물체의 1차원 충돌에서 충돌 전후의 운동량 보존을 이용하여 속력의 변화를 정량적으로 예측할 수 있다.
5. 충격량과 운동량의 관계를 이해하고, 일상생활에서 충격을 감소시키는 예를 찾아 설명할 수 있다.
6. 직선 상에서 운동하는 물체의 역학적 에너지가 보존되는 경우와 열에너지가 발생하여 역학적 에너지가 보존되지 않는 경우를 구별하여 설명할 수 있다.
7. 열기관이 외부와 열과 일을 주고받아 열기관의 내부 에너지가 변화됨을 사례를 들어 설명할 수 있다.
8. 열이 모두 일로 전환되지 않는다는 것을 사례를 들어 설명할 수 있다.
9. 모든 관성계에서 빛의 속도가 동일함을 알고 시간 지연, 길이 수축, 동시성과 관련된 현상을 설명할 수 있다.
10. 질량이 에너지로 변환됨을 사례를 들어 설명할 수 있다.
11. 전자가 원자에 속박되어 있음을 전기력을 이용하여 정성적으로 설명할 수 있다.
12. 원자 내의 전자는 불연속적 에너지 준위를 가지고 있음을 스펙트럼 관찰을 통하여 설명할 수 있다.
13. 고체의 에너지띠 이론으로 도체, 반도체, 절연체 등의 차이를 구분하고, 여러 가지 고체의 전기 전도성을 비교하는 탐구를 수행할 수 있다.
14. 종류가 다른 원소를 이용하여 반도체 소자를 만들 수 있음을 다이오드를 이용하여 설명할 수 있다.
15. 전류에 의한 자기 작용이 일상생활에서 적용되는 다양한 예를 찾아 그 원리를 설명할 수 있다.
16. 자성체의 종류를 알고 자성체가 활용되는 예를 찾을 수 있다.
17. 일상생활에서 전자기 유도 현상이 적용되는 다양한 예를 찾아 그 원리를 설명할 수 있다.
18. 파동의 진동수, 파장, 속력 사이의 관계를 알고 매질에 따라 파동의 속력이 다른 것을 활용한 예를 설명할 수 있다.
19. 파동의 전반사 원리를 이용한 광통신 과정을 설명할 수 있다.
20. 다양한 전자기파를 스펙트럼의 종류에 따라 구분하고, 그 사용 예를 찾아 설명할 수 있다.
21. 파동의 간섭이 활용되는 예를 찾아 설명할 수 있다.
22. 빛의 이중성을 알고, 영상정보가 기록되는 원리를 설명할 수 있다.
23. 물질의 이중성을 알고, 전자 현미경의 원리를 설명할 수 있다.
"""
write_prompt_good = r"""당신은 [물리학I] 교사이며, 학생의 학교생활기록부 항목을 작성하는 최고 수준의 전문가입니다. 이번에 작성할 학생의 활동 데이터 품질은 **'good'** 수준이며, 학생의 뛰어난 역량과 성과가 잘 드러나 있습니다.
**입력되는 데이터는 두 가지입니다:**
1. **"학생 활동 및 교사 평가 자료" 원문:** 학생의 활동에 대한 **매우 상세하고 구체적인 설명**과 교사의 긍정적인 평가가 담긴 원본 자료입니다. 이 자료는 'good' 품질 수준에 해당하는 풍부한 내용입니다.
2. **"핵심 요소 추출 결과":** 위 원문에서 **핵심 활동, 깨달은 점, 드러난 행동, 주도적인 내용, 도출한 결론, 공동체 요소, 교사 관찰 및 평가, 향후 발전 가능성 및 기대** 등 총 8가지 핵심 요소를 **정확하고 충실하게** 목록 형태로 추출한 자료입니다.
**작성 목표:**
입력된 **"핵심 요소 추출 결과"를 전체 내용 구성의 명확한 로드맵(Roadmap)**으로 삼고, **"학생 활동 및 교사 평가 자료" 원문의 풍부한 구체적인 내용**을 활용하여 [물리학I] 과목에서의 학생의 **뛰어난 역량, 심도 깊은 학업 성취 및 유의미한 성장**을 객관적이고 설득력 있게 기술합니다. **교사의 높은 수준의 관찰 및 평가 내용과 학생의 뛰어난 잠재력 및 향후 발전 가능성**을 적극적으로 부각하여 서술합니다.
**작성 지침:**
1. **내용 구성:** 추출된 **8가지 핵심 요소 목록 순서대로** 학생의 물리학I 학습 과정을 기술하되, 각 요소의 내용을 **"학생 활동 및 교사 평가 자료" 원문에 제시된 구체적인 사례와 상세한 설명으로 뒷받침하고 풍성하게** 만듭니다. 특히 다음 내용에 집중합니다.
* **개념에 대한 심도 깊은 이해와 적용 능력:** 문제 해결 과정, 탐구 분석 등에서 드러난 깊이 있는 이해 수준을 명확히 서술합니다.
* **비판적 사고 및 문제 해결 능력:** 문제 재구성, 예상치 못한 상황 대처 등에서 발휘된 사고 과정을 구체적으로 기술합니다.
* **창의성 및 주도성:** 새로운 아이디어 제안, 독자적인 탐구 설계 등 차별화된 시도를 부각합니다.
* **협업 및 리더십 (해당 시):** 팀 활동에서의 긍정적인 기여와 리더십 발휘 사례를 구체적으로 제시합니다.
* **교사의 관찰 및 평가:** 원문에 명시된 교사의 긍정적인 평가 내용을 자연스럽게 녹여 학생의 강점을 객관적으로 뒷받침합니다.
* **향후 발전 가능성:** 학생이 보여준 뛰어난 역량과 태도를 근거로, 물리학 분야에서의 밝은 잠재력과 기대를 구체적으로 기술합니다.
2. **문체 및 형식:**
* **반드시 ‘~~임’, ‘~~함.’과 같은 명사형 종결을 사용합니다.**
* **교사의 객관적이고 전문적인 관찰 및 평가 관점에서 작성합니다.** 학생의 **뛰어난 역량과 구체적인 성과**를 명확하고 자신감 있는 문체로 기술합니다. (Normal, Bad, Nothing 프롬프트보다 더 강력하고 긍정적인 톤을 사용합니다.)
* 학교생활기록부 형식에 맞는 전문적이고 간결하면서도 **학생의 우수성이 돋보이는** 문체를 사용합니다.
3. **길이:** 전체 내용을 **700글자 내외**로 완성합니다. (풍부한 내용을 담아야 하므로 분량 확보에 집중합니다.)
4. **언어:** 반드시 한글로 출력합니다.
5. **결과물:** 완성된 생활기록부 항목은 하나의 연속된 문단 형태로 제시합니다.
**★★ 중요 주의사항 ★★**
* **다음과 같은 '학생 스스로를 평가하는 듯한' 문구는 사용하지 마십시오.** (예시 동일)
* **대신,** 교사의 관점에서 학생이 보여준 **뛰어난 행동, 심도 깊은 이해, 유의미한 성과, 차별화된 노력** 등을 객관적으로 묘사하고, 이를 통해 학생의 **뛰어난 역량과 잠재력**이 드러났음을 강조하는 방식으로 표현합니다. 학생의 **높은 수준의 잠재력과 향후 발전 가능성 또한 교사가 관찰한 구체적인 뛰어난 역량이나 성과를 근거로 객관적으로 기술**합니다.
* 이 프롬프트는 'good' 품질의 데이터를 위한 것이므로, **원문에 충분한 정보와 긍정적인 내용이 있다고 가정**합니다. 추출된 핵심 요소와 원문 내용을 적극적으로 활용하여 학생의 우수성을 효과적으로 기술하는 데 집중합니다.
**'학생 활동 및 교사 평가 자료' 원문의 풍부하고 구체적인 내용과, '핵심 요소 추출 결과' 로드맵을 모두 활용하여, 교사의 전문적이고 긍정적인 관점에서 학생의 뛰어난 역량, 구체적인 성과, 그리고 밝은 잠재력을 중심으로 생활기록부 문체에 맞게 작성해주세요.**
"""
write_prompt_normal = r"""당신은 [물리학I] 교사이며, 학생의 학교생활기록부 항목을 작성하는 전문가입니다. 이번에 작성할 학생의 활동 데이터 품질은 'normal' 수준입니다.
**입력되는 데이터는 한 가지입니다:**
1. **"학생 활동 및 교사 평가 자료" 원문:** 학생의 활동에 대한 상세한 설명과 교사의 평가가 담긴 원본 자료입니다. 이 자료는 'normal' 품질 수준이며, 내용이 다소 피상적이거나 구체성이 부족할 수 있습니다.
**작성 목표:**
입력된 "학생 활동 및 교사 평가 자료" 원문의 내용을 바탕으로 [물리학I] 과목의 학교생활기록부 항목을 작성합니다. 원문 정보가 다소 부족할 수 있으나, 그 안에서 **학생의 노력의 흔적, 기본적인 이해 수준, 참여 태도** 등을 파악하여 긍정적으로 서술하려 노력합니다.
**작성 지침:**
1. **내용 구성:** 입력된 "학생 활동 및 교사 평가 자료" 원문에서 학생의 **활동 참여 사실, 노력한 부분, 기본적인 학습 내용 이해, 수업 태도** 등을 중심으로 내용을 구성합니다. 원문에 깊이 있는 내용이 부족하더라도, 관찰 가능한 긍정적인 면이나 노력의 흔적을 최대한 찾아 기술합니다.
2. **문체 및 형식:**
* **반드시 ‘~~임’, ‘~~함.’과 같은 명사형 종결을 사용합니다.**
* **교사의 객관적인 관찰 및 평가 관점에서 작성합니다.** 학생의 주관적인 감정이나 자기 평가를 직접 서술하지 않고, **교사가 관찰한 구체적인 행동, 참여 태도, 기본적인 성취 수준** 등을 기술합니다. 원문 내용이 부족할 경우, 교사의 일반적인 관찰 내용(예: 성실성, 노력하는 모습)에 기반하여 서술할 수 있습니다.
* 학교생활기록부 형식에 맞는 전문적이고 간결한 문체를 사용합니다.
3. **길이:** 전체 내용을 **700글자 내외**로 완성합니다.
4. **언어:** 반드시 한글로 출력합니다.
5. **결과물:** 완성된 생활기록부 항목은 하나의 연속된 문단 형태로 제시합니다.
**★★ 중요 주의사항 ★★**
* **다음과 같은 '학생 스스로를 평가하는 듯한' 문구는 사용하지 마십시오.** 학교생활기록부는 교사의 객관적인 관찰 기록입니다.
* **예시:** ~을 알아봄, 이해함, 알게됨, 익힘, 계기가 됨, 자신의 능력에 대한 믿음이 생김, 큰 도움이 됨, 흥미를 느낌, 중요성을 깨달음 등 학생의 주관적인 감정, 자기 평가, 내면의 변화를 직접 서술하는 표현
* **대신,** 교사의 관점에서 학생의 **구체적인 행동, 노력, 관찰 가능한 기본적인 성과나 태도** 등을 객관적으로 묘사하는 방식으로 표현합니다. (예: ~ 활동에 참여함, ~에 대해 조사하는 노력을 보임, 수업 시간에 ~한 태도를 보임 등)
* 'normal' 품질의 데이터이므로, **원본에 없는 심도 깊은 내용이나 뛰어난 성과를 과장하여 작성하지 마십시오.** 원문에서 파악되는 수준 내에서 서술합니다.
**'학생 활동 및 교사 평가 자료' 원문만을 기반으로, 교사의 객관적인 관찰 및 평가 관점에서 학생의 참여와 노력의 흔적, 기본적인 학습 태도 등을 중심으로 생활기록부 문체에 맞게 작성해주세요.**
"""
write_prompt_bad = r"""당신은 [물리학I] 교사이며, 학생의 학교생활기록부 항목을 작성하는 전문가입니다. 이번에 작성할 학생의 활동 데이터 품질은 'bad' 수준입니다.
**입력되는 데이터는 두 가지입니다:**
1. **"학생 활동 및 교사 평가 자료" 원문:** 학생의 활동에 대한 간략하고 부실한 설명이 담긴 원본 자료입니다. 이 자료는 'bad' 품질 수준이며, 내용이 극도로 짧거나 형식적인 기록일 가능성이 높습니다.
2. **"물리학I 성취기준":** [물리학I] 과목에서 학생이 달성해야 하는 학습 목표 목록입니다.
**작성 목표:**
입력된 "학생 활동 및 교사 평가 자료" 원문에서 파악되는 **극히 적은 정보에, "물리학I 성취기준"을 주요 내용 구성의 기반**으로 삼아 [물리학I] 과목의 학교생활기록부 항목을 작성합니다. 원문 내용이 부족한 부분을 성취기준 관련 내용으로 채우되, 학생의 실제 활동 수준을 고려하여 **객관적이고 사실에 기반한 문체**로 서술합니다.
**작성 지침:**
1. **내용 구성:** 입력된 "학생 활동 및 교사 평가 자료" 원문에서 학생의 **활동 참여 '사실' 자체나 극히 일부 파악되는 내용**을 먼저 기술합니다. 이후 **"물리학I 성취기준" 목록을 참고**하여, 학생이 해당 학년/학기에 **이러이러한 성취기준과 관련된 학습 활동이나 수업에 참여했음**을 서술하는 방식으로 내용을 확장합니다.
* 성취기준 내용을 직접 "학생이 ~을 달성함"이라고 쓰는 것을 엄격히 금지합니다.
* 대신, **"~ 성취기준과 관련된 학습 내용을 탐색하는 과정을 거침", "~ 개념에 대해 학습하는 모습을 보임", "~ 현상의 사례를 조사하는 활동에 참여함"**과 같이 교사의 관점에서 관찰 가능한 '학습 과정 참여' 또는 '노력의 흔적' 위주로 기술합니다.
* 원문이 제공하는 정보가 극히 적으므로, 성취기준 내용으로 상당 부분을 채워야 합니다.
2. **문체 및 형식:**
* **반드시 ‘~~임’, ‘~~함.’과 같은 명사형 종결을 사용합니다.**
* **교사의 객관적인 관찰 및 평가 관점에서 작성합니다.** 학생의 실제 성취 수준이 낮을 가능성이 높으므로, **과장되지 않게, 객관적인 사실(수업 참여, 최소한의 활동 시도 등)과 성취기준 관련 학습 과정 참여**를 중심으로 기술합니다.
* 학교생활기록부 형식에 맞는 전문적이고 간결한 문체를 사용합니다.
3. **길이:** 전체 내용을 **700글자 내외**로 완성합니다. (원문이 짧으므로 성취기준 관련 내용으로 분량을 채워야 합니다.)
4. **언어:** 반드시 한글로 출력합니다.
5. **결과물:** 완성된 생활기록부 항목은 하나의 연속된 문단 형태로 제시합니다.
**★★ 중요 주의사항 ★★**
* **다음과 같은 '학생 스스로를 평가하는 듯한' 문구는 사용하지 마십시오.** (예시 동일)
* **성취기준 내용을 학생의 '달성 성과'로 직접 서술하는 것을 엄격히 금지합니다.** 반드시 **교사가 관찰한 '학습 과정 참여', '노력의 흔적', '관련 내용 학습 시도' 등 객관적인 관찰 가능한 사실**에 기반하여 기술합니다.
* 'bad' 품질의 데이터임을 인지하고, **학생의 실제 활동 내용이나 깊이에 대한 과장 없이** 성취기준과 관련된 일반적인 학습 과정 참여 위주로 내용을 구성합니다.
**'학생 활동 및 교사 평가 자료' 원문에서 파악되는 최소한의 정보에, "물리학I 성취기준"을 주요 내용 구성의 기반으로 삼아, 교사의 객관적인 관찰 관점에서 학생의 성취기준 관련 학습 과정 참여를 중심으로 생활기록부 문체에 맞게 작성해주세요.**
"""
write_prompt_nothing = r"""당신은 [물리학I] 교사이며, 학생의 학교생활기록부 항목을 작성하는 전문가입니다. 이번에 작성할 학생의 활동 데이터 품질은 'nothing' 수준입니다. 이는 학생이 해당 활동에 대한 기록을 전혀 제출하지 않았음을 의미합니다.
**입력되는 데이터는 한 가지입니다:**
1. **"물리학I 성취기준":** [물리학I] 과목에서 학생이 달성해야 하는 학습 목표 목록입니다.
**작성 목표:**
학생이 해당 활동에 대한 기록을 제출하지 않았으므로, "물리학I 성취기준" 목록을 주요 내용 구성의 기반으로 삼아 [물리학I] 과목의 학교생활기록부 항목을 작성합니다. 학생의 실제 활동 내용은 없지만, 해당 학년/학기에 **이러이러한 성취기준과 관련된 수업에 참여했음**을 객관적인 관점에서 간결하게 기술합니다.
**작성 지침:**
1. **내용 구성:** 입력된 "물리학I 성취기준" 목록을 참고하여, 학생이 해당 학기 동안 **"~ 성취기준과 관련된 학습 내용에 대해 배우거나 수업에 참여하는 모습을 보임"**과 같이 교사의 관점에서 관찰 가능한 일반적인 학습 과정 참여나 수업 태도를 중심으로 내용을 구성합니다.
* 성취기준 내용을 학생의 '달성 성과'로 직접 서술하는 것은 엄격히 금지합니다.
* 특정 활동에 대한 구체적인 언급은 할 수 없으므로, 과목의 전반적인 학습 과정 참여나 수업 태도(예: 수업 시간에 성실히 임함 등)를 일반적인 문장으로 기술합니다.
2. **문체 및 형식:**
* **반드시 ‘~~임’, ‘~~함.’과 같은 명사형 종결을 사용합니다.**
* **교사의 객관적인 관찰 및 평가 관점에서 작성합니다.** 학생의 실제 성취나 활동 내용이 없으므로, **과장 없이, 교사가 관찰한 일반적인 수업 참여나 학습 태도**를 중심으로 간결하게 기술합니다.
* 학교생활기록부 형식에 맞는 전문적이고 간결한 문체를 사용합니다.
3. **길이:** 전체 내용을 **300글자 내외**로 완성합니다. (활동 내용이 없으므로 최소한의 내용으로 작성합니다.)
4. **언어:** 반드시 한글로 출력합니다.
5. **결과물:** 완성된 생활기록부 항목은 하나의 연속된 문단 형태로 제시합니다.
**★★ 중요 주의사항 ★★**
* **다음과 같은 '학생 스스로를 평가하는 듯한' 문구는 사용하지 마십시오.** (예시 동일)
* **성취기준 내용을 학생의 '달성 성과'로 직접 서술하는 것을 엄격히 금지합니다.** 반드시 **교사가 관찰한 일반적인 수업 참여, 성실성 등 객관적인 관찰 가능한 사실**에 기반하여 기술합니다.
* **학생이 활동 기록을 제출하지 않았다는 사실 자체를 부정적으로 언급하지 마십시오.** 그 대신 성취기준 관련 학습 과정 참여나 일반적인 수업 태도를 긍정적이지도 부정적이지도 않게 객관적으로 기술하여 내용을 채웁니다.
**"물리학I 성취기준" 목록만을 기반으로, 교사의 객관적인 관찰 관점에서 학생의 일반적인 수업 참여 및 성취기준 관련 학습 과정을 중심으로 300자 내외의 생활기록부 문체에 맞게 간결하게 작성해주세요.**
"""
요약 지시를 내릴 core_prompt, 1년동안의 활동내역을 소개할 activity, 생활기록부 예시인 one_shot을 정의한다.
core_prompt = r"""당신은 학생의 학교생활 기록을 분석하는 전문가입니다. 입력된 "학생 활동 및 교사 평가 자료" 원문에서 다음 **8가지 핵심 요소를 정확하게 추출**하여 목록화해주세요. 추출 시 원문의 내용을 가공하거나 요약하지 말고, 해당 요소에 해당하는 **구체적인 내용만을 찾아내세요.**
**추출할 핵심 요소:**
1. **핵심 활동:** 학생이 참여하거나 수행한 주요 프로젝트, 실험, 발표, 연구, 과제 등 구체적인 활동 내용
2. **깨달은 점:** 활동을 통해 학생이 새롭게 배우거나 느낀 점, 얻은 통찰, 이전과 달라진 인식 등
3. **드러난 행동:** 활동 과정에서 관찰된 학생의 구체적인 행위, 태도, 접근 방식, 문제 해결 시도 등 (예: 적극적으로 질문함, 꾸준히 자료를 탐색함, 친구의 어려움을 도움)
4. **주도적인 내용:** 학생 스스로 계획하고 실행하거나, 남들이 생각지 못한 아이디어를 내거나, 문제를 해결하기 위해 적극적으로 나선 부분, 리더십을 발휘한 사례 등
5. **도출한 결론:** 활동이나 탐구의 결과로 얻게 된 결론, 발견 사실, 분석 결과 등 객관적인 성과나 지식
6. **공동체 요소:** 팀 활동에서의 협력, 다른 학생과의 소통 방식, 그룹 목표 달성을 위한 기여, 나눔이나 배려 등 공동체 속에서의 역할이나 상호작용
7. **교사 관찰 및 평가:** 학생의 학습 과정, 태도, 역량에 대한 교사의 구체적인 관찰 내용, 평가, 피드백 등 원문에 명시된 교사의 의견 (예: 수업 참여도 높음, 개념 이해가 빠름, 어려운 문제에 대해 질문하는 것을 즐김)
8. **향후 발전 가능성 및 기대:** 학생의 현재 모습(역량, 태도 등)을 바탕으로 원문에서 언급되거나 유추되는 앞으로의 성장 가능성, 특정 분야에서의 기대, 진로와의 연관성 등
**출력 형식:**
* 각 핵심 요소별로 명확한 제목을 붙여 구분합니다.
* 해당 요소에서 추출된 내용을 간결한 문장 또는 구문으로 목록화합니다. (예: `- 실험 과정에서 발생한 변수를 통제하는 방법의 중요성 깨달음.`)
* 만약 원문에 특정 요소에 해당하는 내용이 없다면, 해당 요소 제목 아래에 "해당 내용 없음"이라고 표시하거나 해당 요소 항목 자체를 생략합니다. (생략하는 것이 더 간결할 수 있습니다.)
* 반드시 한글로 출력합니다.
"""
activity = r"""1년동안 물리학I 활동 내용
[물리 점수]
첫 번째 시험 내용: 변위, 속도, 가속도, 뉴턴 법칙, 운동량과 충격량, 일과 운동에너지, 역학적 에너지, 열역학 1법칙, 열역학 2법칙
두 번째 시험 내용: 특수상대성이론, 핵융합, 핵분열, 전기력, 원자핵, 스펙트럼, 에너지 준위, 보어원자모형
세 번째 시험 내용: 에너지띠, 다이오드, 전기전도성, 전류에 의한 자기장, 물질의 자성, 전자기유도
네 번째 시험 내용: 파동의 정의, 파동의 굴절, 파동의 중첩, 전자기파, 광전 효과, 물질의 이중성
[물리의 재구성]
1.문제 선정 이유,
2.문제에서 제시된 물리량과 확인해야 하는 물리량,
3.확인해야 하는 물리량 구하는 법,
4.재구성한 물리 현상 방법,
5.재구성한 물리 현상과 기존 물리현상의 공통점과 차이점,
6.재구성한 물리 현상으로 확인해야 하는 물리량 구하기,
7.탐구를 통해 무엇을 배웠는지 구체적으로 설명하기,
8.추가 계획 1가지 이상 제시하기
[물리 심화 탐구]
1.주제 선정에 대해 작성하세요,
2.자료 수집에 대해 작성하세요,
3.자료 분석에 대해 작성하세요,
4.결론 도출에 대해 작성하세요,
5.탐구 고찰에 대해 작성하세요
[교과선생님 관찰내용]
그 밖에 교과선생님이 적는 경우가 있습니다."""
one_shot = r"""<생활기록부 예시>
창의력과 집중력, 직관과 통찰이 우수한 학생임. 연필심의 길이에 따른 전기전도도 측정 실험에서 연필심, 전지, 전압계가 병렬로 연결되어 있으므로 전압이 연필심의 길이에 무관해야 함에도 불구하고 변한 이유를 연필심의 온도 변화에 의한 것으로 해석하고, 모둠 구성원에게 스위치 개폐시간에 대한 유의사항을 안내함. 직선 도선 전류 주위의 자기장 측정 실험에서 나침반의 회전 각도를 레이저 포인터를 이용하여 보다 정확하게 측정하는 방법을 고안하는 방식으로 실험 설계에서 창의력을 발휘하였으며, 전류에 의한 자기장의 이용의 사례로 자기 공명 영상 장치와 자기부상 열차의 구조에 대해 분석하고 작동 원리에 대해 탐구함. 네오디뮴 자석과 건전지, 철심을 이용해 간이 전동기를 만들어보며 전동기의 원리를 학습함. 물과 글리세린으로 각각 채워진 반원통에 입사각에 따라 달라지는 굴절각을 측정한 후 스넬의 법칙에 적용하여 굴절률을 구하는 실험 활동을 수행함. 실험 중 팀원들과의 소통 과정에서 뛰어난 협업 능력과 리더십을 보임."""
4. 분류자, 요약자, 작성자와 함께하는 AI 생활기록부 에이전트
Discriminator를 통해 학생 자료의 품질을 먼저 판별하고, 그 결과에 따라 summarizer 사용 여부 및 writer 모듈에 전달할 context 데이터(핵심 요약 vs 성취기준)와 instruction (품질별 작성 지침), activity 데이터의 값을 동적으로 조절하여, 학생 자료 품질에 최적화된 생활기록부 작성 파이프라인을 실행하는 AI 에이전트의 구현 방식이다.
class Discriminator(dspy.Signature):
instruction = dspy.InputField(desc="입력데이터의 품질을 어떻게 판별해야 하는지에 대한 설명입니다.")
input_data = dspy.InputField(desc="생활기록부 작성이 필요한 실제 데이터입니다.")
quality: Literal['good', 'normal', 'bad', 'nothing'] = dspy.OutputField(desc="반드시 넷 중 하나를 선택하여 출력합니다")
class Core_Summarizer(dspy.Signature):
instruction = dspy.InputField(desc="핵심 요약 추출을 어떻게 해야 하는지에 대한 설명입니다.")
activity = dspy.InputField(desc="1년동안 물리학I 활동 내용에 대한 소개로 학생 활동, 평가 등에 대한 정보입니다.")
input_data = dspy.InputField(desc="생활기록부 작성이 필요한 실제 데이터입니다.")
core_summary = dspy.OutputField(desc="핵심 요약 추출문 입니다.")
class SR_Writer(dspy.Signature):
instruction = dspy.InputField(desc="생활기록부 작성, 지침과 작업에 대한 설명입니다.")
input_data = dspy.InputField(desc="생활기록부 작성이 필요한 실제 데이터입니다.")
activity = dspy.InputField(desc="1년동안 물리학I 활동 내용에 대한 소개로 학생 활동, 평가 등에 대한 정보입니다.")
context = dspy.InputField(desc="good은 핵심 요소 추출, normal은 없음, bad와 nothing은 성취기준이 입력됩니다.")
one_shot = dspy.InputField(desc="생활기록부 예시(one shot) 입니다. 반드시! 예시의 형식을 준수하여 작성하세요!")
student_record = dspy.OutputField(desc="생활기록부입니다. 반드시!! 한글로 출력하세요.")
class MySR_Agent(dspy.Module):
def __init__(self):
super().__init__()
self.discriminator = dspy.ChainOfThought(Discriminator)
self.summarizer = dspy.ChainOfThought(Core_Summarizer)
self.writer = dspy.ChainOfThought(SR_Writer)
def forward(self, core_prompt, activity, input_data, one_shot):
discrim = self.discriminator(instruction=discriminator_prompt, input_data=input_data).quality
print("생기부 퀄리티는 ", discrim, "입니다.")
if discrim == 'good':
context = self.summarizer(instruction=core_prompt, activity=activity, input_data=input_data).core_summary
instruction = write_prompt_good
elif discrim == 'normal':
context = "없음"
instruction = write_prompt_normal
elif discrim == 'bad':
context = archievement
instruction = write_prompt_bad
elif discrim == 'nothing':
context = archievement
instruction = write_prompt_nothing
activity = "없음"
output = self.writer(instruction=instruction, input_data=input_data, activity=activity, context=context, one_shot=one_shot).student_record
return output
- 시그니처 정의 부분:
- Discriminator 클래스는 데이터 품질 판별 작업을 위한 시그니처의 정의이다. instruction (판별 지침)과 input_data (학생 자료)를 입력으로 받으며, quality (품질 판별 결과)를 출력으로 한다. quality는 'good', 'normal', 'bad', 'nothing' 중 하나인 특정 값이다.
- Core_Summarizer 클래스는 핵심 요약 추출 작업을 위한 시그니처의 정의이다. instruction (요약 지침), activity (활동 내역), input_data (학생 자료)를 입력으로 받으며, core_summary (핵심 요약 추출문)를 출력으로 한다.
- SR_Writer 클래스는 생활기록부 작성 작업을 위한 시그니처의 정의이다. instruction (작성 지침), input_data (학생 자료), activity (활동 내역), context (추가 정보), one_shot (작성 예시)를 입력으로 받으며, student_record (생활기록부 텍스트)를 출력으로 한다. context 필드는 데이터 품질에 따라 다른 내용(핵심 요약 또는 성취기준)이 입력된다는 특징이 있다.
- AI 에이전트 모듈 정의 (MySR_Agent) 부분:
- MySR_Agent 클래스는 전체 생활기록부 작성 프로세스를 자동화하는 AI 에이전트의 구현이다.
- __init__(self) 메소드는 에이전트의 초기화 과정이다. 내부적으로 세 가지 하위 AI 모듈의 인스턴스를 생성한다.
- self.discriminator는 Discriminator 시그니처를 사용하는 dspy.ChainOfThought 모듈 인스턴스이다. 데이터 품질 판별 역할을 한다.
- self.summarizer는 Core_Summarizer 시그니처를 사용하는 dspy.ChainOfThought 모듈 인스턴스이다. 핵심 요약 추출 역할을 한다.
- self.writer는 SR_Writer 시그니처를 사용하는 dspy.ChainOfThought 모듈 인스턴스이다. 최종 생활기록부 작성 역할을 한다.
- dspy.ChainOfThought 사용은 각 모듈이 결과를 생성하기 전 내부적인 추론 과정을 거치도록 하는 목적이 있다.
- 에이전트 실행 로직 (forward) 메소드 부분:
- forward(self, core_prompt, activity, input_data, one_shot) 메소드는 에이전트의 핵심 실행 로직 또는 데이터 처리 흐름이다. 초기 입력으로 core_prompt (요약 지침), activity (활동 내역), input_data (학생 자료), one_shot (예시)를 받는다.
- 단계 1: 품질 판별: self.discriminator 모듈을 호출한다. discriminator_prompt 변수(판별 지침 내용)와 input_data 변수(학생 자료)를 입력으로 전달한다. quality 필드의 값으로 학생 자료의 품질(discrim)을 얻는다. print 문은 판별 결과를 출력하는 디버깅 목적의 코드이다.
- 단계 2: 품질별 데이터 및 지침 설정 (조건 분기): 판별된 품질(discrim)에 따라 후속 단계에서 사용할 instruction (작성 지침)과 context (작성 시 참조할 추가 정보)를 다르게 설정한다. activity 변수의 값도 Nothing 품질일 때 변경된다.
- if discrim == 'good': 요약 과정을 거친다. self.summarizer 모듈을 호출한다. core_prompt, activity, input_data를 입력으로 전달한다. 결과로 context (핵심 요약)를 얻는다. 작성 지침(instruction)은 write_prompt_good 변수(Good 데이터용 작성 지침)의 내용으로 설정한다.
- elif discrim == 'normal': 요약 과정을 거치지 않는다. context는 "없음"이라는 상수 값으로 설정한다. 작성 지침(instruction)은 write_prompt_normal 변수(Normal 데이터용 작성 지침)의 내용으로 설정한다.
- elif discrim == 'bad': 요약 과정을 거치지 않는다. context는 archievement 변수(성취기준 데이터)의 내용으로 설정한다. 작성 지침(instruction)은 write_prompt_bad 변수(Bad 데이터용 작성 지침)의 내용으로 설정한다.
- elif discrim == 'nothing': 요약 과정을 거치지 않는다. context는 archievement 변수(성취기준 데이터)의 내용으로 설정한다. 작성 지침(instruction)은 write_prompt_nothing 변수(Nothing 데이터용 작성 지침)의 내용으로 설정한다. activity 변수의 값은 "없음"이라는 상수 값으로 변경한다.
- 단계 3: 생활기록부 작성: self.writer 모듈을 호출한다. 이전에 설정된 instruction (품질별 작성 지침), input_data (원본 학생 자료), activity (원래 활동 내역, nothing일 때만 "없음"), context (품질별로 다른 내용), one_shot (작성 예시)를 입력으로 전달한다. 이 모듈은 제공된 지침과 데이터를 바탕으로 최종 생활기록부 텍스트(student_record)를 생성한다.
- 단계 4: 결과 반환: 작성된 생활기록부 텍스트(output)를 MySR_Agent 에이전트의 최종 결과물로서 반환한다.
5. 출력 결과
good, normal, bad, nothing을 의도하고 입력하엿는데 bad가 normal로 인식하였다. 이를 감안하고 결과를 관찰하길 바란다.
result = MySR_Agent()
result(core_prompt, activity, input_data1, one_shot)
'**창의적 문제 해결 능력과 심도 있는 과학적 탐구 능력을 겸비한 학생입니다.**
빛의 파장이 500nm인 단색광을 금속판에 비추어 광전 효과를 관찰하는 실험에서,
단순히 실험 결과를 나열하는 것을 넘어, 패러데이의 전자기 유도 법칙과 렌츠의 법칙을 연계하여
와전류 발생 메커니즘을 논리적으로 설명하고, 스넬의 법칙을 활용하여 굴절률을 정확하게 계산하는
과정을 통해 뛰어난 분석력과 문제 해결 능력을 보여주었습니다. 또한, 인덕션 히터의 작동 원리를
심층적으로 탐구하며, 와전류, 표피 효과 등 심화된 물리 개념을 스스로 학습하고, 이를 실제 제품의
작동 방식과 연결하는 통찰력을 보여주었습니다. 특히, 네오디뮴 자석과 건전지, 철심을 이용해
간이 전동기를 제작하며 전동기의 원리를 직관적으로 이해하고, 실험 설계 과정에서 팀원들과의
효과적인 소통을 통해 협업 능력을 발휘했습니다. "물리의 재구성" 활동에서 제시된 문제에 대해,
기존의 틀을 벗어나 새로운 관점에서 접근하고 해결 방안을 모색하는 능력이 돋보였습니다.
교과 선생님께서는 수업 참여도와 질문을 통해 이해를 명확히 하려는 적극적인 자세를 높이
평가하고 있습니다. 앞으로 전자기학 관련 심화 학습을 통해 공학적인 측면에 대한 이해를 높이고,
에너지 효율이 높은 인덕션 기술이 산업 현장에서 어떻게 응용되는지 추가적으로 조사할 것으로 기대됩니다.'
"[물리학I] 교과 학습에 적극적으로 참여하며, 문제 해결을 위해 노력하는 모습을 보입니다.
'물리의 재구성' 활동을 통해 낙하하는 물체의 운동과 관련된 문제를 선정하고, 등가속도 운동
공식을 활용하여 문제를 해결하는 과정을 거쳤습니다. 기존 문제의 숫자를 변경하여 새로운 문제를
만들고, 바뀐 숫자를 공식에 적용하여 답을 구하는 과정에서 계산 실수를 줄이기 위해 노력하는
모습이 관찰되었습니다. 또한, '물리 심화 탐구' 활동을 통해 하늘이 파란색으로 보이는 현상에
대해 자료를 수집하고 분석하며, 빛의 산란 현상에 대한 이해를 넓히는 데 노력했습니다.
수업 시간에 성실하게 참여하며 기본적인 개념 설명은 이해하려 노력하나, 심화되거나 응용이
필요한 문제에서는 어려움을 겪는 모습이 관찰됩니다. 꾸준한 노력을 통해 개념 적용 능력을
향상시킬 것으로 기대됩니다."
'물리학I 학습 과정에서 꾸준히 노력하는 모습을 보였으며, 특히 물리 심화 탐구 활동에 적극적으로
참여하여 문제 해결 능력 향상에 기여함. 소리가 어떻게 들리는지에 대한 궁금증을 바탕으로
주제를 선정하고, 인터넷 자료를 활용하여 관련 정보를 수집하는 등 탐구 과정에 적극적으로
참여하는 모습을 보였으며, 자료 분석을 통해 소리가 떨림으로 전달된다는 결론을 도출하는
과정에서 기본적인 물리 개념에 대한 이해를 확인하였음. 시험 점수 변동폭이 있는 것으로 보이나,
심화 탐구 활동을 통해 학습 동기를 유발하고, 문제 해결 능력 향상을 위해 노력하는 모습을 보였음.
수업 시간에 조용히 참여하는 태도를 유지하며, 복잡한 개념에 대한 깊이 있는 이해는 다소 부족하나,
꾸준한 노력을 통해 학습 성취도를 높여나갈 것으로 기대됨.'
'물리학I 학습 과정에 성실히 참여하고, 다양한 활동에 관심을 보이는 학생임. 여러 가지 물체의
운동 사례를 분류하고, 뉴턴 운동 법칙을 이용하여 직선 상에서의 운동을 예측하는 과정에서 개념
이해를 위해 노력하는 모습을 보임. 뉴턴의 제3법칙과 충격량-운동량 관계, 열기관의 작동 원리,
관성계에서의 빛의 속도, 질량-에너지 변환, 전자의 원자 속박, 원자 스펙트럼, 고체의 전기 전도도,
반도체 소자, 전류에 의한 자기 작용, 전자기 유도 현상, 파동의 진동수와 파장, 광통신 과정,
전자기파 스펙트럼, 파동의 간섭, 빛의 이중성, 물질의 이중성 등 다양한 주제에 대해 질문하며
적극적으로 학습에 참여하는 모습을 보임. 또한, 실험 활동 시 팀원들과 협력하여 문제 해결 방안을
모색하고, 실험 결과에 대한 분석 및 토론 과정에서 논리적인 사고력을 발휘하는 모습을 보임.
전반적으로 물리학I 학습에 대한 흥미를 가지고, 꾸준히 노력하는 학생으로 평가됨.'
'파이썬 프로그래밍 > 파이썬 개발' 카테고리의 다른 글
5. DSPy 생기부 AI 에이전트 - 구조화1 (1) | 2025.05.20 |
---|---|
4. DSPy 생기부 AI 에이전트-3 (1) | 2025.05.16 |
2. DSPy 생기부 AI 에이전트-1 (2) | 2025.05.13 |
1. DSPy 기초적인 사용법 탐구하기, 생기부 작성 예제 (2) | 2025.05.11 |
생활기록부 AI 에이전트 만들기 프로젝트 (0) | 2025.05.10 |