用微软AutoGen+ 通义千问实现 AI 成语接龙

基于 AutoGen 框架对接阿里云通义千问,让 AI 自动玩成语接龙。代码简洁、开箱即用,适合 .NET 开发者快速集成大模型能力。


前置准备

  1. 访问阿里云百炼平台:https://bailian.aliyun.com

  2. 创建应用获取 API Key

  3. 确认 Endpoint:https://dashscope.aliyuncs.com/compatible-mode/v1

  4. 确保账户有可用额度

💡 通义千问兼容 OpenAI 协议,只需更换 Endpoint 即可复用 AutoGen 的 OpenAI 客户端。


项目配置

安装必要依赖:

复制代码
dotnet add package AutoGen
dotnet add package AutoGen.OpenAI

项目文件 IdiomChain.csproj

复制代码
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
    <PackageReference Include="AutoGen" Version="0.2.1" />
    <PackageReference Include="AutoGen.OpenAI" Version="0.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+ 必须调用,否则消息类型无法转换
TextMessage + TextMessageUpdate AutoGen 标准消息类型,用于流式交互
Clean() 清洗函数 过滤模型输出的多余字符,确保只提取成语
✅ 流式响应 GenerateStreamingReplyAsync 实时输出,体验更流畅

运行效果

复制代码
成语接龙开始:一马当先

接字:先
先人后己
✅ 先人后己
接字:己
己所不欲
✅ 己所不欲
接字:欲
欲罢不能
✅ 欲罢不能
接字:能
能工巧匠
✅ 能工巧匠
...

效果截图


常见问题

Q:报错 Message type not supported

A:忘记调用 .RegisterMessageConnector(),这是 AutoGen 0.2+ 的必需步骤。

Q:模型返回带解释的文本?

A:系统提示中强调"只输出成语",并用 Clean() 函数二次过滤。

Q:如何换模型?

A:修改 model 变量即可,如 "qwen-plus""qwen-turbo",需确保已开通对应服务。


小结

  • 仅需 80 行代码,实现 AI 成语接龙

  • 流式输出 + 汉字清洗,结果干净可控

  • 基于 AutoGen 框架,后续扩展多角色/工具调用非常方便

🔧 进阶方向:接入成语库校验合法性、支持同音模糊匹配、增加积分规则,让玩法更专业。

代码已验证可运行,替换 API Key 即可上手。如有问题,欢迎交流~

相关推荐
ajassi200016 小时前
AI语音智能体开发日记(十一)为智能设备“声”临其境——详解音频资源自动化生成流程
人工智能·ai·ai编程
2601_9494999416 小时前
400G组网低功耗优选!芯瑞科技400G VR4 QSFP112光模块赋能智算中心高速互联
大数据·人工智能·科技
GoAI16 小时前
# AI Agent 记忆框架横向对比报告总结
人工智能·大模型·llm·多模态
李昊哲小课17 小时前
fastapi sse websocket 奶茶店实时订单看板
人工智能·python·websocket·网络协议·fastapi·sse
万邦科技Lafite17 小时前
天猫商品评论API:评价内容中的用户情感倾向分析
人工智能·api·电商开放平台·淘宝开放平台·api开放接口
遇码17 小时前
认识 LakeMind:一款本地优先的开源 AI 数据探索工作台
人工智能·开源
格林威17 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
三江番长 陀舍古帝18 小时前
AI 相关概念之(基础层级):AI、ANI、AGI、ASI
人工智能·agi
加速财经18 小时前
PocketBay探索AI应用部署新方式
人工智能
IT_陈寒18 小时前
Redis缓存击穿把我坑惨了,原来这样设过期时间才靠谱
前端·人工智能·后端