在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. 小程序简单 tab 切换实现

    也是终于找到了数据可视化的最佳载体, 用小程序来做可视化简直完美. 尤其对于像我这种搞数据的, 数据分析, 数据报表, 可视化一直是一个巨大难题, 当我认识的最终的方案还是要用前端的时候, 感觉还有麻 ...

  2. Vue3 学习-初识体验-helloworld

    在数据分析中有一个最重要的一环就是数据可视化, 数据报表的开发. 从我从业这几年的经历上看, 经历了从业务系统导表格数据, 到Excel+PPT, 再是开源报表工具, 再是主流商业BI产品(低/零代码 ...

  3. 网络编程:使用poll单线程处理所有I/O事件

    事件驱动模型 事件驱动的好处:占用资源少,效率高,可扩展性强,是支持高性能高并发的不二之选. 事件驱动模型也叫作反应堆模型(reactor),或者是Event loop模型,该模型的核心有两点: 1. ...

  4. CAP 关键细节点与ACID、BASE的比较

    极客时间:<从 0 开始学架构>:想成为架构师,你必须掌握的CAP细节 1.CAP 关键细节点 埃里克·布鲁尔(Eric Brewer)在<CAP 理论十二年回顾:"规则& ...

  5. Spring AI 1.0 正式发布!核心内容和智能体详解

    在经历了八个里程碑式的版本之后(M1~M8),Spring AI 1.0 正式版本,终于在 2025 年 5 月 20 日正式发布了,这是另一个新高度的里程碑式的版本,标志着 Spring 生态系统正 ...

  6. JVM内存分配:堆、栈和方法区

    摘要:基本类型的变量.对象的引用和函数调用的现场等存储在栈中,通过new关键字和构造器创建的对象存储在堆中,字面量如100."hello"和常量等存储在静态区. 概述   我们首先 ...

  7. FastAPI安全门神:OAuth2PasswordBearer的奇妙冒险

    title: FastAPI安全门神:OAuth2PasswordBearer的奇妙冒险 date: 2025/05/30 18:34:14 updated: 2025/05/30 18:34:14 ...

  8. 洛谷 P6626 [省选联考 2020 B 卷] 消息传递

    洛谷 P6626 [省选联考 2020 B 卷] 消息传递 Problem 原题传送门 给一棵有\(n\)个节点的树.有\(m\)个询问,每次给出一对\(x,k\)表示查询到点\(x\)的距离为\(k ...

  9. 洛谷 11 月月赛 I T2 P7043 「MCOI-03」村国

    题目背景 \(\texttt{What did this player dream?}\) 他梦见了什么? \(\texttt{This player dreamed of sunlight and ...

  10. Django的Model类

    1.model 用来和数据交互的(读取和传入数据) 2.orm Object Relational Mapping对象关系映射,python中的model对象和数据库中的表做映射 3.重要概念 3.1 ...