返回首页
最新
嗨,HN,
我是拉尔夫。我拥有软件开发学位,在过去的15年里,我一直从事网站开发和搜索引擎优化(SEO),最近6年经营着一家代理公司。
几年前,我意识到人工智能可以在自动化我们代理公司许多初级SEO任务和手动工作方面发挥作用。我详细列出了我们的流程,绘制了人工智能可以发挥作用的领域,并开始将其整合。
这创造了一个基于人工智能的SEO平台,能够自动化关键词研究、元标题/描述、图片替代文本和页面级内容,并配备审批工作流和基于令牌的使用。我还在探索链接建设、全面技术审计和人工智能生成的推荐修复的自动化。
最大的挑战之一是管理上下文相关性,给系统提供足够的信息以全面理解一个网站,同时又不至于让模型感到不堪重负或稀释相关性。
该平台目前处于测试阶段,但我在继续追求“完美”和专注于尽早分享、让真实用户引导实际需求之间感到矛盾,因此我在这里寻求反馈。
我非常感谢任何见解,特别是关于这个平台在工作流程中适合或不适合的地方、对返回响应质量的反馈,以及可能导致采用时出现摩擦的任何因素。
为了在测试阶段保持成本可预测,用户可以使用令牌支持的工作区测试100页或更少的网站。
我确实尽力了。我必须这样做,因为它有一个受“数字极简主义”启发的独特之处。
这个独特之处在于,它只允许你每天(或每X天)获取一次新文章。
为什么呢?让我来解释一下……
我希望我的互联网内容像一份无聊的报纸。你早上拿到它,边喝早咖啡边读完整份,然后就结束了!今天没有更多的新信息了。没有提示,没有警报,宁静、安静、禅意等等。
但为了实现这一点,我需要能够在一次操作中从我数百个源中获取所有文章。这就是Zig和curl优化发挥作用的地方。我尝试了所有的技巧。如果我遗漏了什么,请告诉我!
首先,我在网络层使用了curl multi。它的一个好处是自动进行HTTP/2复用,这意味着如果你的源托管在同一个CDN上,它会重用相同的连接。我将其配置为总共处理50个连接,每个主机最多6个,这似乎是在服务器开始变得可疑之前的最佳点。此外,还使用了条件GET。如果一个源自上次以来没有变化,服务器会直接返回“未修改”,我们立即退出。
在curl下载源的时候,我不想让CPU闲着,所以当curl完成下载一个源时,它会触发一个回调,立即将XML抛入一个工作线程池进行解析。主线程继续管理所有网络事务,而工作线程则并行处理XML。Zig的内存模型非常适合这个。每个源都有自己的ArenaAllocator,这基本上是一个可以在解析过程中分配字符串的游乐场,然后当我们完成时,我们只需一次性清除整个区域。
在解析方面,我使用了libexpat,因为它不会像DOM解析器那样将整个XML加载到内存中。这一点很重要,因为某些播客源的XML文件大小通常超过10MB。因此,通过智能截断,我们下载前几MB(可配置),向后扫描以找到最后一个完整的项目标签,然后在此处截断,只解析这一部分。即使在源的大小变得庞大时,也能保持内存使用的合理性。
至于用户界面,我只是将所有内容通过系统的“less”命令进行管道处理。你可以免费获得vim导航、搜索和分页功能。此外,我还使用了OSC 8超链接,因此你实际上可以点击链接在浏览器中打开它们。完全不需要TUI框架。我还添加了OPML导入/导出和源分组作为附加功能。
结果是:在几秒钟内从数百个RSS源中检索到内容,余下的时间则心安理得。
代码是开源的,采用MIT许可证。如果你有想法让它更快或更好,请在下面评论。功能请求和其他建议也欢迎在这里或GitHub上提出。
这太不真实了。我使用谷歌的 `genai` 发出的请求大多数都出现了 503 错误。有人也遇到同样的问题吗?
我创建了一套完全在浏览器中运行的开发者工具。无需注册账户,无需服务器端处理,无需跟踪。
包括:JSON 格式化器/验证器、CSV 转 JSON/SQL 转换器、正则表达式测试器、Base64 编码器、哈希生成器、UUID 生成器、JWT 解码器、Cron 解析器、时间戳转换器、差异检查器等。
技术:纯 HTML/CSS/JS。故意保持简单,以便快速加载和易于维护。
开源项目:<a href="https://github.com/GhDj/dev-tools" rel="nofollow">https://github.com/GhDj/dev-tools</a>
希望获得反馈,了解接下来哪些工具最有用。
嗨,HN,
WindMouse 是一个相对较老且广为人知的算法,用于生成类人鼠标移动(曲线路径、可变速度、自然减速)。它在自动化讨论中经常被提及,但令人惊讶的是,我找不到一个干净、经过良好测试且可重用的 Python 库实现。
因此,我决定自己来实现它。
这个项目现在以 *WindMouse* 的名称发布:
* 强类型(坐标使用 *NewType*,兼容 mypy)
* 两个后端:
```
* PyAutoGUI(跨平台)
* AutoHotkey(Windows)
```
算法本身并不新颖——新颖的是它的实现。我的目标是创建一个可以下载并立即在项目中使用的工具。
我希望能得到以下方面的帮助:
* 在不同操作系统环境下的 *测试*(特别是 macOS 的边缘案例)
* *新后端*(例如本地 macOS、Wayland、低级 Windows API、游戏引擎、远程桌面)
* 对 API 设计和参数默认值的反馈
欢迎提出关于算法、设计决策或权衡的任何问题。
以下是我在创业公司与大型语言模型(LLMs)合作的方式。
我们有一个单一代码库,里面包含定期的Python数据工作流程、两个Next.js应用和一个小型工程团队。我们使用GitHub进行源代码管理和持续集成/持续交付,部署到GCP和Vercel,并且在自动化方面依赖很大。
**本地开发:**
每位工程师都获得Cursor Pro(加上Bugbot)、Gemini Pro、OpenAI Pro,和可选的Claude Pro。我们并不在意人们使用哪个模型。实际上,LLMs的价值大约相当于每位工程师1.5名优秀的初级/中级工程师,因此支付多个模型的费用是非常值得的。
我们非常依赖预提交钩子:ty、ruff、TypeScript检查、所有语言的测试、格式化和其他保护措施。所有内容都自动格式化。LLMs使得类型和测试的编写变得更加容易,尽管复杂的类型仍然需要一些手动指导。
**GitHub + Copilot工作流程:**
我们支付GitHub Enterprise的费用,主要是因为它允许将问题分配给Copilot,后者会打开一个拉取请求(PR)。我们的规则很简单:如果你打开一个问题,就将其分配给Copilot。每个问题都会附带一个代码尝试。
对于大量的PR没有任何污名。我们经常删除那些没有使用的PR。
我们使用Turborepo管理单一代码库,并在Python方面完全使用uv。
所有编码实践都记录在.cursor/rules文件中。例如:“如果你在进行数据库工作,只需编辑Drizzle的schema.ts,而不要手动编写SQL。”Cursor通常遵循这一点,但其他工具在读取或遵循这些规则时常常遇到困难,无论我们添加多少个agent.md风格的文件。
**我个人的开发循环:**
如果我在外面看到一个bug或有一个想法,我会通过Slack、手机或网页打开一个GitHub问题并将其分配给Copilot。有时问题描述很详细,有时只是一个简单的句子。Copilot会打开一个PR,我稍后会进行审查。
如果我在键盘前,我会在Cursor中作为一个代理在Git工作树中开始,使用最佳模型。我会不断迭代,直到满意,要求LLM编写测试,审查所有内容,然后推送到GitHub。在人类审查之前,我会让Cursor Bugbot、Copilot和GitHub CodeQL审查代码,并要求Copilot修复他们标记的任何问题。
**仍然痛苦的事情:**
要真正知道代码是否有效,我需要运行Temporal、两个Next.js应用、几个Python工作者和一个Node工作者。其中一些是Docker化的,有些则不是。然后我需要一个浏览器来进行手动检查。
据我所知,没有服务可以让我:给出提示、编写代码、启动所有这些基础设施、运行Playwright、处理数据库迁移,并让我手动测试系统。我们用GitHub Actions来近似实现这一点,但这对手动验证或数据库工作没有帮助。
Copilot在分配问题或代码审查时不允许你选择模型。它使用的模型通常效果不佳。你可以在Copilot聊天中选择模型,但在问题、PR或审查中无法选择。
Cursor + 工作树 + 代理的体验很糟糕。工作树从源代码库克隆,包括未暂存的文件,因此如果你想要一个干净的代理环境,你的主代码库必须是干净的。有时感觉直接将代码库克隆到新目录比使用工作树更简单。
**运作良好的方面:**
由于我们不断启动代理,我们的单一代码库设置脚本经过良好测试且可靠。它们也能顺利转化为持续集成/持续交付。
大约25%的“打开问题 → Copilot PR”结果可以直接合并。这并不算惊人,但比零要好,经过几条评论后,这个比例能达到约50%。如果Copilot能更可靠地遵循我们的设置说明或让我们使用更强的模型,这个比例会更高。
总体而言,每月大约花费1000美元,我们获得了相当于每位工程师1.5名额外初级/中级工程师的产出。这些“LLM工程师”总是编写测试,遵循标准,产生良好的提交信息,并且全天候工作。在审查和代理之间的上下文切换中会有一些摩擦,但这是可以管理的。
你们在生产系统中是如何进行氛围编码的?