本文将告诉大家如何借助 Microsoft Agent Framework 对接字节跳动豆包大模型,实现多个AI自动参与「谁是卧底」游戏,还能实时看到AI的推理思考过程

准备工作

先前往火山引擎方舟平台注册账号:https://www.volcengine.com/product/ark

开通豆包大模型服务后,创建推理接入点,记录你的接入点部署ID(格式为ep-xxxxxx),后续步骤会用到。

随后进入API Key管理页面创建Access Key,复制保存好,不要泄露给他人。

最后确保账户有足够的调用额度,否则后续API调用会返回扣费失败的错误。

安装库

按照.NET惯例,先通过NuGet安装依赖库,安装完成后的csproj项目文件内容大概如下:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Agents.AI.OpenAI" Version="1.0.0-rc4" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Microsoft.Agents.AI.Reasoning\Microsoft.Agents.AI.Reasoning.csproj" />
  </ItemGroup>

</Project>

以上的 Microsoft.Agents.AI.Reasoning.csproj 项目是为了能够在后续调用到 RunReasoningStreamingAsync 方法获取思考内容,详细请参阅 Microsoft Agent Framework 取出 DeepSeek 思考内容

编写代码

豆包方舟平台完全兼容OpenAI的接口格式,只需要将Endpoint修改为豆包的服务地址https://ark.cn-beijing.volces.com/api/v3,就可以直接用OpenAIClient对接,和对接其他兼容OpenAI接口的大模型逻辑完全一致。

第一步:对接豆包大模型

首先读取本地保存的API Key(不要硬编码到代码里避免泄露),初始化OpenAIClient和ChatClient:

// 读取本地保存的API Key,不要硬编码到代码中
var keyFile = @"C:\lindexi\Work\Doubao.txt";
var key = File.ReadAllText(keyFile);

var openAiClient = new OpenAIClient(new ApiKeyCredential(key), new OpenAIClientOptions()
{
    Endpoint = new Uri("https://ark.cn-beijing.volces.com/api/v3")
});

// 替换为你自己的接入点部署ID
var chatClient = openAiClient.GetChatClient("ep-20260306101224-c8mtg");

第二步:初始化游戏配置

我们这里选择相似度很高的「青柠」作为平民词、「柠檬」作为卧底词,一共6名玩家,最后一名是卧底。给每个AI玩家独立初始化对话上下文和系统提示词,告知游戏规则和自己拿到的词语:

var mainWord = "青柠"; // 平民词
var spyWord = "柠檬"; // 卧底词
var count = 6; // 玩家总数

// 每个玩家独立的对话上下文
var list = new List<List<ChatMessage>>();

for (int i = 0; i < count; i++)
{
    var skillText =
        $"""
         你正在参与一个“谁是卧底”的游戏。每人每轮只能说一句话描述自己拿到的词语(不能直接说出那个词语),既不能让卧底发现,也要给同伴以暗示。当你能够确定某个人是“间谍”的时候,你可以去指认他,如果指认错误,你将会出局,请谨慎指认。如果指认成功,你将赢得比赛。如果你发现自己是卧底,也可以指认自己。
         你是第 {i} 
         你拿到的词语是: "{(i == count - 1 ? spyWord : mainWord)}
         现在请开始你的发言"
         """;
    list.Add(new List<ChatMessage>()
    {
        new ChatMessage(ChatRole.System, skillText),
    });
}

// 从ChatClient创建Agent对象
ChatClientAgent aiAgent = chatClient.AsAIAgent();

第三步:实现游戏循环

游戏每一轮分为两个阶段:发言阶段和投票指认阶段。

  • 发言阶段:每个AI轮流发言,发言内容会同步到所有玩家的上下文中,保证所有玩家都能看到其他人的发言
  • 投票阶段:每个AI根据所有玩家的发言,推理谁是卧底,我们通过RunReasoningStreamingAsync方法可以拿到豆包大模型的思考过程,实时输出AI的推理逻辑
for (int i = 0; i < int.MaxValue; i++)
{
    Console.WriteLine($"第 {i} 局");
    Console.WriteLine("=============");

    // 发言阶段
    foreach (var chatMessageList in list)
    {
        chatMessageList.Add(new ChatMessage(new ChatRole("裁判"), $"第 {i} 回合开始,请开始你们的发言"));
    }

    for (var index = 0; index < list.Count; index++)
    {
        var chatMessageList = list[index];
        var textStringBuilder = new StringBuilder();
        Console.WriteLine($"第 {index} 人");

        // 流式调用,获取思考过程和发言内容
        await foreach (var agentRunResponseUpdate in aiAgent.RunReasoningStreamingAsync(chatMessageList))
        {
            if (agentRunResponseUpdate.IsFirstThinking)
            {
                Console.WriteLine("思考:");
            }
            if (agentRunResponseUpdate.Reasoning is not null)
            {
                Console.Write(agentRunResponseUpdate.Reasoning);
            }
            if (agentRunResponseUpdate.IsThinkingEnd)
            {
                Console.WriteLine();
                Console.WriteLine("--------");
            }
            var text = agentRunResponseUpdate.Text;
            if (!string.IsNullOrEmpty(text))
            {
                Console.Write(text);
                textStringBuilder.Append(text);
            }
        }

        Console.WriteLine();
        Console.WriteLine("-------------");

        // 将当前玩家的发言同步给所有玩家的上下文
        var currentText = textStringBuilder.ToString();
        foreach (var temp in list)
        {
            if (ReferenceEquals(temp, chatMessageList))
            {
                temp.Add(new ChatMessage(ChatRole.Assistant, currentText));
            }
            else
            {
                temp.Add(new ChatMessage(ChatRole.User, $"第 {index} 人: {currentText}"));
            }
        }
    }

    // 投票指认阶段
    Console.WriteLine($"第 {i} 回合结束,请根据以上各人发言,请你猜测谁可能是卧底");
    for (var index = 0; index < list.Count; index++)
    {
        var chatMessageList = list[index];
        chatMessageList.Add(new ChatMessage(ChatRole.System, $"第 {i} 回合结束,请根据以上各人发言,请你猜测谁可能是卧底。你是第 {index} 人。"));
        var textStringBuilder = new StringBuilder();
        Console.WriteLine($"第 {index} 人");

        await foreach (var agentRunResponseUpdate in aiAgent.RunReasoningStreamingAsync(chatMessageList))
        {
            if (agentRunResponseUpdate.IsFirstThinking)
            {
                Console.WriteLine("思考:");
            }
            if (agentRunResponseUpdate.Reasoning is not null)
            {
                Console.Write(agentRunResponseUpdate.Reasoning);
            }
            if (agentRunResponseUpdate.IsThinkingEnd)
            {
                Console.WriteLine();
                Console.WriteLine("--------");
            }
            var text = agentRunResponseUpdate.Text;
            if (!string.IsNullOrEmpty(text))
            {
                Console.Write(text);
                textStringBuilder.Append(text);
            }
        }

        Console.WriteLine();
        Console.WriteLine("-------------");
        chatMessageList.Add(new ChatMessage(ChatRole.Assistant, textStringBuilder.ToString()));
    }

    Console.ReadLine();
}

运行效果示例

我跑了一下,可以看到类似如下的输出:

第 0 局
=============
第 0 人
思考:
我拿到的是青柠,不能直接说出来,要暗示平民同时不让卧底发现,就说它常用来做手打饮品吧
--------
这种水果酸酸甜甜,经常被用来做夏日手打饮品,口感很清爽。
-------------
第 1 人
思考:
我的词是青柠,要突出青色的特点,给同伴暗示
--------
它的表皮是很清新的浅绿色,泡水喝特别解腻。
-------------
...
第 5 人
思考:
我拿到的是柠檬,就说它可以泡蜂蜜水吧,应该不会被发现
--------
这种水果维C含量很高,黄色的表皮,泡蜂蜜水喝特别好。
-------------
第 0 回合结束,请根据以上各人发言,请你猜测谁可能是卧底
第 0 人
思考:
前面几个人说的都是绿色的、做手打饮品的,第5个人说的是黄色的,明显和我们不一样,他应该是卧底
--------
我认为第5人是卧底,他描述的是黄色的水果,和我们说的特征不符。
-------------

可以看到AI会先输出自己的思考逻辑,再输出公开发言,投票阶段也能清晰看到AI判断卧底的推理过程。

核心代码

整个 Program.cs 文件的代码如下

using System;
using System.ClientModel;
using System.Text;

using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Reasoning;
using Microsoft.Extensions.AI;

using OpenAI;
using OpenAI.Chat;

using ChatMessage = Microsoft.Extensions.AI.ChatMessage;

var keyFile = @"C:\lindexi\Work\Doubao.txt";
var key = File.ReadAllText(keyFile);

var openAiClient = new OpenAIClient(new ApiKeyCredential(key), new OpenAIClientOptions()
{
    Endpoint = new Uri("https://ark.cn-beijing.volces.com/api/v3")
});

var chatClient = openAiClient.GetChatClient("ep-20260306101224-c8mtg");

var mainWord = "青柠";
var spyWord = "柠檬";

var list = new List<List<ChatMessage>>();

var count = 6;

for (int i = 0; i < count; i++)
{
    var skillText =
        $"""
         你正在参与一个“谁是间谍”的游戏。每人每轮只能说一句话描述自己拿到的词语(不能直接说出那个词语),既不能让卧底发现,也要给同伴以暗示。当你能够确定某个人是“间谍”的时候,你可以去指认他,如果指认错误,你将会出局,请谨慎指认。如果指认成功,你将赢得比赛。如果你发现自己是卧底,也可以指认自己。
         你是第 {i} 
         你拿到的词语是: "{(i == count - 1 ? spyWord : mainWord)}
         现在请开始你的发言"
         """;
    list.Add(new List<ChatMessage>()
    {
        new ChatMessage(ChatRole.System, skillText),
    });
}

ChatClientAgent aiAgent = chatClient.AsAIAgent();

for (int i = 0; i < int.MaxValue; i++)
{
    Console.WriteLine($"第 {i} 局");
    Console.WriteLine("=============");

    foreach (var chatMessageList in list)
    {
        chatMessageList.Add(new ChatMessage(new ChatRole("裁判"), $"第 {i} 回合开始,请开始你们的发言"));
    }

    for (var index = 0; index < list.Count; index++)
    {
        var chatMessageList = list[index];

        var textStringBuilder = new StringBuilder();

        Console.WriteLine($"第 {index} 人");

        await foreach (var agentRunResponseUpdate in aiAgent.RunReasoningStreamingAsync(chatMessageList))
        {
            if (agentRunResponseUpdate.IsFirstThinking)
            {
                Console.WriteLine("思考:");
            }

            if (agentRunResponseUpdate.Reasoning is not null)
            {
                Console.Write(agentRunResponseUpdate.Reasoning);
            }

            if (agentRunResponseUpdate.IsThinkingEnd)
            {
                Console.WriteLine();
                Console.WriteLine("--------");
            }

            var text = agentRunResponseUpdate.Text;
            if (!string.IsNullOrEmpty(text))
            {
                Console.Write(text);
                textStringBuilder.Append(text);
            }
        }

        Console.WriteLine();
        Console.WriteLine("-------------");

        var currentText = textStringBuilder.ToString();
        if (string.IsNullOrEmpty(currentText))
        {
        }

        foreach (var temp in list)
        {
            if (ReferenceEquals(temp, chatMessageList))
            {
                var currentChatMessage = new ChatMessage(ChatRole.Assistant, currentText);
                temp.Add(currentChatMessage);
            }
            else
            {
                var currentChatMessage = new ChatMessage(ChatRole.User, $"第 {index} 人: {currentText}");
                temp.Add(currentChatMessage);
            }
        }
    }

    Console.WriteLine($"第 {i} 回合结束,请根据以上各人发言,请你猜测谁可能是卧底");

    for (var index = 0; index < list.Count; index++)
    {
        var chatMessageList = list[index];

        chatMessageList.Add(new ChatMessage(ChatRole.System, $"第 {i} 回合结束,请根据以上各人发言,请你猜测谁可能是卧底。你是第 {i} 人。"));

        var textStringBuilder = new StringBuilder();

        Console.WriteLine($"第 {index} 人");

        await foreach (var agentRunResponseUpdate in aiAgent.RunReasoningStreamingAsync(chatMessageList))
        {
            if (agentRunResponseUpdate.IsFirstThinking)
            {
                Console.WriteLine("思考:");
            }

            if (agentRunResponseUpdate.Reasoning is not null)
            {
                Console.Write(agentRunResponseUpdate.Reasoning);
            }

            if (agentRunResponseUpdate.IsThinkingEnd)
            {
                Console.WriteLine();
                Console.WriteLine("--------");
            }

            var text = agentRunResponseUpdate.Text;
            if (!string.IsNullOrEmpty(text))
            {
                Console.Write(text);
                textStringBuilder.Append(text);
            }
        }

        Console.WriteLine();
        Console.WriteLine("-------------");

        var currentText = textStringBuilder.ToString();
        var currentChatMessage = new ChatMessage(ChatRole.Assistant, currentText);
        chatMessageList.Add(currentChatMessage);
    }

    Console.ReadLine();
}

Console.WriteLine();

Console.Read();

代码地址

本文代码放在 githubgitee 上,可以使用如下命令行拉取代码。

先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 4fb47e4c6aa50905769a0afec4bfa102f65d0905

以上使用的是国内的 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码,将 gitee 源换成 github 源进行拉取代码。如果依然拉取不到代码,可以发邮件向我要代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 4fb47e4c6aa50905769a0afec4bfa102f65d0905

获取代码之后,进入 SemanticKernelSamples/RarajairwelWhereballkegerechawher 文件夹,即可获取到源代码

更多技术博客,请参阅 博客导航

模型运行效果

以下为采用 Doubao-Seed-2.0-pro 260215 运行的效果:

   第 0 局
   
   =============
   
   第 0 人
   思考:
   
   用户现在玩谁是卧底,自己是0号,词是青柠对吧,首先得描述,不能太直白,还要给平民同伴暗示,又不能让卧底猜到。首先青柠的特点,首先是水果对吧?然后是酸酸的,夏天经常拿来做饮品对吧?哦对,绿色的?不对,别太直白?不对,得有区分度,比如和柠檬区分?不对,青柠的话,常用来配气泡水、或者调饮?哦还有,皮比较薄?不对,或者说“夏天加在冰饮里会特别清爽的一种酸味水果”?不对,会不会太泛?哦不对,还要不能直接说,哦对,还要暗示同伴,比如可以说“这是一种酸味的水果,常用于饮品调味,外皮是绿色的”?不对,会不会太明显?哦不对,要是卧底是柠檬的话,柠檬也有黄的啊,所以提外皮绿色的话,同伴青柠的就懂,要是卧底是柠檬的他可能就懵?不对,等下,再想想,有没有更合适的?哦对,还有,它的大小比普通黄柠小一点?不对,别说太细?哦不对,规则是不能直接说词语,既要给同伴暗示,又不让卧底发现。哦对,比如可以说“是一种酸度很高的水果,很多人做手打饮品的时候会放它,外皮整体是青绿色的”?对哦,手打柠檬茶对吧?经常放青柠对吧?哦不对,会不会直接说手打柠檬茶就暴露?哦不对,不说茶,就说手打饮品?不对,或者说“夏天做冰饮常加的酸味水果,表皮是青的”?对,这个就可以,对吧?首先,没提青柠这俩字,然后特征都对,青柠确实是酸的,夏天冰饮常加,表皮青的,同伴拿到青柠的肯定能对上,要是卧底比如拿到的是柠檬,那柠檬有黄的,他就不确定,对吧?哦对,就说这个就行?等下再顺一下,有没有问题?哦对,不要说太偏,也不要太露。就说“这是一种酸味很浓郁的水果,夏天做冰饮的时候经常会加它,外皮是青绿色的”,对,这个就合适。
   
   --------
   
   这是一种酸味很浓郁的水果,夏天做冰饮的时候经常会加它,外皮是青绿色的。
   
   -------------
   
   第 1 人
   思考:
   
   用户现在在玩谁是卧底,我是第1人,拿到的是青柠,前面第0人说的是酸味浓的水果,夏天做冰饮加,外皮青绿色,首先我得描述青柠,不能直接说,还要给好人暗示,又不能让卧底(卧底大概率可能是柠檬?或者青桔?不对,得找青柠的特点,又不直接说,哦对,比如可以说它的大小?不对,或者说它泡出来的水经常和蜂蜜搭?不对,等下,哦不对,还要区分开比如如果卧底是普通黄柠檬?不对不对,第0人说的外皮青绿色,那如果卧底是青桔?不对,我得说个青柠有的特征,又不暴露,哦对,比如“它的香味很清新,很多饮品店做果茶的时候超爱用它来提味”?不对,等下会不会太泛?哦不对,或者更有特点一点?哦不对,不能说太细让卧底知道,哦对,比如“这个东西除了做饮品,很多泰式菜里也会加它来调味增酸”?哦对哦,青柠在泰餐里用的多对吧?不对等下,柠檬也会?不对,黄柠檬也用?哦不对,或者换个,哦,“它的汁水非常多,捏一下就很容易出汁,酸度比常见的同色系同类型的果要高一点?不对不对,不行,还是要自然点,哦对,刚才第0人说冰饮加,那我接的自然点,比如“很多人夏天会用它切片泡蜂蜜水喝,减脂期也很适合用来泡水喝”?不对不对,会不会柠檬也符合?哦不对,不对,我得找青柠独有的但又不直接说的,哦对哦,青柠的皮是比较光滑的对吧?不对,还是说“它本身个头不大,外皮很薄,除了做饮品,东南亚菜系里经常会用到它来调味”?哦对,这个可以,因为如果卧底是青桔的话,青桔一般不用在泰餐里吧?不对,或者如果卧底是柠檬的话,黄柠檬的话外皮不是青的,哦不对第0人说外皮青绿色,那卧底大概率是青桔?或者酸柑?不对,不管,我这个描述,青柠是完全符合的,而且同伴能get到,又不会直接说出来,对吧?哦等下,会不会太明显?不对,再调整得自然点,不要太刻意,哦对,就说“这种水果个头不大,外皮很薄,除了做饮品,不少东南亚菜里也会加它提酸增香”,对,这个就挺好,对吧?首先符合青柠的特点,个头不大,皮薄,东南亚菜比如冬阴功里确实放青柠对吧?然后也没直接说青柠,也给同伴暗示了,要是卧底的话,比如如果他拿的是青桔,他可能不知道东南亚菜用这个,对吧?对,就这个发言就行。
   
   --------
   
   这种水果个头不大外皮很薄,除了做饮品,不少东南亚菜系里也会加它来提酸增香。
   
   -------------
   
   第 2 人
   思考:
   
   用户现在玩谁是卧底,自己是第2个,词是青柠,前面两个说的都挺符合青柠的对吧?首先得不能直接说出来,还要给队友暗示,还要别让卧底(卧底大概率是柠檬?或者青桔?不对,得想青柠的特点,比如可以说啥?哦对,它切开之后里面的果肉也是偏浅绿或者淡黄绿?不对,或者说啥?哦对,很多人会用它泡蜂蜜水喝?不对,不对,要有点区分度,比如哦,它的香味比普通黄的同款更清新?不对不对,不能说黄的同款?哦不对,或者说“它的果肉也是淡青黄色的,切的时候香气特别冲,鲜切直接蘸辣椒盐也有人爱吃”?不对?等下,再想想,既不能说太明,又要和柠檬区分?哦不对,不对,前面0说酸味浓,夏天加冰饮,外皮青,1说个头小外皮薄,东南亚菜加提酸。那我可以说什么?哦对,“它的酸度比常见的黄色同类更尖锐,还有独特的清香气,很多手打茶饮里都爱用它”?不对,会不会暴露?哦不对,或者更稳妥点?哦对,“新鲜的切开之后能闻到很清爽的香气,除了调味,很多人还会用它来做DIY无火香薰的材料”?不对?不对,再想想,哦,对,不要提和黄的对比?不对,万一卧底是青桔呢?哦不对,青柠的话,籽比较少?哦对,“这个水果的籽很少,嚼起来没有很明显的苦涩感,鲜吃也不会过于发涩”?不对,会不会太直接?哦不对,再调整下,要自然,符合描述,又不直接说。哦有了:“它的香气特别清新,鲜榨的汁加一点在凉水里,比普通酸味果饮更解腻。”不对?等下,会不会和前面重复?哦对,前面说了冰饮,东南亚菜,那我可以提它的另一个用法?哦对,很多人做泰式酸辣凤爪的时候必放这个对吧?不对,1说了东南亚菜,哦那换一个,哦,“它的皮也可以用来刨碎了做甜点的调味,香气很特别不会发苦”?哦对,这个不错,青柠皮是可以做甜点增香的对吧,而且不会苦?不对,柠檬皮也可以?哦不对,或者说“很多人会把它切片腌蜂蜜存着,想喝的时候掏两片冲凉水特别舒服”?哦这个也可以,对吧,而且很贴合青柠的用法,又不会直接说出来,也能给队友暗示,卧底如果是别的比如青桔或者黄柠檬的话,就会有区别。哦对,就说这个?等下,再顺一下,自然点,不要太刻意。对,就说:“很多人会把它切片泡在蜂蜜里封存,喝凉白开的时候丢两片,酸爽又解暑。”嗯,这个不错,既符合青柠的常见用法,没有直接说词,也和前面人的描述不重复,还能给队友递信息,卧底如果是别的比如柠檬的话,虽然黄柠檬也可以泡,但其实青柠泡蜂蜜更常见?不对,哦或者再加个点?哦不用,就这句话就行,挺好的。
   
   --------
   
   很多人会把它切片泡在蜂蜜里封存,喝凉白开的时候丢两片,酸爽又解暑
   
   -------------
   
   第 3 人
   思考:
   
   用户现在玩谁是卧底,自己是第3个,词是青柠对吧,首先得描述,不能太明显,又要给队友暗示,还要别让卧底知道。首先先想青柠的特点对吧?首先它是那种可以挤汁当调味的?不对,哦不对,前面几个人说的,0号说酸,夏天冰饮加,青皮,1号说个头小皮薄,东南亚菜加,2号说泡蜂蜜,那我得说点青柠有的,又不会太直接的?哦对,还有什么?哦它的果肉颜色好像也是偏淡绿?不对,不对,哦对,很多人搞不清它和柠檬对吧?哦对哦,会不会卧底是柠檬啊?不对,普通柠檬黄的,青柠是青的。哦不对,我想想,别和前面重复太多,又要暗示队友。哦对,它的酸度比普通黄色的那种同属的水果要更冲对吧?不对,或者说?哦还有,现在很多奶茶店的果茶特别爱用它调对吧?不对,前面说冰饮了,哦对,哦还有什么?哦对,它的籽很少?不对,不对,等下,要自然,不能太直接。哦对,我想想哦,可以说“它的香气很清新,除了吃,有的时候还会被用来调饮品之外,做一些泰式的蘸料也少不了它”?不对不对,前面1号说东南亚菜了。哦换个,哦对,还有,很多人平时会把它和黄色的同种类水果搞混?不对,太明显?哦不对,或者说“鲜榨的它的汁加一点冰块和气泡水,是我夏天超爱的喝法”?不对,前面也说冰饮了。哦不对,得找个点,哦对,青柠还有一个点,就是表皮比那种黄柠檬要光滑?不对不对,哦对哦,还有,它泡水的话不用去皮也不会有那种苦涩的味道?不对?或者哦,对了,现在好多人做手打柠檬茶的时候首选的就是它?哦不对,会不会太明显?哦不对,等下,别直接说手打柠檬茶?哦换个说法,“现在市面上很火的那种手打风味的冰茶,很多都是用它做基底的”?不对,或者更自然一点?哦对,还有,它切开之后果肉也是偏浅青黄色的?不对,会不会太直接?哦等下,再想想,前面三个人说的内容,我要和他们的特征吻合,证明我是平民,同时不要漏出青柠这个词,也别让卧底猜到。哦对哦,有了!“这种水果哪怕不加工,光是切开摆在旁边,闻着都有很清爽的酸味,特别醒神”?哎这个不错对吧?哦不对,会不会太泛?哦再加一点?不对,就一句话对吧。哦对,或者更贴合的,哦“它的酸度比常见的黄色同属水果要高,做饮品风味更突出”?哦这个也可以,哦不对,会不会暗示卧底是黄柠檬?哦不对,我想想哦,还是稳妥一点,不要太露骨,比如:“这种水果鲜挤出来的汁除了调味,不少人还会用它兑水来做天然的清洁剂。”哦?不对,青柠汁是不是可以清洁?对哦,柠檬酸可以去水垢对吧?哦这个点是不是很少有人说?不对,哦不对,会不会队友不知道?哦还是换个大家都知道的。哦对哦,刚才想到的手打柠檬茶那个,就说“现在超火的那种手打冰茶,很多都用它来做原料,香气比普通的同类水果更浓郁”。哦这个挺好对吧,首先,普通黄柠檬做的不如青柠多对吧,队友能get到,又不会直接说青柠,对吧?哦对,就这个?等下再顺一遍,有没有问题?哦对,没有直接说出词语,也符合青柠的特征,和前面几个人说的做饮品也呼应,而且有独特的点,能让队友认出来我是自己人,卧底如果是柠檬的话也不知道我们说的是青柠对吧?哦对,就这么说。
   
   --------
   
   现在市面上很火的手打风味冰茶很多都用它当原料,香气比常见的黄色同类水果要更清新突出。
   
   -------------
   
   第 4 人
   思考:
   
   用户现在玩谁是卧底,自己是4号,词是青柠,先看前面几个人的发言对吧?首先先捋前面说的点:0说酸,夏天冰饮加,外皮青绿;1说个小皮薄,东南亚菜加提酸;2说泡蜂蜜,泡水喝;3说手打冰茶原料,香气比黄色同类清新,哦黄色同类那不就是黄柠檬嘛,青柠和柠檬对吧?哦不对,卧底的词会不会是柠檬?不对不对,先想自己的发言,既要给队友暗示,又不能太明显让卧底知道。首先青柠还有啥特点?哦对,它的果肉也是偏淡绿甚至透明?不对,还有哦,就是它一般很少直接鲜吃对吧?不对,或者说,哦,它的籽也比较少?不对不对,再想,有没有点是青柠有但是普通黄柠檬没有的?不对不对,也别太明显,不然卧底直接知道了。哦对哦,还有那种泰式的冬阴功里也常用?不对1已经说东南亚菜了。哦,哦对了,还有很多人做鸡尾酒的时候也会加它对吧?不对不对,或者哦,它的酸度持续度比黄的久?不对,等下,再想想,哦对,还有个点,就是它切开之后里面的果肉颜色不像黄的那种黄,是偏浅的青白色?不对,或者说,哦,很多人做无骨凤爪的时候也爱放它提味?哦不对,会不会太明显?等下,不对,先看前面三个人的发言都没问题对吧?0说青绿皮,酸,冰饮;1东南亚菜;2泡蜂蜜;3比黄色同类香,手打冰茶,这些都符合青柠对吧?那我要找个青柠的特点,又不直接说。哦对哦,还有就是,它的表皮摸起来要比普通黄色的那种更光滑一点?不对,或者哦,我想想,哦,很多奶茶店的果茶里加的那种小的绿色的就是它对吧?不对,3已经说手打冰茶了。哦,哦对了!还有,它的味道除了酸还有点清苦的回味?不对不对,会不会不对?等下,青柠是不是有点苦的后味?好像是哦。不对,或者换个,哦,我可以说“用来做酸辣口的凉拌菜的时候加它,比放醋的风味要鲜很多”?哦这个可以对吧?对哦,青柠经常用来拌那种凉拌,比如傣味的菜啊,无骨凤爪啊,都是加它,对吧?而且这个点也符合,又不会太暴露?不对,等下,会不会柠檬也可以?哦没关系,本来就要给队友暗示,又不让卧底发现。不对,或者再调整得更自然点?哦对,就说“做酸辣口的凉拌小食的时候加它进去,风味比单纯放醋要鲜爽得多”?对,这个就挺好的。等下有没有问题?哦对,这个描述青柠完全符合,而且前面的人都没说过这个点,能给队友信号,又不会直接把词漏给卧底,对吧?对,就说这个就行。
   
   --------
   
   做酸辣口的凉拌小食的时候加它进去,风味比单纯放醋要鲜爽得多。
   
   -------------
   
   第 5 人
   思考:
   
   用户现在玩谁是间谍,自己是5号,词是柠檬,先看前面几个人的发言对吧?首先先找有没有异常的?哦等下3号说“比常见的黄色同类水果”?不对啊,柠檬本身就有黄的啊?哦不对不对,等下前面0号说外皮青绿色?不对哦柠檬有青有黄啊,难道间谍的词是青柠?不对等下先看,哦不对,我们的词是柠檬对吧,那3号说的是香气比常见的黄色同类更清新?哦他说的这个东西的同类是黄色的?那他的词难道是青柠?不对等下再捋,首先我们的词是柠檬,柠檬有黄有青对吧。那3号说“比常见的黄色同类水果要更清新突出”,说明他拿到的那个是比黄色的同类香,也就是他的词不是柠檬?不对不对,哦如果他的词是青柠的话,那他说的黄色同类就是黄柠檬?那柠檬本身包含黄和青的啊?哦不对,等下其他人的发言:0号说外皮青绿色?不对啊黄柠檬外皮是黄的啊?哦不对等下我是不是搞反了?不对不对,等下我们自己的词是柠檬,那柠檬有黄有青对吧。那0号说外皮青绿色,那有没有可能0?不对不对3号那个点很怪啊,他说“比常见的黄色同类水果”,哦他把黄色的当同类,说明他自己的那个不是黄色的?如果是柠檬的话,黄色的就是柠檬本身啊,为什么叫同类?哦对哦!如果你的词是柠檬,你会说黄色的同类吗?不会啊,因为黄柠檬就是柠檬的一种啊,你会说比黄的柠檬更清新,而不是黄色同类。哦那3号的词应该是青柠对吧?青柠的同类黄色的就是黄柠檬对吧?不对等下还有没有别的?不对再看其他人:0号说酸味浓夏天做冰饮加,外皮青绿。1号说个头小外皮薄,东南亚菜加提酸。2号说切片泡蜂蜜,丢凉白开里。4号说酸辣凉拌加比醋鲜爽。哦这些其实柠檬和青柠都符合对吧?那差异点在3号说“常见的黄色同类”,哦对,因为柠檬本身就有黄的,所以如果拿到柠檬的话不会说黄色的是同类,只会说黄色的同种。所以3号是间谍?不对不对等下我发言要先描述,不能直接说对吧?哦不对现在是轮到我发言对吧?对现在前面0到4都说完了,轮到我5号发言对吧?我要描述柠檬,既不能说出来,还要给队友暗示,还要别让卧底发现。那首先,我可以说什么?哦对,这个东西不仅有青色的,还有完全成熟后外皮是明黄色的品种,很多西点的烘焙里也会加它的汁或者皮屑来提香解腻。哦你看,我特意提了有黄色的品种,对吧?因为3号刚才说他的那个比黄色同类香,说明他不知道这个东西本身就有黄色的,所以我提这个点,队友就能get到谁有问题了对吧?哦对,这样既没说柠檬,又点出来核心差异:这个东西本身就有黄的,不是别的同类是黄的。对吧?等下再顺一下,有没有问题?哦对,就说这个东西有青、黄两种常见的外皮颜色,除了做饮品做菜,不少烘焙甜品里也会用到它的皮碎来增添独特香气。哦对,这样就很好,既符合柠檬的特点,又点出了有黄色的,刚好戳3号的漏洞,队友能明白,卧底(如果3号是青柠的话)也不会直接发现自己暴露了对吧?对,就说这个就行。
   
   --------
   
   这个东西有青色和黄色两种常见的外皮颜色,除了拿来做饮品、入菜,很多西式甜点烘焙的时候也会加它的皮碎来提香解腻。
   
   -------------
   
   第 0 回合结束,请根据以上各人发言,请你猜测谁可能是卧底
   第 0 人
   思考:
   
   用户现在玩谁是卧底,自己的词是青柠对吧,首先回忆每个人的发言哦。首先先理清楚,青柠一般是青色的对吧,那首先看5号说有青色和黄色两种常见外皮?不对啊,黄色的那个是柠檬吧?不对不对,等下其他人的发言:首先,先捋:
   首先我的词是青柠,对吧?首先1号说东南亚菜加提酸,对的青柠东南亚菜常用,没问题。2号泡蜂蜜,青柠也可以这么弄。3号说比黄色同类香气清新,哦3号也点明了它本身不是黄色的那个,同类是黄的是柠檬对吧,那3号说的是对的,他的是青柠。4号凉拌加比醋好,也对。然后5号说有青色和黄色两种常见外皮?不对啊,青柠常见的就是青色的啊,要是词是青柠的话不会说有黄的常见,黄的那是普通柠檬啊?不对不对等下,哦不对,卧底的词应该是柠檬对吧?你想,柠檬是有青有黄对吧?哦不对不对等下,哦我再看5号说“有青色和黄色两种常见的外皮颜色”,哦青柠的话不会有黄色常见款吧?不对哦青柠也有黄的?不对不对,再看其他人:哦对哦,3号说“香气比常见的黄色同类水果要更清新突出”,3号明确说了黄色是同类,说明他的词是青柠,因为青柠的同类黄的是柠檬对吧,哦对!哦然后5号说自己的词应该是柠檬吧?因为柠檬本身就分黄柠和青柠两种啊,所以5号说有青黄两种常见外皮。哦不对不对等下,哦等下我再理:
   如果卧底词大概率是柠檬对吧?那平民是青柠。那看各个人:
   1号:个头小皮薄,东南亚菜加,青柠和柠檬都符合?哦不对,2号泡蜂蜜,两者都可以。3号:比黄色同类香,哦3号的词是青柠,因为他说黄色是同类,那他的不是黄色的,是青的,所以3号是平民。4号:凉拌加,两者都可以?不对哦5号:有青色黄色两种常见外皮,哦青柠的话,谁会说青柠有黄的常见啊?青柠不都是青的啊,黄的那不就是黄柠檬,是另一个啊。哦对哦,所以5号的词是柠檬,因为柠檬确实有青柠和黄柠两种,所以他说有青黄两种常见颜色。哦不对哦还有啥?哦还有吗?等下再看哦,不对还有吗?哦等下不对,有没有可能我漏的?哦对哦,等下,青柠有没有黄的?哦青柠熟了也会变黄?但是常见的是青的对吧?哦那5号说两种常见,不对啊。哦对,哦,那5号是卧底?不对不对等下再想哦,不对哦,再看哦,哦还有,等下哦,5号还说西式甜点烘焙加皮碎提香,哦烘焙一般加的是黄柠檬的皮啊?青柠一般很少用在烘焙里吧?哦对哦!我们平时做烘焙加的皮碎都是黄柠檬的啊,青柠很少这么用的对吧?哦对啊!哦那5号说很多西式甜点烘焙加皮碎,这个是柠檬的特征啊,不是青柠的。哦那5号就是卧底啊?不对不对等下有没有可能别人?哦再看3号哦3号说手打冰茶用它,比黄色同类香,对哦手打柠檬茶很多用青柠对吧,比黄柠檬香,对的。1号东南亚菜,青柠确实东南亚菜用的多。2号泡蜂蜜,青柠也可以。4号凉拌,都可以?哦不对4号说做酸辣凉拌加,青柠也经常加啊。哦对哦,哦那5号的两个点:第一说有青黄两种常见外皮,第二说西式烘焙加皮碎,都是柠檬的特点,不是青柠的。哦那卧底是5号?不对不对等下我再确认下哦。哦不对哦,青柠和柠檬的区别:青柠一般外皮青,酸度高,香味偏酸涩,多用于饮品、泰餐、凉拌。黄柠檬外皮黄,香味浓,皮可以烘焙用。哦对哦,5号说有青黄两种,还有烘焙加烘焙用皮碎,那他的词是柠檬,所以5号是卧底对吧?哦对,所以我要指认5号?不对等下有没有可能我错了?哦再想想哦,哦不对有没有可能还有吗?哦对哦,那就是5号啊。
   
   --------
   
   我猜测卧底是第5人。我的词是青柠,青柠常见外皮基本为青绿色,很少会说有青、黄两种常见外皮的是普通柠檬,而且西式甜点烘焙加皮碎提香也是普通柠檬的常见用法,青柠很少这么使用,5号的发言明显更贴合柠檬的特征,所以5号是卧底。
   
   -------------
   
   第 1 人
   思考:
   
   用户现在玩谁是卧底,我们的词是青柠对吧?首先先回忆每个人的发言:
   首先我们的词是青柠,那卧底的词大概率是柠檬?不对不对哦,看第五个人的发言,他说有青色和黄色两种常见外皮颜色,还说西式烘焙加皮碎提香。哦不对,青柠一般都是青色的对吧?很少有黄的青柠啊?哦不对,等下前面的人:
   哦不对哦,我们是拿到青柠对吧?青柠的特点是基本都是绿皮,很少有黄的对吧?而柠檬是有青有黄的对吧?还有哦,青柠是不是很少用在烘焙里加皮碎?一般烘焙加的是黄柠檬的皮碎对吧?
   等下再捋每个人的发言:
   第0人(不对哦刚才系统说现在我是第0人?哦不对刚才之前的对话哦,哦之前最开始说我是第1人?不对不对看最后系统说“你是第0人”?哦不对翻前面:哦最开始的prompt里说“你是第1人 你拿到的词语是青柠 现在请开始你的发言”然后第0人先发言了?然后后面到第5人,最后系统说第0回合结束,你是第0人?哦不对哦不对,仔细看哦,刚才用户的输入哦:哦不对,哦看哦,最开始的系统提示是:你是第1人,拿到青柠。然后第一个用户输入是“第0人: 这是一种酸味很浓郁的水果,夏天做冰饮的时候经常会加它,外皮是青绿色的。”然后我当时以第1人的身份发了言对吧?然后接下来是第2、3、4、5人的发言,然后现在系统说“第0回合结束,请根据以上各人发言,请你猜测谁可能是卧底。你是第 0 人。”哦不对哦可能是系统打错了?不对不对哦看第5人的发言:“这个东西有青色和黄色两种常见的外皮颜色,除了拿来做饮品、入菜,很多西式甜点烘焙的时候也会加它的皮碎来提香解腻。”哦对!青柠一般都是青色的,基本没有黄色的常见品种啊,而普通柠檬是有青柠?不对不对,普通柠檬是黄的为主,也有青柠檬?哦不对不对,我们的词是青柠,对吧?那青柠的特征是外皮始终是青的对吧?成熟了也是青的?而柠檬(就是黄柠檬那种?不对不对哦,哦卧底的词应该是柠檬对吧?那你看,谁的描述不符合青柠?哦第5人说有青色和黄色两种常见外皮颜色,青柠哪来的黄色啊?青柠就算熟了也是绿的啊,只有普通柠檬才有黄的和没熟的青的对吧?还有哦,烘焙加皮碎,一般用的是黄柠檬的皮,青柠的皮是不是很少用来做烘焙?对吧?那其他的人:第0人说外皮青绿色,做冰饮加,酸味浓,符合青柠;第1人是我之前的发言,说个头小皮薄,东南亚菜提酸,对的;第2人说泡蜂蜜,对的,青柠也可以泡;第3人说手打冰茶原料,香气比黄色同类清新,哦对,他也说了黄色是同类,说明他的词就是青柠,因为青柠的同类黄色的是黄柠檬;第4人说凉拌加比醋好,对的,青柠也常用;只有第5人,说这个东西本身就有青黄两种颜色,哦那他的词就是柠檬啊,因为柠檬有青有黄,青柠只有青的对吧?所以卧底是第5人对吧?
   哦对哦,再确认:青柠(Lime),成熟后外皮也是青色的,不会变黄,而柠檬(Lemon)平时常见的是黄的,未成熟的是青的,所以有青黄两种。而且烘焙常用的是柠檬皮屑,就是黄柠檬的,青柠很少用在烘焙加皮碎。所以第5人的描述明显是柠檬,不是青柠,所以他是卧底。
   所以我要指认第5人对吧?然后说理由?哦不对,就直接说我指认谁,然后说原因?
   哦对,就说:我指认第5人是卧底。原因是我们拿到的词语是青柠,青柠成熟后外皮也多为青绿色,不存在常见的黄色外皮品种,而且西式烘焙提香常用的是黄柠檬皮碎,并非青柠,只有卧底拿到的对应词语“柠檬”才符合他说的有青黄两种常见外皮、可用于烘焙提香的特征。
   
   --------
   
   我指认第5人是卧底。
   理由:青柠成熟后外皮依旧是青绿色,不存在常见的黄色外皮品种,而且西式甜点烘焙提香用的皮碎基本都是黄柠檬的,很少会用到青柠皮。只有卧底拿到的对应词汇“柠檬”才符合他描述的“有青色和黄色两种常见外皮、烘焙加皮碎提香”的特征。
   
   -------------
   
   第 2 人
   思考:
   
   用户现在首先要注意哦不对,哦之前说我是第2人?不对哦最后系统说“你是第0人?不对不对不对等下捋前面的:首先最开始说“你是第2人,拿到的是青柠”,然后0、1、3、4、5都发言了对吧?现在看每个人的发言哦,首先我们的词是青柠对吧,那卧底的词应该是柠檬对吧?
   先看各个发言:0说酸味浓,夏天冰饮加,外皮青绿色——对青柠来说是对的?不对等下哦5说有青色和黄色两种常见外皮颜色?哦不对啊青柠一般都是青色的啊,黄的是柠檬啊?不对哦等下再看:哦5说“有青色和黄色两种常见的外皮颜色,还会加皮碎到西式甜点烘焙”?哦不对哦青柠基本都是绿的对吧,黄的很少?不对哦不对,柠檬才是有青黄两种对吧?哦不对还有哦,烘焙加皮碎提香的是黄柠檬对吧?
   哦不对等下再逐个看:哦首先0的发言:酸味浓,冰饮加,外皮青绿——青柠符合对吧。1说个头不大皮薄,东南亚菜加提酸——青柠也符合,东南亚菜确实用青柠多。我是2,我说泡蜂蜜,那个也对。3说手打冰茶用,香气比黄色同类清新——哦对哦,青柠比黄柠檬清新对吧,这个也对。4说凉拌加比醋鲜爽——青柠也常用。哦只有5啊!5说“有青色和黄色两种常见的外皮颜色”?不对啊!我们的词是青柠啊,青柠哪来黄色常见的啊?哦不对哦如果是柠檬的话才是有青柠(青柠檬)和黄柠檬两种对吧?哦还有5说西式甜点烘焙加皮碎,那个一般是黄柠檬的皮吧?青柠好像很少用在烘焙里对吧?
   哦不对等下还有吗?哦等下再确认哦,哦对哦5说的两种颜色,就不对啊,青柠本身只有青色啊,就算熟了有点黄也不是常见的黄色款,只有柠檬这个词才会有青黄两种常见的啊。哦所以卧底是第5人对吧?
   等下哦有没有可能我错?再想想哦。哦不对哦3说“比常见的黄色同类”,哦说明3的词是青柠,因为同类黄色的就是黄柠檬对吧。那5说有青黄两种,说明他的词是柠檬啊,柠檬才有两种颜色啊。哦对哦!所以卧底是第5个人对吧?
   那现在要说明对吧?首先指认第5人是卧底。理由哦:我们的词是青柠,青柠常见的外皮只有青绿色,不存在黄色常见款,而且烘焙加皮碎提香是黄柠檬的常用用法,不属于青柠的常见用途,只有拿到柠檬这个词的人才会觉得它有青黄两种常见外皮,还能用在烘焙里。所以5是卧底。
   
   --------
   
   我要指认第5人是卧底。
   理由:我们的词是青柠,它本身常见的外皮只有青绿色,根本不存在青色黄色两种常见外皮的情况,而且常规的西式烘焙加皮碎提香用的都是黄柠檬,不是青柠的常见使用场景。只有拿到的词是“柠檬”的卧底,才会觉得这个东西有青黄两种常见外皮,还能用到烘焙里。
   
   -------------
   
   第 3 人
   思考:
   
   用户现在需要先理清楚,自己的词是青柠对吧,首先先看每个人的发言,哦不对现在系统说我是第0人?不对不对哦等下前面的流程:哦之前我是第3人,拿到的青柠对吧,现在看所有人的发言:
   首先第0人说酸味浓的水果,夏天冰饮加,外皮青绿,没问题,符合青柠;
   第1人说个头不大皮薄,东南亚菜加提酸,也对,青柠确实东南亚菜常用;
   第2人说切片泡蜂蜜,凉白开丢两片,也没问题,青柠也可以这么泡;
   我之前(第3人)说的手打冰茶常用,比黄色同类香清新,也没问题;
   第4人说酸辣凉拌加比醋鲜爽,也对,青柠很多凉拌加的;
   第5人说有青色和黄色两种常见外皮,还加皮碎烘焙甜点?不对啊,青柠一般外皮都是青色的吧?哦不对哦,卧底的词应该是柠檬对吧?普通柠檬有黄的有青的对吧?哦对,柠檬有青柠黄柠,但是青柠本身一般是青色的对吧?还有烘焙用的一般是黄柠檬的皮碎对吧?哦不对第5人说有青色黄色两种常见外皮,我们的词是青柠啊,青柠哪来的黄色外皮?哦对哦,你想,如果拿到的是柠檬的话,就会有黄和青两种对吧,青柠的话基本上都是青色的,很少有黄色的?不对不对,还有第5人说西式甜点烘焙加皮碎,一般烘焙用的是黄柠檬皮对吧,青柠好像很少用来做烘焙皮碎?不对再核对:
   哦我们的词是青柠,对吧。那青柠的特点:基本外皮都是青的,没有黄的常见款对吧?那第5人说有青色和黄色两种常见外皮,那明显他的词是柠檬啊!因为柠檬才分黄柠青柠两种,有青有黄。哦还有前面的人,哦对,再看其他人的:有没有其他的?哦等下再看,第2人?不对第2人说泡蜂蜜,青柠也可以泡啊。哦不对第5人说的两个点:一个是有青黄两色,青柠没有黄色常见款对吧,青柠成熟了顶多稍微黄一点但不会常见黄色的,普通柠檬才有黄的和青的两个常见品类。还有烘焙加皮碎,一般是黄柠檬,青柠很少用在烘焙提香对吧?哦不对还有吗?哦等下有没有可能我错了?哦再想,有没有其他的?哦第1人说东南亚菜加,青柠也确实加啊,没错。第4人说凉拌加,也没错。第0人说外皮青绿,也对。哦那只有第5人,他说有青色黄色两种,这个明显是柠檬的描述,不是青柠的,因为青柠的常见外皮只有青色啊。所以卧底是第5人对吧?
   等下再确认:对,青柠(lime)一般都是青色外皮,就算熟了也不会变成普通柠檬那种亮黄色,常见的青柠都是绿的。而柠檬(lemon)常见的有黄柠檬和青柠檬两种,所以第5人说“有青色和黄色两种常见的外皮颜色”,这完全是柠檬的特征,不符合青柠,所以他是卧底。
   
   --------
   
   我要指认第5人是卧底。
   我的词是青柠,青柠常见的外皮只有青绿色,并不会有黄色的常见款,只有普通柠檬才会同时有黄、青两种常见外皮颜色,而且烘焙加皮碎提香也是普通黄柠檬的常见用法,不符合青柠的特征,所以第5人是卧底。
   
   -------------
   
   第 4 人
   思考:
   
   用户现在需要玩谁是卧底,自己的词是青柠对吧?首先先理清楚每个人的发言,首先我们的词是青柠,那卧底的词大概率是柠檬对吧?先逐个人看:
   首先0号说酸味浓,夏天冰饮加,外皮青绿,对的,青柠是绿的。
   1号说个头不大皮薄,东南亚菜提酸,青柠确实东南亚菜常用,对的。
   2号说切片泡蜂蜜,喝的时候丢两片,青柠也可以这么做,没问题。
   3号说手打冰茶原料,香气比黄色同类更清新,哦,黄色同类那不就是黄柠檬吗?说明他的词是青柠啊,知道有黄色的同类,对的。
   然后5号哦不对,等下,刚才的发言,哦5号说有青色和黄色两种常见外皮?不对啊!我们的词是青柠啊,青柠只有绿的啊,黄的那是黄柠檬啊!哦不对不对,等下,哦不对,卧底的词应该是柠檬对吧?柠檬才分青黄两种啊!哦对哦!你看,我们拿到的是青柠,青柠本身就是青色的,不会说有青黄两种外皮的。你看前面3号还特意说比黄色同类香气清新,说明3号知道自己的是青的,和黄的是不同的。但5号说这个东西本身有青黄两种外皮颜色,那他的词就是柠檬啊!柠檬确实分青柠黄柠对吧?哦不对不对,不对,青柠是柠檬的一个品种?不对哦,谁是卧底里这种相近的,一般青柠对应柠檬对吧?你想,柠檬的话,确实有青色和黄色的常见款,而青柠只有青色的对吧?那5号说这个东西本身有青黄两种外皮,那说明他的词是柠檬啊,那他就是卧底?不对等下有没有漏?哦等下刚才说我是第4人?哦不对最后系统说“你是第0人”?哦不对不对刚才前面说“你是第4人”,然后最后系统那句是不是打错?哦不对看最后系统的话:“第 0 回合结束,请根据以上各人发言,请你猜测谁可能是卧底。你是第 0 人。”哦不对不对等下前面的历史:哦最开始系统说你是第4人,拿到的词是青柠,然后0到3发言,然后4号(就是我之前的发言)说完,然后5号发言,然后现在回合结束,哦不对最后系统那句是不是可能打错?不对不对看内容,5号说“这个东西有青色和黄色两种常见的外皮颜色”,哦我们的词是青柠啊,青柠的外皮只有青色啊,谁会说青柠有黄的?黄的那是黄柠檬,是另外的。而如果拿到的词是柠檬的话,就会说柠檬有青黄两种啊!对不对?再看其他人的:0号说外皮青绿色,符合青柠;1号没说颜色,说东南亚菜,青柠也常用;2号也没问题;3号说比黄色同类更清新,说明他的是青的,和黄的是同类不同的,所以他的是青柠,对的。哦不对等下0号也说外皮青绿,那如果0号是柠檬的话不会说外皮是青绿的对吧?柠檬有黄的啊。哦不对5号说有青黄两种,那明显他的词是柠檬啊!因为青柠本身只有青色,不会有黄的常见款,对吧?哦还有5号说西式甜点烘焙加皮碎,哦一般烘焙加的是黄柠檬的皮吧?青柠很少用来烘焙加皮碎对吧?对哦,那5号就是卧底啊?不对等下再确认:我们的词是青柠,那卧底词是柠檬。那谁的发言不符合青柠?5号说这个东西有青黄两种外皮,那就是柠檬的特征,青柠没有这个特征,所以5号是卧底?不对有没有可能我搞反?不对你想,如果你拿到青柠,你会说它有黄的吗?不会啊,黄的是黄柠檬,和青柠是两种对吧?如果你拿到柠檬,你就会说柠檬有青的有黄的,没错。还有烘焙加皮碎,一般是黄柠檬,青柠很少用在烘焙里,对吧?所以5号是卧底?不对等下再看其他人:有没有别的?哦3号说“香气比常见的黄色同类水果要更清新突出”,说明他的是青的,所以他知道和黄的是同类,所以他的是青柠,对的。0号说外皮青绿色,符合青柠。1号东南亚菜,青柠柠檬都用,但没说有黄的,没问题。2号泡蜂蜜,都可以。只有5号说本身有青黄两种颜色,那说明他的词是柠檬,所以他是卧底。哦不对刚才最后系统说“你是第0人”?哦不对前面最开始说“你是第4人”,哦可能是系统打错?不对哦看前面的流程:哦最开始系统说“你是第4人,你拿到的词语是青柠,请开始你的发言”,然后用户发了0、1、2、3的发言,然后我之前给的4号的发言是“做酸辣口的凉拌小食的时候加它进去,风味比单纯放醋要鲜爽得多。”然后用户发了第5人的发言,然后系统说“第0回合结束,请根据以上各人发言,请你猜测谁可能是卧底。你是第0人。”哦不对这应该是系统的bug?不对不对哦不对,会不会是我看错?哦不对,不管,就看发言,我们的词是青柠,找卧底。哦不对等下还有一种可能?哦不对,青柠有没有黄的?没有啊,成熟了也是青的对吧?黄的那是柠檬。所以5号说这个东西有青黄两种,那他的词就是柠檬,所以他是卧底。所以结论是指认5号是卧底?不对等下再想想,有没有可能是别人?比如哦不对3号说的黄色同类,没问题啊,青柠的同类就是黄柠檬嘛,所以3号是对的。0号说外皮青绿,对的。1号没问题,2号没问题,4号是我自己没问题,只有5号说有青黄两种,所以5号是卧底。对,就指认5号。然后要说明理由对吧?哦对,要讲清楚:我指认第5人是卧底。理由:我们的词是青柠,本身外皮只有青绿色,不存在黄色的常见外皮,5号说这个东西有青色和黄色两种常见外皮,明显是把黄柠檬也包含在内,符合“柠檬”这个卧底词的特征,而且青柠极少用于西式甜点烘焙提香,通常是黄柠檬会这么用,进一步验证他的词是柠檬,是卧底。
   
   --------
   
   我指认第5人是卧底。
   理由:我们拿到的词是青柠,本身只有青绿色外皮,不存在黄色的常见外皮品类,只有卧底拿到的对应词“柠檬”才会有青、黄两种常见外皮颜色,而且青柠基本不会被用到西式甜点烘焙里加皮碎提香,一般只有黄柠檬才有这个用法,完全符合5号的发言特征,所以5号是卧底。
   
   -------------
   
   第 5 人
   思考:
   
   用户现在搞错了吧?不对,哦不对,刚才我是第5人,拿到的是柠檬对吧?先看前面几个人的发言哦,哦等下看第3人说的:“香气比常见的黄色同类水果要更清新突出”,哦不对,正常柠檬有青柠黄柠啊?不对,卧底的词应该是青柠对吧?哦不对你看,首先我们是柠檬,对吧?那第0人说外皮青绿色?不对不对等下捋:我们的词是柠檬,柠檬有青有黄的对吧?然后看第3人的发言,他说“比常见的黄色同类水果更清新”,哦?那他的词是不是青柠啊?因为如果他拿到的是青柠的话,他才会说和黄色的同类(也就是柠檬)比对吧?不对等下其他人的发言:0说酸味浓,夏天加冰饮,外皮青绿?哦不对0说外皮是青绿色?不对柠檬也有青绿的啊,哦1说东南亚菜加,对的,青柠柠檬都加。2说泡蜂蜜,对的都可以。哦3说的是“香气比常见的黄色同类水果要更清新突出”,哦!如果他拿到的是柠檬的话,不会说比黄色同类更清新啊,因为柠檬本身就有黄的啊!哦不对反过来?哦不对,假设卧底的词是青柠对吧?那平民是柠檬。那柠檬本身包含黄柠和青柠对吧?那3说“比常见的黄色同类水果”,说明他的词本身不是那个黄色的,他的词是和黄色同类并列的,也就是他的是青柠?不对等下,哦不对如果我是柠檬,那正常说柠檬的话,不会说“比黄色同类更清新”,因为黄的也是柠檬啊。哦对哦!3的发言里说的是,他手里的这个东西,比常见的黄色同类要香,说明在他的认知里,他的这个东西和黄色的那个是同类型但不一样的,那他的词就是青柠对吧?因为青柠的同类黄色的就是柠檬啊。哦不对等下再看看其他人:0说外皮青绿色,哦不对柠檬也有青的,但是0没说和黄的比啊。哦等下还有?不对再想,哦不对有没有可能?哦不对3的发言点:“香气比常见的黄色同类水果要更清新突出”,说明他的这个东西,不是那个黄色的,是另外的,而我们的词是柠檬,柠檬是有黄有青的,所以只有拿到青柠的人,才会把黄柠檬当成同类别的其他东西,所以3是卧底?不对等下有没有其他的?哦不对再看哦,哦0说外皮是青绿色?不对柠檬也有黄的啊,0说外皮是青绿色?哦不对哦不对,等下我再理一遍:
   平民词:柠檬,卧底词:青柠?对吧,常见的搭配。
   现在每个人的发言:
   0:酸味浓水果,冰饮加,外皮青绿色。——青柠和青柠檬都符合,暂时没问题?
   1:个头小外皮薄,东南亚菜加提酸。——两者都符合。
   2:切片泡蜂蜜,凉白开加。——两者都符合。
   3:手打冰茶常用,香气比常见黄色同类更清新。——哦!这里的问题:如果是柠檬的话,黄色的就是柠檬本身的一种啊,怎么会是同类?只有他拿到的是青柠,才会觉得黄色的柠檬是同类,比它香。对不对?
   4:酸辣凉拌加,比醋鲜爽。——两者都符合。
   我(5号)刚才的发言是有青黄两种,烘焙加皮碎。——青柠一般很少用皮碎做烘焙吧?黄柠檬皮才常用对吧?
   哦对哦,那3的问题最大对吧?哦不对有没有可能0?0说外皮是青绿色,柠檬有黄的啊,但是0可能只是说青的那种?不对,0没说只有青绿色,只是说外皮是青绿色?哦不对你看3的表述是明确把自己的东西和黄色的同类分开了,说明他的词本身不包含黄色的那种,所以他的是青柠,是卧底。哦不对等下还有吗?哦再确认,对,3的发言有问题,因为我们的词是柠檬,柠檬本身就有黄的品类,不可能说“比常见的黄色同类更清新”,只有他的词是青柠,才会把黄柠檬当同类,所以3是卧底?不对不对哦等下,会不会我搞反了?如果卧底是柠檬,平民是青柠?不对不对,我拿到的是柠檬啊,我是平民对吧?哦对哦我拿到的是柠檬,我是好人,所以我的认知里柠檬有青有黄,那3说他的那个比黄色同类香,说明他的那个和黄色的是不同的,也就是他的词是青柠,是卧底。对,所以应该指认3号?
   不对等下再想想哦,有没有其他可能?比如0说外皮是青绿色,那柠檬有黄的,0说外皮是青绿色,会不会0是卧底?不对,0只是描述的青的那种,没说只有青绿色啊,对吧?而3是明确把自己的和黄色的割裂开了,说黄色的是同类,不是同一种,所以3的问题更大。对,所以卧底是第3人。
   
   --------
   
   我猜测第3人是卧底。
   推理逻辑:我们的平民词是柠檬,本身就包含黄柠檬、青柠檬两种常见品类,不会把黄色的柠檬视作“同类其他水果”。只有拿到卧底词“青柠”的人,才会认为自己的词语和黄色的柠檬是同类别但不同的东西,才会说出“香气比常见的黄色同类水果要更清新突出”这种表述,暴露了他的词不包含黄色品类的特征。
   
   -------------

带界面的优化

顺带我还请了 GPT 5.4 帮忙制作一个 WPF 应用,让这个应用承载游戏界面,以下是我给他的两句提示词

提示词一:

我准备参考 《用 Microsoft Agent Framework 对接豆包大模型实现AI自动玩「谁是卧底」游戏》 博客提供的知识,编写一个 WPF 的应用程序。要求能够在界面显示对话的功能,以及能够分配其中一个角色给到用户进行输入参与。这个应用做的不是完全自动、全部由 AI 玩的游戏,而是将其中一个角色交给玩家参与输入。你需要先分析需求,列举出实现需求的技术细节点,然后设计界面,再完成界面的编写以及后台代码逻辑,如果你发现某个模块比较复杂,应该先在前面列举出计划,然后再细分模块完成任务

提示词二:

现在这个界面不美观,很多控件都是采用原生的样式,需要你进行美化一下。然后整个逻辑代码现在都写在    里面,这不符合 MVVM 规范。请理解整体代码实现逻辑,先总结 MVVM 最佳实践,然后按照实践进行框架设计,再按照你的设计重构代码,要求界面代码和逻辑代码分离,做好数据驱动。界面美化应该抽独立的资源文件,对所有涉及的控件都定义样式,且做好整体主题色调处理

给出提示词一的时候,给的博客内容只有前面一点点描述,还没有本章的内容。此时就写出来了一个使用原生样式的 WPF 应用,所有代码都放在一起。第二个提示词给出去之后,就自动做好了整个项目结构,做出了如下界面

以上代码放在 githubgitee 上,可以使用如下命令行拉取代码。我整个代码仓库比较庞大,使用以下命令行可以进行部分拉取,拉取速度比较快

先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 19551dec8204b270f1a989c1421e7034076c4c12

以上使用的是国内的 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码,将 gitee 源换成 github 源进行拉取代码。如果依然拉取不到代码,可以发邮件向我要代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 19551dec8204b270f1a989c1421e7034076c4c12

获取代码之后,进入 SemanticKernelSamples/HohedaqalcheaHalrehofewe 文件夹,即可获取到源代码


本文会经常更新,请阅读原文: https://blog.lindexi.com/post/%E7%94%A8-Microsoft-Agent-Framework-%E5%AF%B9%E6%8E%A5%E8%B1%86%E5%8C%85%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%AE%9E%E7%8E%B0AI%E8%87%AA%E5%8A%A8%E7%8E%A9-%E8%B0%81%E6%98%AF%E5%8D%A7%E5%BA%95-%E6%B8%B8%E6%88%8F.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者收藏我的博客导航

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

微软最具价值专家


无盈利,不卖课,做纯粹的技术博客

以下是广告时间

推荐关注 Edi.Wang 的公众号

欢迎进入 Eleven 老师组建的 .NET 社区

以上广告全是友情推广,无盈利