美文网首页
将Pokémon添加到您的人工智能助手

将Pokémon添加到您的人工智能助手

作者: BlueSocks | 来源:发表于2022-09-22 10:20 被阅读0次

    在本文中,我们将为我们的 AI 助手添加一个 Pokedex。

    配置

    首先,启用 ClientMatch 命令:

    启用并单击右上角的保存更改。这个域将使我们能够创建我们的命令。我们需要自定义命令,因为 Houndify 没有对 Pokedex 的内置支持。

    创建自定义命令

    单击边栏中的自定义命令,然后单击新建页面。将新页面命名为简单的“Pokemon”。

    接下来,您需要创建一个新命令,该命令将触发客户端打开 Pokedex。像这样填写详细信息。

    该表达式显示触发命令所需的查询。结果 JSON 包含我们运行命令时发送到客户端的数据。

    我们将响应留空,因为我们将根据神奇宝贝的统计数据创建它。

    切换到对话框的配置选项卡。点击Imperative Phrase。现在用户可以在命令末尾添加诸如“please”之类的内容。

    单击Save and Test。如果您正确配置了所有内容,您应该会看到所有测试都通过了。

    处理客户端匹配命令

    创建一个新的处理程序文件,命名它ClientMatchCommand.ts

    使用以下代码完成文件:

    import handlePokedexCommand, {
        updatePokemonKeys,
    } from "./ClientMatch/handlePokemonCommand";
    
    export default async function handle(result: any) {
        switch (result.Result.action) {
            case "pokedex":
                await updatePokemonKeys();
                return handlePokedexCommand(result);
        }
    }
    
    

    我们从结果 JSON 中检查是否需要 Pokedex。然后我们调用updatePokemonKeys以获取来自我们的 Pokedex 响应的对象键。稍后再谈。

    并且不要忘记在handlers数组中包含我们的新处理程序。

    const COMMANDS = [
        "MusicCommand",
        "MusicPlayerCommand",
        "SoundHoundNowCommand",
        "ClientMatchCommand",
    ];
    
    

    读取pokemon数据

    为了从 Pokemon API 获取数据,我们将从名为pokenode-ts.

    npm i pokenode-ts
    
    

    ClientMatch在目录中命名的文件夹中创建一个新文件handlers。命名文件handlePokemonCommand.ts

    导入库并在文件顶部初始化一个新对象,如下所示:

    import { PokemonClient } from "pokenode-ts";
    
    const pokedex = new PokemonClient();
    
    

    现在我们需要定义一个函数来格式化 Pokedex 数据,以供客户端使用。这些字段包括一些基本属性以及额外的统计信息。

    const parsePokemonData = (data: {
        [key: string]: any;
    }): { [key: string]: any } => {
        let stats: { [key: string]: number } = {};
        let statData;
    
        for (let i = 0; i < data.stats.length; i++) {
            statData = data.stats[i];
            stats[statData.stat.name.replace("-", " ")] = statData.base_stat;
        }
    
        return {
            name: data.name,
            id: data.id,
            height: data.height * 10 + "cm",
            weight: data.weight / 10 + "kg",
            moves: data.moves.map((move: any) => move.move.name).join(", "),
            types: data.types.map((type: any) => type.type.name).join(", "),
            abilities: data.abilities.map((ability: any) => ability.ability.name),
            ...stats,
        };
    };
    
    

    处理 Pokedex 命令

    现在我们需要为这个文件定义默认导出。首先,它提示用户输入口袋妖怪的名称和所需的属性。然后它会获取该信息并更改客户端的响应。

    将以下代码添加到文件中:

    export default async function handlePokedexCommand(result: any) {
        try {
            let name = window.prompt("Enter pokemon name");
            let stat = window.prompt("Enter stat");
    
            if (!name) {
                throw new Error("Invalid name");
            }
    
            if (!stat) {
                throw new Error("Invalid stat");
            }
    
            name = name.toLowerCase();
            stat = stat.toLowerCase();
    
            const pokemonData = await pokedex.getPokemonByName(name);
            const data = parsePokemonData(pokemonData);
            const statValue = data[stat];
    
            const response = `${name}'s ${stat} is ${statValue}`;
    
            return { ...result, SpokenResponseLong: response };
        } catch (error: any) {
            let response = "Unable to access pokemon data";
    
            if (error.response?.status === 404) {
                response = "Pokemon not found";
            }
    
            return { ...result, SpokenResponseLong: response };
        }
    }
    
    

    我们还需要定义我们的pokemonKeys数组。它包含结果类型的键parsePokemonData

    在文件顶部插入以下内容:

    let pokemonKeys: string[];
    
    export const updatePokemonKeys = async () => {
        if (pokemonKeys) return pokemonKeys;
    
        const firstPokemonData = await pokedex.getPokemonById(1);
        const data = parsePokemonData(firstPokemonData);
        pokemonKeys = Object.keys(data);
        return pokemonKeys;
    };
    
    

    这将使用示例 pokemon 数据 (id 1) 缓存键的值。

    结论

    本文的源代码发布在这里。如果您觉得这很有用,请务必与他人分享。

    相关文章

      网友评论

          本文标题:将Pokémon添加到您的人工智能助手

          本文链接:https://www.haomeiwen.com/subject/todwortx.html