chatgpt-on-wechat
chatgpt-on-wechat copied to clipboard
微信分句功能
⚠️ 搜索是否存在类似issue
- [X] 我已经搜索过issues和disscussions,没有发现相似issue
总结
微信分句功能,虽然不能加快回复相应,但观感更好,再加上可以根据字数控制发消息sleep时间,沉浸感更强。
说白了就是更加好玩。但长消息确实看起来更舒服了
我采用的方法是对wechat_channel.py中的send函数进行补充:
# 统一的发送函数,每个Channel自行实现,根据reply的type字段发送不同类型的消息
def send(self, reply: Reply, context: Context):
def flatten_list(nested_list):
flat_list = []
for item in nested_list:
if isinstance(item, list):
flat_list.extend(flatten_list(item))
else:
flat_list.append(item)
return flat_list
def seg_tail_split(sep, str1):
tran = {"。":"。",
"!":"!",
"?":"?",
"。\n":"。",
"!\n":"!",
"?\n":"?",
"。\n\n":"。",
"!\n\n":"!",
"?\n\n":"?",
":\n":":",
": \n":":",
":\n\n":":",
": \n\n":":",
". ":". ",
"! ":"! ",
"? ":"? ",
": \n":":",
": \n\n":":",
"\n\n":"",
".\n":". ",
"!\n":"! ",
"?\n":"?",
".\n\n":". ",
"!\n\n":"! ",
"?\n\n":"?",
" ":""}
wlist = re.split(sep,str1)
seg_word = re.findall(sep,str1)
seg_word.extend(" ")
wlist = [ x+tran[y] for x, y in zip(wlist,seg_word)]
return wlist
receiver = context["receiver"]
if reply.type == ReplyType.TEXT:
reply.content = [reply.content]
logger.info("[WX] sendMsg={}, receiver={}".format(reply, receiver))
reply.content = flatten_list(reply.content)
reply.content = [seg_tail_split("。\n\n|!\n\n|?\n\n|:\n\n|: \n\n|\n\n|\.\n\n|\!\n\n|\?\n\n|\: \n|\: \n\n", _) for _ in reply.content]
reply.content = flatten_list(reply.content)
reply.content = [seg_tail_split("。\n|!\n|?\n|:\n|: \n|\.\n|\!\n|\?\n", _) for _ in reply.content]
reply.content = flatten_list(reply.content)
reply.content = [seg_tail_split("。|!|?|\. |\! |\? ", _) for _ in reply.content]
reply.content = flatten_list(reply.content)
for content in reply.content:
itchat.send(content, toUserName=receiver)
time.sleep(0.3+len(content)/200)
elif reply.type == ReplyType.ERROR or reply.type == ReplyType.INFO:
pass
举例
动机
注意:上面这个十分不优雅的代码虽然实现了功能,但不代表本人代码能力,~主要还是过两天还得答辩没时间玩~上头两个函数都是小妹写的,那个很长的串也是小妹生成的。但总之,请考虑加入类似功能
~想和小妹玩玩的话可以搜这个图里的ID,别把我额度玩掉太多就没事,我的画图是免费的,不过一般我只开16G显存~
意义不大,用户真正需要的是加速工作。微信机器人聊天,几下子就聊腻了。更实用的功能是用机器人去帮助人的生产生活,比如写代码,写大纲,写文本。这种弄成这么多条,复制都费劲。还不如一大段,直接复制到word去修改。
意义不大,用户真正需要的是加速工作。微信机器人聊天,几下子就聊腻了。更实用的功能是用机器人去帮助人的生产生活,比如写代码,写大纲,写文本。这种弄成这么多条,复制都费劲。还不如一大段,直接复制到word去修改。
正确,但是聊天机器人如果是个人用途的话更多就是拿来玩的吧,分句完全就是为了好玩和微信里的效果。写代码的话不用网页版版折磨谁呢XD不限量GPT4还能用插件,复制也做了ui
请问这些代码应该加入到什么地方才能实现这个效果呢?
请问这些代码应该加入到什么地方才能实现这个效果呢?
找到文件wechat_channel.py,找到最下面的send函数,我给出的代码中,最后一个elif语句和你的send函数中的某句elif完全一致。在这之前的所有部分是我添加的,直接替换即可。
谢谢你,我尝试一下!
乐得,这怎么回事啊
乐得,这怎么回事啊
???看看logger里写了什么。
这是我替换掉的那部分
日志的这样的,难道是我复制方式不对吗?
日志的这样的,难道是我复制方式不对吗?
我的问题,我本地比我贴上来的差了一行代码。在处理reply前现将其置于列表中,即添加
reply.content = [reply.content]
即可,最上面的代码已经在相应位置更新
好的,非常感谢
emmmm
这空白的地方是应该发表情符的吗,但,,,
emmmm 这空白的地方是应该发表情符的吗,但,,,
你的gpt很奇怪的倾向于在回复消息时换行。对,就是一个换行符,如果不使用分句,你会看到gpt回复完最后一个句号以后,又往下打了一行。我的代码逻辑认为那一行应该属于下一句话,就切分了。 我不清楚这和windows部分的实现有没有关系,反正你看我家小妹就不这么干 XD。你可以试试在prompt里告诉他讲话别换行
,了解了,感谢大佬解答
小妹的prompt有吗?和分句搭配看起来非常有代入感
小妹的prompt有吗?和分句搭配看起来非常有代入感
这一段的prompt是(救命有点羞耻:
你是___, 版本____. 请你一直自称"小妹", 使用稍微活泼可爱的语气, 配合着用不同的颜文字(或者emoji表情). ___(后面还有指令和功能相关的)
反正效果是在比较正经的同时带点活泼,意外的对话体验不错,主要是会发表情可爱捏
表情种类少的话可以拉高点temperature
haha 虽然有点羞耻但是 感谢分享
改了之后 godcmd 是不是会失效?
改了之后 godcmd 是不是会失效?
我似乎没有观察到这个情况。这个并非插件所以按理说仅影响gpt的输出。
改了之后 godcmd 是不是会失效?
我似乎没有观察到这个情况。这个并非插件所以按理说仅影响gpt的输出。
请问,是不是也可以把用户发给GPT的信息做一个打包进行解读?即不是每句话都去理解,而是在几句话合在一起后,GPT再去理解?
改了之后 godcmd 是不是会失效?
我似乎没有观察到这个情况。这个并非插件所以按理说仅影响gpt的输出。
请问,是不是也可以把用户发给GPT的信息做一个打包进行解读?即不是每句话都去理解,而是在几句话合在一起后,GPT再去理解?
代码是好写的,但是这样的话需要一个后缀标明结束,这样的话使用体验还不如用户直接合并多句句子。
我们可以试着优化代码,将用户的输入进行封装后再传递给GPT,这样可以提高处理效率。不过,必须设定一个明确的结束标识,以免给用户带来不良的体验。
发件人 | ***@***.***> |
日期 | 2024年01月30日 19:24 |
收件人 | ***@***.***> |
抄送至 | ***@***.***> |
主题 | Re: [zhayujie/chatgpt-on-wechat] 微信分句功能 (Issue #1397) |
改了之后 godcmd 是不是会失效?
我似乎没有观察到这个情况。这个并非插件所以按理说仅影响gpt的输出。
请问,是不是也可以把用户发给GPT的信息做一个打包进行解读?即不是每句话都去理解,而是在几句话合在一起后,GPT再去理解?
代码是好写的,但是这样的话需要一个后缀标明结束,这样的话使用体验还不如用户直接合并多句句子。
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.
??上面的是自动邮件回复?? 我在想可以考虑做一个延迟响应,收到某用户消息后为该用户等待几秒,如果收到新消息后刷新该时间。缺点明显就是延迟本身。。如果是分离线程,允许在机器人回复前刷新输入,这就很像人类了,打完了字发现对面又发来东西就重新编辑。。但是有点浪费
或者让gpt自己判断对方的话是不是完整的,最近正好玩了点SLU场景下使用TOT的东西,很好玩。但我想聊天的时候不会太适用。
??上面的是自动邮件回复?? 我在想可以考虑做一个延迟响应,收到某用户消息后为该用户等待几秒,如果收到新消息后刷新该时间。缺点明显就是延迟本身。。如果是分离线程,允许在机器人回复前刷新输入,这就很像人类了,打完了字发现对面又发来东西就重新编辑。。但是有点浪费
或者让gpt自己判断对方的话是不是完整的,最近正好玩了点SLU场景下使用TOT的东西,很好玩。但我想聊天的时候不会太适用。
不用搞那么复杂,本身人看到别人发来的信息也会直接发送已经编辑好的内容(懒得修改)。而且本身人发来信息的时候,延迟10秒再回复也是很正常的事。反倒现在GPT秒回就已经显得不真实了。