Atuin AI 后端自托管(Self-Hosting)完整指南:从 Ollama 到 OpenAI 兼容端点
2026/9/19 23:27:55 网站建设 项目流程

Atuin AI 后端自托管(Self-Hosting)完整指南:从 Ollama 到 OpenAI 兼容端点

【免费下载链接】atuin✨ Making your shell magical项目地址: https://gitcode.com/gh_mirrors/at/atuin

Atuin AI 是 Atuin 内置的 LLM 助手,支持在终端内直接生成 shell 命令、进行对话式信息查询与智能补全。本指南聚焦于如何自托管 Atuin AI 的后端服务,从而摆脱对官方 Atuin Hub 的依赖,实现完全自主可控的本地 AI 体验。读完本文,你将掌握 atuin-ai-server 的从源码与 Docker 两种运行方式、基于 OpenAI 兼容协议对接 Ollama/vLLM/LM Studio/llama.cpp/LiteLLM 等本地模型的配置技巧,以及 Atuin 客户端侧[ai]全部配置项的完整含义与调优方法。

Atuin AI 后端架构概览

Atuin AI 的功能分为两部分:客户端(即 Atuin 本体,Rust 实现,代码位于 crates/atuin-ai)与服务端(负责接入 LLM 的 AI 后端)。

服务端的核心是开源项目atuin-ai-server,它基于atuin-ai-core(使用 Gleam 语言编写)构建——这与驱动 Atuin 官方生产 AI 后端的是同一套 Gleam 库,因此自托管版本与官方版本在协议、行为上保持高度一致。这意味着你可以放心地用自己的服务器替换官方 Hub,客户端无需任何特殊适配。

从 客户端源码 可以看到,Atuin AI 客户端默认连接到官方地址https://hub.atuin.sh(见 settings.rs 中 DEFAULT_HUB_URL 定义),并通过ai.endpoint配置覆盖为自定义地址。

目前服务端兼容任何 OpenAI 兼容的 chat completions 风格端点,覆盖两大类场景:

  • 本地模型运行时:Ollama、vLLM、LM Studio、llama.cpp、LiteLLM 等;
  • OpenAI 兼容的在线服务:例如 OpenRouter。

背景知识:Atuin AI 面向终端用户的开箱即用方案是注册 Atuin Hub。

快速开始:Ollama 本地模型的最小配置

atuin-ai-server仓库克隆下来后,将示例配置文件config.example.toml复制为config.toml,再按 README 的配置说明设置你的实例即可。

以下是基于 Ollama 的基础配置示例(服务端配置文件):

port = 8080 endpoint = "http://localhost:11434/v1" # or host.docker.internal api_key = "ollama" default_model = "llama31" [request.body] stream_options = { include_usage = true } [[models]] alias = "llama31" name = "Llama 3.1 70b" description = "Ollama Llama 3.1 70b" model = "llama3.1:70b" [[models]] alias = "gemma4" name = "Gemma 4 r4b" description = "Ollama Gemma 4 - Effective 4b" model = "gemma4:e4b"

逐项解析这份配置:

配置项含义与取值说明
port服务端监听端口,客户端将通过http://<主机>:<端口>访问
endpoint上游 LLM 的 OpenAI 兼容地址。Ollama 的兼容端点是http://localhost:11434/v1;若服务端跑在容器内,应改用http://host.docker.internal:11434/v1
api_key访问上游 LLM 服务的密钥。Ollama 默认不校验密钥,填"ollama"占位即可
default_model默认模型别名(对应下方[[models]]表中的alias),当客户端请求未指定模型时使用
[request.body]透传给上游 LLM 请求体的附加参数,stream_options = { include_usage = true }让流式响应附带 token 用量统计
[[models]]模型表,每一项定义一个对外暴露的模型:alias(客户端可见的模型别名)、name(显示名)、description(描述)、model(实际请求上游时的模型 ID)

alias的语义在客户端侧 models.rs 中有对应体现:alias 是网络传输中使用的模型标识,name 和 description 则用于客户端/model选择器的展示

运行方式一:从源码运行

如果你已安装 Erlang、Elixir 和 Gleam(具体版本要求见仓库中的.tool-versions),可以原生方式运行服务端:

mix deps.get mix run --no-halt

注意事项:

  • 如果你的config.toml通过环境变量指定 API 密钥,启动服务前务必先设置好这些环境变量;
  • 使用mix run --no-halt让服务以前台进程持续运行(生产环境建议配合 systemd 或进程管理器)。

运行方式二:Docker 运行

更推荐的方式是直接使用官方镜像:

docker run \ -v ./config.toml:/etc/atuin-ai/config.toml \ -p 8080:8080 \ ghcr.io/atuinsh/atuin-ai-server:latest

参数说明:

  • -v ./config.toml:/etc/atuin-ai/config.toml:将宿主机配置挂载到容器内固定路径/etc/atuin-ai/config.toml
  • -p 8080:8080:将容器 8080 端口映射到宿主机,供 Atuin 客户端访问;
  • 镜像使用ghcr.io/atuinsh/atuin-ai-server:latest标签。

Docker 场景下的关键坑:host.docker.internal

如果服务端跑在 Docker 容器内、而本地 LLM 服务(如 Ollama)跑在宿主机上,必须把endpoint指向host.docker.internal而不是localhost原因在于:容器内的localhost解析的是容器自身的回环接口,而非宿主机的回环接口;host.docker.internal是 Docker 提供的、专门用于从容器访问宿主机服务的特殊主机名。

配置 Atuin AI 客户端:连接自托管端点

服务端跑起来后,在 Atuin 客户端的config.toml中设置[ai]配置来连接:

[ai] endpoint = "http://localhost:8080"

这是客户端连接自托管后端的最简配置。客户端会通过GET {endpoint}/api/cli/models拉取可用模型列表(见 models.rs 中 fetch_models 实现),并通过POST {endpoint}/api/cli/chat建立 SSE 流式对话(见 stream.rs 中 create_chat_stream 实现)。

端点协议:auto / hub / oss

客户端通过endpoint_protocol决定与端点通信的方式,默认值"auto"

取值行为
"auto"endpoint推断:官方 Atuin 地址使用 Hub 协议,其余一律视为 OSS 独立服务器
"hub"将端点视为 Atuin Hub 实例:走浏览器 Hub 登录流程,并上报信用(credit)用量;主要用于针对本地 Hub 实例的二次开发
"oss"将端点视为独立 AI 服务器(如atuin-ai-server):无登录流程,请求使用api_token(若设置)认证

auto模式的具体推断逻辑在 settings.rs 的 is_hub_ai_endpoint 实现中:官方地址以https://hub.atuin.sh等官方域名为准,非官方地址一律按 OSS 处理。因此默认配置下,把endpoint指向你自己的服务器即可直接工作;如果你的服务器要求认证,再设置api_token

从 inline.rs 客户端启动逻辑 可以看到完整的认证决策链:

  • 显式传入api_token(CLI 参数或配置)→ 直接使用该 token,不触发登录流程;
  • 未设置 token 且端点是 Hub → 走 Hub 会话登录(ensure_hub_session);
  • 未设置 token 且端点是 OSS →不带 token 直接请求(OSS 服务器可能不需要认证,客户端不会强制走不适用于它的登录流程)。

CLI 覆盖参数

除了配置文件,atuin ai子命令还支持全局覆盖参数(见 commands.rs):

  • --api-endpoint <URL>:覆盖ai.endpoint
  • --api-token <TOKEN>:覆盖ai.api_token
  • -v/--verbose:开启详细日志。

Atuin AI 客户端配置项全解

以下配置全部位于客户端config.toml[ai]段(数据结构定义见 settings.rs 中 Ai 结构体):

基础配置

配置项默认值说明
enabledfalse是否启用 AI 功能。设为false时,问号键绑定会输出提示,指引你运行atuin setup开启该功能
model未设置新会话使用的 AI 模型(别名)。未设置时使用服务端默认模型;可在 Atuin AI 界面内运行/model查看可用模型并切换
db_pathAtuin 数据目录下的ai_sessions.dbAtuin AI 会话存储所用 SQLite 数据库的路径
session_continue_minutes1h距上次交互多久内的会话算"最近",可被自动续接。格式为时长字符串(30m1h2h等);裸数字按分钟数解析(如60= 60 分钟),用于向后兼容
endpointnullAtuin AI 端点地址,用于命令生成等 AI 功能。大多数用户无需设置,仅在自定义 AI 端点时需要
api_tokennullAtuin AI 端点的 API token,同样仅自定义端点时需要
endpoint_protocol"auto"见上文"端点协议"一节
yolofalse开启 YOLO 模式:自动放行所有权限检查。⚠️ 请谨慎使用。注意它并不会开启任何新能力,只是跳过权限检查
tipstrue是否在 Atuin AI 每轮 agent 回合底部显示提示

补充细节(源码佐证):

  • session_continue_minutes在 settings.rs 中通过AsDisableableDuration<Minutes>反序列化,支持"时长字符串或分钟数",且0表示禁用自动续接;
  • db_path对应的 SQLite 数据库由 crates/atuin-ai/migrations 中的迁移文件(如create_ai_sessions.sqladd_session_metadata.sqlcreate_ai_usage.sql)创建和维护;
  • 在 Atuin AI 界面内用/model选择模型后,选择的别名会通过save_model_selection持久化写入config.tomlai.model(见 models.rs),成为后续会话的默认模型。

能力开关:[ai.capabilities]

这些设置控制向 LLM 发送哪些能力描述,LLM 据此了解客户端可用哪些工具并主动发起调用:

配置项默认值说明
enable_history_searchtrue是否在上下文包含"history search"能力。开启后,AI 在生成建议或回答问题时可请求搜索你的 Atuin 历史命令
enable_history_outputtrue是否包含"history output"能力。开启后,AI 可请求查看历史命令的输出。前提是pty-proxy 与 daemon 已启用并运行(Atuin 才能捕获命令输出),配置方法见 Reading Command Output
enable_file_toolstrue是否包含"file tools"能力。开启后,AI 可请求读写你系统上的文件
enable_command_executiontrue是否包含"command execution"能力。开启后,AI 可请求在你的系统上执行命令

示例:

[ai.capabilities] enable_history_search = false

源码说明:AiCapabilities结构体定义在 settings.rs,每个字段默认None即未设置(等同于启用)。这些能力会由 context.rs 的 capability_strings 转换为发送给服务端的能力字符串列表;每个工具的能力字符串定义在其ToolDescriptor上,FSM 状态机(见 fsm 模块)据此接受或拒绝 AI 的工具调用请求——这构成了 Atuin AI 权限体系的底层机制。

开场上下文:[ai.opening]

控制开场请求发送给 LLM 的上下文内容:

配置项默认值说明
send_cwdfalse是否将当前工作目录包含进发送给 LLM 的上下文。默认只发送操作系统和当前 shell 信息
send_last_commandfalse是否将你的上一条命令作为上下文发送到初始请求,以便 AI 提供更相关的建议

示例:

[ai.opening] send_cwd = true
[ai.opening] send_last_command = true

源码说明:AiOpening结构体定义在 settings.rs;send_cwd与上一条命令最终会通过 stream.rs 中 create_chat_stream 的 context 序列化 注入到开场请求的上下文中。

完整的客户端配置示例

结合以上全部配置项,一份连接自托管后端的完整客户端config.toml示例如下:

[ai] enabled = true endpoint = "http://localhost:8080" api_token = "your-server-token" # 若服务端要求认证 endpoint_protocol = "oss" # 或留空使用 "auto" model = "llama31" # 可选,服务端默认模型别名 db_path = "ai_sessions.db" # 默认在 Atuin 数据目录下 session_continue_minutes = "1h" # 也支持纯数字分钟数,如 60 tips = true # yolo = true # 谨慎使用:自动放行所有权限检查 [ai.capabilities] enable_history_search = true enable_history_output = true # 需 pty-proxy + daemon 运行才能捕获命令输出 enable_file_tools = true enable_command_execution = true [ai.opening] send_cwd = false send_last_command = false

自托管部署检查清单

完成整套自托管部署,可按以下顺序核对:

  1. 服务端:克隆atuin-ai-server,复制config.example.tomlconfig.toml,配置endpoint(上游 LLM)与[[models]]表;
  2. 启动服务端:源码方式(mix deps.get && mix run --no-halt,需 Erlang/Elixir/Gleam)或 Docker 方式(docker run -v ./config.toml:/etc/atuin-ai/config.toml -p 8080:8080 ghcr.io/atuinsh/atuin-ai-server:latest);
  3. 容器访问宿主机 LLM:Docker 场景下endpointhost.docker.internal而非localhost
  4. 客户端:在config.toml设置[ai] endpoint = "http://localhost:8080"(可选api_token);
  5. 协议:默认auto即可自动识别 OSS 服务器;特殊场景(本地 Hub 开发)可显式设hub
  6. 验证:运行atuin ai(或按?调起界面),在界面内用/model确认模型列表已从自托管端点正确拉取。

如需进一步了解 Atuin AI 的完整功能(命令生成、对话搜索、危险命令检测等),可参考 Atuin AI 介绍;客户端[ai]配置的官方文档见 AI 设置文档;如需将 AI 能力扩展到 Claude Code、Cursor 等外部工具,可参考内置 MCP 服务器文档。

【免费下载链接】atuin✨ Making your shell magical项目地址: https://gitcode.com/gh_mirrors/at/atuin

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询