用微软AutoGen+ 通义千问实现 AI 成语接龙
基于AutoGen框架对接阿里云通义千问让 AI 自动玩成语接龙。代码简洁、开箱即用适合 .NET 开发者快速集成大模型能力。前置准备访问阿里云百炼平台https://bailian.aliyun.com创建应用获取 API Key确认 Endpointhttps://dashscope.aliyuncs.com/compatible-mode/v1确保账户有可用额度 通义千问兼容 OpenAI 协议只需更换 Endpoint 即可复用 AutoGen 的 OpenAI 客户端。项目配置安装必要依赖dotnet add package AutoGen dotnet add package AutoGen.OpenAI项目文件IdiomChain.csprojProject SdkMicrosoft.NET.Sdk PropertyGroup OutputTypeExe/OutputType TargetFrameworknet8.0/TargetFramework ImplicitUsingsenable/ImplicitUsings Nullableenable/Nullable /PropertyGroup ItemGroup PackageReference IncludeAutoGen Version0.2.1 / PackageReference IncludeAutoGen.OpenAI Version0.2.1 / /ItemGroup /Project完整代码using System.ClientModel; using System.Text; using AutoGen.Core; using AutoGen.OpenAI; using AutoGen.OpenAI.Extension; using OpenAI; classProgram { static async Task Main() { var apiKey xxxxxxxxxxxxxx; // 替换为你的 API Key if (string.IsNullOrEmpty(apiKey)) { Console.WriteLine(❌ 请设置 DASHSCOPE_API_KEY); return; } // 初始化 OpenAI 兼容客户端 var openAIClient new OpenAIClient( new ApiKeyCredential(apiKey), new OpenAIClientOptions { Endpoint new Uri(https://dashscope.aliyuncs.com/compatible-mode/v1) }); var model qwen3-32b; // 按需替换模型 // 创建 AutoGen Agent⚠️ 必须注册消息转换器 var agent new OpenAIChatAgent( chatClient: openAIClient.GetChatClient(model), name: idiom, systemMessage: 你是成语接龙机器人只输出四字成语 ) .RegisterMessageConnector(); // 关键启用 AutoGen 消息协议 Console.WriteLine(成语接龙开始一马当先\n); string lastWord 先; while (true) { Console.WriteLine($接字{lastWord}); var prompt $ 规则 1. 用{lastWord}开头 2. 四字成语 3. 不解释 4. 接不上说过 输出 ; var msg new TextMessage(Role.User, prompt); var sb new StringBuilder(); // 流式接收响应 awaitforeach (var reply in agent.GenerateStreamingReplyAsync([msg])) { if (reply is TextMessageUpdate update !string.IsNullOrEmpty(update.Content)) { Console.Write(update.Content); sb.Append(update.Content); } } // 清洗输出只保留汉字 var idiom Clean(sb.ToString()); Console.WriteLine($\n✅ {idiom}); // 终止条件 if (idiom 过 || idiom.Length 4) break; // 提取尾字作为下一轮输入 lastWord idiom[^1].ToString(); } } // 只保留中文汉字过滤标点/空格/英文 static string Clean(string text) { var sb new StringBuilder(); foreach (var c in text) { if (c 0x4e00 c 0x9fa5) sb.Append(c); } return sb.ToString(); } }关键点说明要点说明✅RegisterMessageConnector()AutoGen 0.2 必须调用否则消息类型无法转换✅TextMessageTextMessageUpdateAutoGen 标准消息类型用于流式交互✅Clean()清洗函数过滤模型输出的多余字符确保只提取成语✅ 流式响应GenerateStreamingReplyAsync实时输出体验更流畅运行效果成语接龙开始一马当先 接字先 先人后己 ✅ 先人后己 接字己 己所不欲 ✅ 己所不欲 接字欲 欲罢不能 ✅ 欲罢不能 接字能 能工巧匠 ✅ 能工巧匠 ...效果截图常见问题Q报错Message type not supportedA忘记调用.RegisterMessageConnector()这是 AutoGen 0.2 的必需步骤。Q模型返回带解释的文本A系统提示中强调只输出成语并用Clean()函数二次过滤。Q如何换模型A修改model变量即可如qwen-plus、qwen-turbo需确保已开通对应服务。小结仅需 80 行代码实现 AI 成语接龙流式输出 汉字清洗结果干净可控基于 AutoGen 框架后续扩展多角色/工具调用非常方便 进阶方向接入成语库校验合法性、支持同音模糊匹配、增加积分规则让玩法更专业。代码已验证可运行替换 API Key 即可上手。如有问题欢迎交流