feat: 插件-工具合并 — 创建 pkg/plugins 共享模块并移除 tool-engine
- 新增 backend/pkg/plugins/ 共享模块:SDK 接口、PluginManager、ToolRegistry(含环形缓冲区调用日志) - 13 个通用插件从 plugin-manager 迁移至共享模块(import 路径统一) - ai-core 切换至共享 ToolRegistry,进程内执行(零网络开销),包装 6 个专属工具 - plugin-manager 迁移至共享模块,保留管理 REST API - 新增 DevTools 插件管理面板(侧边栏 → 🔌 插件管理) - 移除 tool-engine 服务(从 go.work、DevTools 配置、编译系统) - 工具调用记录 API 从 Tool-Engine 迁至 AI-Core(/api/v1/tools/calls) - ai-core ContextStore 启动时从 PostgreSQL 恢复会话历史 - 清理所有过时引用和备份文件 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -2,14 +2,17 @@ package context
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"github.com/yourname/cyrene-ai/pkg/logger"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
|
||||
"github.com/yourname/cyrene-ai/ai-core/internal/memory"
|
||||
"github.com/yourname/cyrene-ai/ai-core/internal/model"
|
||||
"github.com/yourname/cyrene-ai/ai-core/internal/persona"
|
||||
"github.com/yourname/cyrene-ai/pkg/logger"
|
||||
)
|
||||
|
||||
// IoTDeviceSummary IoT设备摘要接口(避免循环依赖)
|
||||
@@ -76,6 +79,48 @@ func (cs *ConversationStore) GetHistory(sessionID string, limit int) []model.LLM
|
||||
return result
|
||||
}
|
||||
|
||||
// LoadFromDB 从数据库的 messages 表恢复会话历史到内存
|
||||
func (cs *ConversationStore) LoadFromDB(databaseURL, sessionID string, limit int) error {
|
||||
db, err := sql.Open("postgres", databaseURL)
|
||||
if err != nil {
|
||||
return fmt.Errorf("连接数据库失败: %w", err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
rows, err := db.Query(
|
||||
`SELECT role, content FROM messages
|
||||
WHERE session_id = $1
|
||||
ORDER BY created_at ASC
|
||||
LIMIT $2`,
|
||||
sessionID, limit,
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("查询消息失败: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
cs.mu.Lock()
|
||||
defer cs.mu.Unlock()
|
||||
|
||||
var loaded int
|
||||
for rows.Next() {
|
||||
var roleStr, content string
|
||||
if err := rows.Scan(&roleStr, &content); err != nil {
|
||||
return fmt.Errorf("扫描消息行失败: %w", err)
|
||||
}
|
||||
cs.messages[sessionID] = append(cs.messages[sessionID], model.LLMMessage{
|
||||
Role: model.Role(roleStr),
|
||||
Content: content,
|
||||
})
|
||||
loaded++
|
||||
}
|
||||
|
||||
if loaded > 0 {
|
||||
logger.Printf("[context] 从数据库恢复会话 %s 历史 %d 条", sessionID, loaded)
|
||||
}
|
||||
return rows.Err()
|
||||
}
|
||||
|
||||
// Builder 对话上下文构建器
|
||||
type Builder struct {
|
||||
convStore *ConversationStore
|
||||
|
||||
Reference in New Issue
Block a user