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

Azure.AI.OpenAI 1.0.0-beta.14版C#多轮上下文对话实现咨询

问题:Azure OpenAI多轮上下文对话实现(C#,Azure.AI.OpenAI 1.0.0-beta.14)

我需要创建程序化应用,向Azure OpenAI托管的GPT模型发送并接收同一上下文下的多轮消息,大致流程如下:

Uri azureOpenAIResourceUri = new Uri(azureOpenAIResourceUriEndpoint);
AzureKeyCredential azureOpenAIApiKeyCredential = new AzureKeyCredential(azureOpenAIApiKey);
OpenAIClient client = new OpenAIClient(azureOpenAIResourceUri, azureOpenAIApiKeyCredential);
ChatCompletionsOptions chatCompletionsOptions = GenerateInitialChatCompletionsOptions(AITemplate, customAITemplate, query);

//Send message: "What is 1 + 1"

//Get answer, print to user

//Send message: "Can you add 2 to the previous answer"

//Get answer, print to user

//etc...

我已能通过以下代码完成第一轮对话:

await client.GetChatCompletionsAsync(chatCompletionsOptions)

但收到第一轮回复后,不知如何基于该回复继续对话,找不到获取对话“上下文”的方式,也未发现相关对象的方法或属性支持“基于当前上下文回复”。网上有一些使用GetChatCompletionsStreaming的帖子,但未找到在第一轮回复后继续发送消息并维持上下文的示例。

当前使用的Azure.AI.OpenAI版本为1.0.0-beta.14,若该版本并非最优,请告知。此外API版本迭代快,导致GPT生成的代码常存在语法兼容性问题。

现咨询:在上述指定版本的库中,如何用C#实现与聊天机器人的多轮上下文交互?


解决方案

核心原理

在Azure.AI.OpenAI的ChatCompletionsOptions中,Messages列表就是对话上下文的载体。每一轮对话后,需要将用户的提问和AI的回复都添加到这个列表中,后续请求时模型会基于整个列表的内容生成回应。

针对1.0.0-beta.14版本的实现代码

以下是完整的多轮对话示例:

using Azure;
using Azure.AI.OpenAI;

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

// 初始化对话选项,包含系统提示(可选)和第一轮用户消息
var chatCompletionsOptions = new ChatCompletionsOptions()
{
    DeploymentName = "你的模型部署名称", // 例如gpt-35-turbo
    Messages =
    {
        new ChatMessage(ChatRole.System, "你是一个专业的计算器助手"),
        new ChatMessage(ChatRole.User, "What is 1 + 1")
    }
};

// 第一轮对话
Response<ChatCompletions> response = await client.GetChatCompletionsAsync(chatCompletionsOptions);
ChatMessage assistantReply = response.Value.Choices[0].Message;
Console.WriteLine($"AI回复: {assistantReply.Content}");

// 将AI的回复添加到上下文列表
chatCompletionsOptions.Messages.Add(assistantReply);

// 第二轮对话:基于上下文提问
chatCompletionsOptions.Messages.Add(new ChatMessage(ChatRole.User, "Can you add 2 to the previous answer"));
response = await client.GetChatCompletionsAsync(chatCompletionsOptions);
assistantReply = response.Value.Choices[0].Message;
Console.WriteLine($"AI回复: {assistantReply.Content}");

// 后续轮次重复上述逻辑:添加用户消息→请求→添加AI回复→循环

关键说明

  • 上下文维护:每次对话后必须将用户消息和AI回复都追加到chatCompletionsOptions.Messages中,不能替换或清空列表,否则会丢失上下文。
  • 版本建议:1.0.0-beta.14是预览版,API存在变更风险。建议升级到稳定版(如1.2.0及以上),稳定版的API更可靠,兼容性更好,后续迭代也不会频繁破坏现有代码。
  • 流式对话的上下文维护:如果使用GetChatCompletionsStreamingAsync,流程逻辑完全一致——收集完完整的AI回复后,将其作为ChatMessage添加到Messages列表即可,无需特殊处理。

内容的提问来源于stack exchange,提问作者Dave R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:42:06