关键词的长度总是有限的吧,也不可能能太长,假设是 N 吧,后端做一个流式输出的桥接,里面存放 N 个字符的 buffer ,gpt 返回第 N+1 个字符以后,每接受一个字符就检查一遍关键词然后往前端输出一个字符,这样前端得到的结果也就比 gpt 晚 N 个字符
@brader #13 不一样,这个做法是有点像白名单机制,只有这个字/词一定没有在黑名单中出现时才会输出到客户端。 就是把收到的字,都认为在黑名单中,一直等明确这个字与后面接受的字不在黑名单后,才把这个字输出到客户端。 相当于你收到的每一个字,都假设后面还没有收到的字与他所组成的词就是敏感词,等收到了更多的字,发现确实没有的时候,就将这个字输出到客户端,然后继续匹配剩下缓冲区的字有没有与词库有重合。 还是我上面的例子:(括号内为未输出的缓冲区)后面的是本次接收到的字符,没有就说明没有接收() 锄:在词库中没有,安全输出 禾:命中词库:禾日苗,不输出 (禾)日:命中词库:禾日苗,不输出 (禾日)当:未命中词库,输出第一个字。 -- (日):命中词库:日当午,不输出。 (日当):命中词库:日当午,不输出。 (日当)午:全量匹配,替换,输出 ***