逐字返回的内容如何做关键词屏蔽

2023-07-05 14:59:06 +08:00
 brader
用过 chatgpt 产品的都知道,返回内容都是那种打字机效果,逐字返回显示的。
那么问题来了,这种如何做关键词屏蔽呢?
好像服务端做比较困难,因为关键词有多个字的,如果服务端等整句话检测完再返回内容给前端的话,体验就太糟糕了。
我目前能想到的兼顾原有用户体验的方式是放在客户端来检测屏蔽关键字,客户端每次接收到服务端的返回的字,就拼接之前接收到的内容,检测关键字,检测到了,就把展示的内容屏蔽替换。这样就还是有打字机的实时效果。

不知道各位有没有更好的实现想法,欢迎讨论
8798 次点击
所在节点    程序员
101 条回复
zhaidoudou123
2023-07-05 20:15:57 +08:00
要不提前和 gpt 说一声,让他不返回你列表里的关键词?虽然有点多就是了…
kekxv
2023-07-05 20:26:40 +08:00
很简单啊,先求出你关键字最大长度,然后等 gpt 返回内容,超过这个数字的时候,把最前面的返回,比如最长是 5 位的关键字,你在收到大于等于五个关键字之前,都不会把数据返回给客户端,超过之后,做检测,没问题,然后把最前面的返回,剩下最后的四个,等下一个数据,如果结束了,就直接返回最后四个🤔
IDAEngine
2023-07-05 20:49:06 +08:00
从 prompt 检测不就好了,问一些稀奇古怪的 prompt 直接 nop 掉。chatgpt 也是检测 prompt ,prompt 不符合规则不做处理。
Nicified
2023-07-05 21:19:11 +08:00
在 API 出结果到发出前增加一段滑动窗口
Greatshu
2023-07-05 22:28:21 +08:00
审查 prompt ,但不要尝试修改 prompt ,比如要求 gpt 不要返回某些信息等,用户很容易发现。可以规定累计触发 n 次关键词后暂停使用一段时间/要求实人认证/封停账号等。
teenight
2023-07-05 22:32:15 +08:00
让用户自己举报
raycool
2023-07-05 22:43:42 +08:00
AC 状态机。
iv2ex
2023-07-05 23:52:19 +08:00
要不参考腾讯会议的语音识别?

腾讯会议从效果上是这样的:语音识别是实时的,但是会有二次修正;

比如:
主持人实时语音:锄禾日当午
语音识别实时效果:滁河日当午
然后过 1 、2 秒,会变成:锄禾日当午
chesha1
2023-07-06 00:56:10 +08:00
@brader 如果你的担心是这个场景下的,可以把关键词库做细一点

假设总体内容内容是字符串 1,2,3,4...组成的

如果当前字符串 1 中的内容,作为前缀没有匹配到任何东西,就直接发送字符串 1 ,然后对于后面的同样操作

如果当前字符串 1 中的内容,匹配到可能作为敏感词的前缀的内容,就截留字符串 1 ,把字符串 1 和 2 整体再做一次检测,如果没有问题,就发送字符串 1 ,对于字符串 2 进行是否包含前缀的检测
bybyte
2023-07-06 08:14:35 +08:00
AC 自动机
Promtheus
2023-07-06 08:33:49 +08:00
果然技术在某些国度都会被应用在奇怪的地方
zhongjun96
2023-07-06 08:47:39 +08:00
@brader #4 但是人可以引导 chatgpt 以藏头诗形式返回一些答案。
loooooong2023
2023-07-06 08:53:13 +08:00
限制输入端的内容就好了,AI 本身自己是有风控管理的,只要输入的提示词没有敏感信息,输出的内容没必要做二次脱敏。
thetbw
2023-07-06 09:24:21 +08:00
先按照上面说的检测,句子完成后整段检测,不合格再把前端数据删除?
Eyon
2023-07-06 10:15:06 +08:00
我们最近也在做这个,其实你可以将每次输出的字拼接起来,然后做检测的。缺点就是检测的频率非常高,因为每输出一个 delta 就要检测一次。

![图片]( https://avatar.xuliehao.info/RBTUVQXE.png)
lefer
2023-07-06 10:26:43 +08:00
@JiangZeYi #7 说真的,我都不知道什么回答是符合 xx 国情的。
mrleft
2023-07-06 10:28:49 +08:00
各位何故💩上雕花
lefer
2023-07-06 10:29:55 +08:00
@sampeng #56 如果做的是套壳产品,就不搞笑了。
lisxour
2023-07-06 10:53:36 +08:00
@brader #10 分段是折中较完美的方案了,只要是正常的敏感词,10 个字以内,几乎可以说是 99.99%可靠度,且不应该会有感官上可察觉的影响。

1. 接收流式数据
2. 内容分段(假设缓冲区 20 个字)
3. 等待缓冲区填满
4. 判断缓冲区是否存在完整的敏感词,有则替换,没有则判断缓冲区结尾是否是以敏感词开头的内容(如果有,下一段可能会组成敏感词)
5.1 缓冲区已全部替换完毕,且结尾不以敏感词开头,直接输出返回
5.2 结尾以敏感词开头,直接输出(缓冲区长度 - 敏感词开头字数)个字,敏感词开头的结尾内容则放进缓冲区再次等待填满并循环

这种方案在一开始需要等待缓冲区填满,比正常可能会慢个 0.2~0.5s 左右,后续内容正常不会有感官上的区别。
kylinC
2023-07-06 11:18:36 +08:00
折中,利用标点符号(逗号句号)去匹配一段话,检测/替换后返回客户端

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/954296

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX