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

如何在C#中使用Azure.AI.OpenAI SDK让Azure OpenAI(如Gpt-4o)返回JSON格式响应?

如何在C#中使用Azure.AI.OpenAI SDK让Azure OpenAI(如Gpt-4o)返回JSON格式响应?

嘿,我刚好处理过类似的需求,用Azure.AI.OpenAI SDK在C#里让Gpt-4o返回JSON其实不难,主要分两种常用方式,我给你一步步讲清楚:

1. 先确保安装必要的NuGet包

首先得把Azure.AI.OpenAI的SDK装到项目里,你可以在NuGet包管理器里搜索Azure.AI.OpenAI,或者用命令行:

Install-Package Azure.AI.OpenAI
# 或者用.NET CLI
dotnet add package Azure.AI.OpenAI

2. 方法一:通过提示词强制返回JSON

这是最通用的方法,不管API版本新旧都能用,核心就是在系统提示里明确要求模型必须返回严格的JSON,不能有额外内容。

示例代码:

using Azure.AI.OpenAI;
using System.Text.Json;

// 初始化客户端
var client = new OpenAIClient(
    new Uri("你的Azure OpenAI端点"),
    new Azure.AzureKeyCredential("你的API密钥"));

// 构造聊天消息
var chatCompletionsOptions = new ChatCompletionsOptions()
{
    DeploymentName = "gpt-4o", // 你的部署名称
    Messages =
    {
        new ChatMessage(ChatRole.System, "你必须始终以严格的JSON格式响应,不要包含任何额外的解释、说明或非JSON内容。"),
        new ChatMessage(ChatRole.User, "请列出3种常见的编程语言及其主要应用场景,用JSON格式返回,结构为[{\"language\":\"语言名\",\"scenario\":\"应用场景\"}]")
    }
};

// 调用API
var response = await client.GetChatCompletionsAsync(chatCompletionsOptions);
var jsonResponse = response.Value.Choices[0].Message.Content;

// 解析JSON(示例)
var languageList = JsonSerializer.Deserialize<List<LanguageScenario>>(jsonResponse);

// 定义对应的实体类
public class LanguageScenario
{
    public string Language { get; set; }
    public string Scenario { get; set; }
}

3. 方法二:使用SDK内置的JSON响应格式配置(推荐,适用于新版API)

如果你的Azure OpenAI API版本是2024-02-15-preview及以上,Gpt-4o支持直接指定响应格式为JSON,这样更可靠,模型会强制返回JSON,减少格式错误的概率。

示例代码:

using Azure.AI.OpenAI;
using System.Text.Json;

var client = new OpenAIClient(
    new Uri("你的Azure OpenAI端点"),
    new Azure.AzureKeyCredential("你的API密钥"));

var chatCompletionsOptions = new ChatCompletionsOptions()
{
    DeploymentName = "gpt-4o",
    Messages =
    {
        new ChatMessage(ChatRole.User, "请列出3种常见的编程语言及其主要应用场景")
    },
    // 关键:设置响应格式为JSON
    ResponseFormat = new JsonResponseFormat()
};

var response = await client.GetChatCompletionsAsync(chatCompletionsOptions);
var jsonResponse = response.Value.Choices[0].Message.Content;

// 同样可以解析成实体类
var languageList = JsonSerializer.Deserialize<List<LanguageScenario>>(jsonResponse);

一些注意事项

  • 如果你用方法二,一定要确认你的API版本符合要求,不然ResponseFormat参数会报错;
  • 不管用哪种方法,提示词尽量明确JSON的结构,比如指定字段名,这样返回的JSON更符合你的预期;
  • 实际生产环境中,记得加异常处理,比如模型偶尔可能返回不符合格式的内容,要捕获反序列化的错误。

备注:内容来源于stack exchange,提问作者Robert Corvus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:38:12