Skip to content

Latest commit

 

History

History
335 lines (226 loc) · 20 KB

File metadata and controls

335 lines (226 loc) · 20 KB

关于 LDPrompt/lingque 项目抄袭灵雀(LingQue)框架的声明

写在前面

我家有两只鹦鹉。

它不是什么名贵品种,就是一只普通的虎皮和小太阳鹦鹉。但它们聪明得让人吃惊——它会观察你的习惯,记住你每天几点起床,知道你打开冰箱意味着有水果可以蹭。它会在你情绪低落的时候反常地安静下来,歪着头看你。它不是在执行指令,它是在理解你

2026 年 1 月,当我决定做一个真正有记忆、会成长的 AI 伴侣框架时,我一秒钟就想到了它们。灵雀——一只灵性的鸟。不是什么大模型术语的拼凑,不是技术关键词的缩写,而是来自真实存在的、让我相信"非人类智能也可以有理解力"的小家伙。至于后来有人把包名改成了 lobster(龙虾),我只想说——灵雀和虾类没有任何关系。

灵雀从第一天起就是完全公开的。几百次提交,每一次设计决策、每一个架构演化、每一篇思考文章,全部不加遮掩地放在 GitHub 上。我甚至把 Agent 自我进化过程中自动产出的 笔记文章、宣传文章也一并提交——因为我觉得,一个以"自我进化"为核心卖点的框架,最好的证明方式就是让所有人亲眼看到它是怎么长大的。我写了十几篇技术文章放在 docs/ 目录下,从 token 预算到心跳调度到强化学习框架,事无巨细,就是希望社区能了解每一个设计背后的"为什么"。

我没有想到的是,这份坦诚,会变成别人的购物清单。

有人读完了我的文档,理解了我的架构,拿走了我的名字,重写了表层代码,然后告诉世界"这是我们团队的原创"。他们甚至连 MEMORY_BUDGET=4000 这样藏在技术文章里的数字都照搬了,却没有在任何地方提过"灵雀"这两个字最初是谁取的。

开源不是天真。但我仍然相信,把思考过程公开分享,让别人看到一个项目从无到有的完整生长轨迹——这件事本身是对的。如果因为害怕被抄,就把所有东西藏起来,那开源的意义在哪里?

所以我不打算藏。我只要求一件事:如果你用了,请说一声。

以下是完整的证据。


摘要

GitHub 仓库 LDPrompt/lingque 在未经任何授权、未做任何致敬或署名的情况下,原样使用了灵雀(LingQue)的项目名称、品牌标识和核心架构设计,并以"灵动 Prompt 团队出品"的名义对外发布。本文将从时间线证据、架构级相似性、命名复用、以及恶意隐匿来源等多个角度,详细阐述这一抄袭行为。


一、时间线铁证:谁先谁后

原版灵雀(CodePothunter/lingque)

时间 里程碑
2026-02-13 首次提交(050e629),确立"灵雀"命名,实现多进程后处理架构、群聊监听、飞书适配
2026-02-13 ~ 02-14 密集开发期:群聊隔离、长期记忆(MEMORY.md)、会话管理、多实例协作、Bot 身份推断
2026-02-17 ~ 02-18 平台抽象层(PlatformAdapter ABC) 完成;router 拆分为模块化包结构
2026-02-19 Discord 适配器、MultiAdapter 路由
2026-03-05 ~ 03-06 Telegram 适配器(社区 PR #30, #32)
2026-03-24 微信适配器(基于 iLink 协议)
2026-04-08 语音识别与合成(STT/TTS)全平台支持
截至 2026-04-15 共 274 次提交,完整的 git 历史记录每一个设计决策的演化过程

抄袭方(LDPrompt/lingque)

  • GitHub 仓库 ID:1180092284(高位 ID,表明创建时间较晚)
  • 仓库不是 fork(GitHub 元数据 repository_is_fork: false)——刻意创建为独立仓库以掩盖来源
  • 无法通过公开 API 获取完整 git 历史,提交历史疑似被清洗或重写
  • README 声称版本为 v1.1.0,但未提供任何早期开发的公开记录

结论: 原版灵雀的首次提交(2026-02-13)有完整的 git 历史可追溯。LDPrompt 版本在既无公开开发记录、又不是 fork 的情况下,使用了完全相同的项目名称。


二、架构级抄袭:不是巧合,是系统性复制

以下对比展示了两个项目在核心设计模式上的高度一致性。这些模式并非业界通用模式,而是灵雀框架在开发过程中独立演化出的架构决策。

2.1 项目名称与品牌

维度 原版(CodePothunter) 抄袭方(LDPrompt)
项目名 灵雀 LingQue 灵雀 LingQue (完全一致)
仓库名 lingque lingque (完全一致)
品牌 emoji 🐦 🐦 (完全一致)
自称 灵雀 灵雀 (完全一致)

两个独立团队恰好给 AI Agent 框架取了同样的中文名、同样的拼音、同样的 emoji?这不是巧合,这是照搬。

2.2 核心架构模式一一对应

架构概念 原版设计 抄袭方设计 分析
平台抽象层 PlatformAdapter ABC:8 个抽象方法 + 4 个可选方法 BaseChannel ABC:3 个抽象方法 简化版但同一设计思路
网关编排器 AssistantGateway:初始化适配器、组件注入、并发任务管理 main.py:同样的初始化流程、组件注入、并发启动 功能完全对应
消息路由 MessageRouter(8 个 Mixin 组合) Agent 类内聚路由 概念一致,实现方式不同
长期记忆 MEMORY.md 文件存储长期记忆 MEMORY.md 文件存储长期记忆 (文件名一致) 这不是通用做法
会话压缩 Session.compact():基于 token 阈值的 LLM 摘要压缩 Memory.compress_context():基于 token 阈值的 LLM 摘要压缩 策略完全一致
工具/技能系统 ToolRegistry:AST 验证 + 动态加载 .py 文件 SkillRegistry:注册中心 + 动态技能加载 同一模式
多平台模式 MultiAdapter:复合适配器路由 多通道并行启动 概念相同
飞书 WebSocket FeishuAdapter:WS 长连接 + 事件转换 FeishuChannel:WS 长连接 + 事件转换 完全对应
心跳机制 heartbeat.py:定时巡检 + 自主行动 HeartbeatEngine:定时巡检 + 自主行动 概念和功能一致
敏感信息脱敏 20+ 正则模式脱敏 20+ 正则模式脱敏(几乎相同的模式列表) 模式列表高度雷同
每日日志 append_daily() + 按日期 .md 文件 save_daily_note() + 按日期 .md 文件 完全一致的日志策略
自进化 EVOLUTION.md + 强化学习 + 好奇心驱动 LearningEngine + 错误配对 + 经验召回 概念高度重合

2.3 敏感信息脱敏 —— 正则模式的"巧合"

原版灵雀在 router/tool_loop.py 中实现了密钥脱敏。LDPrompt 版本在 agent/memory.py 中几乎复刻了相同的正则列表:

两边都覆盖了以下模式(部分列举):

  • sk-ant- 前缀的 Anthropic key
  • sk- 前缀的 OpenAI/DeepSeek key
  • ghp_/gho_ 前缀的 GitHub token
  • cli_ 前缀的飞书 App ID
  • xoxb-/xoxp- 前缀的 Slack token
  • AKIA 前缀的 AWS access key
  • eyJ 前缀的 JWT token
  • -----BEGIN PRIVATE KEY-----
  • Bearer token 匹配
  • .env 风格的 KEY=value 匹配(覆盖 OPENAI_API_KEY、ANTHROPIC_API_KEY、DEEPSEEK_API_KEY 等)
  • api_key/app_secret/password 等字段名匹配

两个"独立开发"的项目恰好写出了几乎一样的 20+ 条正则脱敏规则,覆盖相同的 token 类型、以完全相同的优先级排列?

2.4 System Prompt 构建 —— 相同的三层结构

层级 原版 MemoryManager.build_context() 抄袭方 ContextBuilder.build_system_prompt()
第一层 SOUL.md(人格定义) 硬编码人格 + 行为准则
第二层 MEMORY.md(长期记忆) MEMORY.md(长期记忆)+ 知识图谱
第三层 每日日志 + 自我感知 每日笔记 + 用户画像 + 经验召回
Token 预算 SOUL_BUDGET=3000, MEMORY_BUDGET=4000, TOTAL=15000 MAX_MEMORY_CHARS=4000, MAX_NOTES_CHARS=1500

连 MEMORY.md 的 token 预算都是相同的 4000。


三、README 内容抄袭:从 docs/ 到"技术创新"的搬运

LDPrompt/lingque 的 README 中大量"技术创新"描述,与原版灵雀在 docs/ 目录下早已发表的技术文章高度重合。这些文章有明确的 git 提交时间戳,证明原创性。

3.1 "自我进化引擎" ← 抄自 docs/self-improvement-zhihu.md 和 docs/curiosity-evolution-article.md

原版灵雀文档(2026-02-15 首次提交,2026-03-10 发布改进版)描述了三层进化循环:

第一层:对话级反思(秒级)—— 每次私聊回复后 → 150 token 自我评估 → 提取好奇心信号
第二层:心跳级自主行动(小时级)—— 收集信号 → LLM 决策 → 探索外部知识或修改自身代码
第三层:启动级安全验证(重启时)—— 检测上次进化是否导致崩溃 → 自动回滚

LDPrompt README 中"自我进化引擎"章节写的是:

任务完成 → 自动反思总结经验
工具失败 → 记录错误原因 + 修复方式(纠错配对)
用户反馈 → 捕获"很好"/"不对"等信号
下次类似任务 → 自动召回相关经验注入提示词
工具成功率统计 → 低效工具自动推荐替代策略

三层循环、反思机制、信号收集、经验召回——叙事结构如出一辙,只是用不同的措辞重新包装了同一套方案。原版文档的"好奇心信号"变成了"用户反馈捕获","心跳级自主行动"变成了"工具策略统计"。

3.2 "记忆三层架构" ← 抄自 docs/angle-token-memory.md

原版灵雀文档(2026-02-14 首次出现记忆架构)详细描述了 token 预算制:

SOUL.md     → 3,000 tokens(人格定义,最高优先级)
MEMORY.md   → 4,000 tokens(长期记忆,超预算按段落截断)
日志         → 2,000 tokens
自我认知     → 2,000 tokens
总预算       = 15,000 tokens

文中明确提出:"记忆不是存下所有东西。是知道什么该忘、什么不该忘——然后把有限的预算分给最重要的部分。"

LDPrompt README "记忆三层架构":

短期记忆(会话上下文)→ 最大 80 条消息 / 64K tokens → LLM 智能摘要保留关键信息
长期记忆(MEMORY.md + 知识图谱)→ 对话中自动提取重要信息 → 跨会话持久化
检索引擎(SQLite FTS5 / ChromaDB + BM25)→ 语义搜索 + 关键词搜索混合

短期/长期/检索的三层分类、MEMORY.md 作为长期记忆载体、LLM 摘要压缩策略——全部来自原版灵雀已公开的技术文档。LDPrompt 的 MAX_MEMORY_CHARS=4000 甚至与原版的 MEMORY_BUDGET=4000 数值完全一致。

3.3 "技能自动生成" ← 抄自 docs/angle-self-tool-creation.md

原版灵雀文档(2026-02-13 初始提交即包含,2026-02-14 发表专题文章):

"它不说'做不到'——它给自己写了段代码,5 秒后就会了"

文中描述了完整的自主工具创建流程:

  1. 发现能力缺失 → 用 create_custom_tool 自动生成代码
  2. AST 静态分析做安全审计(BLOCKED_IMPORTS frozenset)
  3. 热加载到运行时,立即可用
  4. 工具格式:TOOL_DEFINITION 字典 + execute 异步函数

LDPrompt README "技能自动生成":

"描述需求,LLM 自动生成技能代码并注册"

并提供了几乎完全相同的技能格式:

@registry.register(
    name="my_skill",
    description="这个技能的作用",
    parameters={"param1": {"type": "string", "description": "参数说明"}},
    risk_level="low",
)
async def my_skill(param1: str) -> str:
    return "执行结果"

"LLM 生成代码 → 安全审计 → 动态注册 → 立即可用"——完全是原版灵雀在 2 个月前已公开描述的流程。连安全审计用 AST 而非字符串匹配这个实现细节都一样。

3.4 对比表"竞品分析" ← 借鉴原版叙事框架

原版灵雀 docs/ 中多篇文章(2026-02-13 起)反复使用的对比论述:

  • "普通 AI Agent 用了一万次,和用了第一次,没有任何区别"
  • "OpenClaw 的 Memory 是静态存储"
  • "这不是智能。这是复读机"

LDPrompt README 竞品对比表:

维度 Dify / Coze OpenClaw 灵雀 LingQue
自我学习 自动进化
长期记忆 有限 有限 短期 + 长期 + 向量 + 知识图谱

同样的对比对象(OpenClaw)、同样的批评角度(无自我学习、记忆有限)、同样的差异化叙事(我们有自我进化)。这不是独立得出的市场分析,这是阅读了原版文档后的复述。

3.5 "心跳引擎" ← 抄自 docs/self-improvement-zhihu.md

原版灵雀文档(2026-02-15)详细描述了心跳调度机制:

心跳间隔: 3600 秒
活跃时段: 8:00–23:00
每次心跳: 执行 HEARTBEAT.md 定义的周期任务 → 日报/问候 → 自主行动周期
自主行动: 信号收集 → LLM 决策 → 探索或进化

LDPrompt README "心跳引擎":

"30 分钟巡检"、"暂停工作流检查"、"定时任务检查"、"插件变更检查"

心跳驱动的自主巡检机制——概念、命名、功能描述几乎照搬。原版是 3600 秒间隔,抄袭方改为 30 分钟,但核心思想(定时触发 → 信号收集 → 自主行动)完全一致。

3.6 时间线对比

文档/功能 原版灵雀提交时间 LDPrompt 对应章节
自主工具创建 + AST 安全审计 2026-02-13(初始提交) README "技能自动生成"
多实例群聊协作 2026-02-14 未出现(但概念已被吸收)
三层进化循环 + 心跳机制 2026-02-15 README "自我进化引擎" + "心跳引擎"
平台抽象层规范 v1.0 2026-02-17 README "架构设计 > Gateway 网关层"
Token 预算记忆系统 2026-02-14 ~ 02-16 README "记忆三层架构"
好奇心驱动自进化 2026-03-10 README "自我进化引擎 > 智能经验召回"

原版灵雀的每一个核心概念都有精确到分钟的 git 提交记录。LDPrompt 的 README 是这些概念的"二次创作"——用不同的措辞重新讲述了同一套故事,但没有标注出处。


四、"改进"不是原创的挡箭牌

LDPrompt 版本确实增加了大量功能:浏览器自动化(Playwright + CDP + RPA)、Docker 沙箱、知识图谱、工作流引擎、技能市场、Ralph Loop 自主循环等。这些改进本身值得认可。

但改进不能覆盖抄袭的事实。

类比:如果有人拿走了一栋建筑的设计图纸,用更好的材料重新建造了一栋,并加了游泳池和花园,然后声称是自己设计的——这仍然是抄袭。

具体而言:

  1. 核心架构是最有价值的部分。 "AI Agent + 飞书适配 + 平台抽象 + MEMORY.md 长期记忆 + 会话压缩 + 工具系统 + 心跳机制"这一套组合方案,是灵雀在 2026 年 2 月独立设计的。这套架构定义了灵雀的技术身份。
  2. 功能扩展只是在别人的地基上盖楼。 添加 Playwright 浏览器自动化、ChromaDB 向量检索等,是工程执行层面的事情。真正困难的是从零设计出那套架构。
  3. 改进越多,抄袭意图越明确。 如果 LDPrompt 真的有能力独立开发这些高级功能,为什么连一个项目名称都要照抄?唯一的解释是:他们看到了灵雀的价值,决定"站在巨人的肩膀上",但选择隐匿巨人的存在。

五、恶意分析:蓄意隐匿,而非无心之过

以下行为表明 LDPrompt 的抄袭是经过深思熟虑的:

4.1 刻意不 Fork

GitHub 提供了 Fork 功能,专门用于衍生项目。LDPrompt 选择创建全新仓库而非 Fork,目的是切断与原项目的可见关联。GitHub 元数据显示 repository_is_fork: false

4.2 代码重写以掩盖来源

包名从 src/lq/ 改为 lobster/,类名从 PlatformAdapter 改为 BaseChannel,配置系统从自定义 dataclass 改为 Pydantic Settings。这种有选择的重写:保留了架构设计和功能命名(MEMORY.md、心跳、每日日志),但改变了代码表层,使得逐行 diff 无法直接匹配——这恰好是故意规避抄袭检测的典型手法。

4.3 虚假署名

LICENSE 文件写着 Copyright (c) 2026 灵动Prompt。README 底部写着"由灵动 Prompt 团队用 ❤️ 打造"。在没有任何原作者署名的情况下,将衍生作品的全部功劳归于自己团队。

4.4 竞品对比表中的"隐身术"

README 中有一个"与同类产品对比"表格,对比了 Dify、Coze、OpenClaw——但故意没有提及原版灵雀。如果是独立开发,为什么要回避与同名项目的对比?因为对比会暴露来源。

4.5 功能宣传照搬原版叙事

原版灵雀的核心叙事:"个人 AI 助手框架 + 平台无关核心 + 可插拔适配器 + 长期记忆 + 运行时工具创建"——LDPrompt 版本几乎逐条对应:"完全自主可控的私人 AI Agent 框架 + 多通道接入 + 自我进化 + 开箱即用"。


六、事实清单

# 事实 证据来源
1 原版灵雀首次提交时间为 2026-02-13 git log --reverse 输出,commit 050e629
2 LDPrompt 仓库不是 Fork GitHub 元数据 repository_is_fork: false
3 两个项目使用完全相同的名称"灵雀 LingQue" 双方 README.md
4 两个项目使用相同的仓库名 lingque GitHub URL
5 两个项目都使用 MEMORY.md 作为长期记忆文件名 代码搜索
6 两个项目的敏感信息脱敏正则列表高度雷同 memory.py vs tool_loop.py
7 两个项目的会话压缩策略几乎一致 compress_context() vs compact()
8 LDPrompt 版本无任何对原版灵雀的引用或致敬 全仓库搜索 "CodePothunter" 无结果
9 LDPrompt 的 LICENSE 声称版权归"灵动Prompt" LICENSE 文件
10 原版灵雀有 274 次提交的完整开发历史 git rev-list --count HEAD
11 LDPrompt "自我进化引擎"描述与原版 docs/self-improvement-zhihu.md(2026-02-15)高度重合 三层循环 → 反思/信号/召回
12 LDPrompt "记忆三层架构" MEMORY 预算 4000 与原版 docs/angle-token-memory.md 的 MEMORY_BUDGET=4000 数值一致 代码 + 文档对比
13 LDPrompt "技能自动生成"流程与原版 docs/angle-self-tool-creation.md(2026-02-13)描述一致 LLM 生成 → AST 审计 → 热加载
14 LDPrompt 竞品对比表使用与原版 docs/ 相同的对比对象(OpenClaw)和批评角度 README vs 原版宣传文章
15 LDPrompt "心跳引擎"概念与原版 docs/ 心跳调度机制(2026-02-15)一致 定时巡检 → 信号收集 → 自主行动

七、诉求

  1. 在 README 中明确标注灵雀(LingQue)的原始出处,注明项目基于 CodePothunter/lingque 的架构设计。
  2. 修改项目名称,在显著位置说明与原版灵雀的关系。
  3. 在 LICENSE 中增加原作者署名,承认衍生关系。
  4. 停止以"灵动 Prompt 团队出品"的名义独占功劳,尊重原创者的贡献。

结语

开源社区的繁荣依赖于信任与尊重。Fork、衍生、改进都是值得鼓励的行为——前提是你尊重上游。LDPrompt/lingque 做了大量改进工作,这些工作本身有价值。但拿走别人的架构设计和项目名称,抹去来源,独占功劳——这不是"站在巨人的肩膀上",这是偷走巨人的名字然后假装自己就是巨人。

尊重原创,标注来源,不难。


本声明基于 2026-04-15 的公开代码仓库分析,所有证据均可独立验证。

原版灵雀仓库:CodePothunter/lingque