ManInBlack.AI
0.1.0
dotnet add package ManInBlack.AI --version 0.1.0
NuGet\Install-Package ManInBlack.AI -Version 0.1.0
<PackageReference Include="ManInBlack.AI" Version="0.1.0" />
<PackageVersion Include="ManInBlack.AI" Version="0.1.0" />
<PackageReference Include="ManInBlack.AI" />
paket add ManInBlack.AI --version 0.1.0
#r "nuget: ManInBlack.AI, 0.1.0"
#:package ManInBlack.AI@0.1.0
#addin nuget:?package=ManInBlack.AI&version=0.1.0
#tool nuget:?package=ManInBlack.AI&version=0.1.0
ManInBlack
.NET 10 AI Agent 框架。通过 Microsoft.Extensions.AI(IChatClient)统一抽象 OpenAI / Anthropic / Gemini 三种聊天协议,提供洋葱模型中间件管道、源生成器工具派发、MCP 接入与 SQLite 持久化;Linux 下可通过 bubblewrap 沙盒执行命令。
安装
dotnet add package ManInBlack.AI
[AiTool] / [SlashCommand] 源生成器已内嵌在包的 analyzers/ 目录,装包即用,无需额外安装。
快速上手
using ManInBlack.AI;
using ManInBlack.AI.Abstraction;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.AddManInBlack()
.UseJson() // 从 ~/.man-in-black/settings.json 读取配置
.AddAgent("my-agent", a => a
.Description("通用助手")
.Instruction("你是一个有帮助的AI助手。请用中文回复。")
.Pipeline("simple")); // 从最小管道起步,按需开启能力
var rootSp = services.BuildServiceProvider();
var factory = rootSp.GetRequiredService<AgentFactory>();
await foreach (var update in factory.RunAsync(
"my-agent", "帮我解释一下什么是依赖注入",
parentId: "my-user", parentType: "User"))
{
Console.Write(update.Text);
}
首次运行会在 ~/.man-in-black/settings.json 自动创建配置模板,填入 API Key 即可:
{
"Providers": {
"default": { "Schema": "OpenAI", "ApiKey": "sk-xxxxxxxx" }
},
"ModelChoices": {
"default": { "ProviderName": "default", "ModelId": "gpt-4o" }
}
}
不依赖配置文件、纯代码配置:
services.AddManInBlack()
.AddProvider("default", p => p.Schema("OpenAI").ApiKey("sk-xxx").BaseUrl("https://api.deepseek.com"))
.AddModelChoice("default", c => c.Provider("default").ModelId("deepseek-chat"))
.AddAgent("my-agent", a => a.Instruction("你是一个AI助手").Pipeline("simple"));
自定义工具:标记即注册
工具类标记 [ServiceRegister.Scoped]、方法标记 [AiTool](类必须 partial),XML 文档注释会成为 LLM 可见的工具描述,源生成器自动完成声明与派发:
using ManInBlack.AI.Abstraction.Attributes;
[ServiceRegister.Scoped]
public partial class WeatherTools
{
/// <summary>查询指定城市的天气。</summary>
/// <param name="city">城市名,如 "北京"。</param>
[AiTool]
public string GetWeather(string city) => /* ... */ $"{city}: 晴 26°C";
}
包结构
| 包 | 用途 |
|---|---|
ManInBlack.AI |
主包:DI 入口、中间件管道、内置工具、MCP、源生成器;默认内存存储 |
ManInBlack.AI.Abstraction |
契约层:Agent 定义、中间件、工具、Hook、存储等抽象(扩展实现方引用) |
ManInBlack.AI.Persistence.Sqlite |
可选包:SQLite 持久化(EF Core 10),安装后覆盖默认内存存储 |
ManInBlack.Bwarp |
Linux bubblewrap 沙盒封装(主包的传递依赖,可独立使用) |
ManInBlack.AI.SourceGenerator |
源生成器独立包(已内嵌于主包,一般无需单独安装) |
文档
许可证
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Anthropic (>= 12.44.0)
- ManInBlack.AI.Abstraction (>= 0.1.0)
- ManInBlack.Bwarp (>= 0.1.0)
- Microsoft.Extensions.AI.OpenAI (>= 10.10.1)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.12)
- Microsoft.Extensions.Configuration.Json (>= 10.0.12)
- Microsoft.Extensions.FileSystemGlobbing (>= 10.0.12)
- Microsoft.Extensions.Http (>= 10.0.12)
- Microsoft.Extensions.Http.Resilience (>= 10.6.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.12)
- ModelContextProtocol (>= 1.4.0)
- Mscc.GenerativeAI.Microsoft (>= 3.1.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on ManInBlack.AI:
| Package | Downloads |
|---|---|
|
ManInBlack.AI.Persistence.Sqlite
ManInBlack.AI 的可选 SQLite 持久化包:基于 EF Core 10 + SQLite 实现 ISessionStorage、IUserStorage、IAgentStateStorage,含启动迁移与一次性 JSON→SQLite 数据迁移工具。 |
GitHub repositories
This package is not used by any popular GitHub repositories.