在终端运行本地 AI 编程助手:MandoCode + .NET + Ollama 实战
问题:.NET 开发者需要自己的本地 AI Coding Agent
Claude Code、Codex CLI 很强大,但它们都有同一个前提:要么依赖云端 API(产生成本、有数据隐私问题),要么需要 Node.js/Python 生态。如果你是一个 .NET 开发者,想在终端里跑一个本地 AI 编程助手,同时享受”项目感知→自动编辑→文件搜索”的全套 Agent 体验,之前的选择并不多。
MandoCode 填补了这个空白。它是一个基于 .NET 8 的 AI 编程助手,底层使用 Microsoft Semantic Kernel 作为 AI 编排框架,通过 Ollama 连接本地或云端模型。安装只需要一行 dotnet tool 命令,无需任何 API Key。
安装:一行命令搞定
MandoCode 通过 NuGet 发布为 .NET 全局工具包。前提只有两个:.NET 8 SDK 和 Ollama。
dotnet tool install -g MandoCode
安装完成后,进入你的项目目录运行:
mandocode
首次启动会触发一个引导向导:它自动检测 Ollama 是否运行、引导你完成云登录(可选)、并根据你的硬件分层次推荐模型。你无需手动配置任何东西——向导会一步步搞定。
如果遇到连接问题,mandocode --doctor 会打印运行时版本、Ollama 状态、已拉取的模型列表和云登录状态。这个命令本身就是一个很好的故障排查入口:
mandocode --doctor
核心功能:Claude Code 级别的项目感知
MandoCode 在终端里提供了丰富的 AI 编程体验。以下是最值得关注的功能:
项目感知(FileSystemPlugin):AI 能递归扫描项目文件、按 glob 模式搜索、读取和编辑文件、全文搜索代码。所有文件操作被沙箱化到项目根目录,路径穿越被阻止。忽略的目录包括 .git、node_modules、bin、obj、dist、build、__pycache__ 等标准目录。
Diff 审批:每一次文件写入或删除都会被拦截,显示彩色 Diff。你可以选择批准、拒绝,或给 AI 新的指示。启用 enableDiffApprovals: true(默认)后,所有修改都可见、可控。对于新文件,选择”不再询问”会设置全局跳过;对已有文件,跳过是逐文件的。
@ 文件引用:在输入中键入 @ 即可触发文件自动补全,选中后文件内容作为上下文注入给 AI。一条消息中可以引用多个文件。超过 10,000 字符的文件会自动截断:
解释 @src/MandoCode/Services/AIService.cs 的架构
任务规划器:当请求复杂时(如”创建一个带认证和限流的 REST API”),MandoCode 自动拆解为步骤计划,逐个执行并显示进度。简单问题(读、删、搜索等)会跳过规划阶段,直接执行。
Web 搜索与抓取:AI 可以直接搜索网页和读取页面内容——无需任何 API Key,使用 DuckDuckGo 免费端点。可选配置免费的 Tavily 密钥以获得更稳定的搜索结果。
值得注意的趣味功能:内置 Lofi 和 Synthwave 音乐播放器,在终端角落显示波形可视化。作者的原话是”因为氛围很重要”。
MCP 支持:连接外部工具生态
MandoCode 支持 Model Context Protocol(MCP),兼容 Claude Desktop 的 mcpServers 配置格式。你可以在 ~/.mandocode/config.json 中配置任意 MCP Server:
{
"enableMcp": true,
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allow"]
},
"github": {
"url": "https://api.githubcopilot.com/mcp/",
"autoApprove": ["list_issues", "get_pr"]
}
}
}
MandoCode 支持 stdio 传输(本地服务器)和 HTTP/SSE 传输(远程服务器)。对需要 OAuth 的服务器,可以通过社区 mcp-remote 代理包装。通过 /mcp 查看已配置服务器的状态,/mcp add 交互式添加新服务器,/mcp-reload 刷新连接。
模型选择:从本地到云端
/setup 向导会根据你的硬件提供分层的模型推荐:
| 模型 | 大小 | 适用场景 |
|---|---|---|
qwen3.5:0.8b | ~1.0 GB | CPU/集显,快速轻量推理 |
qwen3.5:2b | ~2.7 GB | 4 GB+ GPU,快速问答 |
qwen3.5:4b | ~3.4 GB | 中端 GPU(4-6 GB),日常均衡使用 |
qwen3.5:9b | ~6.6 GB | 8 GB+ GPU,最佳本地质量,多文件重构 |
minimax-m2.7:cloud | 云端 | 无 GPU,免费云模型 |
使用本地模型时,上下文窗口是一个常见的陷阱。Ollama 默认仅 ~4k tokens,而一个 Agent 会话会很快填满。症状包括:响应被截断、模型”忘记”之前的对话、文件编辑反复失败。Ollama 桌面端在 Settings → Context length 滑块中调整,建议从 16k 起步。每增加 8k 窗口大约消耗 0.5–1.5 GB VRAM。MandoCode 也会自动通过 OLLAMA_CONTEXT_LENGTH 为不同硬件层级设置合理的上下文窗口。
另一个陷阱是 maxTokens(NumPredict)设置过低。如果模型”宣布”了要做什么但直接停住没有输出——没有文件创建、没有 Plan——大概率是 maxTokens 限制了推理模型的思考输出。mandocode --config set maxTokens 32768 可以解决。
可靠性设计:重试、去重与回退解析
MandoCode 在内核层面有多个可靠性机制:
- 指数退避重试:HTTP 失败、超时、socket 错误等瞬态问题,最多重试 3 次(500ms → 1000ms → 报错)
- 函数去重:写操作在 5 秒窗口内按名称+路径+内容哈希去重,防止模型重复调用
- 回退函数解析:某些本地模型不输出标准 tool calls,而是输出 JSON 文本(如
{"function_call": {...}}或{"tool_calls": [...]})。MandoCode 的enableFallbackFunctionParsing会自动检测并解析这几种格式,不依赖模型的原生工具调用能力
这些机制让 MandoCode 对本地模型(尤其是小模型)有更好的兼容性。
配置定制
配置文件位于 ~/.mandocode/config.json,包含丰富的可调参数:
{
"ollamaEndpoint": "http://localhost:11434",
"modelName": "minimax-m2.7:cloud",
"temperature": 0.7,
"maxTokens": 32768,
"contextLength": 8192,
"enableDiffApprovals": true,
"enableTaskPlanning": true,
"enableTokenTracking": true
}
常用配置 CLI 命令:
mandocode --config show # 查看当前配置 mandocode --config set modelName qwen3.5:9b # 切换模型 mandocode --config set contextLength 16384 # 调整上下文窗口 mandocode --config path # 查看配置文件路径
如果配置了 Tavily API Key,Web 搜索会更稳定(免费层约 1000 次/月):
mandocode --config set tavilyKey tvly-xxxx
为什么 .NET 生态值得关注
MandoCode 的底层是 Microsoft Semantic Kernel——微软官方的 AI Agent 编排 SDK,原生支持插件系统、函数调用、结构化规划和本地模型连接器。它能跨平台运行在 Windows、Linux 和 macOS 上。整个项目使用 RazorConsole 构建终端 UI(Razor 组件 + 虚拟 DOM + Spectre.Console 渲染),在架构上本身就是 .NET 生态的一次有趣探索。
作者在 README 中直言:
大多数 AI 编程 Agent 用 Python、Rust 或 TypeScript 构建。.NET 很少被提及,但它应该被提及。MandoCode 存在的部分意义就是证明这一点:你可以用 .NET 和 Semantic Kernel 构建一个全功能的 Agentic CLI 工具,和任何其他生态的工具站在一起。
总结
MandoCode 是一个开源的(MIT 协议)本地优先 AI 编程助手,专为 .NET 开发者设计。它的核心价值在于:
- 零 API 成本——纯本地模型运行,数据不出设备
- 完整的项目感知——读、写、搜索、重构,与 Claude Code 同级
- 可控的变更审批——每次 Diff 都可审查,适合生产环境
- MCP 生态兼容——可连接任意 MCP Server
- 良好的本地模型兼容——回退解析、重试、去重机制
- 面向 .NET 生态——安装一行命令,无需 Node.js 或 Python
如果你是一个 .NET 开发者,想在本地体验 AI 编程 Agent 的全部能力,MandoCode 是当前最值得一试的选择。项目地址:github.com/DevMando/MandoCode