open-assistant-api
开源自托管的 Assistant API 框架,兼容 OpenAI 接口,支持多模型、RAG、Too
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
开源自托管的 Assistant API 框架,兼容 OpenAI 接口,支持多模型、RAG、Too
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你是一家中小型企业的技术负责人,想要在内部搭建一套 AI 助手系统,用于客服对话、数据查询、文档处理等场景。OpenAI 的 Assistant API 虽然强大,但数据必须经过他们的服务器——对金融、医疗、政务等行业的用户来说,这条红线根本无法跨越。Open Assistant API 正是为解决这个痛点而生:它完整实现了 OpenAI Assistant API 的接口规范,让你可以在自己的服务器上自由部署和扩展 AI Agent,而无需依赖任何外部商业服务。
这个项目来自 MLT-OSS 团队,作者 Tuanzi1015 的核心理念是「开箱即用 + 高度可扩展」。从 GitHub 上的 364 颗星和 19 个 topics(涵盖 agent、rag、langchain、self-hosted 等关键词)可以看出,它的定位非常明确——面向需要私有化部署 AI 能力的开发者群体。
Open Assistant API 基于 FastAPI 构建,采用了经典的 Provider 注册模式来组织应用初始化。源码中 main.py 的 create_app() 函数通过 register() 和 boot() 两个阶段,将日志提供者(logging_provider)、应用提供者(app_provider)、异常处理器(handle_exception)、分页提供者(pagination_provider)、认证提供者(auth_provider)和路由提供者(route_provider)依次注册到 FastAPI 实例上。这种设计使得各功能模块高度解耦,新增功能只需实现对应的 Provider 接口即可。
项目的数据层采用了 SQLModel(SQLAlchemy + Pydantic 的结合体)搭配 MySQL,通过 Alembic 管理数据库迁移版本,保证了数据模型的类型安全和迁移的可靠性。Redis 则承担了两个关键角色:既是 Celery 异步任务队列的消息中间件,也是消息流式输出的发布订阅总线。整体架构可以概括为:API Server(FastAPI + Uvicorn)接收请求路由到 Service 层,Celery Worker 处理文件解析和 RAG 索引等耗时任务,MySQL 持久化核心数据,Redis 作为 Celery broker 和 SSE 事件流总线。
代码中的 ThreadRunner 类是整个 Agent 执行引擎的核心。它封装了一次 Run 的完整生命周期:初始化(获取 Assistant 配置和 Tools)→ 构造 System Instructions → LLM 调用 → 工具调用决策 → 结果返回。在每次 LLM 调用前后,通过 LLMCallbackHandler 记录 token 使用量,并通过 StreamEventHandler 将增量输出实时推送到 Redis 频道,前端通过 SSE(Server-Sent Events)消费这些事件,实现打字机式的流式回复体验。
相比 OpenAI 官方 Assistant API 仅支持 GPT 系列模型,Open Assistant API 的一个显著优势是多模型无缝切换。通过接入开源的 One API 项目,可以将接口代理到任意支持 OpenAI 格式的商业或私有模型——包括 Claude、Gemini、本地部署的 LLaMA/QWen 等。
核心实现非常简洁,LLMBackend 类仅 60 多行代码,它将所有 OpenAI Chat Completions API 的参数(model、messages、tools、temperature、response_format 等)封装为一个统一的 chat_params 字典,然后交给官方 openai Python SDK 的 client.chat.completions.create() 方法执行。这种设计既保证了与官方 SDK 的完全兼容,又为多模型路由留下了扩展空间。
项目内置了完整的 RAG(检索增强生成) 流程,支持文件类型包括:txt、html、markdown、pdf、docx、pptx、xlsx、png、mp3、mp4 等,覆盖了办公文档、图片、音频、视频等多种格式。解析层使用了 PyMuPDF(处理 PDF)、python-magic(识别文件类型)、BeautifulSoup4(解析 HTML)等工具链。
默认使用内置的简单文件检索实现,生产环境建议切换到 R2R(SciPhi-AI 出品的专用 RAG 引擎),只需在 docker-compose.yml 中修改 FILE_SERVICE_MODULE 配置即可。RAG 配置位于 app/core/tools/file_search_tool.py,核心思路是将上传的文件按 chunk 切分后建立向量索引,运行时通过 FileSearchTool 的 run() 方法根据用户 query 召回相关片段,注入到 LLM 的上下文中。
app/core/runner/memory.py 定义了三种上下文记忆策略:
这种设计让开发者可以根据具体场景灵活选择——例如客服场景用 NaiveMemory 保持对话连贯性,而工具调用场景用 ZeroMemory 减少 token 消耗。
项目内置了两类核心 Tools:基于 Bing Search API 的 WebSearchTool(底层封装 LangChain 的 BingSearchAPIWrapper),以及基于 RAG 的 FileSearchTool。更值得关注的是 OpenAPI Function Tool 和 认证工具支持——开发者只需按照 OpenAPI/Swagger 规范编写 YAML/JSON 描述文件,即可将任意外部 API 接入 Agent 的工具链,并且支持在运行时注入 API Key、Bearer Token 等认证信息。
部署门槛非常低。docker-compose.yml 定义了四个核心服务:FastAPI 主服务(端口 8086)、Celery Worker、Redis、MySQL。部署只需三行命令,API 文档可通过 Swagger UI(http://127.0.0.1:8086/docs)直接访问。Dockerfile 采用多阶段构建,代码质量工具链包含 black 格式化 + ruff 检查 + pytest 测试覆盖。
项目目前存在几个局限:Playground UI 需单独启动,docker-compose 中未包含;Code Interpreter 功能尚未实现;Web Search 依赖 Bing Subscription Key。生产级部署还需关注 Celery Worker 并发数、MySQL 连接池、Redis 持久化策略以及多租户 Token 隔离安全性。
Open Assistant API 是一个工程化程度较高、功能完整的开源自托管 Assistant API 框架。它用约 390 个源码文件和完整的 Docker 编排证明了「开源复刻 OpenAI 接口」这件事是可行的,且在多模型支持、RAG 接入、Tool 扩展性上青出于蓝。对于需要在私有环境部署 AI Agent、对接内部知识库或业务系统的团队,这是一个值得认真评估的候选方案。