项目快照:odysseus-dev/odysseus,约 87,387 个 Star,915 个 Fork;最新推送时间 2026-09-17T17:38:42Z。本文基于仓库公开资料撰写。

项目地址:https://github.com/odysseus-dev/odysseus · https://odysseus-dev.github.io/odysseus

odysseus 从代码、运行环境到实践流程的项目封面
odysseus 的项目能力与实践流程示意。

项目速览(TL;DR)

odysseus 是一个以 Python 为主要语言的自托管人工智能工作区(Self-hosted AI workspace),面向聊天、智能体、研究、文档、邮件、笔记、日历以及本地模型工作流。仓库当前默认分支为 dev,README 明确提示该分支会优先获得最新变更;需要更审慎变更集的使用者可以选择 main 分支。

GitHub 仓库资料显示,该项目有 87387 个 Star、915 个 Fork,许可证标注为 AGPL-3.0。上述数据属于题目提供的仓库元信息快照,不代表持续变化的实时统计,也不构成性能、稳定性或服务等级承诺。

A self-hosted AI workspace for chat, agents, research, documents, email, notes, calendar, and local model workflows.
来源:README

定位与目标用户

Odysseus 的核心定位不是单一聊天页面,而是把模型交互、资料处理、个人信息管理和本地模型工作流放入同一个自托管应用中。其运行方式由用户自行部署,数据目录、日志目录、模型缓存和部分服务连接参数都可以通过 Docker Compose 配置。

根据 README 和 Compose 配置,项目适合希望在自己的主机或受控网络中统一使用聊天、研究、文档、邮件、日历和模型工具的个人用户、小型技术团队,以及需要自行管理认证和数据目录的部署者。项目涉及本地工具、文件上传、邮件、搜索和远程模型服务时,部署者仍需独立完成权限划分、网络隔离和供应商合规评估。

产品边界

“自托管”表示应用服务运行在部署者控制的环境中,并不自动表示所有模型推理、搜索、邮件或嵌入计算都在本机完成。Compose 文件同时提供了外部模型端点、Ollama、研究模型端点、搜索服务、嵌入服务和 Google 相关配置项,因此数据是否离开本地取决于实际启用的功能和连接配置。

仓库资料没有提供并发上限、吞吐量、延迟、数据规模上限、可用性指标或正式的企业支持条款。选择部署规模时,不能仅根据 Star 数量推导这些指标。

核心功能

核心功能覆盖从模型对话到个人工作区管理的多个环节,但不同功能依赖的模型、搜索、邮件、日历或本地工具并不相同。下面按 README 中的能力说明功能边界,并把资料中未披露的实现细节明确标注出来。

聊天与智能体

聊天与智能体(Chat + Agents)支持本地模型或 API 模型,并可使用工具、模型上下文协议(MCP)、文件、Shell、技能和记忆。典型输入是用户消息、上传文件或工具调用请求,输出是模型生成内容、工具执行结果或包含上下文的多轮会话;README 没有给出具体 API 签名、工具白名单格式或智能体调度算法。

Docker Compose 暴露了 LLM_HOST、LLM_HOSTS、OPENAI_API_KEY 和 OLLAMA_BASE_URL 等连接配置。使用 Shell、文件或其他本地工具时,应把它们视为高权限能力,仅在授权环境内开启,并结合认证、网络绑定和数据目录权限进行隔离。

模型 Cookbook

Cookbook 用于硬件感知的模型推荐、下载和服务启动。资料明确提到它可以管理本地模型缓存,也可以执行远程服务器测试、设置、探测、下载和服务操作;Docker 镜像为这些流程准备了 tmux、openssh-client、git、cmake 和 Docker 客户端。

Compose 将宿主机的 ./data/huggingface 映射到容器内的 /app/.cache/huggingface,并将 ./data/local 映射到 /app/.local,用于保留模型缓存和 Cookbook 安装的 Python CLI 或服务引擎。资料没有列出具体支持的模型清单、硬件型号、量化方案或每种模型的资源要求,使用前应以当前应用界面和官方文档为准。

深度研究与模型比较

Deep Research 用于多步骤网页研究、来源阅读和报告生成。其工作流可以概括为:研究请求进入任务流程后,系统执行网页研究、读取来源并生成报告;输入输出字段、任务队列实现和来源可信度规则未在给定资料中说明。研究模型端点可通过 RESEARCH_LLM_ENDPOINT 配置。

Compare 提供盲测式并排模型测试与综合结果。使用者可以把相同问题交给多个模型,再查看并排结果和综合内容;README 没有提供比较模型数量、评分算法、测试持久化格式或自动评测指标,因此不能把该功能解释为正式基准测试系统。

文档、邮件、笔记、任务与日历

Documents 是偏写作的编辑器,支持 AI 编辑、建议、Markdown、HTML、CSV 和语法高亮。其输入可以是用户编辑的文档或导入内容,输出包括正文、建议或格式化文档;仓库资料未提供文档版本控制、协作锁和导出接口的详细说明。

Email 使用 IMAP/SMTP 处理收件箱,提供分类、标签、摘要、提醒和回复草稿。该功能需要外部邮件账户和相应连接配置,资料没有给出凭据加密方式、支持的认证机制或邮件保留策略,因此部署者不应仅依据功能名称推断其合规能力。

Notes、Tasks + Calendar 面向提醒、待办、计划中的智能体任务和 CalDAV 同步。输入可以是笔记、任务、日历事件或调度信息,输出是工作区内的记录、提醒或同步结果;具体调度精度、冲突解决规则和 CalDAV 服务器兼容范围,官方仓库未提供该信息。

其他能力

README 还列出图库和图像编辑器、主题、上传、网页搜索、预设、会话和双因素认证(2FA)。其中图像相关能力与 Dockerfile 中的 OpenCV、Real-ESRGAN 依赖准备存在关联,但资料没有给出每个入口的请求格式、处理时长或输出尺寸限制;Compose 只明确列出了若干上传字节数配置项。

系统架构与关键模块

从给定的 Dockerfile 和 Docker Compose 文件可以确认,项目采用容器化部署,以一个名为 odysseus 的应用服务为核心,并连接 ChromaDB 和 SearXNG 等服务。以下描述只覆盖资料明确出现的组件,不对未提供源代码的内部模块进行推断。

应用容器与数据持久化

Dockerfile 使用两个 Python 3.14 slim 构建阶段:前一个阶段构建为 Real-ESRGAN 依赖准备的修补 wheel,后一个阶段安装系统依赖、Python 依赖和应用代码。应用工作目录为 /app,镜像创建了 /app/data、/app/logs 和 services/cache/search 目录。

Compose 将宿主机数据目录挂载到 /app/data,日志目录挂载到 /app/logs。入口脚本会根据 PUID 和 PGID 降权运行,并修复绑定挂载目录的所有权,以避免容器以 root 身份写入宿主机文件。

向量存储、搜索与模型连接

Compose 为 ChromaDB 声明了独立服务,容器内端口为 8000,宿主机映射端口默认为 8100,数据卷为 chromadb-data。应用通过 CHROMADB_HOST=chromadb 和 CHROMADB_PORT=8000 连接该服务。

应用环境变量将 SEARXNG_INSTANCE 设置为 http://searxng:8080,并在依赖条件中要求 SearXNG 健康。给定的 Compose 资料片段没有包含 SearXNG 服务的完整定义,因此其镜像、持久化方式和健康检查细节应以仓库当前文件为准。

浏览器与远程服务工具

Dockerfile 安装了 Node.js、npm 和 Chromium,用于内置浏览器 MCP 服务;同时安装 OpenSSH 客户端,供 Cookbook 访问远程服务器。Compose 把 ./data/ssh 映射到 /app/.ssh,并说明 Odysseus 可以在该目录生成密钥,再将公钥加入远程服务器的 authorized_keys。

上述能力扩大了应用对网络、浏览器和远程主机的访问范围。部署时应将远程主机限定在明确授权的资产内,不应把 SSH 私钥、邮件凭据或外部 API 密钥提交到 Git 仓库。

依赖与运行环境

最小运行路径以 Docker Compose 为主,仓库 README 给出的 Quick Start 没有要求先单独安装 Python、Node.js 或 ChromaDB。Dockerfile 负责在镜像内安装这些运行依赖,因此部署者需要具备可用的 Docker 与 Docker Compose 环境;资料没有声明 Docker 的最低版本。

已确认的运行依赖

  • 应用基础镜像为 python:3.14-slim。
  • 系统包包括 build-essential、cmake、curl、git、nodejs、npm、chromium、tmux、openssh-client、gosu、libgl1、libglib2.0-0t64、libxcb1 和 libmagic1。
  • Dockerfile 安装 python-magic==0.4.27,用于基于内容的 MIME 类型探测。
  • 项目的 Python 测试配置位于 pyproject.toml,测试路径为 tests,异步模式为 auto。
  • package.json 的开发依赖包含 @antithesishq/bombadil,版本范围为 ^0.7.0。

Dockerfile 还会预安装为 Real-ESRGAN 依赖准备的修补 wheel,并说明这些处理用于规避 Python 3.14 环境下相关源码包的构建问题。资料没有给出 CPU、内存、GPU、磁盘容量或网络带宽的最低要求,因此这些资源门槛不能从现有文件中推导。

快速开始(含最小可运行示例)

README 给出的最小路径是克隆仓库、复制环境文件并通过 Compose 构建启动。示例只针对本机测试环境,默认监听地址为 127.0.0.1,不会主动把应用绑定到所有网络接口。

安装与启动

Bash
git clone https://github.com/odysseus-dev/odysseus.git
cd odysseus
cp .env.example .env
docker compose up -d --build

上述命令完成仓库获取、环境文件初始化和镜像构建启动。Compose 默认把应用映射到 127.0.0.1:7000;应用容器内部监听端口为 7000。如果本机已有端口占用,可在本地 .env 中设置 APP_PORT,但具体变更应先阅读仓库当前 Setup Guide。

运行验证

Bash
docker compose logs odysseus
curl --fail http://127.0.0.1:7000

浏览器验证地址为 http://localhost:7000。README 说明,首次管理员密码会打印在 docker compose logs odysseus 的输出中;该密码不应写入文章、脚本、提交记录或公开日志。

如果容器尚未健康,先查看应用日志和 Compose 服务状态,再依据官方设置指南处理依赖问题。Native 安装、GPU、Windows、macOS、HTTPS 和完整配置不在 README Quick Start 中展开,官方仓库未提供该信息,建议以最新 Odysseus 官网与文档 为准。

配置说明

Compose 文件把应用配置集中在环境变量中,默认值直接写在变量展开表达式里。下表只列出资料中明确存在的字段;“类型”依据字段语义和配置写法整理,具体校验规则仍以应用代码为准。

字段名 类型 默认值 作用
APP_BIND 字符串 127.0.0.1 控制宿主机端口绑定地址。
APP_PORT 整数 7000 控制宿主机映射到应用端口的端口号。
DATABASE_URL 字符串 sqlite:///./data/app.db 配置应用数据库连接地址。
AUTH_ENABLED 布尔值 true 控制认证是否启用。
LOCALHOST_BYPASS 布尔值 false 控制本地地址绕过行为;非本地开发环境应保持关闭。
ODYSSEUS_ADMIN_USER 字符串 admin 设置初始管理员用户名。
ODYSSEUS_ADMIN_PASSWORD 字符串 未提供 设置管理员密码;README 同时说明首次密码会打印到应用日志。
LLM_HOST 字符串 localhost 配置模型服务主机。
OLLAMA_BASE_URL 字符串 空值 配置 Ollama 服务地址。
CHROMADB_HOST 字符串 chromadb 配置 ChromaDB 服务主机名。
CHROMADB_PORT 整数 8000 配置应用访问 ChromaDB 的容器端口。
FASTEMBED_MODEL 字符串 sentence-transformers/all-MiniLM-L6-v2 配置 FastEmbed 使用的模型名称。
PUID 整数 1000 设置容器降权运行的用户 ID。
PGID 整数 1000 设置容器降权运行的组 ID。

敏感配置处理

OPENAI_API_KEY、HF_TOKEN、HUGGING_FACE_HUB_TOKEN、TAVILY_API_KEY、SERPER_API_KEY、GOOGLE_API_KEY 和 OAuth 密钥等字段在资料中出现,但不应填入公开代码块。示例中的 <你的-API-KEY> 仅表示本地环境占位符,实际部署应使用本机权限可控的 .env 或等效的秘密管理方式。

上传大小与任务进程

Compose 文件提供了聊天、图库、图库变换、记忆导入、个人上传、邮件撰写、语音转文字和 ICS 文件的字节数限制。还提供 CLEANUP_INTERVAL_HOURS=24、ODYSSEUS_INPROCESS_POLLERS=1 和 ODYSSEUS_INPROCESS_TASKS=1 等运行参数;这些值是资料中的默认配置,不代表推荐的生产容量。

进阶用法

进阶部署的重点是把模型、搜索、嵌入、远程主机和 OAuth 回调分别配置,而不是直接修改镜像内部文件。涉及外部服务时,应先确认数据流向、凭据权限和回调地址,再启用对应功能。

本地模型与宿主机服务

Compose 通过 host.docker.internal:host-gateway 让容器访问 Docker 宿主机服务,文件注释明确给出了访问宿主机 Ollama 的示例地址 http://host.docker.internal:11434。这只说明容器到宿主机的网络映射方式,不代表 Ollama 已由本项目自动安装或启动。

如果启用本地模型,模型缓存会持久化到宿主机的 ./data/huggingface。远程模型、研究模型和嵌入服务则需要分别配置对应端点及密钥;资料没有说明这些供应商的计费、区域存储或数据保留政策。

远程 Cookbook 服务器

Cookbook 可以执行远程服务器测试、设置、探测、下载和服务操作,Compose 为其挂载 ./data/ssh。使用远程功能前,需要把生成的公钥加入目标服务器的 authorized_keys,并限制该密钥的权限、可访问主机和可执行范围。

本文不提供面向未授权目标的远程操作步骤。只应在由部署者拥有或获得书面授权的服务器上验证连接,远程主机还应通过防火墙、账户权限和独立网络策略进行隔离。

MCP OAuth 回调

Compose 提供 OAUTH_REDIRECT_BASE_URL,文件注释说明远程 MCP OAuth 回调需要设置外部可访问的来源地址,原因是容器内部始终监听 7000,无法感知宿主机端口映射。若浏览器访问地址不是 http://localhost:7000,应根据官方设置指南配置该变量。

可观测性与运维

项目资料提供的基础运维手段是 Docker Compose 日志、持久化目录和服务重启策略。Compose 为应用设置 restart: unless-stopped,但资料没有给出监控指标、结构化日志格式、告警规则、备份脚本或升级回滚流程。

日志与状态检查

  • 使用 docker compose logs odysseus 查看应用日志和首次管理员密码提示。
  • 检查 data 目录是否存在,并确认宿主机用户对挂载目录具有所需读写权限。
  • 检查 logs 目录是否持续产生应用日志。
  • 确认 ChromaDB 的 chromadb-data 卷仍然存在,避免删除卷导致向量数据丢失。
  • 更新代码前记录当前提交、环境文件和数据目录备份;仓库资料未提供正式迁移命令,数据库迁移步骤应以最新文档为准。

测试与质量验证

pyproject.toml 将测试路径配置为 tests,并声明安全、路由、服务、CLI、JavaScript、辅助工具和单元测试等分类标记。该文件没有给出完整测试命令、覆盖率阈值或持续集成结果,因此不能据此宣称项目具备某个测试覆盖率。

安全与合规边界

README 把 Odysseus 定义为具备强大本地工具的自托管工作区,并明确要求启用认证、不要把私有数据放入 Git、不要公开暴露原始模型或服务端口。安全配置是部署前提,而不是在公网环境中部署后的可选增强。

认证、绑定与网络暴露

  • 任何可通过网络访问的部署都应保持 AUTH_ENABLED=true。
  • 除本地开发外,应保持 LOCALHOST_BYPASS=false。
  • 默认 Compose 绑定地址为 127.0.0.1,改变 APP_BIND 前应先完成反向代理、防火墙和访问控制设计。
  • 不要把原始模型服务端口或内部服务端口直接暴露到公网。
  • API 密钥、OAuth 密钥、SSH 私钥、邮件凭据和私有文件不得提交到 Git。

授权、隐私与高风险能力

浏览器 MCP、Shell、文件处理、网页搜索、邮件、远程 SSH 和智能体任务都可能接触外部系统或敏感资料。本文只讨论授权环境下的使用,不提供针对未授权目标的攻击教程、绕过检测技巧、账号自动化或凭据窃取方法。

如果处理个人信息、企业邮件、内部文档或受监管数据,部署者需要自行确认存储位置、外部模型传输、搜索来源、日志留存、访问审计和删除机制是否符合适用法律、合同和组织政策。仓库资料没有提供独立的隐私认证、合规认证、审计报告或数据驻留承诺。

许可证与商用条款

仓库许可证为 GNU Affero General Public License v3(AGPL-3.0),README 的表述为 AGPL-3.0-or-later;LICENSE 文件标题为 GNU AFFERO GENERAL PUBLIC LICENSE,版本为 3,日期为 2007 年 11 月 19 日。

LICENSE 的序言明确说明,自由软件不等同于免费软件,并写明可以复制、分发、修改,也可以在符合许可证条件的前提下收费。因此,AGPL 本身不禁止商业使用;但是商业部署、修改、分发和提供网络服务时必须遵守 LICENSE 中的版权、源代码提供、许可证通知、修改说明和用户权利等条款。

尤其需要注意,AGPL 针对网络服务器软件规定了相应的源代码提供义务:向公众提供修改版网络服务时,相关用户可以获得运行中的修改版本源代码。具体触发条件、通知方式、衍生作品边界和其他法律要求应以仓库 LICENSE 全文及适用法域的专业意见为准。

本文不替代法律意见。分发容器镜像、修改代码、组合第三方依赖或提供托管服务前,应逐项核对仓库 LICENSE、依赖许可证和 ACKNOWLEDGMENTS.md;不确定的部分以仓库 LICENSE 为准。

局限性与已知限制

给定资料足以说明项目功能范围和 Docker 部署路径,但不足以建立完整的生产容量模型。以下限制来自资料缺口或文件中明确存在的边界,不应被解释为对未提供实现细节的推断。

  • 官方仓库未提供统一的最低硬件配置、GPU 支持矩阵、并发用户上限、吞吐量、延迟和大规模部署拓扑。
  • 官方仓库未提供模型供应商、搜索供应商、邮件服务和 CalDAV 服务的完整兼容性清单。
  • 官方仓库未在给定资料中提供 API 文档、插件接口、智能体调度协议和数据模式说明。
  • Compose 使用 chromadb:latest,资料没有锁定该镜像的具体版本;生产环境需要结合实际变更管理策略评估可重复部署问题。
  • 默认分支为 dev,README 明确说明该分支会优先获得最新改动;稳定性要求较高时,应按项目文档评估 main 或指定提交。
  • 部分可选能力依赖外部服务、模型或系统组件,启用后会增加网络、凭据、存储和运维边界。

适合谁/不适合谁

选型时应以数据边界、已有技术栈和运维能力为判断条件,而不是只看功能数量。下面的信号用于帮助确认项目是否匹配实际环境。

适合的具体信号

  • 需要在自有主机上统一管理聊天、研究、文档、邮件、笔记和日历,而不是只部署单一聊天界面。
  • 团队能够维护 Docker Compose、持久化卷、认证配置、日志目录和外部模型或搜索服务。
  • 已有 Ollama、API 模型、ChromaDB、SearXNG、IMAP/SMTP 或 CalDAV 等基础设施,并希望在一个工作区中连接它们。
  • 需要在授权环境内使用本地文件、Shell、浏览器 MCP 或远程 Cookbook,并能为这些能力划定独立权限。
  • 能够接受 AGPL-3.0-or-later 对修改、分发和网络服务相关源代码义务的约束。

不适合的具体信号

  • 要求供应商提供明确 SLA、官方并发容量、性能基准或企业级支持,而项目资料未提供这些承诺。
  • 团队没有能力管理密钥、SSH 权限、邮件账户、反向代理、数据备份和容器升级。
  • 环境禁止外部模型、网页搜索、邮件或 OAuth 回调,但又需要依赖这些能力完成主要工作流。
  • 组织必须使用闭源分发模式,无法接受 AGPL-3.0-or-later 的源代码和许可证合规要求。
  • 目标是未经授权地访问远程主机、网页、账号或私人数据;这不属于本文讨论的合法使用范围。

常见问题与排查(FAQ / Troubleshooting)

排查应先区分“容器未启动”“应用未认证”“外部服务未连接”和“权限或数据目录错误”。项目给定资料提供了几个直接可用的检查入口,其他错误需要结合最新日志和设置指南判断。

访问不了 http://localhost:7000 怎么办

先执行 docker compose logs odysseus,确认应用容器是否已经启动,再检查 APP_BIND 和 APP_PORT 是否被本地 .env 覆盖。README 的访问地址是 http://localhost:7000,Compose 默认宿主机绑定为 127.0.0.1:7000。

首次管理员密码在哪里

README 明确说明,首次管理员密码会打印在 docker compose logs odysseus 的输出中。若日志中没有找到,先确认容器确实完成初始化,并检查 ODYSSEUS_ADMIN_PASSWORD 是否在本地环境中配置。

为什么容器写出的文件无法由宿主机用户修改

检查 PUID 和 PGID 是否与宿主机用户的 id -u、id -g 结果一致。入口脚本会尝试修复 /app/data 和 /app/logs 的所有权,但宿主机文件系统权限、挂载选项或已有 ACL 仍可能影响结果。

模型或搜索功能没有结果怎么办

检查 LLM_HOST、LLM_HOSTS、OLLAMA_BASE_URL、RESEARCH_LLM_ENDPOINT、SEARXNG_INSTANCE 和相关 API 密钥。资料没有提供统一的连接测试命令,不能使用未在仓库资料中出现的接口路径替代官方排查流程。

升级前需要保留哪些内容

至少保留宿主机的 data、logs、本地 .env、Compose 修改记录和 ChromaDB 数据卷信息。仓库资料没有给出正式备份与迁移脚本,因此升级前应先在测试环境验证当前配置和数据恢复流程。

项目地址与资源

以下链接均来自题目提供的仓库地址、项目官网或 README 中的项目资源。分支、文档内容和安装步骤会随仓库更新,阅读时应核对当前版本与当前配置文件。