2026年6月13日 2 分钟阅读

在终端运行本地 AI 编程助手:MandoCode + .NET + Ollama 实战

tinyash 0 条评论

问题:.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 模式搜索、读取和编辑文件、全文搜索代码。所有文件操作被沙箱化到项目根目录,路径穿越被阻止。忽略的目录包括 .gitnode_modulesbinobjdistbuild__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 GBCPU/集显,快速轻量推理
qwen3.5:2b~2.7 GB4 GB+ GPU,快速问答
qwen3.5:4b~3.4 GB中端 GPU(4-6 GB),日常均衡使用
qwen3.5:9b~6.6 GB8 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 为不同硬件层级设置合理的上下文窗口。

另一个陷阱是 maxTokensNumPredict)设置过低。如果模型”宣布”了要做什么但直接停住没有输出——没有文件创建、没有 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

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。