项目介绍:open-text-embeddings
项目背景
open-text-embeddings 是一个旨在提供 OpenAI API 兼容的 embeddings
端点的开源项目。虽然许多开源项目支持 OpenAI API 的 completions
和 chat/completions
端点,但对 embeddings
端点的支持却相对较少。因此,本项目专注于填补这一空白,支持通过 LangChain 提供的多种句子转换模型以及 HuggingFace 的嵌入模型。
支持的文本嵌入模型
项目对多种开源模型进行了测试和验证,包括但不限于:
- BAAI/bge-large-en
- intfloat/e5-large-v2
- sentence-transformers/all-MiniLM-L6-v2
- sentence-transformers/all-mpnet-base-v2
- universal-sentence-encoder-large/5
测试表明,这些句子转换模型与 embeddings
端点能良好地协同工作。然而,使用 BAAI/bge-* 和 intfloat/e5-* 系列模型时,可能需要在输入值前添加特定前缀文本,以获得最佳性能。例如,当输入是字符串(str
)类型时,假定嵌入将用于查询;当输入是字符串列表(List[str]
)类型时,假定将嵌入存储在向量数据库中。
演示
用户可以通过在浏览器中试用 open-text-embeddings 进一步了解其功能和性能。
本地部署
独立 FastAPI 服务器
要在本地运行嵌入端点,用户可以按照以下步骤:
-
安装必要的依赖:
pip install --no-cache-dir open-text-embeddings[server]
-
使用命令下载所需模型,例如
intfloat/e5-large-v2
:./download.sh intfloat/e5-large-v2
-
通过以下命令启动服务器,该设置默认启用嵌入标准化:
MODEL=intfloat/e5-large-v2 python -m open.text.embeddings.server
如果模型不支持嵌入标准化,可以禁用该功能:
MODEL=intfloat/e5-large-v2 NORMALIZE_EMBEDDINGS=0 python -m open.text.embeddings.server
如果运行环境中检测到GPU,服务器会自动以cuba模式运行。用户可以通过环境变量选择
cpu
或cuba
模式:MODEL=intfloat/e5-large-v2 DEVICE=cpu python -m open.text.embeddings.server
-
服务器启动后的控制台输出示例:
INFO: Started server process [19705] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
云端部署
项目支持通过 GitHub Actions 部署到云端,其中包括 AWS Lambda Function 和 Modal Web 端点。用户可以通过配置 GitHub 仓库的 Secrets 并触发相关 Actions 来完成部署。
嵌入端点的测试
项目提供了一个 embeddings.ipynb Jupyter notebook,内含 LangChain 兼容的 OpenAIEmbeddings
类,用户可以通过该 notebook 测试嵌入端点。
参与贡献
项目欢迎用户贡献代码。用户可以查看仓库中的问题并提交 Pull Request。此外,项目也提供了详细的贡献指南。
许可证
本项目采用 MIT 许可证进行授权,用户可以按照许可证的条款进行使用和修改。