在 AI Agent 大爆发的 2025 年,各种 Agent 框架如雨后春笋般涌现。然而,大多数框架都基于 Python 或 Java,.NET 开发者常常只能望洋兴叹。
AgentScope.NET 的出现改变了这一局面——它是阿里巴巴开源项目 AgentScope 的 .NET 移植版本,让 .NET 开发者也能轻松构建 LLM 驱动的多智能体应用。
AgentScope 是阿里巴巴团队开发的一个生产就绪、易于使用的多智能体(Multi-Agent)框架,旨在帮助开发者构建基于大语言模型(LLM)的智能体应用。
| 特性 | 说明 |
|---|---|
| **简单易用** | 5分钟快速上手,内置 ReAct Agent、工具、记忆、规划等功能 |
| **可扩展性强** | 支持 MCP 和 A2A 协议,消息中心支持灵活的多智能体编排 |
| **生产就绪** | 支持本地部署、云端无服务器部署或 K8s 集群部署 |
| **容错机制** | 内置多层容错,处理 LLM 的不确定性 |
AgentScope.NET 是 AgentScope-Java 的 1:1 移植版本,保持与 Java 版本的完全兼容性:
功能点: 23/54 (42.6%)
测试: 79+ (100% 通过)
代码: 5,750+ 行
| 模块 | 状态 | 说明 |
|---|---|---|
| **Agent 系统** | ✅ | EnhancedReActAgent with ReAct loop |
| **Hook 系统** | ✅ | Pre/Post Reasoning/Acting hooks |
| **Session 管理** | ✅ | 线程安全的会话管理 |
| **消息系统** | ✅ | Builder 模式的消息传递 |
| **持久化内存** | ✅ | SQLite + Entity Framework Core |
| **工具系统** | ✅ | 可扩展的工具接口 |
| **配置管理** | ✅ | .env 文件支持 |
| **TUI 界面** | ✅ | Terminal.Gui 终端界面 |
| **Uno Platform GUI** | ✅ | 跨平台图形界面(基础) |
| 模块 | 状态 | 说明 |
|---|---|---|
| **Formatter 系统** | ⏳ | OpenAI/Anthropic/DashScope 格式化器 |
| **真实 LLM 集成** | ⏳ | OpenAI/Azure OpenAI 模型 |
| 模块 | 说明 |
|---|---|
| **Pipeline 编排** | 顺序/并行/条件执行 |
| **Plan 管理** | PlanNotebook 任务规划 |
| **RAG 系统** | 知识检索增强生成 |
| **Tracing** | OpenTelemetry 可观测性 |
| **MCP/A2A 协议** | 多 Agent 通信 |
ReAct(Reasoning + Acting)是 AgentScope 的核心模式,支持推理与行动交替进行:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 推理 │ ──▶ │ 行动 │ ──▶ │ 观察 │
│ 分析情况 │ │ 调用工具 │ │ 获取结果 │
└─────────────┘ └─────────────┘ └─────────────┘
▲ │
└──────────────────────────────────────────┘
(循环迭代直到任务完成)
| Agent 类型 | 功能 |
|---|---|
ReActAgent | 支持推理和工具使用的 Agent |
DialogAgent | 通用对话 Agent |
UserAgent | 用户代理,用于人机交互 |
StreamableAgent | 流式响应 Agent |
CallableAgent | 可调用 Agent |
MsgHub(消息中心) 是多智能体通信的核心:
// Agent1 的消息自动广播给其他 Agent
var hub = new MsgHub(participants: new[] { agent1, agent2, agent3 });
await hub.Broadcast(msg);
支持多种编排模式:
| 管道类型 | 用途 |
|---|---|
SequentialPipeline | 顺序执行 |
FanoutPipeline | 并行执行 |
if-else | 条件分支 |
switch | 多路分支 |
while-loop | 循环执行 |
agentscope.net/
├── src/
│ ├── AgentScope.Core/ # 核心库
│ │ ├── Agent/ # Agent 基类和接口
│ │ ├── Hook/ # Hook 扩展系统
│ │ ├── Session/ # Session 和 State 管理
│ │ ├── Message/ # 消息系统
│ │ ├── Memory/ # 记忆管理(SQLite)
│ │ ├── Model/ # LLM 模型接口
│ │ ├── Tool/ # 工具系统
│ │ ├── Formatter/ # LLM 格式化器
│ │ └── Configuration/ # 配置管理
│ ├── AgentScope.TUI/ # 终端界面应用
│ └── AgentScope.Uno/ # Uno Platform GUI
├── examples/ # 示例代码
├── tests/ # 测试(79+ tests)
└── .env.example # 环境变量配置示例
git clone https://github.com/linkerlin/agentscope.net.git
cd agentscope.net
dotnet build
cp .env.example .env
# 编辑 .env 文件
# OPENAI_API_KEY=your_key_here
# AZURE_OPENAI_API_KEY=your_key_here
using AgentScope.Core;
using AgentScope.Core.Message;
using AgentScope.Core.Model;
using AgentScope.Core.Memory;
// 创建模型
var model = MockModel.Builder()
.ModelName("mock-model")
.Build();
// 创建内存
var memory = new SqliteMemory("agentscope.db");
// 创建 Agent
var agent = ReActAgent.Builder()
.Name("Assistant")
.SysPrompt("You are a helpful AI assistant.")
.Model(model)
.Memory(memory)
.Build();
// 发送消息
var userMsg = Msg.Builder()
.Role("user")
.TextContent("Hello!")
.Build();
var response = await agent.CallAsync(userMsg);
Console.WriteLine(response.GetTextContent());
# 运行所有测试 (79+ tests, 100% passing)
dotnet test
# 详细输出
dotnet test --logger "console;verbosity=detailed"
Hook 系统允许在 Agent 执行的关键节点插入自定义逻辑:
public class LoggingHook : HookBase
{
public override Task PreReasoningAsync(PreReasoningEvent evt)
{
Console.WriteLine($"[PreReasoning] {evt.Message}");
return Task.CompletedTask;
}
public override Task PostActingAsync(PostActingEvent evt)
{
Console.WriteLine($"[PostActing] Result: {evt.Result}");
return Task.CompletedTask;
}
}
// 注册 Hook
agent.AddHook(new LoggingHook());
基于 SQLite 的持久化存储:
var memory = new SqliteMemory("agentscope.db");
// 存储消息
await memory.SaveAsync(message);
// 检索历史
var history = await memory.GetAsync(sessionId, limit: 100);
定义和使用自定义工具:
public class WeatherTool : ToolBase
{
public override string Name => "get_weather";
public override string Description => "获取指定城市的天气";
public override async Task<ToolResult> ExecuteAsync(JsonElement args)
{
var city = args.GetProperty("city").GetString();
// 调用天气 API
return ToolResult.Success($"{city} 晴天,25°C");
}
}
// 注册工具
agent.RegisterTool(new WeatherTool());
| 特性 | AgentScope.NET | LangChain | AutoGen | Semantic Kernel |
|---|---|---|---|---|
| **平台** | .NET | Python | Python | .NET |
| **多智能体** | ✅ 原生支持 | ⚠️ 需扩展 | ✅ 核心特性 | ⚠️ 有限支持 |
| **消息交换** | ✅ MsgHub | ❌ | ✅ | ❌ |
| **容错机制** | ✅ 多层 | ⚠️ 基础 | ⚠️ 基础 | ⚠️ 基础 |
| **分布式** | ✅ Actor 模型 | ❌ | ✅ | ❌ |
| **可视化** | ✅ Uno Platform | ⚠️ | ❌ | ❌ |
| **学习曲线** | 低 | 中 | 中 | 中 |
根据项目状态,以下任务最需要帮助:
AgentScope.NET 是一个填补 .NET 生态空白的项目,它让 .NET 开发者能够:
本文基于 2025 年 2 月的项目状态撰写,项目仍在快速迭代中,请以 GitHub 最新代码为准。
还没有人回复