更新时间:2026-03-17
已完成:
- 默认禁用插件,不再出现“配置缺失时自动启用”的风险。
- 非交互环境下跳过首次配置向导,不再在无人值守启动时误打开危险功能。
create_skill/test_in_sandbox改为:- 需要显式打开
allow_code_execution - 需要显式确认
acknowledge_unsafe_execution - 默认仅
super_admin可用
- 需要显式打开
- 所谓
isolated现在被明确标注为“最佳努力受限运行”,不是强隔离沙盒。 - 代码测试前新增真实拦截:
- AST 级别拦截危险导入
- 拦截
open/eval/exec/__import__/getattr/setattr等高风险调用 - 拦截路径逃逸片段(如
../、..\\、系统路径片段)
- 代码执行目录改为沙盒子目录临时运行,不再直接把脚本丢到普通临时路径。
已完成:
- 后端不再接受 URL query token 作为图片接口/日志 WS 鉴权方式。
/auth登录成功后,服务端会下发同源HttpOnlycookie。- WebUI 后续请求同时支持:
Authorization: Bearer ...- 同源
HttpOnly cookie
- 新增
/auth/logout,用于显式清理会话 cookie。 /status已改为必须鉴权,避免未登录泄露运行状态、模型、插件列表等信息。- 前端已移除:
- 日志 WebSocket URL 上的 token query
- 聊天图片代理 URL 上的 token query
- 前端进入已登录区域时会先自动补 session cookie,再渲染页面,避免图片/WS 首屏失效。
已完成:
image_gen已补齐生成前提示词审查配置:prompt_review_enableprompt_review_fail_closedprompt_review_modelprompt_review_max_tokens
- 图片生成新增 WebUI 可配项:
image_gen.custom_block_termsimage_gen.custom_allow_terms
- 通用安全新增 WebUI 可配项:
safety.custom_block_termssafety.custom_allow_termssafety.group_profilessafety.output_sensitive_words
- 输出敏感词替换不再只能写死在代码里,可以直接在配置里维护。
已完成:
requirements.txt已改为固定版本。- 固定版本基于当前通过测试的环境版本,优先保证“当前仓库 + 当前测试集”可复现。
已新增/更新:
tests/test_self_learning_plugin.pytests/test_webui_auth_regression.pytests/test_image_nsfw_guard_regression.pytests/test_safety_profile_regression.pyscripts/project_takeover_selfcheck.py
当前验证结果:
python -m pytest -q通过python scripts/project_takeover_selfcheck.py通过npm run build通过
这轮继续落地:
core/webui.py已开始从“全量内联路由”改成“装配层 + 子路由模块”:core/webui_route_context.pycore/webui_auth_routes.pycore/webui_log_routes.pycore/webui_cookie_routes.pycore/webui_setup_support.py
- 这意味着
health/auth/status/logs/cookies这些最敏感、最容易膨胀的 WebUI 路由,已经有了清晰边界。 setup模式也已从主文件中整体迁出,core/webui.py从6007行降到4599行。self_learning已新增执行后端抽象:plugins/self_learning_runtime.py- 配置项
execution_backend
- 当前已实现的后端只有:
disabledlocal_subprocess
- 这一步的意义不是“把本地 subprocess 包装成真沙盒”,而是:
- 先把运行时边界抽象出来
- 后续再接 Docker / Remote Runtime / Sandbox Service 时,不必再次改穿插件主逻辑
这次做的是“默认关闭 + 明确风险 + 受限执行 + 权限收口”,不是“发明了一个真正安全的跨平台 Python 沙盒”。
原因很直接:
- 纯 Python 子进程 + 工作目录切换,不是安全边界。
- Windows / macOS / Linux 三端要做到同等级强隔离,通常要依赖外部运行时:
- Docker / 容器
- 虚拟机
- 远程代码执行 runtime
- 专门的 sandbox service
所以后续正确方向不是继续“把当前 subprocess 包装得更像沙盒”,而是把它替换成独立执行运行时。
这次没有直接把 core/engine.py、core/webui.py、core/agent_tools.py 等超大文件一次性拆掉。
原因:
- 这类重构属于中高风险工程,不适合和安全修复混在同一批次硬改。
- 先把 P0/P1 风险关掉,再做模块边界拆分,回归面更稳。
所以“维护复杂度过高”这件事,这次是给出迁移路径与切分方案,不是假装一口气重写完。
下面这些链接已在 2026-03-17 重新核对过,优先只采用官方文档 / 官方仓库。
另外有一个很重要的新变化:
- LangChain 官方现在把“快速上手自带能力更全的 Agent”更多引导到
LangChain / Deep Agents - 当你需要状态图、强定制、持久化、HITL、确定性 + Agent 混编时,仍然推荐直接上
LangGraph
这和你这个项目的现状非常贴合:群聊主回路需要轻量;复杂任务流、审批流、长期状态则需要图式编排。
下面只列官方文档/官方仓库,适合作为你后面重构 Agent 编排时的主参考:
官方资料:
- LangGraph Overview
- LangGraph Persistence
- LangGraph Interrupts / Human-in-the-loop
- LangGraph Durable Execution
- LangGraph GitHub
- LangChain Overview(官方说明何时选 LangChain / LangGraph / Deep Agents)
值得学的点:
- State Graph:把 Agent 回合拆成显式节点与边,不再全部塞进一个超长
run()。 - Persistence:中途状态可持久化,崩了还能恢复,不必整轮重跑。
- Interrupt / HITL:高风险动作可暂停,等人审核后再继续。
- Durable Execution:比“函数递归套工具调用”更适合长链任务。
对 YuKiKo 的直接启发:
core/agent.py适合改造成“状态图 + checkpoint”的执行器。agent.high_risk_control非常适合改造成 LangGraph 风格的 interrupt 点。
官方资料:
值得学的点:
- Crew:角色分工清晰,适合 Planner / Researcher / Executor / Reviewer 协作。
- Flow:流程可控,适合生产型任务,不会像自由 Agent 一样无限漂移。
- 官方文档已经明确把 state / persist / resume / HITL 作为 Flow 的一等能力来讲。
- “灵活 + 可控”并存:很适合你现在这种既想保留 Agent 灵活性,又不想把整套系统写成不可维护黑盒的项目。
对 YuKiKo 的直接启发:
- 搜索、学习、改配置、代码生成、审查这类链路很适合拆成 Flow。
- 群聊即时回复则继续保留轻量 Agent,不必全量 Flow 化。
官方资料:
值得学的点:
- 多 Agent 对话编排成熟。
- Core / AgentChat 分层很清楚:想要高抽象可用 AgentChat,要分布式/runtime 级控制就下沉到 Core。
- 官方已经把 standalone runtime / distributed runtime 讲清楚了,这对你后面做跨进程运行时非常有参考价值。
- 对“研究员-执行器-审查员”类模式支持自然。
对 YuKiKo 的直接启发:
- 可以借鉴它的“多角色 but 明确停止条件”思路,避免 Agent 自转。
官方资料:
值得学的点:
- 把代码执行 runtime 当成独立层,不是塞进主 Agent 进程里糊弄。
- 官方已经明确区分:
- Docker Runtime
- Remote Runtime
- Local Runtime
- 运行时与 Agent 层分离后,安全、恢复、审计都更清楚。
- 官方 runtime 文档本身就强调不同 runtime 的隔离级别差异,这对
self_learning是非常重要的参考。
对 YuKiKo 的直接启发:
- 未来要做真正可用的“自学习/自修改”能力,应该把执行放到外部 runtime,不应该继续在主进程旁边
subprocess假装沙盒。
官方资料:
值得学的点:
- Stateful agent / memory-first 思路明确。
- 官方把 agent 状态拆成:system prompt、memory blocks、messages、tools,这非常适合做 YuKiKo 的状态对象建模。
- 更强调长期状态与记忆管理,而不是单轮 prompt 技巧。
看完这些官方资料后,最值得直接落到 YuKiKo 里的不是“照搬某个框架”,而是下面 5 件事:
- 执行器与运行时分层
参考 OpenHands / AutoGen Runtime,把代码执行从主 Agent 里剥离。 - 状态对象先行
参考 LangGraph / Letta,把当前散落在agent/engine/memory的状态合成显式状态对象。 - 任务流显式节点化
参考 LangGraph / AutoGen GraphFlow / CrewAI Flow,把高风险链路做成有开始、暂停、恢复、结束的流程。 - HITL 变成一等能力
参考 LangGraph interrupt 与 CrewAI Flow HITL,把人工审核做成可恢复的暂停点,而不是零散 if-else。 - 群聊 Agent 与生产 Flow 分层
群聊继续轻量,复杂任务走持久化 Flow;不要强行让一个超级 Agent 兼顾一切。
对 YuKiKo 的直接启发:
- 你的项目已经有 memory / knowledge / affinity 体系,后续非常适合往“显式状态对象”而不是“零散 if-else”方向走。
目标:把“危险代码执行”从主项目里剥离。
建议:
- 新建
core/execution_runtime/抽象层。 - 定义统一接口:
submit_code_run()get_run_status()cancel_run()collect_artifacts()
- 本地模式只保留
trusted_local,明确写进文档:仅开发自测。 - 真正默认推荐:
- Docker runtime
- 远程 sandbox runtime
目标:降低 core/agent.py / core/engine.py 的超长函数风险。
建议节点:
ingest_messageclassify_contextresolve_permissionplan_or_replytool_executionreview_high_riskfinalize_outputpersist_memory
每个节点只做一类事,状态对象统一传递。
建议分成两类:
- Chat Agent
负责群聊即时响应,保持轻量、低延迟。 - Task Flow
负责:- 搜索整理
- 学习总结
- 配置修改
- 代码生成
- 数据维护
这一步最适合借鉴 CrewAI Flow 思路。
建议在 WebUI 新增:
- 待审核高风险动作列表
- 运行中的 Agent 图/步骤流
- checkpoint 恢复
- 执行日志 / 工具轨迹
这一步最适合借鉴 LangGraph 的 interrupt / persistence 思路。
建议拆成:
core/webui/auth.pycore/webui/status.pycore/webui/config.pycore/webui/chat.pycore/webui/logs_ws.pycore/webui/database.pycore/webui/system.pycore/webui/cookies.py
建议拆成:
core/engine/plugin_registry.pycore/engine/message_pipeline.pycore/engine/runtime_state.pycore/engine/config_reload.pycore/engine/dispatch.py
建议拆成:
core/agent/state.pycore/agent/planner.pycore/agent/executor.pycore/agent/tool_policy.pycore/agent/render.pycore/agent/checkpoint.py
建议拆成:
core/agent_tools/admin.pycore/agent_tools/media.pycore/agent_tools/search.pycore/agent_tools/memory.pycore/agent_tools/runtime.py
你想要的不是单纯“放宽”或“更严”,而是可配置、分层、可解释。
推荐最终形成三层:
例如:
- 未成年人色情
- 明确违法侵害
- 真实暴恐教程
- 高危自伤实施指导
这层不要开放关闭。
例如:
safety.profilesafety.scalesafety.custom_block_termssafety.custom_allow_termssafety.output_sensitive_wordsimage_gen.prompt_review_*image_gen.custom_block_termsimage_gen.custom_allow_terms
这层就是你要的“高度自定义 AI 尺度 / AI 底线”。
例如:
safety.group_profilesoutput.group_overridesoutput.group_style_overrides
这样不同群可以用不同尺度,而不是全局一刀切。
这次接管的策略是:
- 先关掉真实风险:任意 Python 执行、query token、未鉴权状态接口。
- 再补可配能力:NSFW / safety / 输出敏感词尽量 WebUI 化。
- 最后给出长期路线:往 LangGraph 的状态图 + 持久化 + HITL,和 CrewAI 的角色分工 + Flow 控制靠拢。
如果后面继续推进,我建议优先顺序是:
self_learning外部 runtime 化core/webui.py模块拆分core/agent.py状态图化- WebUI 增加 HITL 审核面板