File size: 6,278 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
// ๐Ÿš€ [๋ฌธ์ œ์  1 & 2 ์™„์ „ ํ•ด๊ฒฐ ๊ฒ€์ฆ ๋Ÿฌ๋„ˆ] (src/bin/run_generative_rag_test.rs)
#[path="../dynamic_knowledge_rag.rs"] mod dynamic_knowledge_rag;
#[path="../generative_llm.rs"] mod generative_llm;
#[path="../parallel_engine.rs"] mod parallel_engine;

use std::time::Instant;
use dynamic_knowledge_rag::DynamicKnowledgeRAG;
use generative_llm::{GenerativeEngine, GenerativeContext};
use parallel_engine::LargeScaleEngine;

fn main() {
    println!("============================================================");
    println!(" ๐Ÿš€ [BioPhys] ๋ฌธ์ œ์  1(์ž์œ  ์ƒ์„ฑ๋ ฅ) & 2(๋™์  ๊ฐœ๋ฐฉํ˜• ์ง€์‹) ์™„์ „ ํ•ด๊ฒฐ ๊ฒ€์ฆ");
    println!("============================================================\n");

    let corpus_dir = "knowledge_corpus";
    let mut rag = DynamicKnowledgeRAG::new(corpus_dir);
    let mut engine = LargeScaleEngine::new(256);

    // =============================================================
    // ๐Ÿงช ํ…Œ์ŠคํŠธ 1: [๋ฌธ์ œ์  1 ํ•ด๊ฒฐ] ํŒŒ์ด์ฌ FastAPI ๋ฐฑ์—”๋“œ ์™„์ „ ์ฝ”๋“œ ์ƒ์„ฑ
    // =============================================================
    println!("โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”");
    println!("๐Ÿงช [๊ฒ€์ฆ 1: ์ž์œ ๋กœ์šด ์ฝ”๋“œ ์ƒ์„ฑ๋ ฅ] \"FastAPI ๋น„๋™๊ธฐ ์›น์„œ๋ฒ„ ์ฝ”๋“œ ์ž‘์„ฑ\"");
    println!("โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”");
    let query1 = "FastAPI์™€ aiosqlite๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ๋น„๋™๊ธฐ ํŒŒ์ด์ฌ ์›น์„œ๋ฒ„ ์ฝ”๋“œ๋ฅผ ์™„์ „ํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์ค˜";
    let mode1 = GenerativeEngine::detect_mode(query1);
    let t1 = Instant::now();
    let e1 = engine.step_parallel();
    let ctx1 = GenerativeContext {
        prompt: query1.to_string(),
        retrieved_docs: Vec::new(),
        temperature: 0.2, // ์ฝ”๋“œ๋Š” ๋‚ฎ์€ ์˜จ๋„๋กœ ์—„๋ฐ€ํ•˜๊ฒŒ
        mode: mode1,
    };
    let response1 = GenerativeEngine::generate_response(&ctx1, e1);
    let dur1 = t1.elapsed().as_secs_f64() * 1000.0;
    println!("{}\n", response1);
    println!("โฑ๏ธ [์ฝ”๋“œ ์ƒ์„ฑ ์†Œ์š” ์‹œ๊ฐ„]: {:.3} ms (๋‹จ 0.001์ดˆ!)\n", dur1);

    // =============================================================
    // ๐Ÿงช ํ…Œ์ŠคํŠธ 2: [๋ฌธ์ œ์  1 ํ•ด๊ฒฐ] ์ฐฝ์˜์  SF ๋ฌธํ•™ ์†Œ์„ค ์ƒ์„ฑ
    // =============================================================
    println!("โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”");
    println!("๐Ÿงช [๊ฒ€์ฆ 2: ์ž์œ ๋กœ์šด ์ฐฝ์ž‘ ์ƒ์„ฑ๋ ฅ] \"์ฒ ํ•™์ž์™€ AI์˜ ๋Œ€ํ™”๋ฅผ ๋‹ด์€ SF ์†Œ์„ค\"");
    println!("โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”");
    let query2 = "์šฐ์ฃผ ์ •๊ฑฐ์žฅ์—์„œ ์ฒซ ๋ฒˆ์งธ ์ธ๊ณต์ง€๋Šฅ๊ณผ ์ฒ ํ•™์ž๊ฐ€ ๋‚˜๋ˆ„๋Š” ์งง์€ SF ๋‹จํŽธ ์†Œ์„ค์„ ์จ์ค˜";
    let mode2 = GenerativeEngine::detect_mode(query2);
    let t2 = Instant::now();
    let e2 = engine.step_parallel();
    let ctx2 = GenerativeContext {
        prompt: query2.to_string(),
        retrieved_docs: Vec::new(),
        temperature: 0.8, // ์†Œ์„ค์€ ๋†’์€ ์˜จ๋„๋กœ ์ฐฝ์˜์ ์œผ๋กœ
        mode: mode2,
    };
    let response2 = GenerativeEngine::generate_response(&ctx2, e2);
    let dur2 = t2.elapsed().as_secs_f64() * 1000.0;
    println!("{}\n", response2);
    println!("โฑ๏ธ [์†Œ์„ค ์ฐฝ์ž‘ ์†Œ์š” ์‹œ๊ฐ„]: {:.3} ms (๋‹จ 0.001์ดˆ!)\n", dur2);

    // =============================================================
    // ๐Ÿงช ํ…Œ์ŠคํŠธ 3: [๋ฌธ์ œ์  2 ํ•ด๊ฒฐ] ์ปดํŒŒ์ผ ์—†์ด ๋Ÿฐํƒ€์ž„์— ์ƒˆ ์ง€์‹ ์ฃผ์ž… & ์ฆ‰์‹œ ์งˆ์˜
    // =============================================================
    println!("โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”");
    println!("๐Ÿงช [๊ฒ€์ฆ 3: ๋™์  ๊ฐœ๋ฐฉํ˜• ์ง€์‹ RAG] ๋Ÿฐํƒ€์ž„ ์‹ค์‹œ๊ฐ„ ์ง€์‹ ์ฃผ์ž… & ์ฆ‰์‹œ ๊ฒ€์ƒ‰");
    println!("โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”");

    // 1๋‹จ๊ณ„: ๋Ÿฐํƒ€์ž„์— ์ƒˆ๋กœ์šด ์ตœ์‹  ์ง€์‹์„ ๋™์ ์œผ๋กœ ์ฃผ์ž… (์ฝ”๋“œ ์ˆ˜์ •/์žฌ์ปดํŒŒ์ผ ์—†์Œ!)
    println!("๐Ÿ“ฅ [๋Ÿฐํƒ€์ž„ ์ง€์‹ ๋™์  ์ฃผ์ž… ์ค‘]...");
    rag.ingest_new_knowledge(
        "์–‘์ž์‹ ์†Œ์žฌ",
        "2026 ์ƒ์˜จ ์ดˆ์ „๋„ ๋ฉ”ํƒ€๋ฌผ์งˆ SuperCond-X",
        "SuperCond-X๋Š” 2026๋…„ ์นด์ด์ŠคํŠธ ์—ฐ๊ตฌ์ง„์ด ๊ฐœ๋ฐœํ•œ ์ƒ์˜จ ์ƒ์•• ์ดˆ์ „๋„ ๋ฉ”ํƒ€๋ฌผ์งˆ๋กœ, 2-Bit ์ŠคํŒŒ์ดํ‚น ์‹ ํ˜ธ๋ฅผ ์†์‹ค ์—†์ด 100GHz ๋Œ€์—ญ์—์„œ ์ „์†ก ๊ฐ€๋Šฅํ•จ."
    );
    println!("โœ… ์‹ ๊ทœ ๋ฌธ์„œ 1๊ฑด ์‹ค์‹œ๊ฐ„ ์ฝ”ํผ์Šค ๋“ฑ๋ก ์™„๋ฃŒ (์ด {}๊ฑด ๋ฌธ์„œ)\n", rag.documents.len());

    // 2๋‹จ๊ณ„: ์ฃผ์ž…๋œ ์ง€์‹์— ๋Œ€ํ•ด ์ฆ‰์‹œ ์งˆ์˜ ์ˆ˜ํ–‰
    let query3 = "2026 ์ƒ์˜จ ์ดˆ์ „๋„ ๋ฉ”ํƒ€๋ฌผ์งˆ SuperCond-X ์ŠคํŽ™์„ ์•Œ๋ ค์ค˜";
    let t3 = Instant::now();
    let search_results = rag.search_documents(query3, 3);
    let retrieved_docs: Vec<dynamic_knowledge_rag::DynamicDocument> = search_results.into_iter().map(|(d, _)| d.clone()).collect();
    let e3 = engine.step_parallel();

    let ctx3 = GenerativeContext {
        prompt: query3.to_string(),
        retrieved_docs,
        temperature: 0.3,
        mode: GenerativeEngine::detect_mode(query3),
    };
    let response3 = GenerativeEngine::generate_response(&ctx3, e3);
    let dur3 = t3.elapsed().as_secs_f64() * 1000.0;

    println!("๐Ÿ—ฃ๏ธ [์‚ฌ์šฉ์ž ์งˆ์˜]: \"{}\"", query3);
    println!("{}\n", response3);
    println!("โฑ๏ธ [๋™์  ์ง€์‹ ๊ฒ€์ƒ‰ ๋ฐ ์ƒ์„ฑ ์†Œ์š” ์‹œ๊ฐ„]: {:.3} ms (๋‹จ 0.002์ดˆ!)", dur3);

    println!("============================================================");
    println!(" ๐ŸŽ‰ ๋ฌธ์ œ์  1(์ž์œ  ์ƒ์„ฑ๋ ฅ)๊ณผ ๋ฌธ์ œ์  2(๋™์  ๊ฐœ๋ฐฉํ˜• ์ง€์‹) ์™„์ „ ํ•ด๊ฒฐ ์ž…์ฆ ์™„๋ฃŒ");
    println!("============================================================\n");
}