嗨,HN,
我们刚刚推出了Blocks——一个AI平台,任何人都可以在几分钟内构建自定义工作应用和AI代理,无需编码。
我们看到软件的构建和使用方式正在发生变化。借助AI,软件不仅仅是跟踪流程,它可以积极帮助人们完成工作。
问题在于,大多数团队仍然面临两个选择:要么购买不太合适的现成工具,要么投入大量时间和金钱进行定制开发。这两种方式都不太理想。
Blocks是第三种选择。它是一个原生AI平台,团队只需用简单的语言描述他们的需求,就可以为他们的工作流程创建应用和AI代理。这个想法很简单:感受到问题的人应该能够构建解决方案。
Blocks中的每个应用都有三个层次协同工作:
- 用户界面:为每个角色定制的界面。
- AI代理:自动化任务、与系统集成并采取行动。
- 数据:内置数据库。
将这三者集中在一个地方意味着你不仅获得了一个自定义工具,还得到了一个随着时间推移而自动化、适应和改进的系统。团队可以在内部和外部协作,设置角色和权限,并连接到他们已经使用的系统。
工作原理是:你用简单的语言描述你的需求,Ella(我们的AI构建器)会创建应用——用户界面、代理和数据库。之后,你可以编辑、扩展,并与Google Sheets、Slack、HubSpot、monday.com等工具集成。定制集成功能即将推出。
我们希望你能试用一下 → [https://blocks.diy](https://blocks.diy)
现在还处于早期阶段,因此你的反馈将非常宝贵。我们非常希望能收到关于以下方面的反馈:
- 非技术用户对构建过程的清晰度。
- 哪些集成或代理用例最有用。
- 测试过程中你注意到的任何粗糙之处。
感谢你的阅读!我们期待听到你的想法,并乐意回答任何问题。
返回首页
最新
我最初构建这个是为了让命令行编码代理拥有更多自主权时更加安全。我在这里写了关于这个特定用例的内容:<a href="https://ammar.io/blog/httpjail" rel="nofollow">https://ammar.io/blog/httpjail</a>。<p>任何反馈都非常感谢!
在过去几周,我们开发了Ruminate,因为我们对使用大型语言模型(LLMs)阅读复杂文本(如研究论文、小说、长篇文章等)的困难感到沮丧。
我们发现自己常常需要将文本或文件复制粘贴到ChatGPT中,在不同的标签页中讨论文本的不同部分,同时又感到失望,因为无法轻松地在一个地方追踪所有对话中的最佳见解。我们希望有一个地方,可以让我们沉浸在文本中,随时深入探讨感兴趣的内容(以不打扰的方式),并拥有一个“工作成果”,即你学习过程中的所有笔记集中在一个地方。再也不需要频繁切换标签页——一个围绕文本本身的统一界面。
使用Ruminate,你可以:
1) 上传PDF、EPUB或网页文章,并在我们的自定义阅读器中阅读(PDF上传使用<a href="https://github.com/datalab-to/marker" rel="nofollow">https://github.com/datalab-to/marker</a>的无头浏览器自动化来处理网页文章)
2) 高亮文本以提问、获取定义或与LLM讨论(它会了解整个文档的上下文、你已阅读的页面,并进行网页搜索)
3) 保存笔记、定义和注释(并在后续的标签页中查看它们)
有很多方法可以利用LLM来节省时间,减轻思考、学习和认知的负担——我们希望这个工具能够真正帮助你更深入地思考和理解。
非常期待你的反馈——无论是对产品、概念的看法,还是你在学习困难材料(或广泛使用LLM学习)时的个人经历。非常感谢!
ssh tuitype.app<p>一个通过 SSH 在终端中提供的最小化每日打字挑战(使用 Go、Wish 和 BubbleTea)
嗨,Hacker News的朋友们,
我是Helios的创始人,我很高兴(也有点紧张)与大家分享这个项目。
“为什么”:和许多人一样,我对现代AI模型的强大能力感到着迷,但也对GPU资源的高成本和集中化感到沮丧。我开始思考是否可以将传统的分布式计算模型(如SETI@home或Folding@home)应用于现代AI技术栈。我们的目标是建立一个网络,任何人都可以贡献他们闲置的计算能力,并因此获得访问强大多模态AI的机会。
“是什么”:Helios是一个开源平台,用于构建这个网络。它主要由两个部分组成:一个管理作业队列和工作者的调度服务器,以及一个任何人都可以在Windows或Linux上安装的客户端工作者。用户运行工作者,贡献资源,从而形成一个全球去中心化的超级计算机,能够处理文本、图像和音频任务。
“如何做”(技术细节):
架构:这是一个经典的调度器-工作者模型,完全用Python编写。调度器(orchestrator.py)是大脑,负责作业分配、工作者注册和简单的网页用户界面。工作者(worker.py)是用户在其机器上运行的部分。
贡献证明(无加密货币!):这是核心的访问机制。为了防止垃圾信息和搭便车,只有作为活跃贡献者并拥有良好声誉的工作者才能向网络提交作业。这个系统不基于代币或区块链,而是一个基于参与的简单公平系统。
动态专家:工作者并不是预装所有模型。调度器根据当前的作业队列动态地将AI模型(例如,特定的翻译模型、图像描述模型)分配给工作者。这些模型直接从Hugging Face Hub中获取,保持工作者客户端的轻量级。
多模态:该系统旨在将不同类型的作业(文本、音频、图像)路由到具备相应模型和资源的工作者。
这确实是一个实验性的v1.0项目。我知道面临着巨大的挑战,尤其是在安全性方面(沙箱任务是一个重要的下一步),但我希望能推出一个可工作的原型,以看看这个想法是否能引起社区的共鸣。
我非常希望能得到你们对架构、贡献证明概念以及你们可能有的任何建议的反馈。
GitHub仓库(代码在这里):[https://github.com/fnoracr/helios-distributed-ai](https://github.com/fnoracr/helios-distributed-ai)
项目页面(演示和文档):[https://huggingface.co/spaces/fnoracr/Helios_Distributed_AI-Helios_una_IA_distribuida](https://huggingface.co/spaces/fnoracr/Helios_Distributed_AI-Helios_una_IA_distribuida)
安装程序(.exe/.tar.gz):[https://github.com/fnoracr/helios-distributed-ai/releases/tag/Version1.0](https://github.com/fnoracr/helios-distributed-ai/releases/tag/Version1.0)
感谢大家的关注!
似乎Rust的迭代器性能与C++的范围/视图之间存在相当大的差距,除非我遗漏了什么。
Rust代码:
```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++代码:
```cpp
#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
```