OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  OpenGPTs — 可自定义工具与能力的开源 GPT 应用平台

OpenGPTs — 可自定义工具与能力的开源 GPT 应用平台

 
  beat ·  2026-03-21 18:10:17 · 2 次点击  · 0 条评论  

OpenGPTs

这是一个开源项目,旨在创建与 OpenAI 的 GPTs 和 Assistants API 类似的体验。它由 LangGraph(一个用于创建智能体运行时的框架)提供支持,并构建于 LangChainLangServeLangSmith 之上。OpenGPTs 为您提供更多控制权,允许您配置:

  • 您使用的 LLM(从 LangChain 提供的 60+ 种中选择)
  • 您使用的提示词(使用 LangSmith 进行调试)
  • 您赋予它的工具(从 LangChain 的 100+ 种工具中选择,或轻松编写自己的工具)
  • 您使用的向量数据库(从 LangChain 的 60+ 种向量数据库集成中选择)
  • 您使用的检索算法
  • 您使用的聊天历史数据库

最重要的是,它让您能够完全控制应用程序的认知架构。目前,已实现了三种不同的架构:

  • 助手(Assistant)
  • 检索增强生成(RAG)
  • 聊天机器人(Chatbot)

有关这些架构的更多详细信息,请参见下文。由于这是开源项目,如果您不喜欢这些架构或想要修改它们,可以轻松实现!

配置界面 聊天界面

关键链接

使用 Docker 快速开始

本项目支持基于 Docker 的安装,简化了安装和执行过程。它会自动构建前端和后端的镜像,并使用 docker-compose 设置 Postgres。

  1. 先决条件:
    确保您的系统已安装 Docker 和 docker-compose。

  2. 克隆仓库:
    通过克隆仓库获取项目文件。
    git clone https://github.com/langchain-ai/opengpts.git cd opengpts

  3. 设置环境变量:
    在项目的根目录下,复制 .env.example 作为模板创建 .env 文件,并添加以下环境变量:
    ```shell
    # 至少需要一个语言模型的 API 密钥
    OPENAI_API_KEY=sk-...
    # LANGCHAIN_TRACING_V2=true
    # LANGCHAIN_API_KEY=...

    Postgres 的设置。Docker compose 将使用这些值来设置数据库。

    POSTGRES_PORT=5432
    POSTGRES_DB=opengpts
    POSTGRES_USER=postgres
    POSTGRES_PASSWORD=...
    `` 将sk-...替换为您的 OpenAI API 密钥,将...` 替换为您的 LangChain API 密钥。

  4. 使用 Docker Compose 运行:
    在项目的根目录下,执行:
    docker compose up
    此命令将根据各自的 Dockerfile 构建前端和后端的 Docker 镜像,并启动所有必要的服务,包括 Postgres。

  5. 访问应用程序:
    服务运行后,在 http://localhost:5173 访问前端,将 5173 替换为指定的端口号。

  6. 更改后重新构建:
    如果您对前端或后端进行了更改,请重新构建 Docker 镜像以反映这些更改。运行:
    docker compose up --build
    此命令将使用您的最新更改重新构建镜像并重启服务。

不使用 Docker 快速开始

先决条件
以下说明假设您的系统已安装 Python 3.11+。我们强烈建议使用虚拟环境来管理依赖项。

例如,如果您使用 pyenv,可以创建一个新的虚拟环境:

pyenv install 3.11
pyenv virtualenv 3.11 opengpts
pyenv activate opengpts

设置好 Python 环境后,您可以安装项目依赖项:

后端服务使用 poetry 来管理依赖项。

pip install poetry
pip install langchain-community

安装 Postgres 和 Postgres 向量扩展

brew install postgresql pgvector
brew services start postgresql

配置持久化层

后端使用 Postgres 来保存智能体配置和聊天消息历史记录。要使用此功能,您需要设置以下环境变量:

export POSTGRES_HOST=localhost
export POSTGRES_PORT=5432
export POSTGRES_DB=opengpts
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=...

创建数据库

createdb opengpts

连接到数据库并创建 postgres 角色

psql -d opengpts
CREATE ROLE postgres WITH LOGIN SUPERUSER CREATEDB CREATEROLE;

安装 Golang Migrate

数据库迁移由 golang-migrate 管理。

在 MacOS 上,您可以使用 brew install golang-migrate 安装。其他操作系统或 Golang 工具链的安装说明可以在这里找到。

安装 golang-migrate 后,您可以运行所有迁移:

make migrate

这将使后端能够使用 Postgres 作为向量数据库并创建初始表。

安装后端依赖项

cd backend
poetry install

替代向量数据库

上述说明使用 Postgres 作为向量数据库,但您可以轻松地将其替换为使用 LangChain 中 50+ 种向量数据库中的任何一种。

设置语言模型

默认情况下,本项目使用 OpenAI,但也支持 Azure OpenAI 和 Anthropic。如果您使用这些,可能需要设置不同的环境变量。

export OPENAI_API_KEY="sk-..."

可以使用其他语言模型,为了使用它们,您需要设置更多的环境变量。有关如何配置 Azure OpenAI、Anthropic 和 Amazon Bedrock 的信息,请参见下面的 LLMs 部分。

设置工具

默认情况下,本项目使用许多工具。其中一些需要额外的环境变量。您不需要使用任何这些工具,并且启动应用程序不需要这些环境变量(只有在调用该工具时才需要)。

有关需要启用的环境变量的完整列表,请参见下面的 Tools 部分。

设置监控

设置 LangSmith。这是可选的,但它将有助于调试、日志记录和监控。请通过上面的链接注册,然后设置相关的环境变量:

export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_API_KEY=...

启动后端服务器

make start

启动前端

cd frontend
npm install
npm run dev

导航到 http://localhost:5173/ 并开始使用!

从 Redis 迁移数据到 Postgres

有关从 Redis 迁移数据到 Postgres 的指南,请参阅此文档

重大变更

迁移 5 - 检查点管理更新

数据库迁移版本 5 引入了对线程检查点管理方式的重大更改:
* 从基于 pickle 的检查点系统过渡到新的多表检查点管理系统(重大变更)
* 与 LangGraph 的新检查点架构保持一致,以实现更好的状态管理和持久性
* 重要提示:历史线程/检查点(在此迁移之前创建的)将无法在 UI 中访问
* 先前的检查点数据保存在 old_checkpoints 表中,但新系统无法访问
* 此架构更改改进了线程状态的存储和管理方式,使基于 LangGraph 的智能体能够更可靠地持久化状态。

功能

我们尽可能追求与 OpenAI 的功能对等。

  • [x] 沙盒 - 提供一个环境来导入、测试和修改现有的聊天机器人。
    • 使用的聊天机器人全部基于代码,因此易于编辑
  • [x] 自定义操作 - 使用 OpenAPI 规范为您的聊天机器人定义附加功能
    • 通过添加工具来支持
  • [x] 知识文件 - 附加您的聊天机器人可以引用的额外文件
    • 从 UI 或 API 上传文件,由检索工具使用
  • [x] 工具 - 提供用于网页浏览、图像创建等的基本工具。
    • 默认启用基本的 DuckDuckGo 和 PythonREPL 工具
    • 图像创建功能即将推出
  • [x] 分析 - 查看和分析聊天机器人使用数据
    • 使用 LangSmith 实现此功能
  • [x] 草稿 - 保存并分享您正在创建的聊天机器人草稿
    • 支持保存配置
  • [x] 发布 - 公开分发您已完成的聊天机器人
    • 可以通过 LangServe 部署来实现
  • [x] 分享 - 设置和管理聊天机器人分享
    • 可以通过 LangServe 部署来实现
  • [ ] 市场 - 搜索和部署其他用户创建的聊天机器人
    • 即将推出

仓库结构

  • frontend:前端代码
  • backend:后端代码
    • app:LangServe 代码(用于暴露 API)
    • packages:核心逻辑
      • agent-executor:智能体的运行时
      • gizmo-agent:智能体的配置

自定义

与直接使用 OpenAI 相比,OpenGPTs 的一大吸引力在于它更具可定制性。具体来说,您可以选择使用哪种语言模型,以及更轻松地添加自定义工具。您也可以直接使用底层 API,并根据需要构建自定义 UI。

认知架构

这指的是 GPT 的工作逻辑。目前支持三种不同的架构,但由于它们都是用 LangGraph 编写的,因此很容易修改或添加您自己的架构。

支持的三种不同架构是助手、RAG 和聊天机器人。

助手

助手可以配备任意数量的工具,并使用 LLM 来决定何时使用它们。这使它们成为最灵活的选择,但它们与较少的模型配合良好,并且可能不太可靠。

创建助手时,您需要指定几项内容。

首先,选择要使用的语言模型。只有少数语言模型可以可靠地使用:GPT-3.5、GPT-4、Claude 和 Gemini。

其次,选择要使用的工具。这些可以是预定义的工具,也可以是从上传文件构建的检索器。您可以选择任意数量。

然后,认知架构可以被视为一个循环。首先,调用 LLM 来决定采取什么(如果有的话)行动。如果它决定采取行动,则执行这些行动并循环返回。如果没有决定采取行动,则 LLM 的响应就是最终响应,循环结束。

这可能是一个非常强大和灵活的架构。这可能最接近我们人类的操作方式。然而,这些也可能不太可靠,并且通常只适用于性能更好的模型(即使如此,它们也可能出错)。因此,我们引入了一些更简单的架构。

助手使用 LangGraphMessageGraph 实现。MessageGraph 是一种将其状态建模为消息列表的图。

RAGBot

GPT 商店的一个主要用例是上传文件并让机器人了解这些文件。为这个用例设计一个更专注的架构意味着什么?

我们添加了 RAGBot - 一个专注于检索的 GPT,具有简单的架构。首先,检索一组文档。然后,这些文档在系统消息中传递给语言模型的单独调用,以便它能够响应。

与助手相比,它更具结构性(但功能较弱)。它总是查找某些内容 - 如果您知道您想要查找信息,这很好,但如果用户只是想进行正常对话,则可能造成浪费。同样重要的是,这只会查找一次 - 因此,如果它没有找到正确的结果,那么它将产生一个糟糕的结果(相比之下,助手可以决定再次查找)。

尽管这是一个更简单的架构,但它有几个优点。首先,因为它更简单,它可以与更广泛的模型(包括许多开源模型)很好地配合使用。其次,如果您有一个不需要助手灵活性的用例(例如,您知道用户每次都会查找信息),那么它可以更加专注。第三,与下面的最终架构相比,它可以使用外部知识。

RAGBot 使用 LangGraphStateGraph 实现。StateGraph 是一种可以建模任意状态(即 dict)的通用图,而不仅仅是消息列表

ChatBot

最终的架构非常简单 - 只是对语言模型的一次调用,由系统消息参数化。这允许 GPT 呈现不同的角色和性格。这显然远不如助手或 RAGBot 强大(它们可以访问外部数据/计算源) - 但它仍然有价值!许多流行的 GPT 归根结底只是系统消息,而 CharacterAI 尽管主要只是系统消息,但也取得了巨大成功。

ChatBot 使用 LangGraphStateGraph 实现。StateGraph 是一种可以建模任意状态(即 dict)的通用图,而不仅仅是消息列表

LLMs

您可以选择使用不同的 LLM。这利用了 LangChain 的众多集成。需要注意的是,根据您使用的 LLM,您可能需要更改提示方式。

我们默认公开了四种智能体类型:

  • "GPT 3.5 Turbo"
  • "GPT 4"
  • "Azure OpenAI"
  • "Claude 2"

当我们有信心它们能良好工作时,我们将努力添加更多。

如果您想添加自己的 LLM 或智能体配置,或者想要编辑现有的配置,可以在 backend/app/agent_types 中找到它们。

Claude 2

如果使用 Claude 2,您需要设置以下环境变量:

export ANTHROPIC_API_KEY=sk-...

Azure OpenAI

如果使用 Azure OpenAI,您需要设置以下环境变量:

export AZURE_OPENAI_API_BASE=...
export AZURE_OPENAI_API_VERSION=...
export AZURE_OPENAI_API_KEY=...
export AZURE_OPENAI_DEPLOYMENT_NAME=...

Amazon Bedrock

如果使用 Amazon Bedrock,您需要在 ~/.aws/credentials 中有有效的凭证,或者设置以下环境变量:

export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...

工具

开源的一大好处是您可以更轻松地添加工具(直接在 Python 中)。

在实践中,我们看到的大多数团队都定义了自己的工具。这在 LangChain 中很容易实现。有关如何最好地执行此操作的详细信息,请参阅本指南

如果您想使用一些预配置的工具,包括:

Sema4.ai Action Server

使用 Sema4.ai Action Server 运行基于 AI Python 的操作。不需要服务 API 密钥,但需要定义正在运行的 Action Server 实例的凭证。这些凭证在创建助手时设置。

Connery Actions

使用 Connery 将 OpenGPTs 连接到现实世界。

需要设置一个环境变量,您可以在 Connery Runner 设置期间获得:

CONNERY_RUNNER_URL=https://your-personal-connery-runner-url
CONNERY_RUNNER_API_KEY=...

DuckDuckGo 搜索

使用 DuckDuckGo 搜索网络。不需要任何 API 密钥。

Tavily 搜索

使用 Tavily 搜索引擎。需要设置环境变量:

export TAVILY_API_KEY=tvly-...

在此注册获取 API 密钥。

Tavily 搜索(仅答案)

使用 Tavily 搜索引擎。此工具仅返回答案,不提供支持证据。当您需要简短响应(小上下文窗口)时很有用。需要设置环境变量:

export TAVILY_API_KEY=tvly-...

在此注册获取 API 密钥。

You.com 搜索

使用 You.com 搜索,针对 LLM 优化响应。需要设置环境变量:

export YDC_API_KEY=...

在此注册获取 API 密钥。

SEC 文件(Kay.ai)

使用 Kay.ai 搜索 SEC 文件。需要设置环境变量:

export KAY_API_KEY=...

在此注册获取 API 密钥。

新闻稿(Kay.ai)

使用 Kay.ai 搜索新闻稿。需要设置环境变量:

export KAY_API_KEY=...

在此注册获取 API 密钥。

Arxiv

搜索 Arxiv。不需要任何 API 密钥。

PubMed

搜索 PubMed。不需要任何 API 密钥。

Wikipedia

搜索 Wikipedia。不需要任何 API 密钥。

部署

通过 Cloud Run 部署

1. 构建前端

cd frontend
yarn
yarn build

2. 部署到 Google Cloud Run

您可以使用以下命令部署到 GCP Cloud Run:

首先,根据 .env.gcp.yaml.example 的内容创建 .env.gcp.yaml 文件并填写值。然后运行:

gcloud run deploy opengpts --source . --port 8000 --env-vars-file .env.gcp.yaml --allow-unauthenticated \
--region us-central1 --min-instances 1

在 Kubernetes 中部署

我们有一个用于将后端部署到 Kubernetes 的 Helm chart。您可以在此处找到更多信息:README.md

2 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私政策 ·  服务条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 24 ms
Developed with Cursor