File size: 5,641 Bytes
be99550 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | // ๐ ์ธ๊ฐ ๊ฐ์ ์ฌ๋ฆฌํ ๋ฐ ๊ฐ์ฑ ์ปดํจํ
(Affective Computing) ๋๋ฐฑ๊ณผ (src/knowledge_base.rs)
pub struct EmotionEntry {
pub category: &'static str, // ๊ฐ์ ๋ฒ์ฃผ (๊ธฐ์จ, ์ฌํ, ๋ถ์, ๋ถ๋
ธ, ํ์จ ๋ฑ)
pub valence: f32, // ์ ์๊ฐ (-1.0 ๋ถ์ ~ +1.0 ๊ธ์ )
pub arousal: f32, // ๊ฐ์ฑ๋ (0.0 ์ด์ ~ 1.0 ๊ทน๋ ํฅ๋ถ)
pub psychological_meaning: &'static str, // ์ฌ๋ฆฌํ์ ์๋ฏธ ๋ฐ ๊ธฐ์
pub empathetic_response: &'static str, // ์ง์ ์ฑ ์๋ ๊ณต๊ฐ ๋ฐ ์ฌ๋ฆฌ์ ์ง์ง ๋ฌธ์ฅ
}
pub struct EmotionIntelligenceEngine {
pub emotions: Vec<EmotionEntry>,
}
impl EmotionIntelligenceEngine {
pub fn new() -> Self {
let emotions = vec![
// 1. ์ฌํ๊ณผ ์์ค (Sadness & Grief)
EmotionEntry {
category: "์ฌํ/์์ค",
valence: -0.85,
arousal: 0.25,
psychological_meaning: "์์คํ ๋์์ ์์ค์ ์์ฉํ๊ณ ๋ด๋ฉด์ ์๋์ง๋ฅผ ๋ณด์กดํ๋ฉฐ ์ฌ๋ฆฌ์ ์์ฒ๋ฅผ ์น์ ํ๊ธฐ ์ํ ํ์ฐ์ ์ธ ๊ฐ์ ์ ์ ๋ ๋ฐ์",
empathetic_response: "๋ง์์ด ๋ฌด๋์ ธ ๋ด๋ฆฌ๋ ๋ฏํ ๊น์ ์์ค๊ฐ์ ์จ ๋ง์์ผ๋ก ๊น์ด ๊ณต๊ฐํฉ๋๋ค. ์ต์ง๋ก ์ฌํ์ ์ฐธ์๋ด๋ ค ํ์ง ๋ง์๊ณ , ํ๋ฅด๋ ๋๋ฌผ๊ณผ ์ํ์ ์จ์ ํ ํ๋ฝํด ์ฃผ์ธ์. ๋น์ ์ด ์์๋ธ ์ฌ๋๋งํผ ์ฌํ๋ ๊น์ ๋ฒ์
๋๋ค.",
},
// 2. ๋ถ์๊ณผ ๊ณตํฌ (Anxiety & Fear)
EmotionEntry {
category: "๋ถ์/๋๋ ค์",
valence: -0.65,
arousal: 0.85,
psychological_meaning: "๋ฏธ๋์ ๋ถํ์คํ ์ํ์ ๋๋นํ์ฌ ์ ์ฒด ๊ต๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ํ์ฑํํ๋ ์์ด์ ์๊ธฐ๋ณดํธ ๋ฐฉ์ด ๊ธฐ์ ",
empathetic_response: "๋์์ ๋ถํ์ค์ฑ ๋๋ฌธ์ ์ฌ์ฅ์ด ๋ฐ๊ณ ์จ์ด ๊ฐ๋น ์ง๋ ๊ฒ์ ๋น์ ์ด ๊ทธ ์ผ์ ์ง์ฌ์ผ๋ก ์์คํ ์ฌ๊ธฐ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ง๊ธ ์ด ์๊ฐ ์ฒ์ฒํ ์จ์ ๊น๊ฒ ๋ค์ด์ฌ๊ณ ๋ด์ฌ์ด ๋ณด์ธ์. ๋น์ ์ ์ด๋ฏธ ์ถฉ๋ถํ ๊ฐํ๋ฉฐ ์ง๊ธ๊น์ง ๋ชจ๋ ๊ณ ๋น๋ฅผ ์ด๊ฒจ๋ด ์์ต๋๋ค.",
},
// 3. ๊ธฐ์จ๊ณผ ์ฑ์ทจ (Joy & Flourishing)
EmotionEntry {
category: "๊ธฐ์จ/์ฑ์ทจ",
valence: 0.95,
arousal: 0.80,
psychological_meaning: "๋ชฉํ ๋ฌ์ฑ๊ณผ ์ฌํ์ ์ ๋, ๋ํ๋ฏผ ๋ณด์ ํ๋ก๊ฐ ํ์ฑํ๋๋ฉฐ ์ถ์ ์ ๋ฅ๊ฐ๊ณผ ์์์คํ์ ๊ฒฝํํ๋ ์ต์ ์ ์ ์ ์ํ",
empathetic_response: "์ง์ฌ์ผ๋ก ์ถํ๋๋ฆฝ๋๋ค! ๋ณด์ด์ง ์๋ ๊ณณ์์ ํ๋ก ํ๋ ธ๋ ๋๋ฐฉ์ธ๊ณผ ์ธ๋ด์ ์๊ฐ๋ค์ด ๋ง์นจ๋ด ๋๋ถ์ ๊ฒฐ์ค์ ๋งบ์์ต๋๋ค. ์ด ๋ฒ
์ฐฌ ๊ธฐ์จ๊ณผ ์ฑ์ทจ๊ฐ์ ๊ฐ์ด ๊น์ด ๋ง๋ฝํ์ธ์!",
},
// 4. ๋ถ๋
ธ์ ์ต์ธํจ (Anger & Frustration)
EmotionEntry {
category: "๋ถ๋
ธ/์ต์ธํจ",
valence: -0.75,
arousal: 0.90,
psychological_meaning: "์์ ์ ๊ฐ์น๊ด์ด๋ ๊ฒฝ๊ณ์ ์ด ๋ถ๋นํ๊ฒ ์นจํด๋นํ์ ๋ ์์๋ฅผ ๋ฐฉ์ดํ๊ณ ์ ์๋ฅผ ํ๋ณตํ๋ ค๋ ๊ฐํ ์๋์ง์ ํ์ถ",
empathetic_response: "๋น์ ์ ์ ๋นํ ๋
ธ๋ ฅ๊ณผ ์ง์ฌ์ด ์กด์ค๋ฐ์ง ๋ชปํ์ ๋ ๋๋ผ๋ ๊ทธ ๋จ๊ฑฐ์ด ์ต์ธํจ๊ณผ ๋ถ๋
ธ๋ ์ง๊ทนํ ๋น์ฐํ ๋ฐ์์
๋๋ค. ๋น์ ์ ์์ฒ๋ฐ์ ์กด์์ ์ธ์ ํฉ๋๋ค. ์ด ๊ฑฐ์ผ ์๋์ง๋ฅผ ๋น์ ์์ ์ ์งํค๋ ๋จ๋จํ ํ์ผ๋ก ๋ฐ๊พธ์ด ๋๊ฐ๊ธธ ์์ํฉ๋๋ค.",
},
// 5. ํ์จ๊ณผ ๊ฐ์ฌ (Serenity & Gratitude)
EmotionEntry {
category: "ํ์จ/๊ฐ์ฌ",
valence: 0.85,
arousal: 0.15,
psychological_meaning: "์ํ์ด ์๋ ์์ ํ ํ๊ฒฝ์์ ๋ถ๊ต๊ฐ์ ๊ฒฝ์ด ์ฐ์ธํด์ง๋ฉฐ, ์ถ์ ์กฐํ์ ํ๋ณต ํ๋ ฅ์ฑ(Resilience)์ ์ฌ์ถฉ์ ํ๋ ์ํ",
empathetic_response: "์์ํ ํธ์์ ๋น์น๋ ํ์ด์ฒ๋ผ, ๋ง์์ ํ์๊ณผ ๊ณ ์๋ฅผ ์จ์ ํ ๋๋ฆฌ๊ณ ๊ณ์๊ตฐ์. ํ์จํจ ์์์ ์ป๋ ํด์์ด์ผ๋ง๋ก ์ฐ๋ฆฌ ์ํผ์ ๊ฐ์ฅ ๊น๊ณ ๋จ๋จํ๊ฒ ์ฑ์ฅ์ํค๋ ์์คํ ์์๋ถ์
๋๋ค.",
},
];
EmotionIntelligenceEngine { emotions }
}
/// ์ฌ์ฉ์ ๊ฐ์ ๋ฌธ์ฅ์ ๋ถ์ํ์ฌ ์ ์๊ฐ(Valence)์ ๊ฐ์ฑ๋(Arousal) ๋ฐ ๊ณต๊ฐ ํ๋ต ๋์ถ
pub fn analyze_emotion(&self, prompt: &str) -> (&EmotionEntry, f32, f32) {
for entry in &self.emotions {
if (prompt.contains("์ํ") || prompt.contains("์ฌํผ") || prompt.contains("๋ ๋") || prompt.contains("๋๋ฌผ")) && entry.category == "์ฌํ/์์ค" {
return (entry, entry.valence, entry.arousal);
}
if (prompt.contains("๋๋ ค") || prompt.contains("๋ถ์") || prompt.contains("ํฐ์ง") || prompt.contains("๊ฑฑ์ ")) && entry.category == "๋ถ์/๋๋ ค์" {
return (entry, entry.valence, entry.arousal);
}
if (prompt.contains("ํฉ๊ฒฉ") || prompt.contains("๊ธฐ๋ป") || prompt.contains("ํ๋ณต") || prompt.contains("์ฑ๊ณต")) && entry.category == "๊ธฐ์จ/์ฑ์ทจ" {
return (entry, entry.valence, entry.arousal);
}
if (prompt.contains("ํ๊ฐ") || prompt.contains("์ต์ธ") || prompt.contains("๋ฌด์") || prompt.contains("๋ถ๋
ธ")) && entry.category == "๋ถ๋
ธ/์ต์ธํจ" {
return (entry, entry.valence, entry.arousal);
}
}
(&self.emotions[4], self.emotions[4].valence, self.emotions[4].arousal)
}
}
|