前情提要:
还在上学时,我苦于英语能力弱,经常被变量命名问题困扰,于是通过 NLP + 翻译做了个小网站 VARBook ,专门用于翻译变量命名。后面服务器欠费了,我也没有精力继续维护,就下线了。
今年很多朋友发邮件关心 VARBook 是否还有人维护,还收到了几十块的赞助。所以最近我重新开始维护 VARBook ,今年 LLM 大火,所以用上了 llama3 + milvus 优化命名功能,然后换了个域名继续开放。前端代码托管在 https://github.com/uiuing/varbook,使用 GNU GPL v3.0 协议开源。
最近,我发现了一个名为 xiaojingge-varbook 的项目 (https://github.com/xiaoxiaojingge/xiaojingge-varbook),该项目使用了 Apache License 2.0 协议。xiaojingge-varbook 的 UI 设计和部分前端代码与我的 VARBook 项目非常相似。
我的项目:
相似的项目:
相似之处: UI 、Logo 、名称、SEO 、部分前端代码有相似的地方。
这引发了我对开源协议和项目权益的一些疑问,希望可以与大家探讨一下:
疑问:
开源协议问题: 我的项目使用 GNU GPL v3.0 协议,而 xiaojingge-varbook 使用 Apache 2.0 协议。GPL v3.0 要求衍生作品也必须使用相同的协议,请问在 UI 和前端代码上有相似之处的地方,并且使用不同的协议,是否违反了 GPL v3.0 协议?
项目名称和 Logo 、SEO: 对方 repo 与我的 repo 有非常相似的名称和 Logo 、SEO 。虽然后端实现有不同,但功能和目标用户群体高度重合。请问这种行为是否构成对我的项目权益的侵犯?
目的: 我发起这次讨论并非出于恶意或攻击,而是希望能够更好地理解开源协议和项目权益,并与大家交流如何更好地保护开源项目原创性,或者确定原创性的边界。(有点标题党 sorry )
题外话:
以下是回答部分朋友邮件的内容:
问:为什么没有开源后端? 答: 本身后端基本没有什么技术难度,大部分是可能会涉及侵权的数据,所以就不开源了。本身开源前端代码也是为了占坑。
问:为什么开源了还会有版权相关疑虑? 答: 曾经有不少朋友发邮件问我是否可以给他们开放 IP 限额,他们人很多,需要用这一类工具做规范,并表示可以付费。因为本身就没什么技术含量,所以就算用到服务器内存满了我也没啥意见,我主动问需不需要命名数据(中文 -> 英文命名,当然不涉及任何隐私问题)。但此贴问题不同,并非使用/安全问题,而是权益相关讨论;
1
renmu 54 天前 via Android
你直接去看核心代码看看是否相同,或者代码结构是否几乎相同,一些独特的命名是否有抄袭
|
![]() |
2
uiuing OP @renmu
有最直观的体现: 我的: https://varbook.uius.site/ 对方: https://varbook.xiaojingge.com/ 从 Logo 至风格极其相似,代码中的就太多了(仅前端部分) 正常尝试走 GitHub DMCA ,不过或许我该考虑联系对方😄 |
3
renmu 54 天前 via Android
看了代码很明显就是抄袭,连前端依赖版本都一样,直接 fork 保存证据,然后去 issue 质疑他,不认就挂他
|
![]() |
5
charslee013 52 天前
好奇问一下 milvus 在整个翻译变量项目中起到什么作用?
我查阅了其他项目都是用 LLM 直接返回翻译/润色后的变量名名称,不是很明白向量数据库在这里面的具体发挥作用,希望 OP 有时间能解答一下 🙏 |
![]() |
6
uiuing OP ![]() @charslee013 我的用途比较偏门,也许不合理,供参考
VARBook 项目中 Milvus 的主要作用: 1 、存储和索引库: 存储从优质代码仓库中提取的变量命名示例 (通过爬虫获取并用 AST 解析 + 文本嵌入模型转换为向量数据)。 2 、相似性搜索: 基于用户输入,找到相近的变量命名示例(利用 LLaMA 3 将中文描述转为英文索引)。 3 、上下文增强: 为 LLaMA 3 提供相关上下文,提高翻译准确性(Milvus 检索结果用于 LLaMA 3 生成变量命名含义参考 prompt)。 最终形成的 prompt 结构为: 1 、自定义的变量命名基础 prompt 2 、Milvus 检索 + LLaMA 3 生成的含义参考 3 、用户输入变量描述(英文) 主要目的是给 LLaMA 3 提供更丰富的上下文 ------ 分割 ------ 各个作用的参考数据(仅供参考): 1. 存储和索引库: - 变量名: user_login_time - 代码片段: datetime user_login_time = getCurrentTimestamp(); - 向量表示: [0.23, -0.45, 0.67, ..., 0.12] 2. 相似性搜索: 用户输入: "用户最后登录时间" LLaMA 3 翻译: "user last login time" Milvus 检索结果: - user_login_time (相似度: 0.92) - last_access_timestamp (相似度: 0.89) - user_last_active_date (相似度: 0.85) 3. 上下文增强: Milvus 检索结果用于 LLaMA 3 prompt: "Consider these similar variable names: - user_login_time: represents the timestamp when a user logs in - last_access_timestamp: indicates the most recent time a user accessed the system - user_last_active_date: stores the date of the user's last activity" 最终 prompt 结构: 1. 基础 prompt: "Generate a meaningful and concise variable name in English." 2. 含义参考: [Milvus 检索结果 + LLaMA 3 生成的描述] 3. 用户输入: "user last login time" |
![]() |
7
charslee013 51 天前
@uiuing #6 原来如此!非常感谢楼主开源
![]() |