fix: 重构内置技能目录处理逻辑,改为复制以兼容沙盒场景
This commit is contained in:
parent
77c91cabf5
commit
d9b9980877
@ -118,7 +118,7 @@ DEFAULT_CHAT_MODEL_PROVIDERS: dict[str, ChatModelProvider] = {
|
||||
"minimax": ChatModelProvider(
|
||||
name="MiniMax",
|
||||
url="https://platform.minimaxi.com/document/introduction",
|
||||
base_url="https://api.minimax.io/v1",
|
||||
base_url="https://api.minimaxi.com/v1",
|
||||
default="MiniMax-M2.7",
|
||||
env="MINIMAX_API_KEY",
|
||||
models=[
|
||||
|
||||
@ -99,18 +99,24 @@ def _is_builtin_managed(item: Skill, slug: str) -> bool:
|
||||
return (item.created_by or "") in {"system", BUILTIN_SKILL_OPERATOR}
|
||||
|
||||
|
||||
def _ensure_symlink_target(target_dir: Path, source_dir: Path) -> None:
|
||||
def _dirs_equal(dir1: Path, dir2: Path) -> bool:
|
||||
"""检查两个目录内容是否相同(通过文件列表比较)"""
|
||||
if not dir1.exists() or not dir2.exists():
|
||||
return False
|
||||
list1 = sorted([f.relative_to(dir1) for f in dir1.rglob("*") if f.is_file()])
|
||||
list2 = sorted([f.relative_to(dir2) for f in dir2.rglob("*") if f.is_file()])
|
||||
return list1 == list2
|
||||
|
||||
|
||||
def _copy_skill_target(target_dir: Path, source_dir: Path) -> None:
|
||||
if target_dir.is_symlink():
|
||||
if target_dir.resolve() == source_dir.resolve():
|
||||
return
|
||||
target_dir.unlink()
|
||||
elif target_dir.exists():
|
||||
if _dirs_equal(target_dir, source_dir):
|
||||
return
|
||||
raise ValueError(f"技能目录已存在且非内置链接,无法托管: {target_dir}")
|
||||
|
||||
try:
|
||||
target_dir.symlink_to(source_dir, target_is_directory=True)
|
||||
except OSError as e:
|
||||
raise ValueError(f"创建内置技能链接失败: {target_dir} -> {source_dir} ({e})") from e
|
||||
shutil.copytree(source_dir, target_dir, symlinks=False, dirs_exist_ok=True)
|
||||
|
||||
|
||||
async def get_skill_dependency_options(db: AsyncSession) -> dict[str, list[str] | list[dict]]:
|
||||
@ -615,7 +621,7 @@ async def init_builtin_skills(db: AsyncSession, *, created_by: str = "system") -
|
||||
skill_dependencies = configured_skills or _normalize_string_list(meta.get("skill_dependencies"))
|
||||
|
||||
target_dir = skills_root / slug
|
||||
_ensure_symlink_target(target_dir, source_dir)
|
||||
_copy_skill_target(target_dir, source_dir)
|
||||
|
||||
item = await repo.get_by_slug(slug)
|
||||
if item and not _is_builtin_managed(item, slug):
|
||||
|
||||
@ -21,6 +21,10 @@
|
||||
- 工具传递给模型的时候,使用英文,但部分模型不支持中文函数名(如gpt-4o-mini,deepseek 官方接口)
|
||||
- 生成基准测试会把所有的向量都计算一遍不合理
|
||||
|
||||
- RUNs API 导致的问题
|
||||
- 双击导致的暂停问题
|
||||
- 自定义embedding和rerank模型的配置问题
|
||||
|
||||
## v0.6
|
||||
|
||||
<!-- 添加到这里 -->
|
||||
@ -28,6 +32,7 @@
|
||||
- 新增 API Key 管理功能,支持外部系统通过 API Key 调用 Agent 对话接口(`POST /api/chat/agent/{agent_id}`)。统一使用 `Authorization: Bearer <api_key>` 认证,API Key 以 `yxkey_` 开头。获取 API Key 即代表拥有绑定用户的所有接口访问权限。
|
||||
- 将 后端代码 和 agents 解耦,agents 作为单独的 package 使用
|
||||
- 添加 subagents
|
||||
- 将内置 skills 的初始化从符号链接改为复制,以兼容沙盒绑定场景
|
||||
|
||||
## v0.5
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user