本帖最后由 消散孤独 于 2026-10-21 09:40 编辑
用火山视窗可以干啥?我来告诉你!
本来只想做个本地模型管理器:模型太多,想有个地方一眼看清谁多大、谁能跑、谁支持工具调用。
于是有了模型列表、模型详情、模型市场。
然后我想,既然模型都在本机了,为什么不能直接在界面里聊?于是有了对话页。
再然后,某天看着对话框里模型一本正经地输出一段 Lua,我冒出一个不太安分的念头:
「你倒是去跑一下啊。」
后来的事就有点失控了——它真的开始跑代码、读文件、写报告、调用本地程序,甚至拿起放大镜审查了它自己。
这不是产品说明书,是事故现场记录。
一、它不只会写代码,还会把代码跑一遍
我在对话框里说:用 Lua 算 1 到 100 的和,请调用 run_lua 执行脚本,然后把脚本和运行输出一起告诉我。
它没有只丢给我一段代码,而是先弹出一张审批卡,我点「批准」,它才真的执行。
运行输出:5050。不是它编的,是脚本真的跑完、把结果回灌给它的。
后来我又试了 Python:用 run_python 计算 2 的 100 次方,顺便告诉我这台机器有几个 CPU 核心。
审批卡长这样——工具名、目标沙箱、要执行的代码,全给你看:
批准之后:
1267650600228229401496703205376,一个数字不差;44 个逻辑核心,也是真的。
这就是它和「聊天壳」的区别:不是给你一段代码,是执行完再告诉你结果。
二、所谓「技能书」,其实就是一份 Markdown
我没有做花哨的技能商店。技能书就是一份操作手册:
F:\AgentSandbox\
├─ skills\
│ └─ pe-安全体检.md ← 技能书
├─ tools\
│ └─ pe_audit.py ← 技能书里引用的工具
└─ target\
└─ Ollama模型管理器.exe
Agent 启动后,第一步就是自己 read_file 把技能书读进来,然后照着步骤干活:
这条路子意外地好用:换技能不用改代码,换一份 Markdown 就行。
写一份「周报生成技能书」、一份「日志排错技能书」、一份「接口压测技能书」,Agent 就多了几种手艺。
三、让 AI 拿放大镜看自己
这是我觉得最好玩的一次。
我把自己的 exe 复制进沙箱,写了一份《给 exe 做静态安全体检》的技能书,然后对 Agent 说:
先读 skills\pe-安全体检.md,按里面的步骤给 target\Ollama模型管理器.exe 做静态安全体检,最后把结论告诉我。
它读完技能书,列目录确认目标,调用 Python 脚本解析 PE 头,最后给了这么一份结论:
摘几条真实的:
- ASLR:OK
- DEP:OK
- CFG:未启用
- 高熵地址:未启用
- TLS 回调:有,需人工确认
- 敏感 API 命中 5 个:CreateProcessW、GetProcAddress、LoadLibraryA/W、RegSetValueExW
- 启发式评分:85/100
它没发现什么后门,但发现了我没开 CFG。
行吧,被自己写的工具教育了。
必须说清楚:这是启发式静态扫描,不是漏洞证明。它做的是「看特征像不像」,误报漏报都正常。真想深挖,把 dumpbin、IDA、Ghidra 的命令行接进 run_command,让模型自己调度就行——工具是同一套,只是换把更专业的放大镜。
四、本地软件,都能被它「喊」起来
run_command 是个很朴素的能力:在沙箱目录里执行命令。
但配上模型,它就变成了「手」:
- 想跑 Python?python xxx.py
- 想跑 Node?node xxx.js
- 想转个视频?把 ffmpeg 命令丢给它
- 想调自家的小工具?把 exe 放进沙箱
它不需要为每个软件写插件。只要那个软件有命令行,模型就能学着用。
五、8 个工具,够用就好
read_file 读沙箱内文件
write_file 写 / 覆盖文件(自动备份)
search_files 按关键词搜文件
list_dir 列目录
run_command 执行命令(危险命令黑名单)
fetch_url 抓网页正文
run_lua 跑 Lua 5.4(静态内置,断网可用)
run_python 跑 Python 3(调用系统解释器)
没有第 9 个。因为大部分「新能力」,都可以用这 8 个组合出来。
六、给 AI 装手,先给它戴手套
这是我在整个项目里最在意的部分。
- 三级审批:每次确认 / 仅新增自动 / 全部自动
- 沙箱根:文件读写只能在圈内,越界直接拒绝
- 命令黑名单:format、diskpart、bcdedit 这类先拦一遍
- Lua 去牙:直接把 io / os / require / dofile / loadfile 整库移除
- 超时:Lua 30 秒、命令和 Python 60 秒强制中断
- 限流:代码 64KB、输出 8KB / 256KB、回灌上下文 8KB
但我也得诚实:Python 不是沙箱。它只受「审批 + 工作目录」约束,脚本本身仍然能访问系统。这和 run_command 一样,是能力也是风险。别把「全部自动」开给一个你不信任的模型。
七、它是用什么写的
一句话:中文编程 + WebView2 + 一堆踩坑。
- 后端:火山视窗,9 个 wsv 分层继承链,约 1.9 万行
- 前端:原生 HTML/CSS/JS 多文件源码,约 7100 行,300ms 轮询快照
- Lua 5.4.8 静态链接进 exe,没有 DLL、没有运行时依赖
- 最终产物:约 3.9MB 的 exe(界面是 WebView2)
顺手记录两个真 bug:
1. CU8String(文本).GetText() 存成 const char* 会悬空——临时对象在分号处就析构了,Lua 拿到的是野指针,报错信息离谱到怀疑人生。
2. 模型爱写 return sum 而不是 print(sum)——后来把返回值也并进工具输出,世界安静了。
八、所以,它现在长这样
本地模型页,参数、量化、上下文、显存占用一眼看清:
详情页连 Prompt 模板和原始 JSON 都能翻出来:
模型市场,先告诉你本机能不能全速跑:
还能把自己变成 OpenAI 兼容端点,直接喂给 Trae / Cursor / VS Code:
九、开源 1.0 已经打包好了
我把能用到的都塞进了一个包,放在夸克网盘:
包里有什么:
- 可运行版:exe + 依赖 DLL + 市场仓库,解压即用
- 完整源码:后端 9 个 wsv + 前端 ui\src + C++ 支撑 + 市场仓库
- 火山编译器 + 一键编译 / 前端合成脚本
- AI 开发手册 8 份(环境、语言、架构、状态协议、工具、踩坑、配方)
- 10 张功能截图
注意:包内不含火山 SDK(MSVC + Windows SDK,约 5.3GB)。只运行不需要;想从源码编译,把本机 SDK 放到包根目录的 SDK\ 即可(路径必须是纯英文)。
想一起做的事:
- 工具市场:让工具真正可插拔
- MCP 接入:把外面的世界接进来
- 更多技能书:运维、数据分析、逆向、写小说都行
- 把 CFG 打开(这条是它自己提的)
适合谁:
- 喜欢在本地跑模型、不想把数据发云端的人
- 想给 AI 装手、但又怕它乱来的人
- 对中文编程好奇、想看看能撑到什么程度的人
- 单纯觉得「让 AI 审自己」很好玩的人
十、尾声
所以它到底是什么?
一个本地模型管理器,误打误撞长成了能给 AI 装手的小工作台。
能写代码,也能把代码跑一遍;
能读技能书,也能照着技能书干活;
能调用本地软件,也能拿起放大镜看看自己安不安全。
如果你也觉得这事儿有意思,欢迎一起来添砖加瓦。
毕竟,让 AI 自己审自己这种事,一个人玩有点寂寞。
|