给 LLM 套缰绳:作者开源受限 shell 的 MCP server 防模型写坏文件

ag789 · reddit · 2026-09-22

作者在用 OpenCode 等编码 agent 时发现,本地跑的 IBM Granite 4.2 8B(Q4KM 4bit 量化)会尝试往根目录写绝对路径文件(如 /newPythonCode.py),而 OpenCode 提供的 bash 工具意味着当前用户能执行的所有 Unix 命令 LLM 都能执行,存在意外覆盖文件的风险。

该模型还出现工具幻觉:在思考循环里反复复述如何使用工具、把同一条 shell 命令改写多遍却不执行,作者怀疑部分原因是激进的 4bit 量化削弱了 IBM 专门优化过的工具调用能力。

解决方案是作者自写的 Python shell MCP server cmdshellmcp:对 shell 命令做一定约束与检查,并提供 writeFile() 等额外工具,避免 LLM 用 cat/echo 拼复杂 shell 语句写文件。建议用 --cwd 显式指定工作路径让命令尽量留在该目录内。

实测效果:配合 llama.cpp 的 llama-server 接入该 MCP server 后,granite 4.2 8B Q4KM 能一次生成可直接运行的 Flask hello world 应用(app.py + requirements.txt + templates)。作者明确声明该 server 不安全——LLM 仍可能逃逸限制写到 --cwd 之外,建议只在一次性 Docker 容器里运行。

原文链接 →

「编程与Agent」频道最新

更多「编程与Agent」频道 AI 资讯 →