This commit is contained in:
liusongtao 2026-04-16 14:52:17 +08:00
parent 2070475a4f
commit 7f1058b960
4 changed files with 79 additions and 2 deletions

View File

@ -16,6 +16,9 @@ llm:
stream: false stream: false
model_path: "" model_path: ""
ollama_host: "http://localhost:11434" ollama_host: "http://localhost:11434"
database:
type: "sqlite"
url: "sqlite:///skills.db"
skills_directory: "C:\\Users\\sonto\\Workspace\\base_agent\\skills\\OpenCLI\\skills" # 新增SKILL.md 文件所在目录 skills_directory: "C:\\Users\\sonto\\Workspace\\base_agent\\skills\\OpenCLI\\skills" # 新增SKILL.md 文件所在目录
# ── 本地 MCP Server 配置 ─────────────────────────────────────── # ── 本地 MCP Server 配置 ───────────────────────────────────────
mcp: mcp:

View File

@ -252,6 +252,10 @@ class AgentConfig:
session_timeout: int = 3600 session_timeout: int = 3600
fallback_to_rules: bool = True fallback_to_rules: bool = True
@dataclass
class DatabaseConfig:
type: str = "sqlite"
url: str = None
# ════════════════════════════════════════════════════════════════ # ════════════════════════════════════════════════════════════════
# 顶层 AppConfig # 顶层 AppConfig
@ -283,7 +287,8 @@ class AppConfig:
memory: MemoryConfig, memory: MemoryConfig,
logging: LoggingConfig, logging: LoggingConfig,
agent: AgentConfig, agent: AgentConfig,
skills_directory: str = "./skills" skills_directory: str = "./skills",
database: DatabaseConfig = DatabaseConfig()
): ):
self.llm = llm self.llm = llm
self.mcp = mcp self.mcp = mcp
@ -293,6 +298,7 @@ class AppConfig:
self.logging = logging self.logging = logging
self.agent = agent self.agent = agent
self.skills_directory = skills_directory self.skills_directory = skills_directory
self.database = database
@property @property
def enabled_mcp_skills(self) -> list[MCPSkillConfig]: def enabled_mcp_skills(self) -> list[MCPSkillConfig]:
@ -375,7 +381,11 @@ class ConfigLoader:
memory=cls._build_memory(raw.get("memory", {})), memory=cls._build_memory(raw.get("memory", {})),
logging=cls._build_logging(raw.get("logging", {})), logging=cls._build_logging(raw.get("logging", {})),
agent=cls._build_agent(raw.get("agent", {})), agent=cls._build_agent(raw.get("agent", {})),
skills_directory=raw.get("skills_directory", "") skills_directory=raw.get("skills_directory", ""),
database=DatabaseConfig(
type=raw.get("database", {}).get("type", "sqlite"),
url=raw.get("database", {}).get("url", "sqlite:///skills.db"),
)
) )
# ── LLM ─────────────────────────────────────────────────── # ── LLM ───────────────────────────────────────────────────

0
database/__init__.py Normal file
View File

64
database/database.py Normal file
View File

@ -0,0 +1,64 @@
# database.py
from sqlalchemy import create_engine, Column, Integer, String, DateTime, true
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime
from config.settings import settings
Base = declarative_base()
class SkillUpload(Base):
__tablename__ = 'skill_uploads'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String, nullable=False, unique=True)
description = Column(String, nullable=True)
skill_id = Column(String, nullable=False, unique=True)
upload_time = Column(DateTime, default=datetime.utcnow)
def __repr__(self):
return f"<SkillUpload(name='{self.name}', upload_time='{self.upload_time}')>"
class DatabaseManager:
"""数据库管理器,提供文件上传和查询功能"""
def __init__(self):
self.engine = create_engine(settings.database.url)
Base.metadata.create_all(self.engine) # 创建表
self.Session = sessionmaker(bind=self.engine)
def add_skill_upload(self, skill_name: str, skill_id: str, description: str) -> None:
"""添加技能上传记录到数据库"""
session = self.Session()
new_skill = SkillUpload(name=skill_name,
skill_id=skill_id,
description=description)
session.add(new_skill)
session.commit()
session.close()
def get_skill_by_name(self, skill_name: str) -> SkillUpload | None:
"""根据名称查询单个技能上传记录"""
session = self.Session()
skill = session.query(SkillUpload).filter(SkillUpload.name == skill_name).first()
session.close()
return skill
def get_all_skills(self) -> list[SkillUpload]:
"""获取所有技能上传记录"""
session = self.Session()
skills = session.query(SkillUpload).all()
session.close()
return skills
def skill_exists(self, skill_name: str) -> bool:
"""检查技能是否已上传"""
session = self.Session()
exists = session.query(SkillUpload).filter(SkillUpload.name == skill_name).count() > 0
session.close()
return exists
db_manager: DatabaseManager = DatabaseManager()