如何在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
相关产品推荐
相关产品推荐

