人机交互,如何让NPC对于玩家说的话能有合理的反馈

首先排除 自然语言分析,成本过高,太过复杂就先不讨论了
我先抛砖引玉,说一下我的思路。
NPC按理说应该有很详细的性格说明,但是太过复杂,不容易实现,我们可以提取一下人的特点,
比如 男人 可以暂时提取3个特点:
1号NPC.成熟稳重。一般这样的人,做事心细,有一定的能力,
2号NPC.外强中干。这样的人喜欢逞强,能力一般,
3号NPC.喜欢吹牛,这样的人说的话,大多语言夸大,能力一般。

当玩家和以上3人打招呼的时候,说 你好,一般情况下正常的回复,都是会回 你好

如果玩家 打了1号NPC ,踩在他身上,说 你好,这样的NPC 这时候 返回 要杀要剐悉听尊便,别扯那些没用的。这样的返回 还是正常的

如果玩家打了 2号 NPC 说 你好 这时候 返回 你看我好吗?这样的返回的话也正常。

如果打了 3号 NPC 说 你好 这时候返回 你有种放开我,我让谁谁谁 怎么着你 ,等等。

综上所述 ,NPC要回答看起来正常的语言,首先要判断当前NPC的状态,根据当前状态返回的语言一般情况下还算合理

if(){}
else if(){}
...
4赞

ren.py

switch (key) {

            case value:

               

                break;

       

            default:

                break;

        }

拉姐牛逼!

写if else , switch都比较low

来个配置表写法
// 这种语言一般策划配表,目测你是独立人,那就自己干

// content 说话内容

// sex  性别

// character 性格特点

// status 状态

// 。。。还可以加

// 性别定义

let SEX_ID = {

    MAN : 0,

    GIRL : 1

}

// 性格定义

let CHARACTOR_ID = {

}

// 状态定义

let STATUS_ID = {

}

// 这个语言可以用excel生成一个json,这样更方便管理
let messages = [

    {content:"hello",sex:[0,1],character:[0,1],status:[0,1]},

    {content:"lalala",sex:[0,1],character:[0],status:[0,1]},

    {content:"fuck",sex:[0,1],character:[1],status:[1]},

]

// 获取某一角色在某状态下的一句话
function getMessage(sex:number,character:number,status:number){

    let messagesList:any = [];

    for (let index = 0; index < messages.length; index++) {

        const messagesInfo:any = messages[index];

        if (messagesInfo.sex.indexOf(sex) > -1 && messagesInfo.character.indexOf(character) > -1 && messagesInfo.status.indexOf(status) > -1){

            messagesList.push(messagesInfo);

        }

    }

    if (messagesList.length > 0){

        // 这里随机一下,自然一点

        let index = Math.floor(Math.random()*messagesList.length);

        return messagesList[index].content;

    }

    return ""

}

console.log(getMessage(0,0,0));

其实最重要的是把自然语言 分解成 计算机能理解的单位,让NPC可以和玩家自由交流。
打个比方 你好吗? 这是个问候语句 类型 为 1,
我没有地图呀 ,这是回答的语句, 类型 为回答问题 ,关键字 为 没有带地图。
这样的话计算机是可以理解的,量到一定程度,是完全可以和NPC无障碍交流的 但是方法太过笨重。

非常感谢您提供的方法

直接用聊天ai吧

感觉还是属于ai范畴 用行为树啊

我们能接触到的聊天AI,不一定能达到理想状态,而且,太过复杂,成本也高。而且就算真把聊天AI用在游戏里面,也属于杀鸡用牛刀,不如就事论事来的更好。

语言分析 应该不属于行为吧 ,而且行为树方法固定且单一,打不到和NPC聊天聊出感情的状态,一条语句,不会只有一个返回,根据不同人,不同性格,不同身份,不同性别,在不同时间,都应该有不同的返回,这是理想状态

GOAP很适合处理这种情况
不过算法实作上比较复杂, 可以找现成的库

知乎: 目标导向的AI系统(Goal Oriented Action Planning)技术分享
https://zhuanlan.zhihu.com/p/138003795

goap也就看着简单,实现起来,比行为树有难度的。

感谢您提供的思路

仔细思考了一下,感觉行为AI无法用到 自然语言上,
行为AI 结果很明确,前天条件也很明确,可以正常运行。
但是语言 结果很明确,但是前天条件不明确。

比如 有以下对话
NPC:感谢少侠的帮助,大恩大德来日再报
玩家:举手之劳,不用放在心上
玩家:你们为什么会和这么强大妖兽战斗
NPC:因为家里面有重病的人 需要妖兽的魔核治病,还希望少侠能将这个妖兽的魔核让给我们
玩家:这件事情很难办,我也需要这个妖兽的魔核
NPC:(考虑到打不过玩家,自己家里有病重的病人,少女不得不出此下策):说
如果少侠愿意将魔核让给我们救人,小女子愿意做牛做马报答少侠的恩情。

这个 做牛做马 结果很明确,条件很模糊。
什么条件下才能得到这个结果,比如 大恩的时候,或者没有条件可选择的时候。
大恩 或者是没有选择 都是模糊条件,你不能清晰的说 我救了你们一命,这算大恩就得出这样的结果,
即便 大恩或者没有选择,根据NPC性格,和客观因素也很难得出这样的结果。

所以 感觉 行为AI不适合 自然语言,虽然都是条件获得结果,但先天条件有本质的不同。