用微软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 即可上手。如有问题,欢迎交流~

相关推荐
一招定胜负2 小时前
LlamaFactory使用教程
人工智能·lora·模型微调·llamafactory
亚马逊云开发者2 小时前
Amazon Nova Act 浏览器自动化测试实战:AI 驱动的端到端测试 + pytest 集成 + OpenClaw 场景落地
人工智能·pytest
TG_yunshuguoji2 小时前
阿里云代理商:如何用阿里云AppFlow 为飞书机器人配置定时任务?
人工智能·阿里云·机器人·云计算·飞书
OPHKVPS2 小时前
ShadowPrompt漏洞:Claude Chrome扩展遭零点击提示注入攻击
网络·人工智能·安全
卷福同学2 小时前
Claude Code源码泄露:8大隐藏功能曝光
人工智能·后端·算法
2601_955363152 小时前
技术迭代下B端拓客:号码核验的行业进化与价值回归,氪迹科技法人股东号码筛选系统,阶梯式价格
大数据·人工智能
机器人零零壹9 小时前
专访越擎科技创始人: 外骨骼的设计与仿真该如何入门
人工智能·具身智能·机器人仿真·离线编程·irobotcam·人形机器人设计
Cha0DD10 小时前
【由浅入深探究langchain】第二十集-SQL Agent+Human-in-the-loop
人工智能·python·ai·langchain
Cha0DD10 小时前
【由浅入深探究langchain】第十九集-官方的SQL Agent示例
人工智能·python·ai·langchain