Project Icon

opengpts

可定制的开源智能助手框架

OpenGPTs 是一个基于 LangGraph 框架的开源项目,旨在提供类似 OpenAI 的 GPTs 和 Assistants API 的功能。该项目允许开发者自定义语言模型、提示词、工具和向量数据库等核心组件。OpenGPTs 支持 Assistant、RAG 和 Chatbot 等多种认知架构,使智能助手的行为模式更加灵活。此外,OpenGPTs 集成了 LangChain、LangServe 和 LangSmith 等工具,便于开发者进行调试和监控。

OpenGPTs

这是一项旨在创建类似于OpenAI的GPTs和Assistants API体验的开源努力。 它由LangGraph驱动 - 这是一个用于创建智能体运行时的框架。 它还基于LangChainLangServeLangSmith构建。 OpenGPTs给予你更多控制权,允许你配置:

  • 你使用的LLM(从LangChain提供的60多个中选择)
  • 你使用的提示(使用LangSmith来调试它们)
  • 你给予它的工具(从LangChain的100多个工具中选择,或轻松编写你自己的工具)
  • 你使用的向量数据库(从LangChain的60多个向量数据库集成中选择)
  • 你使用的检索算法
  • 你使用的聊天历史数据库

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

  • 助手
  • RAG
  • 聊天机器人

更多详细信息请见下文。 由于这是开源的,如果你不喜欢这些架构或想要修改它们,你可以轻松做到!

配置 聊天

重要链接

使用Docker快速开始

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

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

  2. 克隆仓库:
    通过克隆仓库获取项目文件。

    git clone https://github.com/langchain-ai/opengpts.git
    cd opengpts
    
  3. 设置环境变量:
    在项目根目录创建一个.env文件,复制.env.example作为模板,并添加以下环境变量:

    # 至少需要一个语言模型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-..."

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

设置工具

默认情况下,这里使用了很多工具。 其中一些需要额外的环境变量。 你不需要使用所有这些工具,启动应用程序也不需要这些环境变量 (只有在调用特定工具时才需要)。

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

设置监控

设置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。

功能

我们尽可能努力实现与OpenAI功能上的对等。

  • 沙盒 - 提供一个环境来导入、测试和修改现有聊天机器人。
    • 使用的聊天机器人都是代码形式,所以很容易编辑
  • 自定义动作 - 使用OpenAPI规范为你的聊天机器人定义额外功能
    • 通过添加工具来支持
  • 知识文件 - 附加额外的文件供你的聊天机器人参考
    • 从UI或API上传文件,由检索工具使用
  • 工具 - 提供基本的网页浏览、图像创建等工具。
    • 默认启用基本的DuckDuckGo和PythonREPL工具
    • 图像创建功能即将推出
  • 分析 - 查看和分析聊天机器人使用数据
    • 使用LangSmith实现此功能
  • 草稿 - 保存和分享你正在创建的聊天机器人草稿
    • 支持保存配置
  • 发布 - 公开分发你完成的聊天机器人
    • 可以通过LangServe部署实现
  • 分享 - 设置和管理聊天机器人分享
    • 可以通过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的响应就是最终响应,循环结束。

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

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

RAGBot

GPT商店的一个主要用例是上传文件并让机器人了解这些文件。如何构建一个更专注于这个用例的架构呢?

我们添加了RAGBot - 一个以检索为重点的GPT,具有直接的架构。首先,检索一组文档。然后,这些文档被传递到系统消息中,再单独调用语言模型进行响应。

与助手相比,它更加结构化(但功能较弱)。它总是会查找信息 - 如果你知道你想查找东西,这很好,但如果用户只是想进行正常对话,这可能会浪费资源。同样重要的是,这只查找一次 - 所以如果没有找到正确的结果,就会产生糟糕的结果(相比之下,助手可以决定再次查找)。

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

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

ChatBot

最终的架构非常简单 - 只是对语言模型的调用,由系统消息参数化。这允许 GPT 采用不同的角色和特征。这显然不如 Assistants 或 RAGBots(可以访问外部数据/计算源)强大 - 但它仍然有价值!许多流行的 GPT 本质上只是系统消息,而 CharacterAI 也主要依靠系统消息就取得了巨大成功。

ChatBot 是使用 LangGraph StateGraph 实现的。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 文件,内容来自 .env.gcp.yaml.example,并填入相应的值。然后运行:

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

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号