1作者: kuberwastaken6 天前原帖
第1天的图片:<a href="https://i.imgur.com/bQ3Oxc5.png" rel="nofollow">https://i.imgur.com/bQ3Oxc5.png</a> <p>在上次尝试将《毁灭战士》放入二维码之后(<a href="https://news.ycombinator.com/item?id=43729683">https://news.ycombinator.com/item?id=43729683</a>),我想继续这个“系列”,将一个真正不错的聊天机器人放入二维码中。</p> <p>当然,这并不像前者那么简单。我可以选择作弊,制作一个基于规则的ELIZA风格的聊天机器人(我之前确实尝试过),但我想做一些真正有用的东西。我对大型语言模型(LLMs)和变换器(Transformers)的基本工作原理知之甚少,因此这也将让我学到很多关于人工智能的知识(另外,当它真正变得有趣时,也会公开和开源)。</p> <p>以下是我们的限制条件:</p> <p>最大的标准二维码(版本40)可以容纳2,953字节(约2.9 KB)。这个容量非常小——一个15分之一秒的Windows音频文件就有11 KB!此外,我们不能直接将HTML/JS放入二维码中,我们需要将其压缩为BASE64(或BigInt),这也占用0.1-0.15 KB,因此我们大约只有2.7 KB的空间,真是让人头疼!</p> <p>这是我在第1天所做的:</p> <p>第一个版本(v0)非常基础——一个简单的模式匹配聊天机器人,带有预定义的响应:</p> ``` const V = "you,I,is,are,do,what,how,why,,...e".split(","); const P = [ [5,2,0,8], // 你喜欢什么 [5,4,0,8], // 你喜欢做什么.... [0,8,15,9] // 你喜欢我认为 ]; ``` <p>(v1)增加了更好的CSS(仍然是浅色主题)、主题记忆、情感分析和过渡模式,但这使得文件大小略微超过4 KB。</p> <p>(v2)是v1的版本,经过更多压缩,虽然丢失了一些功能,但缩小到了2.8 KB。</p> <p>(v3)增加了复古UI,因为这似乎很合适,ASCII艺术和简化的文本格式化带有换行,但它仍然非常简单。(v4)和(v5)进行了更多的删减,勉强让它低于限制(2.85 KB)。</p> <p>因此,我改变了(v6)的思路,采用了一个字典树数据结构来查找响应:</p> ``` const t={h:{e:{l:{l:{o:["Hello! How can I help you today?","Hi! What's on your mind?"]}}}}}; ``` <p>这使得在我们的限制条件下可以进行前缀匹配,并且不再需要模式匹配。</p> <p>(v7)试图优化它,但最终仍然在3.3 KB左右,虽然比之前好,但仍然不够“智能”。</p> <p>对于(v8),我花了很多时间,转向了一个非常基础的两层神经网络实现:</p> ``` const network = { embeddings: new Float32Array(c.vSize * c.eDim), hidden: new Float32Array(c.eDim * c.hSize), output: new Float32Array(c.hSize * c.oSize), hiddenBias: new Float32Array(c.hSize), outputBias: new Float32Array(c.oSize) }; ``` <p>这给我们提供了一个582个字符的神经网络,经过8位量化,但正如你所预料的那样,这个体积巨大,约11 KB。</p> <p>(v9)和(v10)基本上是进一步压缩,缩小到约3.2 KB,不算差!</p> <p>我今天最后一个工作的版本是(v10.5)。我使用了基于词的处理,而不是基于字符的处理,采用了4D向量、上下文感知的模板响应、更好的状态跟踪和8个输出维度。还添加了重复惩罚(目前有点问题),但实际上效果还不错……5.3 KB的效果。</p> <p>对于第2天,我在考虑:</p> 1. 实现更好的上下文处理 2. 进一步优化神经网络架构(也许是一个小型变换器?) 3. 也许找到进一步压缩的方法?</p> <p>资源:</p> <a href="https://www.youtube.com/watch?v=aircAruvnKk" rel="nofollow">https://www.youtube.com/watch?v=aircAruvnKk</a> <a href="https://www.youtube.com/watch?v=zhxNI7V2IxM&t=275s" rel="nofollow">https://www.youtube.com/watch?v=zhxNI7V2IxM&t=275s</a> <a href="https://github.com/rasbt/LLMs-from-scratch">https://github.com/rasbt/LLMs-from-scratch</a> <a href="https://github.com/lionelmessi6410/Neural-Networks-from-Scratch">https://github.com/lionelmessi6410/Neural-Networks-from-Scratch</a>
1作者: mmdhrumil6 天前原帖
在构建副项目时,我常常遇到一个问题:头脑风暴出一个好名字 -> 检查域名可用性(理想情况下是 .com/.ai/.io) -> 发现已经被注册 -> 重复这个过程。这个迭代循环令人沮丧,拖慢了项目的启动速度。 我正在考虑构建一个工具来简化这个过程,并且我想评估一下外界对此类工具的兴趣。 这是其他人也常遇到的痛点吗?你们目前在命名项目和检查域名可用性方面的工作流程是怎样的?这个问题对你们的影响有多大?
2作者: cepstrum96 天前原帖
嘿,HN, 我一直在尝试将大型语言模型(LLM)集成到命令行中,并开发了一小套使用LLM来改善我的命令行体验的工具。在构建过程中我一直在使用它,已经证明对我非常有用。 目前它包括: 1. 命令未找到钩子 捕捉“命令未找到”错误,并请求LLM建议可能出错的原因(例如,拼写错误、缺少工具等),适用于bash和zsh。 2. Git提交LLM 一个用于git提交的封装工具,根据你暂存的更改建议更清晰的提交信息。它帮助我避免了一些懒散的消息,比如“修复一些东西”。 先决条件: - OpenAI API密钥 - Bash或Zsh - curl和jq 目前仍然比较简单和粗糙,但我很希望能得到反馈或想法。尤其好奇其他人是否会觉得这个有用,或者有没有功能建议。 仓库链接:[https://github.com/CepstrumLabs/hooksh](https://github.com/CepstrumLabs/hooksh)