3作者: shelly_9 个月前
Hi HN, 我们刚刚推出了Blocks——一个AI平台,任何人都可以用它在几分钟内构建自定义工作应用程序和AI智能体,无需任何代码。 我们正在见证软件构建和使用方式的转变。借助AI,软件不再仅仅是跟踪流程,它还可以主动帮助人们完成工作。 问题在于,大多数团队仍然面临两个选择:要么购买永远无法完全匹配的现成工具,要么投入大量时间和金钱进行定制开发。这两种方法都不太好用。 Blocks是第三种选择。它是一个AI原生平台,团队只需用通俗易懂的语言描述他们的需求,就可以为他们的工作流程创建应用程序和AI智能体。这个想法很简单:谁感受到了问题,谁就应该能够构建解决方案。 Blocks中的每个应用程序都有三个协同工作的层: UI:为每个角色定制的界面。 AI智能体:自动化任务,与系统集成并采取行动。 数据:内置数据库 将这三者集中在一起意味着你不仅可以获得一个定制工具,还可以获得一个可以随着时间推移而自动化、适应和改进的系统。团队可以在内部和外部协作,设置角色和权限,并连接到他们已经使用的系统。 工作原理:你用通俗易懂的语言描述你的需求,Ella(我们的AI构建器)就会创建应用程序——UI、智能体和数据库。然后,你可以编辑、扩展并与Google Sheets、Slack、HubSpot、monday.com等工具集成。自定义集成即将推出。 我们希望你能去看看 → <a href="https:&#x2F;&#x2F;blocks.diy" rel="nofollow">https:&#x2F;&#x2F;blocks.diy</a> 现在还处于早期阶段,所以你的反馈将非常宝贵。我们非常感谢你对以下方面的反馈: 非技术用户对构建流程的清晰度感受。 哪些集成或智能体用例会最有帮助。 你在测试时注意到的任何不足之处。 感谢阅读!我们很高兴听到你的想法,并乐于回答任何问题。
4作者: ammario9 个月前
我最初构建它的目的是为了让命令行编码代理在获得更多自主权时更安全。我在这里写了关于这个特定用例的文章:<a href="https:&#x2F;&#x2F;ammar.io&#x2F;blog&#x2F;httpjail" rel="nofollow">https:&#x2F;&#x2F;ammar.io&#x2F;blog&#x2F;httpjail</a>。<p>欢迎提供任何反馈!
1作者: thunderbong9 个月前
2作者: rshanreddy9 个月前
过去几周,我们一直在开发 Ruminate,因为我们对使用 LLM 阅读复杂文本(研究论文、小说、长篇文章等)的困难感到沮丧。<p>我们发现自己不得不将文本/文件复制粘贴到 ChatGPT 中,在不同的标签页中就文本的不同部分进行对话,并且对无法在一个地方轻松跟踪所有这些对话的最佳见解感到沮丧。我们希望有一个地方可以让我们沉浸在文本中,在需要的时候(以一种不引人注目的方式)深入冗长且具有生成性的兔子洞,并拥有一个你的学习过程的“工作成果”(所有笔记集中在一个地方)。不再需要切换标签页——一个围绕文本本身的统一界面。<p>使用 Ruminate,您可以: 1) 上传 PDF、EPUB 或网络文章,并在我们的自定义阅读器中阅读它们(PDF 上传使用 <a href="https:&#x2F;&#x2F;github.com&#x2F;datalab-to&#x2F;marker;" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;datalab-to&#x2F;marker;</a>,用于网络文章的无头浏览器自动化) 2) 高亮文本以提问、获取定义或与 LLM 讨论(LLM 具有整个文档、您已阅读的页面以及网络搜索的上下文) 3) 保存笔记、定义和注释(稍后在它们自己的标签页中查看所有内容)<p>有很多方法可以使用 LLM 来节省您的时间和减轻思考/学习/认知的负担——我们希望这成为一个真正能够让你更深入地思考和理解更多的工具。<p>非常欢迎您提供反馈——关于产品、概念,甚至您自己尝试从困难材料中学习(或广泛地使用 LLM 学习)的经验。非常感谢。
2作者: fnoracr9 个月前
大家好,Hacker News, 我是Helios的创建者,很高兴(也有些紧张)能在这里和大家分享它。 “为什么”:和你们中的许多人一样,我一直对现代AI模型的强大功能着迷,但对GPU资源的高成本和中心化感到沮丧。我开始思考,我们是否可以将传统的分布式计算模型(如SETI@home或Folding@home)应用于现代AI堆栈。目标是构建一个网络,让任何人都可以贡献他们的闲置算力,并以此换取对强大、多模态AI的访问权。 “是什么”:Helios是一个开源平台,用于构建这样的网络。它主要由两部分组成:一个负责管理作业队列和工作节点的协调服务器,以及一个客户端工作节点,任何人都可以安装在Windows或Linux上。用户运行工作节点,贡献资源,从而形成一个全球性的、去中心化的超级计算机,能够处理文本、图像和音频任务。 “怎么做”(技术细节): 架构:这是一个经典的协调器-工作节点模型,完全用Python编写。协调器(orchestrator.py)是大脑,负责处理作业分配、工作节点注册和一个简单的Web UI。工作节点(worker.py)是用户在其机器上运行的“肌肉”。 贡献证明(无加密货币!):这是核心的访问机制。为了防止垃圾邮件和白嫖,只有积极贡献且声誉良好的工作节点才能向网络提交作业。它不是基于代币或区块链;而是一个基于参与的简单、公平的系统。 动态专家:工作节点不会预先加载所有模型。协调器根据当前的作业队列,动态地将AI模型(例如,特定的翻译模型、图像字幕模型)分配给工作节点。这些模型直接从Hugging Face Hub拉取,保持工作节点客户端的轻量级。 多模态:它旨在将不同类型的作业(文本、音频、图像)路由到拥有适当模型和资源的工作节点。 这绝对是一个实验性的、v1.0的项目。我知道存在巨大的挑战,尤其是在安全性方面(沙盒化任务是下一个主要步骤),但我希望发布一个可运行的原型,看看这个想法是否能引起社区的共鸣。 我很乐意听取您对架构、贡献证明概念的反馈,以及您可能提出的任何建议。 GitHub 仓库(代码在这里):<a href="https:&#x2F;&#x2F;github.com&#x2F;fnoracr&#x2F;helios-distributed-ai" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;fnoracr&#x2F;helios-distributed-ai</a> 项目页面(演示和文档):<a href="https:&#x2F;&#x2F;huggingface.co&#x2F;spaces&#x2F;fnoracr&#x2F;Helios_Distributed_AI-Helios_una_IA_distribuida" rel="nofollow">https:&#x2F;&#x2F;huggingface.co&#x2F;spaces&#x2F;fnoracr&#x2F;Helios_Distributed_AI-...</a> 安装程序(.exe/.tar.gz):<a href="https:&#x2F;&#x2F;github.com&#x2F;fnoracr&#x2F;helios-distributed-ai&#x2F;releases&#x2F;tag&#x2F;Version1.0" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;fnoracr&#x2F;helios-distributed-ai&#x2F;releases&#x2F;ta...</a> 感谢您的关注!
2作者: bijan79 个月前
看起来,除非我遗漏了什么,Rust 迭代器和 C++ ranges/views 的性能之间存在相当大的差距。 [https://godbolt.org/z/v76rcEb9n](https://godbolt.org/z/v76rcEb9n) [https://godbolt.org/z/YG1dv4qYh](https://godbolt.org/z/YG1dv4qYh) Rust: ``` use std::time::Instant; fn expand_iota_views(input: &[i32]) -> impl Iterator<Item = i32> + '_ { input .iter() .flat_map(|&n| 1..=n) .flat_map(|n| 1..=n) .flat_map(|n| 1..=n) } fn main() { let input: Vec<i32> = (0..=50).collect(); let sample_result: Vec<i32> = expand_iota_views(&input).collect(); println!("Rust Result count: {}", sample_result.len()); let start = Instant::now(); let mut total_count = 0; for _ in 0..1000 { let result = expand_iota_views(&input); total_count += result.count(); } let duration = start.elapsed(); println!("Rust Total count (1000 iterations): {}", total_count); println!("Rust Total time: {} microseconds", duration.as_micros()); println!( "Rust Average per iteration: {:.2} microseconds", duration.as_micros() as f64 / 1000.0 ); } ``` 输出: Rust Result count: 292825 Rust Total count (1000 iterations): 292825000 Rust Total time: 1025 microseconds Rust Average per iteration: 1.02 microseconds C++: ``` #include <chrono> #include <iostream> #include <numeric> #include <ranges> #include <vector> inline auto expandIotaViews(const std::vector<int>& input) { auto iota_transform = [](const int number) { return std::views::iota(1, number + 1); }; return input | std::views::transform(iota_transform) | std::views::join | std::views::transform(iota_transform) | std::views::join | std::views::transform(iota_transform) | std::views::join; } int main() { std::vector<int> input(51); std::iota(input.begin(), input.end(), 0); auto sample_result = expandIotaViews(input); std::vector<int> result_vec; for (auto val : sample_result) { result_vec.push_back(val); } std::cout << "C++ Result count: " << result_vec.size() << std::endl; auto start = std::chrono::high_resolution_clock::now(); size_t total_count = 0; for (int i = 0; i < 1000; ++i) { auto result = expandIotaViews(input); total_count += std::ranges::distance(result); } auto end = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start); std::cout << "C++ Total count (1000 iterations): " << total_count << std::endl; std::cout << "C++ Total time: " << duration.count() << " microseconds" << std::endl; std::cout << "C++ Average per iteration: " << duration.count() / 1000.0 << " microseconds" << std::endl; return 0; } ``` 输出: C++ Result count: 292825 C++ Total count (1000 iterations): 292825000 C++ Total time: 174455 microseconds C++ Average per iteration: 174.455 microseconds