BioPhys-Neural-Agent / src /emotion_engine.rs
minseok
๐ŸŒŒ Release BioPhys 6.0 Grand Master: 16GB (14.89GB) Gemma-4 100% Devour, Ecosystem Evolution, Solar MoE, SNN Autoregressive SDK, Dynamic PhaseVM
be99550
Raw
History Blame Contribute Delete
5.64 kB
// ๐Ÿ“– ์ธ๊ฐ„ ๊ฐ์ • ์‹ฌ๋ฆฌํ•™ ๋ฐ ๊ฐ์„ฑ ์ปดํ“จํŒ…(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)
}
}