in devel
This commit is contained in:
parent
2070475a4f
commit
7f1058b960
|
|
@ -16,6 +16,9 @@ llm:
|
|||
stream: false
|
||||
model_path: ""
|
||||
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 文件所在目录
|
||||
# ── 本地 MCP Server 配置 ───────────────────────────────────────
|
||||
mcp:
|
||||
|
|
|
|||
|
|
@ -252,6 +252,10 @@ class AgentConfig:
|
|||
session_timeout: int = 3600
|
||||
fallback_to_rules: bool = True
|
||||
|
||||
@dataclass
|
||||
class DatabaseConfig:
|
||||
type: str = "sqlite"
|
||||
url: str = None
|
||||
|
||||
# ════════════════════════════════════════════════════════════════
|
||||
# 顶层 AppConfig
|
||||
|
|
@ -283,7 +287,8 @@ class AppConfig:
|
|||
memory: MemoryConfig,
|
||||
logging: LoggingConfig,
|
||||
agent: AgentConfig,
|
||||
skills_directory: str = "./skills"
|
||||
skills_directory: str = "./skills",
|
||||
database: DatabaseConfig = DatabaseConfig()
|
||||
):
|
||||
self.llm = llm
|
||||
self.mcp = mcp
|
||||
|
|
@ -293,6 +298,7 @@ class AppConfig:
|
|||
self.logging = logging
|
||||
self.agent = agent
|
||||
self.skills_directory = skills_directory
|
||||
self.database = database
|
||||
|
||||
@property
|
||||
def enabled_mcp_skills(self) -> list[MCPSkillConfig]:
|
||||
|
|
@ -375,7 +381,11 @@ class ConfigLoader:
|
|||
memory=cls._build_memory(raw.get("memory", {})),
|
||||
logging=cls._build_logging(raw.get("logging", {})),
|
||||
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 ───────────────────────────────────────────────────
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
Loading…
Reference in New Issue