在7月初,我立下了一个 Flag:要做一个专门为大语言模型(LLM)设计的 C# 运行器 MCP (Model-Protocol-Context)。我的小小执念,是希望 C# 能够像 Python 一样,成为大模型世界里的一等公民。

经过一段时间的构思、踩坑和开发,今天,我非常高兴地向大家宣布:这个项目—— C# Runner 已经正式开源发布了!

这是一个高性能、高安全性的 C# 代码在线执行平台(沙箱),专为大语言模型(LLM)的 Function Calling、在线代码编辑器、动态脚本执行等场景而设计。我的目标很简单:为 C# 在 AI 浪潮中争得一席之地,使其成为像 Python 一样被大模型轻松调度的“一等公民”

这个项目的诞生,源于我此前对实现“毫秒级、高安全性”执行 C# 代码方案的大量研究和实验。现在,我将这些成果凝聚成了 C# Runner。

项目地址:https://github.com/sdcb/csharp-runner

缘起:一个毫秒级的梦想

一切始于一个简单而又极具挑战性的目标:

在「冷启动」场景下,把一段未知、可能不可信的 C# 代码编译并执行完毕的时间控制在 100ms 以内(理想 < 20ms),同时保证绝对的安全、可伸缩和跨平台。

现在大模型的 Function Calling 或 Code Interpreter 基本都是跑 Python,这让我很不甘心。我希望构建一个服务,能让 C# 代码的执行体验如丝般顺滑,快到毫秒级别;同时它必须固若金汤,即使用户提交了恶意代码,也无法对服务器造成任何危害。

在很多现代应用场景中,我们都渴望能动态地执行用户提供的 C# 代码。然而,这面临着两大核心挑战:

  1. 性能:常规的 dotnet run 方式涉及到 MSBuild、项目还原等重度操作,耗时通常在数百甚至上千毫秒,完全无法满足交互式场景的性能要求。
  2. 安全:执行一段未知的、可能不可信的代码,无异于在服务器上“裸奔”。必须有万无一失的沙箱机制来防止恶意代码破坏系统、窃取数据或滥用资源。

C# Runner 正是为解决这一对核心矛盾而生。

效果演示

为了直观展示 C# Runner 的性能,我将一个示例网站部署到了 Azure 上。并且为了增加挑战,我只选择了一台 1GB 内存的、Azure 上最便宜的虚拟机。

演示地址:https://csharp.starworks.cc/

在这个网站上,你可以直接输入 C# 代码并执行,体验毫秒级的响应速度。无论是简单的 Console.WriteLine,还是复杂的计算逻辑,都能在极短时间内完成。

它默认已经写了一段简单的代码,你可以去修改它,然后点击 Run Code 按钮,执行结果会显示在下方的 Output 区域:

如果你细心观察,会发现这个 Output 区域是实时更新的。这得益于 C# Runner 对流式输出(Server-Sent Events, SSE)的支持,你可以实时看到代码的 stdoutstderr 和最终结果。

这是目前这台 Azure 虚拟机的 htop 负载情况,资源占用非常低:

C# Runner 是如何工作的?

为了同时实现极致的性能和强大的安全性,C# Runner 采用了基于 Docker 的 Host-Worker 架构

  • Worker:每个 Worker 都是一个独立的、轻量级的 Docker 容器。它是一个已经加载了 Roslyn Scripting 环境的 Web 服务,负责实际编译和执行 C# 代码。
  • Host:Host 是整个系统的入口和“大脑”。它维护着一个由多个 Worker 组成的“资源池”。这些 Worker 在系统启动时就已经提前创建并预热,随时可以接收任务。

当一个代码执行请求到达 Host 时,Host 会通过负载均衡策略(如轮询)选择一个空闲的 Worker,并将代码交给它执行。这种“池化 + 预热”的模式,完美规避了 Docker 冷启动的性能开销,使得终端用户可以享受到毫秒级的响应速度。

核心特性一览

安全为本 (Security First)

  • 容器级隔离: 所有代码均在独立的 Docker Worker 容器中执行,与主机环境彻底隔离。
  • 资源精细控制: 可通过 Docker Compose 精确限制每个 Worker 的 CPU、内存、进程数等资源,防止资源滥用。
  • 执行超时: 每个任务都可以设置超时时间,防止恶意死循环代码。
  • 自动回收: 可配置 Worker 执行 N 次任务后自动销毁并由新的纯净实例取代,杜绝环境污染。

性能至上 (Performance is Key)

  • Worker 预热与池化: C# Runner 的“秘密武器”,将容器启动和环境初始化的开销提前,保证业务请求的高性能响应。
  • Roslyn Scripting API: 采用内存中编译执行的方式,速度远超传统 dotnet run
  • 负载均衡: Host 自动将请求分发到多个 Worker,轻松实现水平扩展。

功能丰富 (Feature-Rich & Ready to Use)

  • 双协议支持: 同时提供 HTTP REST APIMCP (Model-Protocol-Context) 接口,无缝对接传统应用和 AI Agent。
  • 流式输出 (SSE): 实时返回代码的 stdoutstderr 和最终结果,交互体验流畅。
  • 内置 Web UI: 提供一个美观、易用的代码编辑器,支持语法高亮和 Ctrl+Enter 快捷执行,方便快速测试和演示。
  • 一键部署: 提供完整的 Docker Compose 解决方案,一条命令即可启动整个服务。

60 秒快速部署

体验 C# Runner 非常简单,你只需要提前安装好 Docker 和 Docker Compose。

1. 下载 docker-compose.yml 文件

curl -L https://raw.githubusercontent.com/sdcb/csharp-runner/refs/heads/master/docker-compose.yml -o docker-compose.yml

2. 一键启动服务

docker compose up -d

该命令会默认启动 1 个 Host 和 3 个 Worker 实例。

3. 开始使用!

部署成功后,在浏览器中打开 http://localhost:5050,即可看到一个简洁的代码编辑界面,开始你的 C# 代码执行之旅!

灵活配置与使用

你可以通过 docker-compose.yml 文件轻松调整 Worker 的数量、资源限制以及回收策略,以适应不同的负载场景。

例如,将 replicas 修改为 10,即可轻松将后端处理能力扩展到 10 个 Worker 实例。

# docker-compose.yml
services:
# ... host service ...
worker:
# ...
deploy:
replicas: 10 # 将 Worker 实例扩展到 10 个
resources:
limits:
cpus: '0.50'
memory: 256M

无论是通过其 HTTP API 集成到你的业务系统,还是通过 MCP 端点 empowering 你的 AI Agent,C# Runner 都提供了清晰、简单的调用方式。更多细节请参考项目主页的 API 文档。

基于 MCP 协议调用

如果你需要 MCP 协议,并希望通过它来调用 C# Runner,可以使用以下代码示例:

var clientTransport = new SseClientTransport(new SseClientTransportOptions()
{
Name = "MyServer",
Endpoint = new Uri("https://csharp.starworks.cc/mcp"),
}); var client = await McpClientFactory.CreateAsync(clientTransport); // Execute a tool (this would normally be driven by LLM tool invocations).
(await client.CallToolAsync(
"run_code",
new Dictionary<string, object?>() { ["code"] = "Console.WriteLine(\"Hello World!\");" },
new ProgressReporter(),
cancellationToken: CancellationToken.None))
.StructuredContent.Dump(); public class ProgressReporter : IProgress<ProgressNotificationValue>
{
public void Report(ProgressNotificationValue value)
{
value.Dump();
}
}

输出将是实时的流式结果:

{"kind":"stdout","stdOutput":"Hello World!\n"}
{
"kind": "end",
"stdOutput": "Hello World!\n",
"elapsed": 30
}

总结

C# Runner 为 .NET 生态提供了一个开箱即用、兼顾性能与安全的动态代码执行解决方案。我希望它能成为您在构建下一代应用,特别是与 AI 结合的应用时的得力工具。

这个项目是我个人的一次探索,也必然有许多可以改进的地方。欢迎大家试用、反馈,甚至参与贡献!

  • 为项目点亮 Star ,这是对我最大的鼓励:https://github.com/sdcb/csharp-runner
  • 提交你的想法和代码:欢迎通过 Issue 和 Pull Request 参与项目。
  • 加入 QQ 群讨论:欢迎加入 .NET 骚操作 QQ 群:495782587,一起交流 .NET 和 AI 的有趣玩法!

为大模型 MCP Code Interpreter 而生:C# Runner 开源发布的更多相关文章

  1. 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅

    摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...

  2. 文心大模型api使用

    文心大模型api使用 首先,我们要获取硅谷社区的连个key 复制两个api备用 获取Access Token 获取access_token示例代码 之后就会输出 作文创作 作文创作:作文创作接口基于文 ...

  3. 无插件的大模型浏览器Autodesk Viewer开发培训-武汉-2014年8月28日 9:00 – 12:00

    武汉附近的同学们有福了,这是全球第一次关于Autodesk viewer的教室培训. :) 你可能已经在各种场合听过或看过Autodesk最新推出的大模型浏览器,这是无需插件的浏览器模型,支持几十种数 ...

  4. PowerDesigner 学习:十大模型及五大分类

    个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...

  5. PowerDesigner 15学习笔记:十大模型及五大分类

    个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...

  6. AI大模型学习了解

    # 百度文心 上线时间:2019年3月 官方介绍:https://wenxin.baidu.com/ 发布地点: 参考资料: 2600亿!全球最大中文单体模型鹏城-百度·文心发布 # 华为盘古 上线时 ...

  7. 千亿参数开源大模型 BLOOM 背后的技术

    假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,"一朝看尽长安花"似乎近在眼前 -- 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM ...

  8. DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍

    DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍 1. 概述 近日来,ChatGPT及类似模型引发了人工智能(AI)领域的一场风潮. 这场风潮对数字世 ...

  9. 图神经网络之预训练大模型结合:ERNIESage在链接预测任务应用

    1.ERNIESage运行实例介绍(1.8x版本) 本项目原链接:https://aistudio.baidu.com/aistudio/projectdetail/5097085?contribut ...

  10. ILLA Cloud: 调用 Hugging Face Inference Endpoints,开启大模型世界之门

    一个月前,我们 宣布了与 ILLA Cloud 与达成的合作,ILLA Cloud 正式支持集成 Hugging Face Hub 上的 AI 模型库和其他相关功能. 今天,我们为大家带来 ILLA ...

随机推荐

  1. vue3 基础-传送门 teleport

    之前介绍了一波混入 mixin 和 自定义指令 directive 其基本作用就是为了在 vue 中实现代码的复用. 而本篇介绍的是 vue3 的一个新特性叫做传送门. 一听这个名字是不是就感觉特别科 ...

  2. useEffect的那些坑,你知道多少

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 14px; o ...

  3. 异步日志分析:MongoDB与FastAPI的高效存储揭秘

    title: 异步日志分析:MongoDB与FastAPI的高效存储揭秘 date: 2025/05/22 17:04:56 updated: 2025/05/22 17:04:56 author: ...

  4. 适用于Ventoy和VirtualBox的WinToGo系统制作教程

    由于篇幅原因,上个教程的内容太多,并且也有挺多地方不能一概而论,因此笔者决定还是将文章拆分开来,便于只需要制作WinToGo系统或LinuxToGo系统的读者 --笔者言 这篇文章适用于只使用Vent ...

  5. Linux常用命令介绍-文件管理

    MV命令 - 移动或改名文件 mv命令来自英文单词move的缩写,中文译为"移动",其功能与英文含义相同,能够对文件进行剪切和重命名操作.这是一个被高频使用的文件管理命令,需要留意 ...

  6. 【公众号搬运】React-Native开发鸿蒙NEXT(5)

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  7. Java面试|BIO、NIO、AIO的区别和应用场景

    摘要:BIO是一个连接一个线程,NIO是一个请求一个线程,AIO是一个有效请求一个线程.   在学习Java I/O类库时,容易混淆NIO.BIO.AIO这几个概念,同时对于阻塞和非阻塞.同步和异步的 ...

  8. 利用堆排序和分治法求解千万级数据排序的Top K问题—百度面试

    目录 问题描述 问题解析 第一步:查询次数统计 第二步:找出Top 10 算法一:排序 算法二:部分排序 算法三:堆排序 1.构造初始堆 2.首尾交换,断尾重构 3.迭代执行第二步 算法四:分治法 小 ...

  9. maixpy 常用例程整理

    基础控制K210例程 1.1 使用屏幕和摄像头 例程 import sensor, lcd sensor.reset() sensor.set_pixformat(sensor.RGB565) sen ...

  10. DeepSeek LLM

    作者前言: DeepSeek系列现在非常火,笔者决定主要梳理DeepSeekzui最重要的四代版本: DeepSeek-LLM; DeepSeekMath; DeepSeek-V2; DeepSeek ...