refactor: worker进程 → tokio task 架构 + 多渠道消息队列 + JSON工具系统
核心变更: - daemon: 废弃 worker 子进程模型,替换为 LLM/Tool/Send 三消费者 tokio task - queue: 新增公平轮转 MessageQueue + QueueRunner 路由,严格 ChannelId 渠道隔离 - channel: ChannelId(platform + user_id) 统一渠道标识,替代散列 user_id+platform - tools: 全部工具统一经由 execute_tool() → Tool Consumer 单一执行路径 - llm: chat_with_tools 返回 ChatResult,支持异步工具调用 → 保留/恢复 session - tools: 新增 JSON 工具定义系统 (ToolDef) 及 SubprocessRunner (HTTP 模板引擎) - bin: ias-auth 独立 JWT 生成器,ias-fetch headless Chrome 网页抓取 - 所有出站消息通过 Send Consumer 队列转发,无直接 send_text 调用 - Session TTL 清理 (5分钟),QueueRunner 通道容错 - cargo check 零警告,cargo test 23/23 通过
This commit is contained in:
+7
-3
@@ -1,3 +1,4 @@
|
||||
mod channel;
|
||||
mod cli;
|
||||
mod context;
|
||||
mod daemon;
|
||||
@@ -5,6 +6,7 @@ mod db;
|
||||
mod ipc;
|
||||
mod llm;
|
||||
mod logger;
|
||||
mod queue;
|
||||
mod scheduler;
|
||||
mod state;
|
||||
mod tools;
|
||||
@@ -15,11 +17,11 @@ use clap::Parser;
|
||||
use cli::{AmapAction, Cli, Commands, MemosAction, ToolCommand};
|
||||
use context::MemoryStore;
|
||||
use db::Database;
|
||||
use llm::{Conversation, ConversationConfig, DEFAULT_SYSTEM_PROMPT, ToolExecutor, Usage};
|
||||
use llm::{ChatResult, Conversation, ConversationConfig, DEFAULT_SYSTEM_PROMPT, ToolExecutor, Usage};
|
||||
use std::sync::Arc;
|
||||
use tools::approval::{ApprovalDecision, ApprovalManager};
|
||||
use tools::types::ExecutionContext;
|
||||
use tracing::{error, info};
|
||||
use tracing::{error, info, warn};
|
||||
use wechat::client::WeChatClient;
|
||||
|
||||
#[tokio::main]
|
||||
@@ -105,6 +107,8 @@ async fn main() {
|
||||
cmd_daemon(sock, &database, &file_state, &memory_store).await;
|
||||
}
|
||||
Commands::Worker { sock } => {
|
||||
warn!("Worker 模式已废弃,请使用 daemon 模式");
|
||||
#[allow(deprecated)]
|
||||
if let Err(e) = worker::run(&sock).await {
|
||||
error!("Worker 失败: {}", e);
|
||||
}
|
||||
@@ -665,7 +669,7 @@ async fn generate_reply_with_tools(
|
||||
user_text: String,
|
||||
db: &Option<Arc<Database>>,
|
||||
) -> Result<String, String> {
|
||||
let (reply, _used_tools, usage) = conv.chat_with_tools(user_text).await?;
|
||||
let ChatResult { reply, used_tools: _used_tools, usage, .. } = conv.chat_with_tools(user_text).await?;
|
||||
if let Some(u) = &usage {
|
||||
info!(
|
||||
"📊 Token: {} 总 / {} 提示 / {} 生成 | 缓存命中 {} | 缓存未命中 {}",
|
||||
|
||||
Reference in New Issue
Block a user