LLM Tornado .NET 智能体工具包
用统一 .NET SDK 连接多家模型并编排 AI 智能体工作流。
按维度查看评分与理由
证据显示:README 展示了 API 密钥的构造方式,但未提及权限最小化或用户确认机制。数据流透明度部分,README 描述了请求预览和转换功能,但未明确数据流向。敏感数据处理方面,README 提到 API 密钥,但未说明存储或保护措施。依赖安全方面,有 CI 构建,但未提及依赖扫描。外部影响方面,README 提到工具调用和 MCP,但未说明外部副作用控制。回滚方面,未提及。来源归属方面,README 列出了维护者,但未验证。扣分原因:缺乏用户确认、回滚机制,权限最小化证据不足。
证据显示:README 和代码示例一致,但未提供完整的 API 文档。依赖可用性方面,NuGet 包存在,但未验证。失败消息方面,README 提到安全 API,但未详细说明错误处理。扣分原因:失败消息细节不足。
证据显示:README 面向开发者,提供了多种场景示例。能力边界方面,README 列出了功能,但未明确限制。触发精度方面,工具调用示例明确,但未全面覆盖。环境适配方面,支持多种 .NET 框架和本地部署。扣分原因:触发精度和边界描述不够全面。
证据显示:README 结构清晰,安装说明明确,命名稳定,示例丰富,但已知限制未明确。许可证为 MIT,版本变更日志在 News 部分,维护责任明确。扣分原因:已知限制未列出。
证据显示:输出可用性方面,提供了多种响应格式。边际价值方面,多提供商支持增加了价值。成本效益方面,开源免费,但未提供性能数据。扣分原因:成本效益证据不足。
证据显示:README 中的声明有链接支持,但未提供独立验证。交叉来源验证方面,有外部引用,但未深入。事实与推断分离方面,README 混合了事实和宣传。扣分原因:交叉验证和事实分离不足。
- API 密钥处理未说明安全存储方式,需谨慎使用。
- 未提供用户确认机制,工具调用可能自动执行外部操作。
- 依赖安全未提及扫描,需自行检查。
这个 Agent 能做什么,适合哪些场景?
LLM Tornado 是面向 .NET 的、与模型提供商无关的 SDK,用于构建 AI 智能体与工作流。核心库通过 TornadoApi、ChatModel 和 Conversation 提供聊天、流式输出、嵌入及富响应接口,并可按模型自动选择对应 API 密钥。LlmTornado.Agents 以 Orchestrator、Runner 和 Advancer 组织图式多智能体执行,支持 handoff、并行执行和 Mermaid 导出。LlmTornado.Mcp 提供 Model Context Protocol 互操作,LlmTornado.A2A 提供 Agent2Agent 集成;另有 Microsoft.Extensions.AI 互操作包。它可调用多家云端提供商,也可将请求发送到 Ollama、vLLM 或 LocalAI 等本地部署端点。
应用先用 TornadoApi 配置一个或多个 LLmProviders 与 API 密钥,再以 ChatModel 或模型字符串创建 Conversation。调用方追加系统消息和用户输入后,可通过 GetResponse() 获取文本,或用 GetResponseRich()、StreamResponseRich() 获取工具调用、模态内容和用量等富结果。模型请求的 Tool 或 ToolFunction 可由 FunctionCallHandler 立即解析并继续会话,也可延后处理。使用 LlmTornado.Mcp 时,客户端通过 McpClientFactory.CreateAsync(clientTransport) 创建 IMcpClient,调用 ListTornadoToolsAsync() 读取 MCP 工具,将其传给 ChatRequest,再以 ResolveRemote 执行远程工具。对于智能体工作流,LlmTornado.Agents 以 Orchestrator 图、Runner 节点和 Advancer 边协调专长智能体;库本身作为 .NET 应用中的 NuGet 组件运行,远程或本地推理服务由调用方提供。
- C# 后端团队需要在 OpenAI、Anthropic、Google、Groq 等模型之间切换,并希望主要修改 ChatModel 而非重写调用逻辑。
- 正在构建多步骤业务流程的 .NET 开发者,需要用 Orchestrator、Runner 与 Advancer 表达节点、边、handoff 和并行执行。
- 需要让模型调用天气、内部服务或其他 MCP Server 工具的应用团队,可将 IMcpClient 返回的工具转换为 Tornado Tool。
- 在本机或自管基础设施运行 Ollama、vLLM 或 LocalAI 的团队,需要把 Conversation 请求发送到自定义端点。
- 需要将模型函数调用解析为严格类型参数、并在主模型暂时不可用时使用备用模型的开发者,可使用 ToolkitChat、ChatFunction 和 ChatPlugin。
这个 Agent 有哪些优点和局限?
- 同一套 TornadoApi、ChatModel 和 Conversation 接口覆盖多家提供商,并支持以模型名自动解析提供商。
- 智能体编排明确提供 Orchestrator、Runner、Advancer、handoff、并行执行与 Mermaid 导出。
- MCP 与 A2A 有独立 NuGet 集成,MCP 示例覆盖工具发现、参数推断、远程执行和结果回传。
- 支持富流式结果、立即或延后工具解析,以及针对网络级错误不抛异常的 ResponseRichSafe 接口。
- 采用方需要自行管理各云端提供商的 API 密钥、可用模型与网络连通性;示例不会代管这些服务。
- 提供商功能并不必然一致;README 将详细端点支持指向 Feature Matrix,且对不支持严格 JSON Schema 的提供商会使用以“{”预填充的回退方式。
- 本地模型路径依赖外部运行的 Ollama、vLLM 或 LocalAI 等服务,库仅负责连接和请求转换。
- 与 Microsoft.Extensions.AI、MCP、A2A 和智能体编排相关能力分布在可选包中,项目需要按所需能力额外安装和集成。
如何安装或部署这个 Agent?
在已安装 .NET 的项目目录中执行:
dotnet add package LlmTornado按需添加:
dotnet add package LlmTornado.Agents
dotnet add package LlmTornado.Mcp
dotnet add package LlmTornado.A2A
dotnet add package LlmTornado.Microsoft.Extensions.AI
dotnet add package LlmTornado.Contrib调用云端提供商时,创建 TornadoApi 时必须提供对应提供商的 API 密钥;若使用本地部署,可创建 new TornadoApi(new Uri("http://localhost:11434")) 指向默认 Ollama 端口。
如何使用这个 Agent?
最小调用可先配置提供商和密钥,再创建会话:
TornadoApi api = new TornadoApi(LLmProviders.OpenAi, "OPEN_AI_KEY");
string? response = await api.Chat.CreateConversation("gpt-5-mini")
.AppendUserInput("Hello").GetResponse();
如需流式文本,改用 .StreamResponse(Console.Write)。如需 MCP,安装 LlmTornado.Mcp,使用 McpClientFactory.CreateAsync(clientTransport) 建立 IMcpClient,调用 ListTornadoToolsAsync(),并将返回的 List<Tool> 传入 ChatRequest 的 Tools。