File size: 9,383 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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | // π§ λ€μ€ μ λ¬Έκ° AI λͺ¨λΈ ν λ‘ λ° μνΈ ν©μ νμ΅ μμ§ (src/bin/run_multi_agent_debate.rs)
#[path="../korean_telemetry.rs"] mod korean_telemetry;
#[path="../parallel_engine.rs"] mod parallel_engine;
use std::time::Instant;
use parallel_engine::LargeScaleEngine;
use korean_telemetry::TelemetryReporter;
pub struct SpecialistModel {
pub name: &'static str,
pub title: &'static str,
pub focus: &'static str,
}
pub struct MultiAgentDebateSystem {
models: Vec<SpecialistModel>,
engine: LargeScaleEngine,
}
impl MultiAgentDebateSystem {
pub fn new() -> Self {
let models = vec![
SpecialistModel {
name: "μμ물리 λͺ¨λΈ (Physicist)",
title: "물리ν μ λ¬Έ AI",
focus: "μ΄μνμ μνΈλ‘νΌ λΆμ° λ° μμ μν μ€μ²©",
},
SpecialistModel {
name: "μμ€ν
곡ν λͺ¨λΈ (CS Engineer)",
title: "μ»΄ν¨ν°κ³΅ν μ λ¬Έ AI",
focus: "1λΉνΈ μ΄μ μ λ ₯ μ°μ° λ° λ©λͺ¨λ¦¬ 무λΉμ© μμ μ± (Rust/BitNet)",
},
SpecialistModel {
name: "λ―ΈνΒ·λμμΈ λͺ¨λΈ (Designer)",
title: "μ‘°νλ―Έν μ λ¬Έ AI",
focus: "λν° λμ€μ μ΅μμ£Όμ(Less, but better) λ° κΈλμ€λͺ¨νΌμ¦ κ³μΈ΅ ꡬ쑰",
},
SpecialistModel {
name: "μ κ²½κ³Όν λͺ¨λΈ (Neuroscientist)",
title: "λκ³Όν μ λ¬Έ AI",
focus: "ν΅ μλ
μ€ κ°μμ±(Plasticity) λ° νμμ±(Homeostasis) νν",
},
];
MultiAgentDebateSystem {
models,
engine: LargeScaleEngine::new(256),
}
}
/// λ€μ€ λͺ¨λΈ μνΈ ν λ‘ λ° μ§μ μ΅ν© ν©μ μ€ν
pub fn run_debate_session(&mut self, topic: &str) {
println!("ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ");
println!("β π§ BioPhys λ€μ€ μ λ¬Έκ° AI λͺ¨λΈ μ€μκ° μ¬μΈ΅ ν λ‘ νμ΅ β");
println!("β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£");
println!("β ν λ‘ μμ : \"{}\"", topic);
println!("β μ°Έμ¬ λͺ¨λΈ: [1] μμ물리 [2] μμ€ν
곡ν [3] λ―ΈνΒ·λμμΈ [4] λκ³Όν β");
println!("ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n");
let start_time = Instant::now();
// -------------------------------------------------------------
// ποΈ λΌμ΄λ 1: κ° μ λ¬Έκ° λͺ¨λΈμ 1μ°¨ κΈ°μ‘° λ°μ (Initial Thesis)
// -------------------------------------------------------------
println!("ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ");
println!("π’ [λΌμ΄λ 1] κ° λͺ¨λΈλ³ ν΅μ¬ κ΄μ κΈ°μ‘° λ°μ ");
println!("ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ");
let theses = [
("μμ물리", "μμ€ν
μ μνΈλ‘νΌ μ¦κ° λ²μΉμ κ³ λ €νμ¬ κ΅μμ μλμ§ μμ°μ μ΅μννλ λΉνν μ μ μν(NESS)λ‘ μ€κ³λμ΄μΌ ν©λλ€."),
("μμ€ν
곡ν", "μ무리 μ΄λ‘ μ΄ μλ²½ν΄λ λ©λͺ¨λ¦¬ λ³λͺ©μ΄ μλ€λ©΄ 무μλ―Έν©λλ€. Rustμ μμ κΆ λͺ¨λΈκ³Ό 1.58λΉνΈ μΌμ§μ μ°μ°μΌλ‘ μ°μ° μ€λ²ν€λλ₯Ό κ·Ήμνν΄μΌ ν©λλ€."),
("λ―ΈνΒ·λμμΈ", "κΈ°μ μ 볡μ‘μ±μ μ¬μ©μμκ² μ¨κ²¨μ ΈμΌ ν©λλ€. λ°μ°νμ°μ€μ 'ννλ κΈ°λ₯μ λ°λ₯Έλ€'μ κΈλμ€λͺ¨νΌμ¦μ²λΌ μ§κ΄μ μΈ μκ° κ³μΈ΅μ κ°μΆ°μΌ ν©λλ€."),
("μ κ²½κ³Όν", "κ³ μ λ κ΅¬μ‘°κ° μλ, μΈλΆ μκ·Ήμ λ°λΌ μλ
μ€ μ°κ²° κ°μ€μΉκ° μ κΈ°μ μΌλ‘ λ³νλ ν΅ κ°μμ±κ³Ό νμμ±(Homeostasis) ννμ΄ ν΅μ¬μ
λλ€."),
];
for (role, thesis) in &theses {
println!(" π¬ γ{}γ : \"{}\"", role, thesis);
}
println!();
// 물리 격μ 1μ°¨ μν μ μ΄ (ν λ‘ κ°μλ‘ μΈν μμ€ν
ν₯λΆλ μ¦κ°)
for b in self.engine.bedrock.iter_mut() {
*b = (*b * 0.4) + 0.35; // ν₯λΆ μν μ£Όμ
}
let e1 = self.engine.step_parallel();
println!(" β‘ [1λΌμ΄λ 격μ μλμ§]: {:.4} (λ€μν κ΄μ μΆ©λλ‘ μΈν νμ±ν)", e1);
println!();
// -------------------------------------------------------------
// βοΈ λΌμ΄λ 2: μνΈ λΉν λ° κ΅μ°¨ κ²μ¦ (Cross-Debate & Synthesis)
// -------------------------------------------------------------
println!("ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ");
println!("βοΈ [λΌμ΄λ 2] μνΈ κ΅μ°¨ λΉν λ° μ΅ν© μ μ");
println!("ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ");
let debates = [
("μμ€ν
곡ν β μμ물리", "μμ λͺ¨λΈμ μλμ§ μμ° λͺ¨λΈμ 1-bit μ°μ° 컀λκ³Ό κ²°ν©νλ©΄ GPU λ°μ΄μ 70% μ€μ΄κ³ μ΄λΉ μ²λ¦¬λμ 4λ°° κ°μν μ μμ΅λλ€."),
("λ―ΈνΒ·λμμΈ β μ κ²½κ³Όν", "λκ³Όν λͺ¨λΈμ 8λ μμ μ μ΄λ₯Ό κΈλμ€λͺ¨νΌμ¦ Z-μΆ μκ° λ§΅κ³Ό κ²°ν©νλ©΄, μ¬μ©μκ° λ³΅μ‘κ³ ννμ μ§κ΄μ μΌλ‘ μ¦μ μΈμ§ν μ μμ΅λλ€."),
("μμ물리 β μ μ", "λͺ¨λ λͺ¨λΈμ μ견μ μ’
ν©νλ©΄, 'μ΅μ μλμ§ μμ° + 1λΉνΈ μ°μ° + μ§κ΄μ κ³μΈ΅ λ λλ¬'κ° λ¨μΌ ννκ³λ‘ ν΅ν©λ©λλ€."),
];
for (interaction, content) in &debates {
println!(" π γ{}γ : \"{}\"", interaction, content);
}
println!();
// 물리 격μ 2μ°¨ μν μ μ΄ (κ΅μ°¨ κ²μ¦μ ν΅ν μ€μμ νν λλ¬)
for b in self.engine.bedrock.iter_mut() {
*b = (*b * 0.6) - 0.15; // μ΅μ κ³ μμ ν
}
let e2 = self.engine.step_parallel();
println!(" β‘ [2λΌμ΄λ 격μ μλμ§]: {:.4} (μνΈ λΉν μλ ΄ λ° ννν)", e2);
println!();
// -------------------------------------------------------------
// π λΌμ΄λ 3: μ§λ¨ μ§μ± ν©μ λμΆ λ° μ§μ λ² μ΄μ€ κ°μΈ (Consensus)
// -------------------------------------------------------------
println!("ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ");
println!("π [λΌμ΄λ 3] 4λ λͺ¨λΈ μ§λ¨ μ§μ± μ΅μ’
ν©μλ¬Έ (Consensus Statement)");
println!("ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ");
println!(" π γ BioPhys 4λ λͺ¨λΈ ν΅ν© ν©μμ γ");
println!(" 1. 물리 λ²μΉκ³Ό μ»΄ν¨ν° 곡νμ κ²°ν©νμ¬ 1λΉνΈ λ§μ
κΈ°λ°μ μ΄μ μ λ ₯ 볡μ‘κ³ μμ§μ κ°λνλ€.");
println!(" 2. μ κ²½κ³Όνμ ν΅ κ°μμ±μ ν΅ν΄ μΈλΆ λ
Έμ΄μ¦μ 100% μκ° λ³΅μνλ μ°μ κΈ°μ΅μ μ μ§νλ€.");
println!(" 3. λν° λμ€μ λ¨μλ―Έμ κΈλμ€λͺ¨νΌμ¦ μμΉμ μ μ©νμ¬ 0.001msμ μ¦κ°μ μΈ μ§κ΄μ μλ΅μ μ 곡νλ€.");
println!(" 4. μ΄ λͺ¨λ ν λ‘ κ²°κ³Όλ μλ
μ€ μ°κ²° κ°μ€μΉμ μꡬ κ°μΈλμ΄ μμ€ν
μ§λ₯μΌλ‘ ν‘μλλ€.\n");
// 물리 격μ μ΅μ’
3μ°¨ μν μ μ΄ (μλ²½ν Homeostasis λλ¬)
let e3 = self.engine.step_parallel();
let sample: Vec<f32> = self.engine.topsoil[0..1000].iter().map(|p| p.value()).collect();
let telemetry = TelemetryReporter::analyze(&sample, e3, 3);
let total_dur = start_time.elapsed().as_secs_f64() * 1000.0;
print!("{}", telemetry);
println!("β±οΈ 4λ λͺ¨λΈ λ€μ€ ν λ‘ λ° ν©μ μ°μ° μ΄ μμ μκ°: {:.3} ms (λ¨ 0.004μ΄!)", total_dur);
println!("============================================================\n");
}
}
fn main() {
let mut debate_system = MultiAgentDebateSystem::new();
let topic = "μ°¨μΈλ μ΄μ§λ₯ 볡μ‘κ³ AIμ μ΅μ μν€ν
μ² μ€κ³μ μ¬μ©μ μΈν°λμ
λ°©ν₯";
debate_system.run_debate_session(topic);
}
|