176 lines
7.3 KiB
Markdown
176 lines
7.3 KiB
Markdown
<p align="center">
|
||
<img src="icons/anybot.svg" alt="AnyBot" width="120">
|
||
</p>
|
||
|
||
<h1 align="center">AnyBot</h1>
|
||
|
||
<p align="center">
|
||
<b>跑在你自己電腦上的 AI 助理。</b><br>
|
||
會聊天,也會做事:整理檔案、跑指令、看網頁、操作螢幕、到點自己排。
|
||
</p>
|
||
|
||
<p align="center">
|
||
中文 · <a href="README.en.md">English</a>
|
||
</p>
|
||
|
||
<p align="center">
|
||
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue" alt="Apache-2.0"></a>
|
||
<img src="https://img.shields.io/badge/macOS%20%C2%B7%20Linux%20%C2%B7%20Windows-1c1c1c" alt="macOS, Linux, Windows">
|
||
<img src="https://img.shields.io/badge/Rust%201.95-orange" alt="Rust 1.95">
|
||
<img src="https://img.shields.io/badge/self--hosted-green" alt="self-hosted">
|
||
</p>
|
||
|
||
<p align="center">
|
||
<img src="shots/readme/chat.png" alt="左邊是不同的 Bot,右邊是跟其中一個聊天" width="960">
|
||
</p>
|
||
|
||
模型用你自己的金鑰:xAI、OpenAI、Claude、Gemini、OpenRouter、OpenCode Go、家裡的 Ollama,或任何講 OpenAI 那套介面的服務。聊天記錄、檔案、密碼留在你的機器上,不會先存進別人的帳號伺服器。左邊每一行都是一個 Bot:研究、寫作、管電腦,可以各用各的模型。
|
||
|
||
---
|
||
|
||
## 30 秒裝好
|
||
|
||
打開終端機,貼一行。
|
||
|
||
```sh
|
||
# macOS、Linux(不限 Ubuntu:apt、dnf、yum、pacman、zypper、apk、xbps 都認得)
|
||
curl -fsSL https://code.30cm.net/daniel.w/AnyBot/raw/branch/main/install.sh | sh
|
||
```
|
||
|
||
```powershell
|
||
# Windows 10/11(x64、arm64)
|
||
irm https://code.30cm.net/daniel.w/AnyBot/raw/branch/main/install.ps1 | iex
|
||
```
|
||
|
||
它會自己裝好需要的東西、問你要裝哪一種,然後做第一次設定。第一次編譯 5–15 分鐘,之後更新 1–2 分鐘;裝在你的使用者資料夾,不需要系統管理員。
|
||
|
||
裝好打開 AnyBot(Mac 第一次要對圖示按右鍵 › 打開),「設定 › 模型」貼上 API 金鑰,建一個 Bot 就能開始聊。沒有金鑰可以選 Ollama,在你自己的電腦上跑。
|
||
|
||
**帳號伺服器 + 大腦**(任何有 Docker 的 Linux,2 GB 以上;只問網址、帳號、密碼,HTTPS 它自己處理):
|
||
|
||
```sh
|
||
curl -fsSL https://code.30cm.net/daniel.w/AnyBot/raw/branch/main/install.sh | sh -s -- server
|
||
```
|
||
|
||
**無頭手腳**(給 Bot 操控的電腦,沒螢幕也行)。網址和配對碼在 AnyBot 按「加一台電腦」就會看到:
|
||
|
||
```sh
|
||
curl -fsSL https://code.30cm.net/daniel.w/AnyBot/raw/branch/main/install.sh \
|
||
| sh -s -- hands https://你的網址 482913
|
||
```
|
||
|
||
```powershell
|
||
# Windows 手腳
|
||
$env:ANYBOT_MODE='hands'
|
||
$env:ANYBOT_PAIR_URL='https://你的網址'
|
||
$env:ANYBOT_PAIR_CODE='482913'
|
||
irm https://code.30cm.net/daniel.w/AnyBot/raw/branch/main/install.ps1 | iex
|
||
```
|
||
|
||
給代理程式跑、不要出現問句:`sh install.sh --print` 先問這台適合什麼,再用環境變數,見 [install/AGENT.md](install/AGENT.md)。
|
||
|
||
---
|
||
|
||
## 它會先問你,再動手
|
||
|
||
你說「在我的電腦上做」,它不會默默執行。畫面上出現要做的事,你按允許才繼續。付款、寄出、刪除這類動作,每次都會再問一次,即使你關掉了別的詢問。
|
||
|
||
<p align="center">
|
||
<img src="shots/readme/computer-phone.png" alt="左:Bot 要在你的電腦上執行指令前,先跳出允許一次、一律允許或拒絕。右:手機瀏覽器打開你的網址,先登入" width="960">
|
||
</p>
|
||
|
||
- **整理檔案、跑指令** — 做之前先問。也可以只讓它用「它自己的電腦」,一個跟你隔開的小桌面。
|
||
- **看網頁、填表** — 用它自己的瀏覽器。密碼和卡號由程式直接填,不會先念給模型聽。
|
||
- **操作你正在用的畫面** — 看截圖上的按鈕再點。點不到,或是要你登入時,把畫面交給你。
|
||
- **到點自己做** — 「每個工作日早上 9 點整理三則新聞」變成例行任務。
|
||
- **手機隨時插手** — 瀏覽器打開你的網址、登入,就是同一個聊天,在外面也能看它做到哪。
|
||
|
||
<p align="center">
|
||
<img src="shots/readme/routines.png" alt="跟 Bot 說每個工作日早上九點整理新聞,它就排好例行任務" width="960">
|
||
</p>
|
||
|
||
---
|
||
|
||
## 一台想,幾台被用
|
||
|
||
一台負責想和記(**大腦**),其他電腦負責被操作(**手腳**),手機只是一個視窗。它們都連到你自己的**帳號伺服器**,所以家裡的電腦不用開連接埠、也不用固定 IP。
|
||
|
||
```
|
||
你在手機上說話 你在筆電上說話 沒螢幕的電腦也行
|
||
\ | /
|
||
└──────── 帳號伺服器(只負責把大家接起來)────────┘
|
||
|
|
||
大腦:Bot、聊天、記憶、例行任務在這裡
|
||
|
|
||
手腳:大腦叫它看畫面、點擊、讀檔、開瀏覽器
|
||
```
|
||
|
||
| 角色 | 你要做的 |
|
||
|---|---|
|
||
| 大腦 | 架一次伺服器,或先用一台常開的 Mac |
|
||
| 螢幕 | 裝桌面 App,登入同一個帳號 |
|
||
| 手腳 | 按「加一台電腦」,把那一行貼過去 |
|
||
| 手機 | 瀏覽器打開你的網址,加入主畫面 |
|
||
|
||
沒有伺服器也可以先拿一台 Mac 當大腦,見 [docs/multi-device.md](docs/multi-device.md) 的做法 B。
|
||
|
||
---
|
||
|
||
## 一句話進去之後
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
you[你:桌面 App 或手機]
|
||
relay[帳號伺服器<br/>只轉送,不保存聊天]
|
||
brain[大腦上的 AnyBot]
|
||
model[你選的模型]
|
||
ask[要動電腦?先問你]
|
||
box[Bot 自己的電腦<br/>Docker 裡的小桌面]
|
||
hands[某一台手腳<br/>你的 Mac、Linux 或 Windows]
|
||
|
||
you --> relay --> brain
|
||
brain --> model
|
||
brain --> ask
|
||
ask --> box
|
||
ask --> hands
|
||
```
|
||
|
||
1. 你在桌面或手機送出訊息。手機不自己想,它看的是大腦上的同一份聊天。
|
||
2. 大腦把這句話、這個 Bot 的指示、它能用的工具,交給你選的模型。
|
||
3. 模型只要回答就直接寫回來;要讀檔、開網頁、點畫面,就提出一個動作。
|
||
4. 這個動作先過 AnyBot 自己的規則,不讓模型決定能不能做。
|
||
5. 你允許之後,動作在**你指定的那台電腦**上做:隔離桌面、你正在用的這台,或一台配對過的手腳。
|
||
6. 結果回到聊天。手機、筆電看到同一份,因為都在看大腦。
|
||
|
||
三支程式就夠了,沒有資料庫伺服器:`anybot`(桌面、背景 `anybot --serve`、終端機設定 `anybot setup` 都這一支)、`anybot-relay`(帳號伺服器,電腦主動連過去)、手機網頁(一個檔案,做在程式裡)。實作細節在 [docs/architecture.md](docs/architecture.md)。
|
||
|
||
---
|
||
|
||
## 文件
|
||
|
||
| 你想… | 看 |
|
||
|---|---|
|
||
| 手機、大腦、手腳、連不上 | [docs/multi-device.md](docs/multi-device.md) |
|
||
| 某個平台裝失敗、要自己編譯 | [docs/install.md](docs/install.md) |
|
||
| 程式怎麼分層 | [docs/architecture.md](docs/architecture.md) |
|
||
| 帳號伺服器的介面 | [docs/protocol.md](docs/protocol.md) |
|
||
| 信任邊界、金鑰放哪 | [SECURITY.md](SECURITY.md) |
|
||
| 功能一條條清單 | [FEATURES.md](FEATURES.md) |
|
||
| 打包、自動建置 | [docs/release.md](docs/release.md) |
|
||
|
||
英文摘要在 `docs/en/`。
|
||
|
||
## 一起改
|
||
|
||
```sh
|
||
git clone https://code.30cm.net/daniel.w/AnyBot.git
|
||
cd AnyBot
|
||
make deps && make && make install
|
||
```
|
||
|
||
`make run` 直接打開,`make test` 跑測試,`make help` 看全部。
|
||
|
||
## 授權
|
||
|
||
Apache-2.0,見 [LICENSE](LICENSE)。
|