调用Azure OpenAI的CreateChatCompletionAsync报404资源未找到错误
Azure OpenAI调用CreateChatCompletionAsync报404错误问题
使用OpenAI NuGet包调用Azure OpenAI端点时,CreateCompletionAsync方法可正常建立连接并返回结果,但调用CreateChatCompletionAsync方法访问同一URL时,出现404:Resource not found错误。以下代码中,方法1和方法2使用CreateCompletionAsync可正常运行,方法3和方法4使用CreateChatCompletionAsync触发错误:
using System; using System.Threading.Tasks; using OpenAI_API; using OpenAI_API.Chat; using OpenAI_API.Completions; using OpenAI_API.Models; using OpenAI_API.Moderation; class Program { static async Task Main(string[] args) { APIAuthentication aPIAuthentication = new APIAuthentication("my_key"); // 初始化Azure OpenAI客户端 var api = OpenAIAPI.ForAzure("chatgpt", "ddic", aPIAuthentication); // 方法1:正常运行,调用同一API端点 var prompt = "If I could fly"; var model = "ddic"; var result = await api.Completions.CreateCompletionAsync(prompt, model); // 打印生成的文本到控制台 Console.WriteLine(result); // 方法2:同样正常运行,调用同一API端点 var completionRequest = new CompletionRequest(); string[] multiPrompt = { "Hello World", "Once upon a time" }; completionRequest.MultiplePrompts = multiPrompt; completionRequest.Model = model; completionRequest.user = ChatMessageRole.User; var result1 = await api.Completions.CreateCompletionAsync(completionRequest); // 方法3:调用此方法时出现错误 // (端点地址) HTTP状态码: NotFound. 内容: {"error":{"code":"404","message": "Resource not found"}} var response = await api.Chat.CreateChatCompletionAsync(new ChatRequest() { Model = "ddic", Temperature = 0.1, MaxTokens = 50, Messages = new ChatMessage[] { new ChatMessage(ChatMessageRole.System, "你是一个提供产品信息(包括价格)的助手。"), new ChatMessage(ChatMessageRole.User, "特斯拉") } }); IList<ChatMessage> messages = new List<ChatMessage> { new ChatMessage(ChatMessageRole.System, "你是一个提供产品信息(包括价格)的助手。"), new ChatMessage(ChatMessageRole.User, "特斯拉") }; // 方法4:同样触发404错误 var response1 = await api.Chat.CreateChatCompletionAsync(messages, "ddic"); var reply = response1.Choices[0].Message; Console.WriteLine($"{reply.Role}: {reply.Content.Trim()}"); } }
问题原因
Azure OpenAI中,CreateCompletionAsync对应文本补全类模型的/completions端点,而CreateChatCompletionAsync对应聊天类模型的/chat/completions端点。你当前使用的部署名称ddic对应的是文本补全模型(如gpt-3.5-turbo-instruct、text-davinci-003等),该部署未启用聊天接口的访问路径,因此调用聊天接口时会返回404错误。
解决方案
- 检查Azure OpenAI部署:登录Azure门户,进入你的OpenAI资源,查看部署列表,确认是否存在聊天类模型(如gpt-35-turbo、gpt-4、gpt-4o等)的部署。
- 创建聊天模型部署:如果没有对应的聊天模型部署,新建一个部署,选择聊天类模型,并记录新的部署名称(例如
gpt-35-turbo-ddic)。 - 修改代码参数:在调用
CreateChatCompletionAsync时,将Model参数替换为聊天模型的部署名称,同时初始化客户端时如果需要也对应调整。
修改后的代码示例(假设聊天模型部署名为gpt-35-turbo-ddic):
// 初始化Azure OpenAI客户端,聊天模型部署名称为gpt-35-turbo-ddic var api = OpenAIAPI.ForAzure("chatgpt", "gpt-35-turbo-ddic", aPIAuthentication); // 方法3修改后 var response = await api.Chat.CreateChatCompletionAsync(new ChatRequest() { Model = "gpt-35-turbo-ddic", Temperature = 0.1, MaxTokens = 50, Messages = new ChatMessage[] { new ChatMessage(ChatMessageRole.System, "你是一个提供产品信息(包括价格)的助手。"), new ChatMessage(ChatMessageRole.User, "特斯拉") } }); // 方法4修改后 var response1 = await api.Chat.CreateChatCompletionAsync(messages, "gpt-35-turbo-ddic");
内容的提问来源于stack exchange,提问作者user565992
相关产品推荐
相关产品推荐

