chunjiu 发表于 2023-2-24 16:02:19

用 ChatGPT 帮忙写代码本来是一件愉快的事情,结果 R 他先人!

本帖最后由 chunjiu 于 2023-2-24 16:11 编辑

本来在半小时内就能解决的事情,但因为网络不停的出现故障中断,折腾了一个下午才搞完,大家可以一起 R 他先人!

PS:

对前面问题的回答是残缺不全的,最后这个问题是综合前面回答来改的,尽量把自己的需求说清楚,不产生歧义。

ChatGPT 最终的回答可以满足需求了。

问:
用 python 代码解析一个 vmess协议字符串,并返回一个字典。这个字符串使用 “vmess://” 开头,剩下的是使用 base64 编码的 URL 内容。在对它解析完成后,第一步先检查解析出的必要元素是否完整,第二步对每一个解析出的元素值内容检查是否合法。如果在此过程中出现任何一个错误,就将检查结果从标准输出中打印出来,并返回 None。

答:
可以使用上述代码的基础上进行修改,将所有的错误信息都存储到一个列表中,并在遍历完所有元素后,判断错误列表是否为空,如果为空,则返回解析后的字典,否则将错误信息打印到标准输出,并返回 None。

以下是修改后的代码实现:

import base64
import json


def parse_vmess(vmess_str):
    # 检查协议是否合法
    if not vmess_str.startswith('vmess://'):
      print('Invalid vmess protocol.')
      return None

    # 对 URL 进行 base64 解码
    url_str = base64.urlsafe_b64decode(vmess_str).decode('utf-8')

    # 将 URL 字符串解析为字典
    try:
      vmess_dict = json.loads(url_str)
    except json.JSONDecodeError:
      print('Failed to decode vmess string.')
      return None

    # 检查必要元素是否存在
    required_keys = {'v', 'ps', 'add', 'port', 'id'}
    if not required_keys.issubset(vmess_dict.keys()):
      print('Missing required keys.')
      return None

    # 检查每一个元素的值是否正确
    errors = []
    if not isinstance(vmess_dict['v'], str):
      errors.append('v must be a string.')
    if not isinstance(vmess_dict['ps'], str):
      errors.append('ps must be a string.')
    if not isinstance(vmess_dict['add'], str):
      errors.append('add must be a string.')
    if not isinstance(vmess_dict['port'], int) or not (0 <= vmess_dict['port'] <= 65535):
      errors.append('port must be an integer between 0 and 65535.')
    if not isinstance(vmess_dict['id'], str):
      errors.append('id must be a string.')
    if 'aid' in vmess_dict and not isinstance(vmess_dict['aid'], int):
      errors.append('aid must be an integer.')
    if 'net' in vmess_dict and vmess_dict['net'] not in {'tcp', 'kcp', 'ws', 'http', 'quic'}:
      errors.append('net must be one of tcp, kcp, ws, http or quic.')
    if 'type' in vmess_dict and vmess_dict['type'] not in {'none', 'http', 'tls'}:
      errors.append('type must be one of none, http or tls.')
    if 'host' in vmess_dict and not isinstance(vmess_dict['host'], str):
      errors.append('host must be a string.')
    if 'path' in vmess_dict and not isinstance(vmess_dict['path'], str):
      errors.append('path must be a string.')
    if 'tls' in vmess_dict and not isinstance(vmess_dict['tls'], str):
      errors.append('tls must be a string.')

    if errors:
      print('Invalid vmess parameters:\n{}'.format('\n'.join(errors)))
      return None

    return vmess_dict

gzhuli 发表于 2023-2-24 17:14:25

看你的问题描述觉得这样一点都不愉快。

PowerAnts 发表于 2023-2-24 17:47:33

能画原理图Layout吗?嘿嘿

amwjz 发表于 2023-2-24 17:55:17

PowerAnts 发表于 2023-2-24 17:47
能画原理图Layout吗?嘿嘿
(引用自3楼)

原理图就先别想,要是能PCB layout就不错了

chunjiu 发表于 2023-2-24 17:59:54

gzhuli 发表于 2023-2-24 17:14
看你的问题描述觉得这样一点都不愉快。
(引用自2楼)

对问题的更改还算比较方便,因为 chatgpt 出结果很快,一看到结果就知道歧义在哪儿了,补充一下就好了。

对比之下,去翻查 python 和 urllib 的手册、寻找和理解 vmess的协议说明可并不轻松。{:titter:}

chunjiu 发表于 2023-2-24 18:01:04

PowerAnts 发表于 2023-2-24 17:47
能画原理图Layout吗?嘿嘿
(引用自3楼)

感觉用它生成一个约束会比较方便,在 PCB 设计上肯定能找到可利用的地方 {:lol:}

gzhuli 发表于 2023-2-24 18:13:56

chunjiu 发表于 2023-2-24 17:59
对问题的更改还算比较方便,因为 chatgpt 出结果很快,一看到结果就知道歧义在哪儿了,补充一下就好了。
...
(引用自5楼)

GPT给出的并不是可信结果,所以理解协议和读懂ChatGPT给出的程序一样少不了,感觉没省多少事,何况debug别人的程序从来都是一种痛苦。

chunjiu 发表于 2023-2-24 18:25:52

本帖最后由 chunjiu 于 2023-2-24 18:29 编辑

gzhuli 发表于 2023-2-24 18:13
GPT给出的并不是可信结果,所以理解协议和读懂ChatGPT给出的程序一样少不了,感觉没省多少事,何况debug ...
(引用自7楼)

只要将程序切成小段就方便了,实现单一功能就很容易检查,

主要是想省去很多 bing 资料的步骤,国内的网络环境只能用垃圾场来形容,太耗费时间精力了,

改用 ChatGPT 可以快速哦检索出自己需要的资料。


PS:

还有一件事情很重要,不用翻 python 语法手册,我老花眼,看屏幕特别费劲 ...

例如,

先问好相关资料,再检查它的代码(有小错误,需要换几种方式问来确认):

问:

可以用详细的说明来解释 Vmess 协议中每一个元素的用途和用法吗?


答:

当配置 Vmess 客户端时,我们需要将服务器信息填入 Vmess URL 中,这个 URL 包含了多个元素。以下是每个元素的详细说明:

vmess://:表示使用 Vmess 协议,必须以 vmess:// 开头,否则客户端无法识别该链接。

uuid:表示用户 ID,是用于验证客户端与服务器之间的身份识别,由 32 个字符组成的字符串。这个值是由服务器生成,可以在服务器端配置文件中找到,客户端需要使用相同的 ID 才能成功连接到服务器。如果服务器没有配置 uuid,可以在客户端中自行生成一个 uuid。

security:表示加密方式,Vmess 支持多种加密方式,例如 aes-128-gcm、chacha20-poly1305 等。客户端必须与服务器使用相同的加密方式,否则无法成功连接到服务器。

network:表示传输层协议,Vmess 支持 tcp 和 kcp 两种传输层协议,一般情况下推荐使用 tcp 协议。如果使用 kcp 协议,还需要指定一个 mtu 参数,表示最大传输单元,一般使用默认值即可。

address:表示服务器的 IP 地址,客户端必须填写服务器的正确 IP 地址才能成功连接到服务器。

port:表示服务器的端口号,客户端必须填写正确的端口号才能成功连接到服务器。一般情况下,Vmess 使用的端口号是 443 或者 80。

type:表示连接类型,Vmess 支持多种连接类型,包括 none、http、ws 等类型。如果使用连接类型为 http 或 ws,还需要指定一个 path 参数,表示连接的路径。

path:表示连接的路径,仅当连接类型为 http 或 ws 时才需要指定。这个参数的值一般是由服务器生成,客户端需要与服务器使用相同的路径才能成功连接到服务器。

tls:表示是否使用 TLS 安全传输协议,仅当连接类型为 http 或 ws 时才需要指定。如果启用了 TLS,需要指定一个 serverName 参数,表示服务器的名称。

总之,Vmess 协议的每个元素都有特定的含义和用途,客户端必须根据服务器的配置信息正确地填写这些元素,才能成功连接到服务器并进行安全的数据传输。

gzhuli 发表于 2023-2-24 18:31:33

chunjiu 发表于 2023-2-24 18:25
只要将程序切成小段就方便了,实现单一功能就很容易检查,

主要是想省去很多 bing 资料的步骤,国内的网 ...
(引用自8楼)

将写程序变成调教ChatGPT,感觉心更累了。

gzhuli 发表于 2023-2-24 18:44:15

ChatGPT最大的问题就是经常一本正经的胡说八道,也就是说你让它解释Vmess协议,它给出的答案未必是对的,你还是得Google确认一遍。

chendaon 发表于 2023-2-24 18:48:05

gzhuli 发表于 2023-2-24 18:31
将写程序变成调教ChatGPT,感觉心更累了。
(引用自9楼)

感觉半生半熟的开发环境,用这个倒是不错的选择,bing资料太零散了,要求不高,它能快速总结资料。

redroof 发表于 2023-2-24 19:04:27

gzhuli 发表于 2023-2-24 18:44
ChatGPT最大的问题就是经常一本正经的胡说八道,也就是说你让它解释Vmess协议,它给出的答案未必是对的,你 ...
(引用自10楼)

对,这是个很大的问题。
它说岀来的东西从语法上没毛病,也很像真人的语气,但内容很可能是胡说八道。。。
你得自己检验它说的内容

chunjiu 发表于 2023-2-24 19:24:45

gzhuli 发表于 2023-2-24 18:44
ChatGPT最大的问题就是经常一本正经的胡说八道,也就是说你让它解释Vmess协议,它给出的答案未必是对的,你 ...
(引用自10楼)

这个现在倒不是大问题,在传统搜索引擎的网页上慢慢翻查才是折磨人呢,

点了很多网页进去了根本不是你想要找的东西,太浪费时间感情。

目前用 ChatGPT 先归纳,再分析关键字,然后再查找就方便了。

我能感觉到的好处是节约了很多乱翻网页的时间,

尤其是在很多编程语言之间切换的时候,语法就不再是难题了,

拿 ChatGPT 给出的结果改改就行了。

chunjiu 发表于 2023-2-24 19:26:19

redroof 发表于 2023-2-24 19:04
对,这是个很大的问题。
它说岀来的东西从语法上没毛病,也很像真人的语气,但内容很可能是胡说八道。。 ...
(引用自12楼)

这玩意儿哪能轻信啊?

自己写的代码也要检查几遍吧 {:lol:}

dellric 发表于 2023-2-24 19:56:00

宁可我给别人一千个BUG,也不让别人给我一个BUG

gzhuli 发表于 2023-2-24 20:04:54

chunjiu 发表于 2023-2-24 19:24
这个现在倒不是大问题,在传统搜索引擎的网页上慢慢翻查才是折磨人呢,

点了很多网页进去了根本不是你想 ...
(引用自13楼)

估计你用bing和百度比较多?google从来不觉得找资料很难。

chunjiu 发表于 2023-2-24 21:04:04

gzhuli 发表于 2023-2-24 20:04
估计你用bing和百度比较多?google从来不觉得找资料很难。
(引用自16楼)

Google 时不时的会抽下风,所以基本上是 Bing,

它实在不行了才努力去 Google。

Aper-2020 发表于 2023-2-24 21:40:53

amwjz 发表于 2023-2-24 17:55
原理图就先别想,要是能PCB layout就不错了
(引用自4楼)

它要是不能“看”明白原理图, layout 都不要想。 它哪知道哪根线要多粗, 信号传输回路都不知,谁敢让它画

gzhuli 发表于 2023-2-25 18:22:24

Aper-2020 发表于 2023-2-24 21:40
它要是不能“看”明白原理图, layout 都不要想。 它哪知道哪根线要多粗, 信号传输回路都不知,谁敢让它 ...
(引用自18楼)

已经有老外让ChatGPT画出KiCad原理图符号和网表了,虽然并不完美,但至少是真的能够放到KiCad里面用的。

gzhuli 发表于 2023-2-27 14:22:22

chendaon 发表于 2023-2-24 18:48
感觉半生半熟的开发环境,用这个倒是不错的选择,bing资料太零散了,要求不高,它能快速总结资料。 ...
(引用自11楼)

刚刚在网上看到的截图,如果你对逻辑电路半生不熟,它会一本正经的告诉你XOR可以实现任意逻辑组合,乍一看还挺像那么回事的。 {:titter:}



jasonzhu8888 发表于 2023-2-27 20:26:53

我感觉,以ChatGPT的基础语言能力,在不同领域使用准确的知识做定向学习,就会产生极大的影响力。

然后,然后:这样的ChatGPT变成一个节点,地球上有无数多个比现在ChatGPT还强的节点进行组合。形成一个更大的网络,不知道这个会成为神马东东!

icoyool 发表于 2023-2-27 20:29:06

PowerAnts 发表于 2023-2-24 17:47
能画原理图Layout吗?嘿嘿
(引用自3楼)

可以啊, 支持python的画图软件, 用chatGPT帮你写python代码, 不就完了

xuyw123 发表于 2023-3-2 10:38:43

本帖最后由 xuyw123 于 2023-3-2 10:40 编辑

chatGPT上让它推荐书籍,基本上推荐的都搜不到这本书,尽管它也给了作者跟出版社,这AI还能造假呢{:sweat:}

chunjiu 发表于 2023-3-2 11:34:03

xuyw123 发表于 2023-3-2 10:38
chatGPT上让它推荐书籍,基本上推荐的都搜不到这本书,尽管它也给了作者跟出版社,这AI还能造假呢 ...
(引用自23楼)

感觉还是投喂的资料太少了(缺少训练),网上的中文资料本来就乱,它就胡说八道了 ... {:titter:}

neqee 发表于 2023-3-2 12:12:30

估计它也头疼中文博大精深

xuyw123 发表于 2023-3-2 13:47:49

chunjiu 发表于 2023-3-2 11:34
感觉还是投喂的资料太少了(缺少训练),网上的中文资料本来就乱,它就胡说八道了 ...   ...
(引用自24楼)

这AI也太不诚实了,有就有没有就没有嘛,搞得我还很相信他,搜了一堆扔给同事,结果别人说没有一本书是能查到的{:titter:}

amwjz 发表于 2023-3-2 14:58:12

有时它会一本正经的胡说八道,别过于相信,要确认一下才行

armok. 发表于 2023-4-2 04:45:33

帖子移动通知:
原分论坛:☆阿莫百科
目标分论坛:机器人/AI
移动时间:0小时之后

sunliezhi 发表于 2023-4-3 22:42:18

ChatGPT,重点是 Chat ,就是个聊天软件, 无聊时逗你开心而已,不要太认真。
页: [1]
查看完整版本: 用 ChatGPT 帮忙写代码本来是一件愉快的事情,结果 R 他先人!