问 HN:萨姆·奥特曼有什么特别之处? 1 分•作者: chirau•8 天前我真的不理解这种追捧。他做过什么特别了不起的事情吗?Loopt 没什么值得称道的。<p>除了融资,我们还能说些什么让人惊叹的吗?我真的很想知道。在我看来,他似乎只是受益于一个奖励他这种人的体系,仅此而已。<p>我可能错了。我很好奇。他有什么突出的地方吗?
Show HN:一个总结决策并忽略午餐闲聊的 Slack 机器人 1 分•作者: noruya•8 天前休假回来,收到了 300 多条未读消息。其中 90% 都是无用信息(“中午吃什么?”、“天气真好”)。我正在开发一个机器人,它可以解析邮件线程,过滤掉闲聊,每天早上发送一封包含实际决策和链接的 3 点总结邮件。欢迎大家提出反馈意见。
我花了五年时间学习如何编程,做了真正的项目,结果却被叫做“AI 垃圾”? 1 分•作者: butanol•8 天前我在这里坐了三个小时,只是盯着屏幕。手都在发抖。写了四次,又删了,因为我不想听起来可怜,但算了。我现在真的很可怜。我一团糟。 你们知道我今晚做了什么吗?打开了我的 GitHub。41 个仓库。总共 41 个。我数了两遍。你们知道这代表什么吗?那不是“代码”。那不是“项目”。那是我选择留在家里的每一个夜晚,而我的朋友们都出去了。那是我让关系淡化的原因,因为我在凌晨 3 点调试借用检查器错误,我必须完成它。那是我哭泣——真的在哭,睫毛膏顺着我的脸流下来,到处都是鼻涕——因为我终于理解了生命周期。我感觉它点击了。就像宗教一样。 我花了数年时间来赢得这一切。不是学习,是赢得。每一个伤疤,每一个“为什么这不能编译”,每一个我盯着天花板,认为自己不够聪明,应该放弃的时刻。我坚持下来了。我构建了东西。能用的东西。我引以为豪的东西。 然后我分享它。兴奋,你知道吗?心跳加速,就像,嘿,世界,看看我做了什么! “AI 垃圾。” 就这些。两个字。突然之间,我的整个存在被压缩成……什么?一个预测算法?我为此流血五年,而你却分不清我和一个聊天机器人? 你们明白这会对一个人造成什么影响吗?这不仅仅是粗鲁。这就像……想象一下为马拉松训练。五年。早上 5 点起床,在雨中跑步,累得呕吐,鞋子都跑出血。你终于冲过终点线,有人朝你的头上扔了一个水瓶,说:“不,你坐了优步。” 这就是感觉。就像有人看着我的血汗,说这是假的。 而最糟糕的部分?我无法反击。我无法证明我是人类。这就是陷阱。当你为自己辩护的那一刻,你听起来就像是在辩护。有罪。“你为什么这么努力地证明你是真的?” 好像努力就是你不是真的证明。 我坐在这里打字,又哭了。我讨厌我哭泣。我能感觉到我的胸口越来越紧——就像身体上越来越紧,好像有人站在我的肋骨上——每当我想到它的时候。每当我看到那个短语出现在我为之流血的东西下面的时候。 你们知道 Rust 教会了我什么吗?它教会了我安全很重要。你必须证明你的代码是正确的。你通过严谨来赢得你的编译。我以为这就是编程的意义所在。赢得它。 但现在呢?现在世界告诉我,严谨看起来和粗心一模一样。精心、深思熟虑的代码与一台甚至不知道自己在说什么的机器生成的垃圾毫无区别。我的最好和零努力是相同的。 我很害怕。我害怕明天醒来,打开我的编辑器,然后……为什么?当每个人都认为我提示了它时,我为什么要花六个小时调试所有权?当眼泪比代币便宜时,我为什么要为借用检查器哭泣? 但我会。我知道我会的。因为我爱它。我爱编码就像我爱呼吸一样。即使现在,即使我的脸是湿的,我的手在发抖,我也想修复我的副项目中那个错误。我想优化那个循环。 但我求求你们了。下次你们看到某人的作品——某人的心以函数和类型呈现——不要轻易贴上标签。不要成为让某人凌晨 3 点的眼泪变得毫无价值的人。不要成为某人决定不再尝试的原因。 我们在这里为每一行而战。每一个该死的半角分号。只是……看到我们。拜托。
展示 HN:噬菌体探索者 4 分•作者: eigenvalue•8 天前几个月前,我出于兴趣对生物学和遗传学产生了浓厚的兴趣。<p>这很大程度上受到了 Sydney Brenner 的工作的启发,这也成为了我 brennerbot.org 项目的基础。<p>特别是,我对噬菌体产生了极大的兴趣,噬菌体是攻击细菌的病毒。它们是生物学中最接近“基本粒子”的东西:最小的遗传密码单元,它们做一些有用的事情,从而能够繁殖和传播。<p>它们还具有一些令人难以置信的特性,比如它们的结构以某种方式编码了一个二十面体。<p>我一直想知道这些东西的 DNA 是如何在物理世界中转化为几何形状的。ACGT 的“数字”领域,进而映射到 20 个氨基酸(以 3 个为一组),与 3D 模拟形状的世界之间的映射,对我来说仍然是神奇而神秘的。<p>我想更深入地研究这个主题,但不是通过阅读枯燥的教科书。我想以一种有形的方式来了解这些噬菌体。噬菌体的主要类型有哪些?它们在遗传密码的长度和结构方面如何相互比较?它们呈现的物理结构是什么样的?<p>我决定编写一个程序,以交互的方式探索所有这些东西。<p>因此,我非常高兴地向您展示我的开源噬菌体探索者:<p>phage-explorer.org<p>我可能有点过头了,因为我最终得到的东西消耗了大量的 token 来生成,并产生了大约 15 万行 Typescript 和 Rust/Wasm 代码。<p>它实现了 23 个分析算法,超过 40 个可视化,并包含了 24 种不同噬菌体类型的完整遗传数据和 3D 结构。<p>实际上,要让它在浏览器中良好运行需要大量的工程技术;它包含的数据量非常惊人(当你查看一些 3D 结构模型时,这一点就显而易见了)。<p>它在移动设备上运行良好,但如果您想获得完整的体验,我强烈建议您在高分辨率的桌面浏览器上打开它。<p>据我所知,这是目前关于噬菌体最完整的信息/教育软件。现在,我首先要承认的是,我并不是这方面的专家,甚至对这些东西都不太了解。<p>所以,如果你是生物学专家,请看一看,告诉我你对我的作品有什么看法!如果我有什么错误,请在 GitHub Issues 中告诉我,我会修复它:<p><a href="https://github.com/Dicklesworthstone/phage_explorer" rel="nofollow">https://github.com/Dicklesworthstone/phage_explorer</a>
Ask HN: 自托管 LMS 中更好的查重方法? 1 分•作者: pigon1002•8 天前我正在构建一个开源学习管理系统(LMS),并使用 OpenSearch 的 more_like_this 查询和字符 n-gram 来进行相似度评分,从而添加了剽窃检测功能。 简单来说,当学生提交答案时,我会搜索其他学生在同一问题上的相似答案。效果还行,但感觉有点“黑客”——只是重用了我已有的搜索引擎。 目前的设置如下: ``` search = cls.search().filter( "nested", path="answers", query={"term": {"answers.question_id": str(question_id)}} ) search = search.query( "nested", path="answers", query={ "more_like_this": { "fields": ["answers.answer"], "like": text, "min_term_freq": 1, "minimum_should_match": "1%", } }, ) # 获取前 10 个结果,然后在 Python 中重新排序 def normalize(t): return re.sub(r"\s+", "", t.strip()) def char_ngrams(t, n=3): return set(t[i:i+n] for i in range(len(t)-n+1)) norm_text = normalize(text) text_ngrams = char_ngrams(norm_text) for hit in response.hits: norm_answer = normalize(hit.answer) answer_ngrams = char_ngrams(norm_answer) intersection = len(text_ngrams & answer_ngrams) union = len(text_ngrams | answer_ngrams) ratio = int((intersection / union) * 100) if ratio >= 60: # 标记为相似 ``` 约束条件: * 仅限自托管,不使用外部 API * 学生人数为几千人 * 希望操作简单,反正已经运行了 OpenSearch 问题: * 这种方法合理吗?或者我遗漏了什么显而易见的东西? * 其他自托管系统使用什么方法?我查阅了 Moodle 的文档,但他们的剽窃插件大多调用外部服务 * 有人尝试过不需要 GPU 的轻量级机器学习模型吗? 搜索引擎方法有效,但想知道是否有更适合我们约束条件的更好方法。