内容
# 阿卡纳
<p align="center">
<img src="docs/branding/logo.svg" alt="阿卡纳" width="220">
</p>
<p align="center">
<b>一款运行在您机器上的自我托管助手,搭配您选择的模型。记忆由您审批;密钥保持加密。</b>
</p>
<p align="center">
一款自我托管的AI助手服务器:一个网页UI,五个可互换的LLM提供商,带有审查门的持久记忆,一个加密的凭证保险库,自定义唤醒词语音,以及用于浏览器和桌面自动化的功能包。功能包采用纯目录格式,因此编写自己的功能包是预期的方式。您的保险库、记忆和文件保留在您的机器上;无需账号,无需遥测,无需云租户。
</p>
<p align="center">
<img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="许可证:MIT">
<img src="https://img.shields.io/badge/python-3.11%2B-blue.svg" alt="Python 3.11+">
<img src="https://img.shields.io/badge/providers-claude%20%7C%20cursor%20%7C%20gemini%20%7C%20openai%20%7C%20ollama-lightgrey.svg" alt="提供商:claude / cursor / gemini / openai / ollama">
</p>
<p align="center">
<img src="docs/media/demo.gif" alt="阿卡纳演示 — 一个问题,记忆在三个工具调用中回忆,一个真正的简报写回" width="780">
<br/>
<sub><em>从实时应用中记录 — 记忆在三个工具调用中回忆,一个真正的简报写回。</em></sub>
</p>
> **您的数据存储位置。** 您的保险库、记忆数据库和功能包存储保留在您的机器上。模型流量不会:除非您运行Ollama,否则提示词会发送到您选择的云提供商。**默认**语音路径也是云端。`edge-tts` 将合成文本发送到微软;浏览器语音转文本将音频发送到谷歌。完全本地的管道是可能的(Ollama用于推理加上本地语音),但这是**最少测试的路径**:小型本地模型调用工具不可靠。阿卡纳的记忆/保险库工具调用经过单元测试,但**未针对真实本地模型进行端到端验证**。将本地推理视为实验性。请参阅[安全性和隐私](#security-and-privacy)。
---
## 目录
- [快速入门](#快速入门)
- [为什么选择阿卡纳](#为什么选择阿卡纳)
- [截图](#截图)
- [工作原理](#工作原理)
- [提供商](#提供商)
- [记忆](#记忆)
- [语音](#语音)
- [功能包](#功能包)
- [远程访问和Telegram](#远程访问和telegram)
- [安全性和隐私](#安全性和隐私)
- [配置](#配置)
- [CLI参考](#cli参考)
- [已知限制](#已知限制)
- [开发](#开发)
- [贡献、许可证和归属](#贡献-许可证和归属)
---
## 快速入门
**需要Python 3.11+。** Node 18+对于Cursor和Claude提供商以及浏览器功能包(它通过`npx`运行`@playwright/mcp`)是必需的。
**Linux / macOS:**
```sh
git clone https://github.com/MuhittinYilmazer/akana.git
cd akana
bash install.sh
```
**Windows:**
```sh
git clone https://github.com/MuhittinYilmazer/akana.git
cd akana
.\install.cmd
```
`install.cmd`是一个批处理包装器,它使用`-ExecutionPolicy Bypass`调用`install.ps1`以实现此一次性进程,因此全新的Windows盒子不需要任何策略更改。(`powershell -ExecutionPolicy Bypass -File install.ps1`可以实现相同的功能。)
引导程序查找Python 3.11+解释器并将其交给`python akana.py setup`。**设置向导**创建虚拟环境并安装依赖项,然后配置提供商和语音。它要求您选择一种语言(英语或土耳其语),然后遍历提供商和语音附加项。捆绑的“Hey Akana”唤醒模型默认启用;唤醒开关是UI中的运行时设置。两个脚本接受与`setup`相同的标志并转发它们。
设置完成后:
```sh
python akana.py start
```
服务器打印其URL(默认为`http://127.0.0.1:8766`)和生成的Bearer令牌(如果生成了一个)。在浏览器中打开URL即可访问聊天和记忆工作室面板。
**没有默认提供商。** 您在设置期间选择一个。两种低摩擦路径:
- **零API密钥,全本地:** 安装 [Ollama](https://ollama.com) 并将Akana指向它,以便模型推理保留在您的机器上。这是**最少测试的路径**;记忆/保险库工具表面与提供商完全相同,但工具是否实际触发取决于本地模型的函数调用能力。请参阅[提供商](#提供商)。
- **最简单的托管:** **Claude** 提供商通过Claude Code CLI进行身份验证。交互式登录`claude`或使用`claude setup-token`生成令牌并在设置 → 凭证中粘贴它。每个请求没有API密钥。这是使用最多和测试最多的路径。
## 为什么选择阿卡纳
- **您批准后记忆。** LLM自动捕获通道和模型的自身记忆工具都进入一个**暂存箱**。暂存项对助手可见(标记为待处理/未批准),但在记忆工作室批准之前,任何内容都不会成为持久的、受信任的记忆。
- **五个提供商,一个UI。** Claude、Cursor、Gemini、OpenAI和Ollama都在一个调度中心和聊天界面下运行。无需更改工作流即可更换后端。
- **加密凭证保险库。** 提供商密钥和机密存储在Fernet加密存储中,主密钥**外部**于数据目录(仅限所有者)。每次助手访问机密时,都会记录审计日志。
- **具有承诺唤醒模型的语音。** 自定义训练的“Hey Akana”openWakeWord模型在仓库中,默认为默认唤醒模型。完全本地的语音路径(本地唤醒,本地STT,离线Piper TTS)只需一步即可安装。
- **浏览器和桌面自动化。** 可选的功能包允许助手驱动一个完整的Playwright浏览器或控制您的实时桌面(鼠标,键盘,剪贴板,窗口)。
- **双语(英语/土耳其语)。** UI,角色提示,唤醒词,TTS和STT都遵循一个语言切换器。默认为英语。
## 截图
<table>
<tr>
<td align="center"><a href="docs/screenshots/chat.png"><img src="docs/screenshots/chat.png" alt="聊天面板" width="260"></a><br/><sub><b>聊天</b> — 角色感知,工具调用,记忆注入的回合</sub></td>
<td align="center"><a href="docs/screenshots/memory-studio.png"><img src="docs/screenshots/memory-studio.png" alt="记忆工作室" width="260"></a><br/><sub><b>记忆工作室</b> — 审查收件箱,浏览事实,步行时间线</sub></td>
<td align="center"><a href="docs/screenshots/settings.png"><img src="docs/screenshots/settings.png" alt="设置" width="260"></a><br/><sub><b>设置</b> — 提供商,模型,保险库,语音,功能包</sub></td>
</tr>
</table>
## 工作原理
阿卡纳是一个FastAPI应用程序(`akana_server/`),它在单个端口上提供HTTP和WebSocket接口,以及静态网页UI(`web_ui/`,无需构建步骤)。在HTTP接口和提供商之间有一个调度器,其单个调度中心(`llm_dispatch.py`)解析配置的提供商并转发每个回合。记忆和保险库作为子进程启动的独立MCP服务器暴露给模型,因此相同的服务器也可以连接到外部MCP客户端。功能包从`~/.akana/packs`和存储库的`packs/`中发现。
```mermaid
flowchart TD
User([用户]) --> UI[网页UI<br/>聊天 · 记忆工作室 · 设置]
UI <-->|HTTP + WS| Server[FastAPI服务器<br/>akana_server]
Server --> Orch[调度器<br/>llm_dispatch]
Orch --> Cursor[Cursor]
Orch --> Claude[Claude]
Orch --> Gemini[Gemini]
Orch --> OpenAI[OpenAI]
Orch --> Ollama[Ollama]
Server -->|启动| MemMCP[akana_memory MCP]
Server -->|启动| VaultMCP[akana_vault MCP]
Server --> Packs[功能包主机<br/>~/.akana/packs → 存储库packs/]
MemMCP --> DB[(SQLite<br/>memory.db)]
VaultMCP --> KeyStore[(保险库/keys.json)]
```
完整细节(服务器,调度器,保险库内部和数据目录布局)在 **[docs/architecture.md](docs/architecture.md)** 中。
## 提供商
阿卡纳在共享调度层下注册了五个聊天提供商。**没有默认提供商:** 如果没有配置任何提供商,聊天调用将失败,并显示`未配置LLM提供商`错误。每个提供商都使用**您自己的**密钥或会话;外提供商的密钥在Cursor和Claude桥接器启动前从环境中剥离。
| 提供商 | 安装 | 模型流量去向 | 记忆/保险库访问 | 代理重用 | 备注 |
| --- | --- | --- | --- | --- | --- |
| **Claude** | 全球`@anthropic-ai/claude-code` CLI | Anthropic | 原生MCP | 是( `--resume`) | MCP原生;唯一具有自动继续(默认关闭)的提供商。 |
| **Cursor** | 节点桥接器(`add cursor` → `npm install`) | Cursor云 | 原生MCP | 是(存储`agent_id`,SDK `Agent.resume`) | MCP原生;代理重用。 |
| **Gemini** _(beta)_ | `add gemini`(`google-genai`) | Google | 完全对等(函数调用)+ MCP桥接器 | 否 | 图片+PDF输入(内联);思考Gemini 3+。 |
| **OpenAI** _(beta)_ | 无(使用核心`httpx`) | OpenAI | 完全对等(函数调用)+ MCP桥接器 | 否 | 图片+PDF输入(内联);`reasoning_effort`在o系列和GPT-5+上。 |
| **Ollama** _(beta)_ | 外部Ollama应用 | 本地Ollama服务器 | 完全对等(函数调用)+ MCP桥接器 | 否 | 完全本地,但**最少测试**路径。工具表面处于对等状态,但触发取决于本地模型的函数调用能力;小型模型调用不可靠。 |
> **Claude和Cursor是测试路径;其他三个是beta版。** Claude和Cursor各自运行为自己的代理(`claude` CLI,Cursor SDK),原生支持MCP,是项目构建和日常使用的对象。 **Gemini,OpenAI和Ollama是beta版:** 它们是普通的聊天提供商,适用于记忆/保险库和MCP工具调用,但仅通过假提供商的单元测试。它们**未**针对实时Google / OpenAI / Ollama API进行验证,也不是代理编码器(`claude`/Cursor风格的代理读取,写入和运行在您的工作空间)。将它们视为不完整并期望粗糙边缘;如果遇到问题,请打开一个问题。
Cursor和Claude原生支持MCP,可以看到内置的`akana_memory`和`akana_vault`服务器,以及`mcp_servers.yaml`中的任何内容。Gemini,OpenAI和Ollama获得**相同**的工具,以原生函数调用模式重新声明。记忆操作(搜索/记住/忘记,通过`memory_search` / `save_memory` / `memory_forget`原生暴露)和完整的七工具保险库表面在功能上与Claude和Cursor通过MCP达到的相同,源自相同的模式,因此两个表面保持同步。这些提供商还通过进程内桥接器访问外部MCP服务器,其工具循环在每个回合中限制为五轮。该路径通过假提供商的单元测试。工具对等性和模型能力是独立的关注点:在本地Ollama模型上,工具是否实际触发取决于模型的函数调用能力,并且未在真实硬件上进行端到端验证。较小的模型调用工具不可靠,因此在本地工具使用中视为实验性。
每个提供商的安装,凭证,思考模式和多模态输入,以及两个文件上传机制都在 **[docs/providers.md](docs/providers.md)** 中。
## 记忆
阿卡纳的记忆是**审查门控**。事实通过两种方式提出:LLM自动捕获通道或模型调用记住工具。**两者默认进入暂存箱**。暂存项对助手可见,标记为待处理/未批准,但在记忆工作室批准之前,任何内容都不会成为持久的、受信任的记忆。
存储模型,捕获管道,矢量回忆,事件账本和后台摘要作业在 **[docs/memory.md](docs/memory.md)** 中涵盖。
## 语音
自定义训练的 **“Hey Akana”** openWakeWord ONNX模型在存储库中(`akana_server/voice/wake_models/hey_akana.onnx`)并且是默认唤醒模型。安装 `python akana.py add voice-full` 用于本地声学唤醒评分和本地(`faster-whisper`)语音转文本;如果没有,浏览器的`SpeechRecognition` API处理唤醒和STT(仅限Chromium;音频发送到谷歌)。
文本转语音提供三个引擎:
| 引擎 | 本地性 | 许可证 | 备注 |
| --- | --- | --- | --- |
| **edge-tts** | **在线(默认)**,文本发送到微软 | **GPL-3.0** (从PyPI安装;不包含在内) | 微软神经语音;无需设置。 |
| **piper** | **离线** | MIT | `add voice-piper`。推荐用于本地/商业使用。 |
| **XTTS-v2** | **离线**,重量大 | 模型权重 **CPML - 非商业** | `add xtts`。~2 GB模型,GPU友好,语音克隆。不用于商业使用。 |
> **为什么edge-tts是默认的:** 它不需要下载和本地模型。它是**在线的**(合成文本发送到微软)和 **GPL-3.0**。它从PyPI作为运行时依赖项安装,不包含在内,因此Akana自己的源代码保持MIT。为了离线或许可路径,请安装 **Piper** (MIT)并选择它。参见 [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md) 和 [安全性和隐私](#安全性和隐私)。
唤醒词调优,STT选项,语音选择,会话模式,Gemini Live / OpenAI Realtime桥接器在 **[docs/voice.md](docs/voice.md)** 中。
## 功能包
功能包捆绑技能,角色和MCP工具声明。每个包都是一个带有`pack.yaml`清单和每个技能的`SKILL.md`的目录。存储库中包含三个:
- **browser-pack** - 将Microsoft的Playwright MCP (`@playwright/mcp`) 作为一个完整的持久性配置文件浏览器:导航,截图,点击,填充,类型,截图,下载。
- **computer-control** - 一个基于`pyautogui`,`mss`,`pygetwindow`和`pyperclip`的第一方MCP服务器:截图,鼠标点击/拖动/滚动,类型,热键,剪贴板,启动应用程序,以及在实时桌面上的窗口列表/聚焦/移动/调整大小。
- **pack-author-pack** - 用于构建和验证新包的离线元包。无需外部工具,无MCP服务器。
### 编写您自己的包
包是主要的扩展点。三个捆绑包是示例;格式是编写您自己的包。包是一个目录,您将其放入`packs/`;Akana会在下一个重新扫描时热加载它。最简单的情况,它是一个`pack.yaml`加上一个`skills/<name>/SKILL.md`。要公开工具,它声明一个MCP服务器,仅在您批准后安装(请参阅下面的同意模型)。
- 完整的生产者↔消费者合同(清单模式,技能格式,MCP声明,同意,以及 `v0.1` 强制执行表)都在 **[packs/PACK_INTERFACE.md](|packs/PACK_INTERFACE.md)** (源代码:`packs/contract/`)。
- 捆绑的 **pack-author-pack** 提供了帮助程序来搭建一个包,添加技能,并验证它。 这是一个可以复制的工作示例。
**安装 computer-control 的依赖项。** `computer-control` 包需要额外的 Python 包,这些包 **不** 在核心需求中。启用它之前,请将它们安装到同一个 venv 中:
```sh
pip install -r requirements-computer.txt
```
(这会拉取 `pyautogui`,`mss`,`pygetwindow` 和 `pyperclip`。)`browser-pack` 相比之下需要 Node:它通过 `npx` 运行 `@playwright/mcp`。
**同意模型。** 启用一个包仅注册其技能和角色并探测其声明的工具。安装一个 MCP 服务器(将其写入 `mcp_servers.yaml` 以便提供商看到它)是一个单独的,带有身份验证的步骤(`POST /packs/consent`)。它永远不会自动发生。撤销(`POST /packs/consent/revoke`)仅适用于带有 Akana 自己的 `managed_by` 标记的条目,因此永远不会覆盖用户编写的条目。
> **v0.1 版的权限是建议性的。** `pack.yaml` 中的 `permissions` 块(网络,沙盒层,`secure_vault_read`,`file_system`)是元数据;主机**不**强制执行它。包在普通帐户的权限下作为子进程运行。**没有浏览器-pack 或 computer-control 的沙盒**。
## 远程访问和Telegram
**远程访问。** 阿卡纳是一个个人服务器,而不是云服务。支持从手机或平板电脑远程访问的方法是 [Tailscale](https://tailscale.com/) Serve 在私有尾网:设置 `AKANA_TOKEN`,使用 `tailscale serve` 暴露环回端口,然后通过扫描二维码将手机配对(二维码携带令牌在URL片段中,手机立即剥离)。语音模式和PWA安装需要HTTPS,Tailscale Serve提供。安全防护措施:非环回绑定和空令牌拒绝启动,代理请求始终需要令牌,Funnel(公共暴露)被令牌拒绝。
**Telegram。** 可选的桥接器允许您像其他机器人一样访问本地助手。创建一个机器人与 [@BotFather](https://t.me/BotFather) ,将令牌粘贴到设置中(或 `AKANA_TELEGRAM_BOT_TOKEN`),然后设置一个 **必填** 聊天 ID 允许列表(`AKANA_TELEGRAM_ALLOWED_CHAT_IDS`)。如果没有设置 ID,轮询循环不会启动。仅限文本;所有外发消息都通过出口过滤器(秘密/PII 消除)。
完整的设置,安全防护措施,身份验证标头和 Telegram 斜杠命令在 **[docs/remote-access.md](docs/remote-access.md)** 中。
## 安全性和隐私
## 配置
## CLI参考
## 已知限制
## 开发
## 贡献,许可证和归属
## 安全性和隐私
Akana的威胁模型涵盖了**意外暴露**:签入的密钥、未加密存储的数据目录备份、读取或写入不应该访问的内存的助手。它**不**涵盖以您的用户账户运行的本地攻击者。它**不**涵盖您向Akana指向的LLM供应商扩展的信任。
- **只有Ollama针对本地模型服务器运行。** Claude、Cursor、Gemini和OpenAI将您的提示发送给他们的供应商,以及模型生成的任何工具调用参数(可以包括内存工具查询或保险箱工具参数)。保险箱、内存数据库和软件包存储保留在您的机器上;模型流量不保留。
- **默认语音路径是云端。** 默认TTS(`edge-tts`)将文本发送到Microsoft;默认浏览器STT将音频发送到Google。本地语音管道需要安装`voice-full`并选择Piper作为TTS。
- **`edge-tts`是GPL-3.0。** 它是用户通过`pip`安装的运行时依赖;Akana不提供它,因此Akana自己的源代码仍是MIT许可证。有关完整披露和允许的Piper替代品,请参见[THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md)。
- **保险箱是针对数据目录副本的静态加密。** 主密钥存储在同一文件系统上,仅限所有者访问。本地攻击者以用户账户运行,可以解密保险箱。
- **面向助手的保险箱工具是无限制的。** 模型可以读取或修改任何密钥;每次访问都会审计。如果您不适应这种权衡,可以通过`AKANA_VAULT_TOOLS=0`禁用它们。
- **软件包`permissions`块在v0.1中是建议性的。** 没有任何内容将浏览器软件包或计算机控制与权限隔离;它们以帐户的权限运行。
- **MCP服务器环境允许列表是真实的。** 外部提供商的密钥在Cursor和Claude网桥启动前被剥离。外部MCP配置仅通过显式允许列表扩展环境变量(不会向第三方MCP泄露整个环境)。
> **报告漏洞:** 请**不要**公开发布问题。请参阅 **[SECURITY.md](SECURITY.md)** 以获取私有的GitHub安全顾问流程。
## 配置
运行时配置从三个位置读取,按优先级顺序:
1. **运行时设置JSON** — `<data_dir>/runtime_settings.json`,从设置选项卡实时编辑。所有非隐藏设置均无需重启即可应用;Telegram是唯一一个`restart_required`设置。
2. **环境变量**(见下文)。环境变量初始化初始值;UI中更改的设置随后获胜。仅限环境变量的设置如果没有运行时规范,则使用环境变量然后使用默认值。
3. **默认值** — `akana_server/settings_defaults.py`。
最常用的环境变量:
| 变量 | 功能 |
| --- | --- |
| `AKANA_HOST` | 绑定主机。默认`127.0.0.1`。 |
| `AKANA_PORT` | 绑定端口。默认`8766`。 |
| `AKANA_TOKEN` | 非环回/代理请求的Bearer令牌。 |
| `AKANA_DATA_DIR` | 数据目录。默认`~/.akana`。 |
| `AKANA_LANGUAGE` | UI/角色语言。`en`(默认)或`tr`。 |
| `AKANA_VAULT_KEY` / `AKANA_VAULT_KEYFILE` | 主密钥材料或其路径。 |
| `AKANA_TTS_ENGINE` | 强制使用TTS引擎(`auto`、`edge`、`piper`、`xtts`)。 |
| `AKANA_OLLAMA_URL` | Ollama的基本URL。默认`http://localhost:11434`。 |
完整的集合(内存切换、语音路径、Telegram、唤醒模型覆盖等)记录在 **[`.env.example`](.env.example)** 中。
## CLI参考
`akana.py`是入口点。所有子命令都接受 `--help`。
| 命令 | 功能 |
| --- | --- |
| `setup` | 交互式安装:语言、提供商、语音附加项。标志: `--yes` (无人工干预)、 `--voice {none,piper,full,xtts}` 、 `--repair` (重建venv)、 `--lang {en,tr}` 。 |
| `add <component>` | 安装可选组件(见下文)。 |
| `start` | 启动服务器。绑定`AKANA_HOST:AKANA_PORT` (默认`127.0.0.1:8766`)。 |
| `stop` | 停止正在运行的服务器(按端口)。 |
| `doctor` | 预飞行检查(Python、venv、密钥、端口)、提供商和语音堆栈。 `--mcp` 还会启动MCP子进程并进行健康检查。 |
| `smoke` | 核心烟雾测试(医生 + pytest)。 |
| `test` | 单元测试(pytest)。 |
| `ship` | 打包一个便携式tarball。 |
| `reset-memory` | 清除内存数据库。破坏性。 |
**`add <component>`** 安装可选组件:
| 组件 | 安装内容 |
| --- | --- |
| `cursor` | Cursor Node网桥(`npm install`)。 |
| `claude` | 全球`@anthropic-ai/claude-code` CLI。 |
| `gemini` | `google-genai` (来自`requirements-gemini.txt`)。 |
| `openai` | 无需安装 — 提供商使用核心`httpx`;组件是就绪检查。 |
| `ollama` | 无需安装 — 连接到外部Ollama应用程序;组件是就绪检查。 |
| `voice-full` | `openwakeword` + `faster-whisper` + `piper-tts`:完整的本地语音堆栈(唤醒、STT、离线TTS)作为一个组件。 |
| `voice-piper` | `piper-tts`用于离线TTS,以及交互式Piper语音选择器。 |
| `embeddings` | `fastembed`用于向量回忆;约220MB的多语言ONNX模型在首次回忆时自动下载。 |
| `xtts` | `coqui-tts`用于XTTS-v2(重型、非商业模型许可证)。 |
> `computer-control`软件包的依赖项 **不是** `add`组件;请使用`pip install -r requirements-computer.txt`安装它们(参见 [功能包](#capability-packs))。
## 已知限制
- 软件包`permissions`字段(网络、沙盒、`secure_vault_read`、`file_system`)在v0.1中是建议性的;主机不强制执行它们,因此没有任何内容将软件包与权限隔离。
- 面向助手的保险箱工具没有每次调用的批准门槛;它们会审计但不会询问。
- Gemini、OpenAI和Ollama可以访问与Claude和Cursor相同的内存(`search`/`remember`/`forget`)和完整的七工具保险箱表面,限制工具循环在每个回合中最多五次。在Ollama上,如果本地模型缺乏原生工具调用,则在该回合中,内存/保险箱/桥接MCP工具不可用。
- 会话重用仅限Cursor和Claude;其他提供商接受参数但忽略它。
- 文件输入机制因提供商而异:Cursor和Claude通过路径引用读取图像/PDF/`.docx`/`.xlsx`/文本;Gemini和OpenAI内联图像和PDF;Ollama没有文件输入。
- Ultra思考层仅限Claude;其他提供商限制在其最高层。自动继续仅限Claude,默认关闭。
- XTTS-v2模型权重为CPML(仅限非商业);请勿在商业部署中使用它。
- **默认**语音路径是云端:`edge-tts`(Microsoft)用于TTS,浏览器STT(Google)用于STT。浏览器唤醒后备和浏览器STT需要基于Chromium的浏览器。
- 远程语音模式需要HTTPS(Tailscale Serve提供);原始http tailnet IP适用于聊天,但阻止麦克风和PWA安装。
- 内存日期边界(“今天”/“昨天”)在 **土耳其本地时间(固定`+03:00`,无DST)** 中计算,这将令非土耳其用户感到惊讶。
- Telegram仅限文本;知识图谱投影是内部的(无一流UI);矢量层没有树内性能基准。
## 开发
要求:Python 3.11+;Node 18+用于Cursor/Claude网桥和浏览器软件包。
```sh
python -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
pip install -r requirements.txt
pip install -r requirements-dev.txt
python akana.py test
```
Web UI从`web_ui/`静态提供,无需构建步骤。Python包布局使用`src/akana`,带有 `_akana_src_bootstrap` 桩,以便 `akana_server` 和 `akana_cli` 可以导入共享代码,无需完整的编辑安装。
测试布局:
- `tests/unit/` — 纯Python单元测试。快速。
- `tests/integration/` — 涉及真实子进程的跨模块测试。
- `tests/architecture/` — 代码库的不变性(导入图、缝隙)。
- `tests/web/` — Playwright驱动的契约测试,在备用端口上运行的实时服务器。
运行单个测试:
```sh
python -m pytest tests/unit/test_runtime_settings.py -k "your_test_name" -x
```
> 聊天标题生成器每次新对话都会进行实际的LLM调用;在运行与聊天相关的测试时,请设置 `AKANA_LLM_CHAT_TITLES=0` 以避免触发其断路器。
## 贡献、许可证和归属
欢迎提出问题和拉取请求。请在打开PR之前运行 `python akana.py test` 和 `python akana.py doctor`。如果您的更改影响提供商、内存子系统、保险箱或软件包,请注明您锻炼的路径。请参阅 **[CONTRIBUTING.md](CONTRIBUTING.md)** 和 **[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)** 以获取流程和期望。
**许可证:** Akana在 **MIT许可证** 下发布;请参阅 [LICENSE](LICENSE)。
**第三方组件:** Akana依赖于值得注意的第三方代码和运行时依赖。这些包括已编译的 **pdf.js** (Apache-2.0)和 **qrcodejs** (MIT),以及从PyPI安装的运行时依赖,例如 **edge-tts** (GPL-3.0,默认TTS引擎)和 **XTTS-v2** 模型权重(CPML,非商业)。完整的归属和许可理由在 **[THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md)** 中。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器