CasRel模型在.NET生态中的集成C#调用实战教程如果你是一名.NET开发者最近想在自己的C#项目里用上CasRel模型来做关系抽取但发现模型是用Python写的服务接口也是Python那边提供的可能会有点无从下手。别担心这篇文章就是为你准备的。我会带你一步步走完整个过程从创建一个干净的ASP.NET Core Web API项目开始到用C#的HttpClient去调用远端的Python模型服务最后处理好数据的来回转换和可能出现的网络问题。整个过程我会用最直白的话和能直接运行的代码来讲解保证你跟着做就能在自己的项目里用起来。1. 环境准备与项目创建在开始写代码之前我们得先把“舞台”搭好。这里假设你已经安装了.NET SDK建议用.NET 6或更高版本用着顺手以及一个顺手的代码编辑器比如Visual Studio 2022或者VS Code。首先我们打开命令行创建一个新的Web API项目。这个项目将作为我们调用CasRel模型服务的“桥梁”或“客户端”。dotnet new webapi -n CasRelClientDemo cd CasRelClientDemo这条命令会创建一个名为CasRelClientDemo的新项目并且自动生成一些基础的Web API模板代码。创建好后我们可以用dotnet run命令先跑一下看看默认的天气预报接口能不能正常工作确保环境没问题。接下来我们需要安装几个后面会用到的NuGet包。这些包能帮我们更优雅地处理HTTP请求和JSON数据。dotnet add package Microsoft.Extensions.Http dotnet add package System.Text.Json第一个包Microsoft.Extensions.Http非常重要它提供了IHttpClientFactory这是现代.NET中管理HttpClient生命周期的最佳实践方式能有效避免一些资源耗尽的问题。第二个包System.Text.Json是.NET自带的但明确引用一下也没坏处我们会用它来序列化和反序列化JSON数据。2. 理解调用流程与数据契约在动手写代码调用之前我们得先搞清楚两件事我们要给Python服务发送什么以及它会返回给我们什么。这就像打电话你得知道对方的号码地址和你们沟通的语言数据格式。通常一个CasRel模型服务比如用FastAPI或Flask搭建的会提供一个HTTP接口。我们发送一个POST请求请求体里包含待分析的文本服务处理后会返回一个结构化的JSON里面包含了从文本中抽取出的人物关系三元组。假设我们的Python服务接口是这样的地址http://your-python-service-host:8000/extract方法POST请求体一个JSON对象包含一个text字段。{ text: 马云创立了阿里巴巴阿里巴巴的总部在杭州。 }响应体一个JSON对象包含一个relations字段其值是一个关系三元组数组。{ relations: [ { head: 马云, relation: 创立, tail: 阿里巴巴 }, { head: 阿里巴巴, relation: 总部在, tail: 杭州 } ] }明白了这个“协议”我们就可以在C#里定义对应的数据模型了。在项目里创建一个Models文件夹然后添加两个类。第一个是ExtractRequest代表我们发送的请求namespace CasRelClientDemo.Models; public class ExtractRequest { public string Text { get; set; } string.Empty; }第二个是ExtractResponse和RelationTriplet代表服务返回的响应namespace CasRelClientDemo.Models; public class ExtractResponse { public ListRelationTriplet Relations { get; set; } new ListRelationTriplet(); } public class RelationTriplet { public string Head { get; set; } string.Empty; public string Relation { get; set; } string.Empty; public string Tail { get; set; } string.Empty; }定义好这些类后面用System.Text.Json进行序列化和反序列化就会非常方便代码也更清晰。3. 实现模型服务客户端现在进入核心环节编写一个可靠的服务客户端。我们不直接new HttpClient()而是采用依赖注入的方式使用IHttpClientFactory来创建和管理HttpClient实例。首先我们在Program.cs文件中注册这个客户端服务。// Program.cs using CasRelClientDemo.Services; var builder WebApplication.CreateBuilder(args); // 添加服务注册 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 关键步骤注册一个名为CasRelService的HttpClient // 并将其基础地址配置为appsettings.json中的CasRelService:BaseUrl builder.Services.AddHttpClientICasRelService, CasRelService(client { client.BaseAddress new Uri(builder.Configuration[CasRelService:BaseUrl] ?? http://localhost:8000); // 可以在这里设置一些默认请求头比如Content-Type client.DefaultRequestHeaders.Add(Accept, application/json); }); var app builder.Build(); // ... 后续中间件配置注意这里的基础地址http://localhost:8000是从配置文件appsettings.json中读取的。我们在appsettings.json里添加这个配置{ Logging: { LogLevel: { Default: Information, Microsoft.AspNetCore: Warning } }, CasRelService: { BaseUrl: http://your-python-service-host:8000 }, AllowedHosts: * }这样做的好处是当服务地址变更时我们无需修改代码只需更新配置文件。接下来我们创建Services文件夹并定义客户端接口和实现。首先是接口ICasRelService.cs它定义了客户端需要提供的能力using CasRelClientDemo.Models; namespace CasRelClientDemo.Services; public interface ICasRelService { TaskExtractResponse? ExtractRelationsAsync(ExtractRequest request, CancellationToken cancellationToken default); }然后是具体的实现CasRelService.csusing System.Text.Json; using CasRelClientDemo.Models; namespace CasRelClientDemo.Services; public class CasRelService : ICasRelService { private readonly HttpClient _httpClient; private readonly ILoggerCasRelService _logger; // 配置一个Json序列化选项保持属性名大小写原样不转小写 private static readonly JsonSerializerOptions _jsonOptions new() { PropertyNameCaseInsensitive true }; public CasRelService(HttpClient httpClient, ILoggerCasRelService logger) { _httpClient httpClient; // 由工厂注入 _logger logger; } public async TaskExtractResponse? ExtractRelationsAsync(ExtractRequest request, CancellationToken cancellationToken default) { // 构建请求内容将C#对象序列化为JSON字符串 var jsonContent JsonSerializer.Serialize(request); using var httpContent new StringContent(jsonContent, System.Text.Encoding.UTF8, application/json); try { _logger.LogInformation(正在向CasRel服务发送请求文本长度{Length}, request.Text.Length); // 发送POST请求 var response await _httpClient.PostAsync(/extract, httpContent, cancellationToken); // 确保响应是成功的 response.EnsureSuccessStatusCode(); // 读取响应内容并反序列化为C#对象 var responseBody await response.Content.ReadAsStringAsync(cancellationToken); var result JsonSerializer.DeserializeExtractResponse(responseBody, _jsonOptions); _logger.LogInformation(关系抽取成功提取到 {Count} 个三元组, result?.Relations?.Count ?? 0); return result; } catch (HttpRequestException ex) { _logger.LogError(ex, 调用CasRel服务时发生网络错误。); // 这里可以抛出自定义异常或者返回null根据业务逻辑决定 return null; } catch (JsonException ex) { _logger.LogError(ex, 解析CasRel服务返回的JSON时发生错误。); return null; } catch (TaskCanceledException) when (cancellationToken.IsCancellationRequested) { _logger.LogInformation(用户取消了请求。); return null; } } }这段代码做了几件关键事情通过构造函数注入HttpClient和ILogger。在ExtractRelationsAsync方法中将请求对象序列化为JSON。使用PostAsync方法发送请求。检查响应状态确保请求成功。将响应的JSON字符串反序列化为我们之前定义的ExtractResponse对象。用try-catch块包裹处理可能出现的网络异常、JSON解析异常和用户取消操作并记录了日志。4. 在控制器中调用与测试客户端写好了我们怎么用它呢最直接的方式就是在Web API的控制器里调用它。我们来修改或创建一个新的控制器。在Controllers文件夹下创建一个RelationExtractionController.cs文件using CasRelClientDemo.Models; using CasRelClientDemo.Services; using Microsoft.AspNetCore.Mvc; namespace CasRelClientDemo.Controllers; [ApiController] [Route(api/[controller])] public class RelationExtractionController : ControllerBase { private readonly ICasRelService _casRelService; public RelationExtractionController(ICasRelService casRelService) { _casRelService casRelService; } [HttpPost] public async TaskActionResultExtractResponse Extract([FromBody] ExtractRequest request) { if (string.IsNullOrWhiteSpace(request.Text)) { return BadRequest(请求文本不能为空。); } var result await _casRelService.ExtractRelationsAsync(request); if (result null) { // 这里可以根据实际情况返回不同的错误状态码比如502 Bad Gateway return StatusCode(StatusCodes.Status503ServiceUnavailable, 关系抽取服务暂时不可用。); } return Ok(result); } }这个控制器很简单它注入我们刚才写的ICasRelService然后提供一个POST /api/RelationExtraction的接口。这个接口接收一个包含文本的请求体转发给CasRel服务再将结果返回给调用者。现在让我们启动项目并进行测试。在命令行运行dotnet run项目启动后我们可以使用Swagger UI如果启用了、Postman或者curl来测试。打开浏览器访问https://localhost:7071/swagger/index.html端口号可能不同请查看命令行输出你应该能看到我们刚创建的RelationExtraction接口。点击“Try it out”在请求体里输入{ text: 比尔·盖茨和保罗·艾伦共同创立了微软公司。 }然后点击“Execute”。如果一切配置正确你的.NET应用会将这个请求转发给后端的Python CasRel服务并将返回的关系三元组展示在Swagger界面上。5. 进阶增强客户端健壮性上面的代码已经可以工作了但在生产环境中我们还需要考虑更多比如网络不稳定、服务暂时不可用等情况。这里介绍两个常见的增强措施重试机制和超时控制。5.1 实现简单的重试机制我们可以使用Polly这个强大的.NET弹性和瞬态故障处理库。首先安装NuGet包dotnet add package Microsoft.Extensions.Http.Polly然后在Program.cs中修改HttpClient的注册为其添加一个重试策略// Program.cs using Polly; using Polly.Extensions.Http; // ... 其他服务注册 // 定义一个重试策略针对网络错误和5xx状态码最多重试3次每次重试间隔递增 var retryPolicy HttpPolicyExtensions .HandleTransientHttpError() // 处理网络错误和5xx、408等状态码 .WaitAndRetryAsync(3, retryAttempt TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))); // 指数退避 builder.Services.AddHttpClientICasRelService, CasRelService(client { client.BaseAddress new Uri(builder.Configuration[CasRelService:BaseUrl] ?? http://localhost:8000); client.Timeout TimeSpan.FromSeconds(30); // 设置全局超时 }) .AddPolicyHandler(retryPolicy); // 应用重试策略这样当发生短暂的网络故障或服务端返回5xx错误时客户端会自动重试最多3次并且每次重试的等待时间会逐渐增加2秒、4秒、8秒避免给服务端造成过大压力。5.2 处理超时超时控制也很重要。我们可以在两个地方设置在AddHttpClient时设置client.Timeout如上例所示这是针对该HttpClient所有请求的全局超时。为特定的、可能耗时的操作使用CancellationToken并设置一个更短的超时时间。例如我们可以在控制器方法里这样用[HttpPost] public async TaskActionResultExtractResponse Extract([FromBody] ExtractRequest request) { // 创建一个在10秒后取消的CancellationTokenSource using var cts new CancellationTokenSource(TimeSpan.FromSeconds(10)); var result await _casRelService.ExtractRelationsAsync(request, cts.Token); // ... 后续处理 }这样即使HttpClient的全局超时是30秒这个特定的提取请求也会在10秒后主动取消避免长时间等待。6. 总结与回顾走完这一趟你应该已经掌握了在.NET项目中集成外部AI模型服务的基本套路。核心其实就是几步定义好数据格式的契约C# Model、用IHttpClientFactory创建一个配置好的HttpClient、在服务层实现具体的调用和异常处理、最后在控制器或应用层消费这个服务。整个过程里System.Text.Json让数据转换变得省心依赖注入让各个组件解耦且易于测试而像Polly这样的库则能大大提升应用在面对不稳定网络时的韧性。虽然我们是以CasRel模型为例但这个模式完全可以复用到调用其他任何提供HTTP接口的AI服务上比如文本生成、图像识别等等。最后要提醒的是记得根据你的实际Python服务地址修改appsettings.json里的配置并且在正式上线前要充分测试网络超时、服务降级等各种边界情况。希望这篇教程能帮你顺利地把CasRel的能力带到你的C#应用里。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
CasRel模型在.NET生态中的集成:C#调用实战教程
发布时间:2026/6/2 20:57:52
CasRel模型在.NET生态中的集成C#调用实战教程如果你是一名.NET开发者最近想在自己的C#项目里用上CasRel模型来做关系抽取但发现模型是用Python写的服务接口也是Python那边提供的可能会有点无从下手。别担心这篇文章就是为你准备的。我会带你一步步走完整个过程从创建一个干净的ASP.NET Core Web API项目开始到用C#的HttpClient去调用远端的Python模型服务最后处理好数据的来回转换和可能出现的网络问题。整个过程我会用最直白的话和能直接运行的代码来讲解保证你跟着做就能在自己的项目里用起来。1. 环境准备与项目创建在开始写代码之前我们得先把“舞台”搭好。这里假设你已经安装了.NET SDK建议用.NET 6或更高版本用着顺手以及一个顺手的代码编辑器比如Visual Studio 2022或者VS Code。首先我们打开命令行创建一个新的Web API项目。这个项目将作为我们调用CasRel模型服务的“桥梁”或“客户端”。dotnet new webapi -n CasRelClientDemo cd CasRelClientDemo这条命令会创建一个名为CasRelClientDemo的新项目并且自动生成一些基础的Web API模板代码。创建好后我们可以用dotnet run命令先跑一下看看默认的天气预报接口能不能正常工作确保环境没问题。接下来我们需要安装几个后面会用到的NuGet包。这些包能帮我们更优雅地处理HTTP请求和JSON数据。dotnet add package Microsoft.Extensions.Http dotnet add package System.Text.Json第一个包Microsoft.Extensions.Http非常重要它提供了IHttpClientFactory这是现代.NET中管理HttpClient生命周期的最佳实践方式能有效避免一些资源耗尽的问题。第二个包System.Text.Json是.NET自带的但明确引用一下也没坏处我们会用它来序列化和反序列化JSON数据。2. 理解调用流程与数据契约在动手写代码调用之前我们得先搞清楚两件事我们要给Python服务发送什么以及它会返回给我们什么。这就像打电话你得知道对方的号码地址和你们沟通的语言数据格式。通常一个CasRel模型服务比如用FastAPI或Flask搭建的会提供一个HTTP接口。我们发送一个POST请求请求体里包含待分析的文本服务处理后会返回一个结构化的JSON里面包含了从文本中抽取出的人物关系三元组。假设我们的Python服务接口是这样的地址http://your-python-service-host:8000/extract方法POST请求体一个JSON对象包含一个text字段。{ text: 马云创立了阿里巴巴阿里巴巴的总部在杭州。 }响应体一个JSON对象包含一个relations字段其值是一个关系三元组数组。{ relations: [ { head: 马云, relation: 创立, tail: 阿里巴巴 }, { head: 阿里巴巴, relation: 总部在, tail: 杭州 } ] }明白了这个“协议”我们就可以在C#里定义对应的数据模型了。在项目里创建一个Models文件夹然后添加两个类。第一个是ExtractRequest代表我们发送的请求namespace CasRelClientDemo.Models; public class ExtractRequest { public string Text { get; set; } string.Empty; }第二个是ExtractResponse和RelationTriplet代表服务返回的响应namespace CasRelClientDemo.Models; public class ExtractResponse { public ListRelationTriplet Relations { get; set; } new ListRelationTriplet(); } public class RelationTriplet { public string Head { get; set; } string.Empty; public string Relation { get; set; } string.Empty; public string Tail { get; set; } string.Empty; }定义好这些类后面用System.Text.Json进行序列化和反序列化就会非常方便代码也更清晰。3. 实现模型服务客户端现在进入核心环节编写一个可靠的服务客户端。我们不直接new HttpClient()而是采用依赖注入的方式使用IHttpClientFactory来创建和管理HttpClient实例。首先我们在Program.cs文件中注册这个客户端服务。// Program.cs using CasRelClientDemo.Services; var builder WebApplication.CreateBuilder(args); // 添加服务注册 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 关键步骤注册一个名为CasRelService的HttpClient // 并将其基础地址配置为appsettings.json中的CasRelService:BaseUrl builder.Services.AddHttpClientICasRelService, CasRelService(client { client.BaseAddress new Uri(builder.Configuration[CasRelService:BaseUrl] ?? http://localhost:8000); // 可以在这里设置一些默认请求头比如Content-Type client.DefaultRequestHeaders.Add(Accept, application/json); }); var app builder.Build(); // ... 后续中间件配置注意这里的基础地址http://localhost:8000是从配置文件appsettings.json中读取的。我们在appsettings.json里添加这个配置{ Logging: { LogLevel: { Default: Information, Microsoft.AspNetCore: Warning } }, CasRelService: { BaseUrl: http://your-python-service-host:8000 }, AllowedHosts: * }这样做的好处是当服务地址变更时我们无需修改代码只需更新配置文件。接下来我们创建Services文件夹并定义客户端接口和实现。首先是接口ICasRelService.cs它定义了客户端需要提供的能力using CasRelClientDemo.Models; namespace CasRelClientDemo.Services; public interface ICasRelService { TaskExtractResponse? ExtractRelationsAsync(ExtractRequest request, CancellationToken cancellationToken default); }然后是具体的实现CasRelService.csusing System.Text.Json; using CasRelClientDemo.Models; namespace CasRelClientDemo.Services; public class CasRelService : ICasRelService { private readonly HttpClient _httpClient; private readonly ILoggerCasRelService _logger; // 配置一个Json序列化选项保持属性名大小写原样不转小写 private static readonly JsonSerializerOptions _jsonOptions new() { PropertyNameCaseInsensitive true }; public CasRelService(HttpClient httpClient, ILoggerCasRelService logger) { _httpClient httpClient; // 由工厂注入 _logger logger; } public async TaskExtractResponse? ExtractRelationsAsync(ExtractRequest request, CancellationToken cancellationToken default) { // 构建请求内容将C#对象序列化为JSON字符串 var jsonContent JsonSerializer.Serialize(request); using var httpContent new StringContent(jsonContent, System.Text.Encoding.UTF8, application/json); try { _logger.LogInformation(正在向CasRel服务发送请求文本长度{Length}, request.Text.Length); // 发送POST请求 var response await _httpClient.PostAsync(/extract, httpContent, cancellationToken); // 确保响应是成功的 response.EnsureSuccessStatusCode(); // 读取响应内容并反序列化为C#对象 var responseBody await response.Content.ReadAsStringAsync(cancellationToken); var result JsonSerializer.DeserializeExtractResponse(responseBody, _jsonOptions); _logger.LogInformation(关系抽取成功提取到 {Count} 个三元组, result?.Relations?.Count ?? 0); return result; } catch (HttpRequestException ex) { _logger.LogError(ex, 调用CasRel服务时发生网络错误。); // 这里可以抛出自定义异常或者返回null根据业务逻辑决定 return null; } catch (JsonException ex) { _logger.LogError(ex, 解析CasRel服务返回的JSON时发生错误。); return null; } catch (TaskCanceledException) when (cancellationToken.IsCancellationRequested) { _logger.LogInformation(用户取消了请求。); return null; } } }这段代码做了几件关键事情通过构造函数注入HttpClient和ILogger。在ExtractRelationsAsync方法中将请求对象序列化为JSON。使用PostAsync方法发送请求。检查响应状态确保请求成功。将响应的JSON字符串反序列化为我们之前定义的ExtractResponse对象。用try-catch块包裹处理可能出现的网络异常、JSON解析异常和用户取消操作并记录了日志。4. 在控制器中调用与测试客户端写好了我们怎么用它呢最直接的方式就是在Web API的控制器里调用它。我们来修改或创建一个新的控制器。在Controllers文件夹下创建一个RelationExtractionController.cs文件using CasRelClientDemo.Models; using CasRelClientDemo.Services; using Microsoft.AspNetCore.Mvc; namespace CasRelClientDemo.Controllers; [ApiController] [Route(api/[controller])] public class RelationExtractionController : ControllerBase { private readonly ICasRelService _casRelService; public RelationExtractionController(ICasRelService casRelService) { _casRelService casRelService; } [HttpPost] public async TaskActionResultExtractResponse Extract([FromBody] ExtractRequest request) { if (string.IsNullOrWhiteSpace(request.Text)) { return BadRequest(请求文本不能为空。); } var result await _casRelService.ExtractRelationsAsync(request); if (result null) { // 这里可以根据实际情况返回不同的错误状态码比如502 Bad Gateway return StatusCode(StatusCodes.Status503ServiceUnavailable, 关系抽取服务暂时不可用。); } return Ok(result); } }这个控制器很简单它注入我们刚才写的ICasRelService然后提供一个POST /api/RelationExtraction的接口。这个接口接收一个包含文本的请求体转发给CasRel服务再将结果返回给调用者。现在让我们启动项目并进行测试。在命令行运行dotnet run项目启动后我们可以使用Swagger UI如果启用了、Postman或者curl来测试。打开浏览器访问https://localhost:7071/swagger/index.html端口号可能不同请查看命令行输出你应该能看到我们刚创建的RelationExtraction接口。点击“Try it out”在请求体里输入{ text: 比尔·盖茨和保罗·艾伦共同创立了微软公司。 }然后点击“Execute”。如果一切配置正确你的.NET应用会将这个请求转发给后端的Python CasRel服务并将返回的关系三元组展示在Swagger界面上。5. 进阶增强客户端健壮性上面的代码已经可以工作了但在生产环境中我们还需要考虑更多比如网络不稳定、服务暂时不可用等情况。这里介绍两个常见的增强措施重试机制和超时控制。5.1 实现简单的重试机制我们可以使用Polly这个强大的.NET弹性和瞬态故障处理库。首先安装NuGet包dotnet add package Microsoft.Extensions.Http.Polly然后在Program.cs中修改HttpClient的注册为其添加一个重试策略// Program.cs using Polly; using Polly.Extensions.Http; // ... 其他服务注册 // 定义一个重试策略针对网络错误和5xx状态码最多重试3次每次重试间隔递增 var retryPolicy HttpPolicyExtensions .HandleTransientHttpError() // 处理网络错误和5xx、408等状态码 .WaitAndRetryAsync(3, retryAttempt TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))); // 指数退避 builder.Services.AddHttpClientICasRelService, CasRelService(client { client.BaseAddress new Uri(builder.Configuration[CasRelService:BaseUrl] ?? http://localhost:8000); client.Timeout TimeSpan.FromSeconds(30); // 设置全局超时 }) .AddPolicyHandler(retryPolicy); // 应用重试策略这样当发生短暂的网络故障或服务端返回5xx错误时客户端会自动重试最多3次并且每次重试的等待时间会逐渐增加2秒、4秒、8秒避免给服务端造成过大压力。5.2 处理超时超时控制也很重要。我们可以在两个地方设置在AddHttpClient时设置client.Timeout如上例所示这是针对该HttpClient所有请求的全局超时。为特定的、可能耗时的操作使用CancellationToken并设置一个更短的超时时间。例如我们可以在控制器方法里这样用[HttpPost] public async TaskActionResultExtractResponse Extract([FromBody] ExtractRequest request) { // 创建一个在10秒后取消的CancellationTokenSource using var cts new CancellationTokenSource(TimeSpan.FromSeconds(10)); var result await _casRelService.ExtractRelationsAsync(request, cts.Token); // ... 后续处理 }这样即使HttpClient的全局超时是30秒这个特定的提取请求也会在10秒后主动取消避免长时间等待。6. 总结与回顾走完这一趟你应该已经掌握了在.NET项目中集成外部AI模型服务的基本套路。核心其实就是几步定义好数据格式的契约C# Model、用IHttpClientFactory创建一个配置好的HttpClient、在服务层实现具体的调用和异常处理、最后在控制器或应用层消费这个服务。整个过程里System.Text.Json让数据转换变得省心依赖注入让各个组件解耦且易于测试而像Polly这样的库则能大大提升应用在面对不稳定网络时的韧性。虽然我们是以CasRel模型为例但这个模式完全可以复用到调用其他任何提供HTTP接口的AI服务上比如文本生成、图像识别等等。最后要提醒的是记得根据你的实际Python服务地址修改appsettings.json里的配置并且在正式上线前要充分测试网络超时、服务降级等各种边界情况。希望这篇教程能帮你顺利地把CasRel的能力带到你的C#应用里。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。