C# 调用 OpenAI 大模型实战:从 Demo 到企业级封装
当前企业级开发中,接入 AI 已成为趋势。过去两年,AI 生态虽被 Python 占据,但在企业系统中,C# 仍是主力军。
一、为什么 C# 接入 AI 是趋势?
很多人误以为 AI = Python,但企业系统 70% 以上仍然是 .NET、Java 或微服务架构。
.NET 生态在云原生、微服务、跨平台及 Native AOT 方面正在快速进化。.NET 9 以后,C# 已不仅是企业语言,而是具备高性能、类型安全、工程化强、可长期维护的系统级语言。
因此,企业级 AI 集成,C# 反而更适合。
二、基础调用:最简单的 HttpClient 实现
首先,我们实现最基础的调用。
1. 创建请求模型
public class ChatRequest
{
public string model { get; set; }
public List<Message> messages { get; set; }
}
public class Message
{
public string role { get; set; }
public string content { get; set; }
}
2. 实现调用方法
public async Task<string> SendAsync(string prompt)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_API_KEY");
var request = new ChatRequest
{
model = "gpt-4o-mini",
messages = new List<Message>
{
new Message { role = "user", content = prompt }
}
};
var json = JsonSerializer.Serialize(request);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(
"https://api.openai.com/v1/chat/completions", content);
return await response.Content.ReadAsStringAsync();
}
这样就完成了基础调用。但这只是 Demo,存在以下问题:
- 不可复用
- 无日志
- 无异常处理
- 无重试
- 无流式输出
三、升级为企业级封装架构
企业级封装必须解决 6 个问题:
- HttpClient 复用
- 统一异常处理
- 超时控制
- 日志记录
- 可扩展模型切换
- 流式输出支持
四、设计一个 AIService 封装层
架构设计
Controller -> IAIService -> OpenAIService -> HttpClientFactory
1. 定义接口
public interface IAIService
{
Task<string> SendAsync(string prompt);
}
2. 实现服务类
public class OpenAIService : IAIService
{
private readonly HttpClient _client;
public OpenAIService(HttpClient client)
{
_client = client;
}
public async Task<string> SendAsync(string prompt)
{
var request = new
{
model = "gpt-4o-mini",
messages = new[]
{
new { role = "user", content = prompt }
}
};
var response = await _client.PostAsJsonAsync(
"chat/completions", request);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadFromJsonAsync<JsonElement>();
return json
.GetProperty("choices")[0]
.GetProperty("message")
.GetProperty("content")
.GetString();
}
}
3. 注册 HttpClientFactory
builder.Services.AddHttpClient<IAIService, OpenAIService>(client =>
{
client.BaseAddress = new Uri("https://api.openai.com/v1/");
client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_API_KEY");
});
优点:
- 自动管理连接池
- 可配置超时
- 支持 Polly 重试策略
五、实现流式输出(重点)
企业应用中必须支持打字机效果、实时推送、大文本避免等待。
实现方式:
request.stream = true;
然后读取流:
using var response = await _client.SendAsync(
requestMessage, HttpCompletionOption.ResponseHeadersRead);
using var stream = await response.Content.ReadAsStreamAsync();
using var reader = new StreamReader(stream);
while (!reader.EndOfStream)
{
var line = await reader.ReadLineAsync();
if (!string.IsNullOrWhiteSpace(line))
{
Console.WriteLine(line);
}
}
这一步,才是企业级 AI 集成的关键。
六、异常处理与重试策略
企业必须防止网络波动、API 限流、超时。
推荐使用 Polly:
builder.Services.AddHttpClient<IAIService, OpenAIService>()
.AddTransientHttpErrorPolicy(policy => policy.WaitAndRetryAsync(3, retry =>
TimeSpan.FromSeconds(Math.Pow(2, retry))));
实现:
- 指数退避
- 自动重试
- 提升稳定性
七、WinForms 集成示例
在 WinForms 中:
private async void btnSend_Click(object sender, EventArgs e)
{
var result = await _aiService.SendAsync(txtInput.Text);
txtOutput.Text = result;
}
如果结合流式输出,可以边接收边 AppendText,实现 ChatGPT 桌面客户端。
八、进阶优化方向
企业级还可以做:
- Token 统计
- 用户上下文记忆
- 多轮对话缓存
- Redis 存储对话历史
- 成本监控
- 多模型路由(不同模型处理不同任务)
九、性能与架构思考
对比 Python 方案:
| 维度 | C# | Python |
|---|---|---|
| 性能 | 更高 | 较低 |
| 工程化 | 强 | 中 |
| 长期维护 | 优秀 | 依赖团队 |
| 企业集成 | 更自然 | 需要适配 |
在微服务架构中,C# 更适合做:
- AI 中间层
- 模型代理层
- 企业安全网关
十、未来趋势判断
未来 3 年趋势:
- AI 会成为所有系统的'默认能力'
- 每个后端服务都会接入模型
- C# 会成为企业 AI 集成的重要语言
原因:
- 强类型保障
- 性能优势
- 原生云支持
- Native AOT
结语
很多人说 AI 是 Python 的时代,但企业系统不会全部推翻重写。
真正的未来是:Python 负责训练,C# 负责落地。
如果你正在做 .NET 项目,现在就是接入 AI 的最佳时机。


