first
This commit is contained in:
8
ai-messenger/Cargo.toml
Normal file
8
ai-messenger/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "ai-messenger"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
88
ai-messenger/config.json
Normal file
88
ai-messenger/config.json
Normal file
@ -0,0 +1,88 @@
|
||||
{
|
||||
"system_name": "relational_autonomous_ai",
|
||||
"description": "人格・関係性・環境・時間に基づき、AIが自律的にユーザーにメッセージを送信する仕組み",
|
||||
"core_components": {
|
||||
"personality": {
|
||||
"type": "enum",
|
||||
"variants": ["positive", "negative", "logical", "emotional", "mixed"],
|
||||
"parameters": {
|
||||
"message_trigger_style": "運勢との相互作用による送信傾向",
|
||||
"decay_rate_modifier": "関係性スコアの時間減衰に対する耐性"
|
||||
}
|
||||
},
|
||||
"relationship": {
|
||||
"parameters": ["trust", "affection", "intimacy"],
|
||||
"properties": {
|
||||
"persistent": true,
|
||||
"hidden": true,
|
||||
"irreversible": false,
|
||||
"decay_over_time": true
|
||||
},
|
||||
"decay_function": "exp(-t / strength)"
|
||||
},
|
||||
"environment": {
|
||||
"daily_luck": {
|
||||
"type": "float",
|
||||
"range": [0.1, 1.0],
|
||||
"update": "daily",
|
||||
"streak_mechanism": {
|
||||
"trigger": "min_or_max_luck_3_times_in_a_row",
|
||||
"effect": "personality_strength_roll",
|
||||
"chance": 0.5
|
||||
}
|
||||
}
|
||||
},
|
||||
"memory": {
|
||||
"long_term_memory": "user_relationship_log",
|
||||
"short_term_context": "recent_interactions",
|
||||
"usage_in_generation": true
|
||||
},
|
||||
"message_trigger": {
|
||||
"condition": {
|
||||
"relationship_threshold": {
|
||||
"trust": 0.8,
|
||||
"affection": 0.6
|
||||
},
|
||||
"time_decay": true,
|
||||
"environment_luck": "personality_dependent"
|
||||
},
|
||||
"timing": {
|
||||
"based_on": ["time_of_day", "personality", "recent_interaction"],
|
||||
"modifiers": {
|
||||
"emotional": "morning or night",
|
||||
"logical": "daytime"
|
||||
}
|
||||
}
|
||||
},
|
||||
"message_generation": {
|
||||
"style_variants": ["thought", "casual", "encouragement", "watchful"],
|
||||
"influenced_by": ["personality", "relationship", "daily_luck", "memory"],
|
||||
"llm_integration": true
|
||||
},
|
||||
"state_transition": {
|
||||
"states": ["idle", "ready", "sending", "cooldown"],
|
||||
"transitions": {
|
||||
"ready_if": "thresholds_met",
|
||||
"sending_if": "timing_matched",
|
||||
"cooldown_after": "message_sent"
|
||||
}
|
||||
}
|
||||
},
|
||||
"extensions": {
|
||||
"persistence": {
|
||||
"database": "sqlite",
|
||||
"storage_items": ["relationship", "personality_level", "daily_luck_log"]
|
||||
},
|
||||
"api": {
|
||||
"llm": "openai / local LLM",
|
||||
"mode": "rust_cli",
|
||||
"external_event_trigger": true
|
||||
},
|
||||
"scheduler": {
|
||||
"async_event_loop": true,
|
||||
"interval_check": 3600,
|
||||
"time_decay_check": true
|
||||
}
|
||||
},
|
||||
"note": "このシステムは、感情や関係性のような人間的要素を模倣し、AIが“自然に話しかけてくる”という自律型エージェント設計の土台となる。"
|
||||
}
|
26
ai-messenger/config/config.json
Normal file
26
ai-messenger/config/config.json
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"personality": {
|
||||
"kind": "positive",
|
||||
"strength": 0.8
|
||||
},
|
||||
"relationship": {
|
||||
"trust": 0.7,
|
||||
"intimacy": 0.6,
|
||||
"curiosity": 0.5,
|
||||
"threshold": 1.5
|
||||
},
|
||||
"environment": {
|
||||
"luck_today": 0.9,
|
||||
"luck_history": [0.9, 0.9, 0.9],
|
||||
"level": 1
|
||||
},
|
||||
"messaging": {
|
||||
"enabled": true,
|
||||
"schedule_time": "08:00",
|
||||
"decay_rate": 0.1,
|
||||
"templates": [
|
||||
"おはよう!今日もがんばろう!",
|
||||
"ねえ、話したいことがあるの。"
|
||||
]
|
||||
}
|
||||
}
|
133
ai-messenger/src/data.rs
Normal file
133
ai-messenger/src/data.rs
Normal file
@ -0,0 +1,133 @@
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct RelationalAutonomousAI {
|
||||
pub system_name: String,
|
||||
pub description: String,
|
||||
pub core_components: CoreComponents,
|
||||
pub extensions: Extensions,
|
||||
pub note: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct CoreComponents {
|
||||
pub personality: Personality,
|
||||
pub relationship: Relationship,
|
||||
pub environment: Environment,
|
||||
pub memory: Memory,
|
||||
pub message_trigger: MessageTrigger,
|
||||
pub message_generation: MessageGeneration,
|
||||
pub state_transition: StateTransition,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Personality {
|
||||
pub r#type: String,
|
||||
pub variants: Vec<String>,
|
||||
pub parameters: PersonalityParameters,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct PersonalityParameters {
|
||||
pub message_trigger_style: String,
|
||||
pub decay_rate_modifier: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Relationship {
|
||||
pub parameters: Vec<String>,
|
||||
pub properties: RelationshipProperties,
|
||||
pub decay_function: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct RelationshipProperties {
|
||||
pub persistent: bool,
|
||||
pub hidden: bool,
|
||||
pub irreversible: bool,
|
||||
pub decay_over_time: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Environment {
|
||||
pub daily_luck: DailyLuck,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct DailyLuck {
|
||||
pub r#type: String,
|
||||
pub range: Vec<f32>,
|
||||
pub update: String,
|
||||
pub streak_mechanism: StreakMechanism,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct StreakMechanism {
|
||||
pub trigger: String,
|
||||
pub effect: String,
|
||||
pub chance: f32,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Memory {
|
||||
pub long_term_memory: String,
|
||||
pub short_term_context: String,
|
||||
pub usage_in_generation: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct MessageTrigger {
|
||||
pub condition: TriggerCondition,
|
||||
pub timing: TriggerTiming,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct TriggerCondition {
|
||||
pub relationship_threshold: String,
|
||||
pub time_decay: bool,
|
||||
pub environment_luck: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct TriggerTiming {
|
||||
pub based_on: Vec<String>,
|
||||
pub modifiers: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct MessageGeneration {
|
||||
pub style_variants: Vec<String>,
|
||||
pub influenced_by: Vec<String>,
|
||||
pub llm_integration: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct StateTransition {
|
||||
pub states: Vec<String>,
|
||||
pub transitions: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Extensions {
|
||||
pub persistence: Persistence,
|
||||
pub api: Api,
|
||||
pub scheduler: Scheduler,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Persistence {
|
||||
pub database: String,
|
||||
pub storage_items: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Api {
|
||||
pub llm: String,
|
||||
pub mode: String,
|
||||
pub external_event_trigger: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Scheduler {
|
||||
pub async_event_loop: bool,
|
||||
pub interval_check: i32,
|
||||
pub time_decay_check: bool,
|
||||
}
|
11
ai-messenger/src/logic.rs
Normal file
11
ai-messenger/src/logic.rs
Normal file
@ -0,0 +1,11 @@
|
||||
use crate::model::AiSystem;
|
||||
|
||||
pub fn should_send(ai: &AiSystem) -> bool {
|
||||
let r = &ai.relationship;
|
||||
let env = &ai.environment;
|
||||
let score = r.trust + r.intimacy + r.curiosity;
|
||||
let relationship_ok = score >= r.threshold;
|
||||
let luck_ok = env.luck_today > 0.5;
|
||||
|
||||
ai.messaging.enabled && relationship_ok && luck_ok
|
||||
}
|
39
ai-messenger/src/main.rs
Normal file
39
ai-messenger/src/main.rs
Normal file
@ -0,0 +1,39 @@
|
||||
mod model;
|
||||
|
||||
use model::{AiSystem, Environment, Messaging, Personality, Relationship};
|
||||
use serde_json;
|
||||
|
||||
fn main() {
|
||||
// テスト用のAIシステム初期化
|
||||
let ai = AiSystem {
|
||||
personality: Personality {
|
||||
kind: "positive".to_string(),
|
||||
strength: 0.8,
|
||||
},
|
||||
relationship: Relationship {
|
||||
trust: 0.7,
|
||||
intimacy: 0.6,
|
||||
curiosity: 0.5,
|
||||
threshold: 1.5,
|
||||
},
|
||||
environment: Environment {
|
||||
luck_today: 0.9,
|
||||
luck_history: vec![0.9, 0.9, 0.9],
|
||||
level: 1,
|
||||
},
|
||||
messaging: Messaging {
|
||||
enabled: true,
|
||||
schedule_time: Some("08:00".to_string()),
|
||||
decay_rate: 0.1,
|
||||
templates: vec![
|
||||
"ねえねえ、今日もがんばろうね!".to_string(),
|
||||
"そろそろ話したくなっちゃった...".to_string(),
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
// JSONにシリアライズして表示
|
||||
let json = serde_json::to_string_pretty(&ai).unwrap();
|
||||
println!("{}", json);
|
||||
}
|
||||
|
38
ai-messenger/src/model.rs
Normal file
38
ai-messenger/src/model.rs
Normal file
@ -0,0 +1,38 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct AiSystem {
|
||||
pub personality: Personality,
|
||||
pub relationship: Relationship,
|
||||
pub environment: Environment,
|
||||
pub messaging: Messaging,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Personality {
|
||||
pub kind: String, // e.g., "positive", "negative", "neutral"
|
||||
pub strength: f32, // 0.0 - 1.0
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Relationship {
|
||||
pub trust: f32, // 0.0 - 1.0
|
||||
pub intimacy: f32, // 0.0 - 1.0
|
||||
pub curiosity: f32, // 0.0 - 1.0
|
||||
pub threshold: f32, // if sum > threshold, allow messaging
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Environment {
|
||||
pub luck_today: f32, // 0.1 - 1.0
|
||||
pub luck_history: Vec<f32>, // last 3 values
|
||||
pub level: i32, // current mental strength level
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Messaging {
|
||||
pub enabled: bool,
|
||||
pub schedule_time: Option<String>, // e.g., "08:00"
|
||||
pub decay_rate: f32, // how quickly emotion fades (0.0 - 1.0)
|
||||
pub templates: Vec<String>, // message template variations
|
||||
}
|
Reference in New Issue
Block a user