You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Web应用实现OpenAI聊天响应流式输出的技术问询

如何在.NET Web应用中实现OpenAI聊天响应的真实流式输出?

我们团队基于OpenAI的gpt-3.5-turbo API开发烹饪短课程聊天机器人导师。因提示词(约2000token)和补全内容(约1000token)体量无法再压缩,响应耗时可达半分钟,必须通过真实流式输出提升用户体验。但我们熟悉Python和数学背景,对.NET技术陌生,查阅的现有方案要么是将内容输出到控制台而非应用,要么是伪流式(等完整响应生成后拆分模拟)。

我们需要一个极简示例:调用C#/.NET OpenAI API执行"写一首100token的诗"的提示词,实现真实流式输出到Web应用的HTTP响应,禁止使用控制台输出或伪流式手段。其余基于LangChain、Pinecone及MSSQL的后台逻辑已完成。

已尝试无效的方案

  • 各类"后端技巧":无法通过循环逐句模拟流式,也不能拆分响应片段生成内容;提示词和响应无法缩短,需传递对话历史、语义搜索上下文及模型规则,还有无需展示的危险内容检测辅助机器人逻辑。
  • 微软官方文档示例:仅使用console.write()输出到控制台,且GitHub官方支持工单常未解决就关闭。
  • Azure Functions:只能一次性获取完整响应;同时我们认为Python HTTP响应无法实现流式输出(单脚本对应单响应)。

极简实现示例

以下是ASP.NET Core Web应用中的真实流式输出端点示例,使用OpenAI官方NuGet包OpenAI:

1. 安装依赖

在项目中安装OpenAI的.NET包:

dotnet add package OpenAI

2. 编写API端点

在Program.cs(或控制器)中添加流式响应端点:

using OpenAI;
using OpenAI.Chat;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenAIClient(builder.Configuration["OpenAI:ApiKey"]);

var app = builder.Build();

app.MapPost("/stream-poem", async (HttpContext context, IOpenAIClient openAIClient) =>
{
    // 设置响应头,指定为流式文本
    context.Response.Headers.ContentType = "text/plain; charset=utf-8";
    context.Response.Headers.TransferEncodingChunked = "true";

    var chatCompletionOptions = new ChatCompletionCreateRequest
    {
        Model = "gpt-3.5-turbo",
        Messages = new List<ChatMessage>
        {
            new ChatMessage(ChatRole.User, "写一首100token的诗")
        },
        Stream = true // 开启流式响应
    };

    // 流式获取OpenAI的响应块
    await foreach (var chunk in openAIClient.ChatEndpoint.StreamCompletionAsync(chatCompletionOptions))
    {
        if (chunk.Choices.FirstOrDefault()?.Delta?.Content is string content && !string.IsNullOrEmpty(content))
        {
            // 将每个内容块写入HTTP响应流
            await context.Response.WriteAsync(content);
            // 强制刷新响应流,确保内容即时发送到客户端
            await context.Response.Body.FlushAsync();
        }
    }
});

app.Run();

说明

  • 该端点通过Stream = true开启OpenAI的流式API调用,逐块获取响应内容。
  • 直接将每个内容块写入HttpContext.Response,并通过FlushAsync()强制刷新流,确保内容即时推送到客户端,实现真实流式输出。
  • 无需等待完整响应生成,也不依赖控制台输出,完全适配Web应用场景。

内容的提问来源于stack exchange,提问作者Antonio Krizmanić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:16:01