ai-forward


Nameai-forward JSON
Version 0.0.1 PyPI version JSON
download
home_page
Summary🚀 OpenAI API Reverse Proxy · ChatGPT API Proxy
upload_time2023-08-13 20:24:36
maintainer
docs_urlNone
author
requires_python>=3.6
license
keywords openai api forwarding chatgpt fastapi openai openai-api openai-proxy python streaming-api
VCS
bugtrack_url
requirements loguru fastapi uvicorn orjson python-dotenv httpx rich fire pytz
Travis-CI No Travis.
coveralls test coverage No coveralls.
            **中文** | ~~[**English**](./README_EN.md)~~

<h1 align="center">
    <br>
    OpenAI Forward
    <br>
</h1>
<p align="center">
    <b> OpenAI API 接口转发服务 <br/>
    The fastest way to deploy openai api forwarding </b>
</p>

<p align="center">
    <a href="https://pypi.org/project/openai-forward/"><img src="https://img.shields.io/pypi/v/openai-forward?color=brightgreen" alt="PyPI version" ></a>
    <a href="https://github.com/beidongjiedeguang/openai-forward/blob/main/LICENSE">
        <img alt="License" src="https://img.shields.io/github/license/beidongjiedeguang/openai-forward.svg?color=blue&style=flat-square">
    </a>
    <a href="https://github.com/beidongjiedeguang/openai-forward/releases">
        <img alt="Release (latest by date)" src="https://img.shields.io/github/v/release/beidongjiedeguang/openai-forward">
    </a>
    <a href="https://github.com/beidongjiedeguang/openai-forward">
        <img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/beidongjiedeguang/openai-forward">
    </a>
    <a href="https://hub.docker.com/r/beidongjiedeguang/openai-forward">
        <img alt="docker image size" src="https://img.shields.io/docker/image-size/beidongjiedeguang/openai-forward?style=flat&label=docker image">
    </a>
    <a href="https://github.com/beidongjiedeguang/openai-forward/actions/workflows/ci.yml">
        <img alt="tests" src="https://img.shields.io/github/actions/workflow/status/beidongjiedeguang/openai-forward/ci.yml?label=tests">
    </a>
    <a href="https://pypistats.org/packages/openai-forward">
        <img alt="pypi downloads" src="https://img.shields.io/pypi/dm/openai_forward">
    </a>
    <a href="https://codecov.io/gh/beidongjiedeguang/openai-forward">
        <img alt="codecov" src="https://codecov.io/gh/beidongjiedeguang/openai-forward/branch/dev/graph/badge.svg">
    </a>
</p>

<div align="center">

[功能](#功能) |
[部署指南](#部署指南) |
[应用](#应用) |
[配置选项](#配置选项) |
[对话日志](#对话日志)

[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/tejCum?referralCode=U0-kXv)  
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/beidongjiedeguang/openai-forward)

</div>

本项目用于解决一些地区无法直接访问OpenAI的问题,将该服务部署在可以正常访问OpenAI API的(云)服务器上,
通过该服务转发OpenAI的请求。即搭建反向代理服务; 允许输入多个OpenAI API-KEY 组成轮询池; 可自定义二次分发api key.

---

由本项目搭建的长期代理地址:
> https://api.openai-forward.com  
> https://cloudflare.worker.openai-forward.com  
> https://cloudflare.page.openai-forward.com  
> https://vercel.openai-forward.com  
> https://render.openai-forward.com  
> https://railway.openai-forward.com

## 功能

**基础功能**

- [x] 支持转发OpenAI所有接口
- [x] 支持流式响应
- [x] 支持指定转发路由前缀
- [x] docker部署
- [x] pip 安装部署
- [x] Railway 一键部署
- [x] Render 一键部署
- [x] cloudflare 部署
- [x] Vercel一键部署

**高级功能**

- [x] 允许输入多个openai api key 组成轮询池
- [x] 自定义 转发api key (见[高级配置](#高级配置))
- [x] 流式响应对话日志
- [x] 多接口转发

## 部署指南

👉 [部署文档](deploy.md)

提供以下几种部署方式  
**有海外vps方案**

1. [pip 安装部署](deploy.md#pip部署)
2. [Docker部署](deploy.md#docker部署)
   > https://api.openai-forward.com

**无vps免费部署方案**

1. [Railway部署](deploy.md#Railway-一键部署)
   > https://railway.openai-forward.com
2. [Render一键部署](deploy.md#render-一键部署)
   > https://render.openai-forward.com

---
下面的部署仅提供单一转发功能

3. [一键Vercel部署](deploy.md#vercel-一键部署)
   > https://vercel.openai-forward.com
4. [cloudflare部署](deploy.md#cloudflare-部署)
   > https://cloudflare.page.openai-forward.com

## 应用

### [聊天应用](https://chat.beidongjiedeguang.top)

基于开源项目[ChatGPT-Next-Web](https://github.com/Yidadaa/ChatGPT-Next-Web)搭建自己的chatgpt服务  
替换docker启动命令中的 `BASE_URL`为我们自己搭建的代理服务地址


<details >
   <summary> details</summary>  

```bash 
docker run -d \
    -p 3000:3000 \
    -e OPENAI_API_KEY="sk-******" \
    -e BASE_URL="https://api.openai-forward.com" \
    -e CODE="******" \
    yidadaa/chatgpt-next-web 
``` 

</details>

### 在代码中使用

**Python**

```diff
  import openai
+ openai.api_base = "https://api.openai-forward.com/v1"
  openai.api_key = "sk-******"
```

<details open>
  <summary>More Examples</summary>

**JS/TS**

```diff
  import { Configuration } from "openai";
  
  const configuration = new Configuration({
+ basePath: "https://api.openai-forward.com/v1",
  apiKey: "sk-******",
  });
```

**gpt-3.5-turbo**

```bash
curl https://api.openai-forward.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-******" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'
```

**Image Generation (DALL-E)**

```bash
curl --location 'https://api.openai-forward.com/v1/images/generations' \
--header 'Authorization: Bearer sk-******' \
--header 'Content-Type: application/json' \
--data '{
    "prompt": "A photo of a cat",
    "n": 1,
    "size": "512x512"
}'
```

</details>

## 配置选项

配置的设置方式支持两种  
一种为在命令行中执行`aifd run` 的运行参数(如`--port=8000`)中指定;  
另一种为读取环境变量的方式指定。

### 命令行参数

可通过 `aifd run --help` 查看

<details open>
  <summary>Click for more details</summary>

**`aifd run`参数配置项**

| 配置项                   | 说明                    |          默认值           |
|-----------------------|-----------------------|:----------------------:|
| --port                | 服务端口号                 |          8000          |
| --workers             | 工作进程数                 |           1            |
| --openai_base_url     | 同 OPENAI_BASE_URL     | https://api.openai.com |
| --openai_route_prefix | 同 OPENAI_ROUTE_PREFIX |         `None`         |
| --api_key             | 同 OPENAI_API_KEY      |         `None`         |
| --forward_key         | 同 FORWARD_KEY         |         `None`         |
| --extra_base_url      | 同 EXTRA_BASE_URL      |         `None`         |
| --extra_route_prefix  | 同 EXTRA_ROUTE_PREFIX  |         `None`         |
| --log_chat            | 同 LOG_CHAT            |        `False`         |

</details>

### 环境变量配置项

支持从运行目录下的`.env`文件中读取

| 环境变量                | 说明                                                                                                                                |          默认值           |
|---------------------|-----------------------------------------------------------------------------------------------------------------------------------|:----------------------:|
| OPENAI_BASE_URL     | 默认 openai官方 api 地址                                                                                                                | https://api.openai.com |
| OPENAI_ROUTE_PREFIX | openai(接口格式)路由前缀                                                                                                                  |           /            |
| OPENAI_API_KEY      | 默认openai api key,支持多个默认api key, 以 `sk-` 开头, 以逗号分隔                                                                                 |           无            |
| FORWARD_KEY         | 允许调用方使用该key代替openai api key,支持多个forward key, 以逗号分隔; 如果设置了OPENAI_API_KEY,而没有设置FORWARD_KEY, 则客户端调用时无需提供密钥, 此时出于安全考虑不建议FORWARD_KEY置空 |           无            |
| EXTRA_BASE_URL      | 额外转发服务地址                                                                                                                          |           无            |
| EXTRA_ROUTE_PREFIX  | 额外转发服务路由前缀                                                                                                                        |           无            |
| LOG_CHAT            | 是否记录聊天内容                                                                                                                          |        `false`         |

## 高级配置

### 设置openai api_key为自定义的forward key
<details markdown="1">
  <summary>Click for more details</summary>

需要配置 OPENAI_API_KEY 和 FORWARD_KEY, 例如

```bash
OPENAI_API_KEY=sk-*******
FORWARD_KEY=fk-****** # 这里fk-token由我们自己定义
```

这里我们配置了FORWARD_KEY为`fk-******`, 那么后面客户端在调用时只需设置OPENAI_API_KEY为我们自定义的`fk-******` 即可。  
这样的好处是在使用一些需要输入OPENAI_API_KEY的第三方应用时,我们可以使用自定义的api-key`fk-******`,
无需担心真正的OPENAI_API_KEY被泄露。并且可以对外分发`fk-******`。

**用例:**

```bash
curl https://api.openai-forward.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer fk-******" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'
```

**Python**

```diff
  import openai
+ openai.api_base = "https://api.openai-forward.com/v1"
- openai.api_key = "sk-******"
+ openai.api_key = "fk-******"
```

**Web application**

```bash 
docker run -d \
    -p 3000:3000 \
    -e OPENAI_API_KEY="fk-******" \
    -e BASE_URL="https://api.openai-forward.com" \
    -e CODE="<your password>" \
    yidadaa/chatgpt-next-web 
``` 

</details>

### 多路由转发

支持转发不同地址的服务至同一端口的不同路由下,基本可以转发任何服务。  
用例见  `.env.example`


## 对话日志

默认不记录对话日志,若要开启需设置环境变量`LOG_CHAT=true`
<details open>
  <summary>Click for more details</summary>

保存路径在当前目录下的`Log/chat`路径中。  
记录格式为

```text
{'messages': [{'user': 'hi'}], 'model': 'gpt-3.5-turbo', 'forwarded-for': '', 'uid': '467a17ec-bf39-4b65-9ebd-e722b3bdd5c3', 'datetime': '2023-07-18 14:01:21'}
{'assistant': 'Hello there! How can I assist you today?', 'uid': '467a17ec-bf39-4b65-9ebd-e722b3bdd5c3'}
{'messages': [{'user': 'Hello!'}], 'model': 'gpt-3.5-turbo', 'forwarded-for': '', 'uid': 'f844d156-e747-4887-aef8-e40d977b5ee7', 'datetime': '2023-07-18 14:01:23'}
{'assistant': 'Hi there! How can I assist you today?', 'uid': 'f844d156-e747-4887-aef8-e40d977b5ee7'}
```

转换为`json`格式:

```bash
aifd convert
```

得到`chat.json`:

```json
[
    {
        "datetime": "2023-07-18 14:01:21",
        "forwarded-for": "",
        "model": "gpt-3.5-turbo",
        "messages": [
            {
                "user": "hi"
            }
        ],
        "assistant": "Hello there! How can I assist you today?"
    },
    {
        "datetime": "2023-07-18 14:01:23",
        "forwarded-for": "",
        "model": "gpt-3.5-turbo",
        "messages": [
            {
                "user": "Hello!"
            }
        ],
        "assistant": "Hi there! How can I assist you today?"
    }
]
```

</details>

## Backer and Sponsor

<a href="https://www.jetbrains.com/?from=beidongjiedeguang/openai-forward" target="_blank">
<img src=".github/images/jetbrains.svg" width="100px" height="100px">
</a>

## License

OpenAI-Forward is licensed under the [MIT](https://opensource.org/license/mit/) license.

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "ai-forward",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "",
    "keywords": "OpenAI API Forwarding,chatgpt,fastapi,openai,openai-api,openai-proxy,python,streaming-api",
    "author": "",
    "author_email": "kunyuan <beidongjiedeguang@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/e3/9b/e30c2aa2f52b01b3bb071dd68fce7bfc0ebf02eb8a8cd2419ea93b3121a1/ai_forward-0.0.1.tar.gz",
    "platform": null,
    "description": "**\u4e2d\u6587** | ~~[**English**](./README_EN.md)~~\n\n<h1 align=\"center\">\n    <br>\n    OpenAI Forward\n    <br>\n</h1>\n<p align=\"center\">\n    <b> OpenAI API \u63a5\u53e3\u8f6c\u53d1\u670d\u52a1 <br/>\n    The fastest way to deploy openai api forwarding </b>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://pypi.org/project/openai-forward/\"><img src=\"https://img.shields.io/pypi/v/openai-forward?color=brightgreen\" alt=\"PyPI version\" ></a>\n    <a href=\"https://github.com/beidongjiedeguang/openai-forward/blob/main/LICENSE\">\n        <img alt=\"License\" src=\"https://img.shields.io/github/license/beidongjiedeguang/openai-forward.svg?color=blue&style=flat-square\">\n    </a>\n    <a href=\"https://github.com/beidongjiedeguang/openai-forward/releases\">\n        <img alt=\"Release (latest by date)\" src=\"https://img.shields.io/github/v/release/beidongjiedeguang/openai-forward\">\n    </a>\n    <a href=\"https://github.com/beidongjiedeguang/openai-forward\">\n        <img alt=\"GitHub repo size\" src=\"https://img.shields.io/github/repo-size/beidongjiedeguang/openai-forward\">\n    </a>\n    <a href=\"https://hub.docker.com/r/beidongjiedeguang/openai-forward\">\n        <img alt=\"docker image size\" src=\"https://img.shields.io/docker/image-size/beidongjiedeguang/openai-forward?style=flat&label=docker image\">\n    </a>\n    <a href=\"https://github.com/beidongjiedeguang/openai-forward/actions/workflows/ci.yml\">\n        <img alt=\"tests\" src=\"https://img.shields.io/github/actions/workflow/status/beidongjiedeguang/openai-forward/ci.yml?label=tests\">\n    </a>\n    <a href=\"https://pypistats.org/packages/openai-forward\">\n        <img alt=\"pypi downloads\" src=\"https://img.shields.io/pypi/dm/openai_forward\">\n    </a>\n    <a href=\"https://codecov.io/gh/beidongjiedeguang/openai-forward\">\n        <img alt=\"codecov\" src=\"https://codecov.io/gh/beidongjiedeguang/openai-forward/branch/dev/graph/badge.svg\">\n    </a>\n</p>\n\n<div align=\"center\">\n\n[\u529f\u80fd](#\u529f\u80fd) |\n[\u90e8\u7f72\u6307\u5357](#\u90e8\u7f72\u6307\u5357) |\n[\u5e94\u7528](#\u5e94\u7528) |\n[\u914d\u7f6e\u9009\u9879](#\u914d\u7f6e\u9009\u9879) |\n[\u5bf9\u8bdd\u65e5\u5fd7](#\u5bf9\u8bdd\u65e5\u5fd7)\n\n[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/tejCum?referralCode=U0-kXv)  \n[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/beidongjiedeguang/openai-forward)\n\n</div>\n\n\u672c\u9879\u76ee\u7528\u4e8e\u89e3\u51b3\u4e00\u4e9b\u5730\u533a\u65e0\u6cd5\u76f4\u63a5\u8bbf\u95eeOpenAI\u7684\u95ee\u9898\uff0c\u5c06\u8be5\u670d\u52a1\u90e8\u7f72\u5728\u53ef\u4ee5\u6b63\u5e38\u8bbf\u95eeOpenAI API\u7684(\u4e91)\u670d\u52a1\u5668\u4e0a\uff0c\n\u901a\u8fc7\u8be5\u670d\u52a1\u8f6c\u53d1OpenAI\u7684\u8bf7\u6c42\u3002\u5373\u642d\u5efa\u53cd\u5411\u4ee3\u7406\u670d\u52a1; \u5141\u8bb8\u8f93\u5165\u591a\u4e2aOpenAI API-KEY \u7ec4\u6210\u8f6e\u8be2\u6c60; \u53ef\u81ea\u5b9a\u4e49\u4e8c\u6b21\u5206\u53d1api key.\n\n---\n\n\u7531\u672c\u9879\u76ee\u642d\u5efa\u7684\u957f\u671f\u4ee3\u7406\u5730\u5740\uff1a\n> https://api.openai-forward.com  \n> https://cloudflare.worker.openai-forward.com  \n> https://cloudflare.page.openai-forward.com  \n> https://vercel.openai-forward.com  \n> https://render.openai-forward.com  \n> https://railway.openai-forward.com\n\n## \u529f\u80fd\n\n**\u57fa\u7840\u529f\u80fd**\n\n- [x] \u652f\u6301\u8f6c\u53d1OpenAI\u6240\u6709\u63a5\u53e3\n- [x] \u652f\u6301\u6d41\u5f0f\u54cd\u5e94\n- [x] \u652f\u6301\u6307\u5b9a\u8f6c\u53d1\u8def\u7531\u524d\u7f00\n- [x] docker\u90e8\u7f72\n- [x] pip \u5b89\u88c5\u90e8\u7f72\n- [x] Railway \u4e00\u952e\u90e8\u7f72\n- [x] Render \u4e00\u952e\u90e8\u7f72\n- [x] cloudflare \u90e8\u7f72\n- [x] Vercel\u4e00\u952e\u90e8\u7f72\n\n**\u9ad8\u7ea7\u529f\u80fd**\n\n- [x] \u5141\u8bb8\u8f93\u5165\u591a\u4e2aopenai api key \u7ec4\u6210\u8f6e\u8be2\u6c60\n- [x] \u81ea\u5b9a\u4e49 \u8f6c\u53d1api key (\u89c1[\u9ad8\u7ea7\u914d\u7f6e](#\u9ad8\u7ea7\u914d\u7f6e))\n- [x] \u6d41\u5f0f\u54cd\u5e94\u5bf9\u8bdd\u65e5\u5fd7\n- [x] \u591a\u63a5\u53e3\u8f6c\u53d1\n\n## \u90e8\u7f72\u6307\u5357\n\n\ud83d\udc49 [\u90e8\u7f72\u6587\u6863](deploy.md)\n\n\u63d0\u4f9b\u4ee5\u4e0b\u51e0\u79cd\u90e8\u7f72\u65b9\u5f0f  \n**\u6709\u6d77\u5916vps\u65b9\u6848**\n\n1. [pip \u5b89\u88c5\u90e8\u7f72](deploy.md#pip\u90e8\u7f72)\n2. [Docker\u90e8\u7f72](deploy.md#docker\u90e8\u7f72)\n   > https://api.openai-forward.com\n\n**\u65e0vps\u514d\u8d39\u90e8\u7f72\u65b9\u6848**\n\n1. [Railway\u90e8\u7f72](deploy.md#Railway-\u4e00\u952e\u90e8\u7f72)\n   > https://railway.openai-forward.com\n2. [Render\u4e00\u952e\u90e8\u7f72](deploy.md#render-\u4e00\u952e\u90e8\u7f72)\n   > https://render.openai-forward.com\n\n---\n\u4e0b\u9762\u7684\u90e8\u7f72\u4ec5\u63d0\u4f9b\u5355\u4e00\u8f6c\u53d1\u529f\u80fd\n\n3. [\u4e00\u952eVercel\u90e8\u7f72](deploy.md#vercel-\u4e00\u952e\u90e8\u7f72)\n   > https://vercel.openai-forward.com\n4. [cloudflare\u90e8\u7f72](deploy.md#cloudflare-\u90e8\u7f72)\n   > https://cloudflare.page.openai-forward.com\n\n## \u5e94\u7528\n\n### [\u804a\u5929\u5e94\u7528](https://chat.beidongjiedeguang.top)\n\n\u57fa\u4e8e\u5f00\u6e90\u9879\u76ee[ChatGPT-Next-Web](https://github.com/Yidadaa/ChatGPT-Next-Web)\u642d\u5efa\u81ea\u5df1\u7684chatgpt\u670d\u52a1  \n\u66ff\u6362docker\u542f\u52a8\u547d\u4ee4\u4e2d\u7684 `BASE_URL`\u4e3a\u6211\u4eec\u81ea\u5df1\u642d\u5efa\u7684\u4ee3\u7406\u670d\u52a1\u5730\u5740\n\n\n<details >\n   <summary> details</summary>  \n\n```bash \ndocker run -d \\\n    -p 3000:3000 \\\n    -e OPENAI_API_KEY=\"sk-******\" \\\n    -e BASE_URL=\"https://api.openai-forward.com\" \\\n    -e CODE=\"******\" \\\n    yidadaa/chatgpt-next-web \n``` \n\n</details>\n\n### \u5728\u4ee3\u7801\u4e2d\u4f7f\u7528\n\n**Python**\n\n```diff\n  import openai\n+ openai.api_base = \"https://api.openai-forward.com/v1\"\n  openai.api_key = \"sk-******\"\n```\n\n<details open>\n  <summary>More Examples</summary>\n\n**JS/TS**\n\n```diff\n  import { Configuration } from \"openai\";\n  \n  const configuration = new Configuration({\n+ basePath: \"https://api.openai-forward.com/v1\",\n  apiKey: \"sk-******\",\n  });\n```\n\n**gpt-3.5-turbo**\n\n```bash\ncurl https://api.openai-forward.com/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer sk-******\" \\\n  -d '{\n    \"model\": \"gpt-3.5-turbo\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}]\n  }'\n```\n\n**Image Generation (DALL-E)**\n\n```bash\ncurl --location 'https://api.openai-forward.com/v1/images/generations' \\\n--header 'Authorization: Bearer sk-******' \\\n--header 'Content-Type: application/json' \\\n--data '{\n    \"prompt\": \"A photo of a cat\",\n    \"n\": 1,\n    \"size\": \"512x512\"\n}'\n```\n\n</details>\n\n## \u914d\u7f6e\u9009\u9879\n\n\u914d\u7f6e\u7684\u8bbe\u7f6e\u65b9\u5f0f\u652f\u6301\u4e24\u79cd  \n\u4e00\u79cd\u4e3a\u5728\u547d\u4ee4\u884c\u4e2d\u6267\u884c`aifd run` \u7684\u8fd0\u884c\u53c2\u6570(\u5982`--port=8000`)\u4e2d\u6307\u5b9a;  \n\u53e6\u4e00\u79cd\u4e3a\u8bfb\u53d6\u73af\u5883\u53d8\u91cf\u7684\u65b9\u5f0f\u6307\u5b9a\u3002\n\n### \u547d\u4ee4\u884c\u53c2\u6570\n\n\u53ef\u901a\u8fc7 `aifd run --help` \u67e5\u770b\n\n<details open>\n  <summary>Click for more details</summary>\n\n**`aifd run`\u53c2\u6570\u914d\u7f6e\u9879**\n\n| \u914d\u7f6e\u9879                   | \u8bf4\u660e                    |          \u9ed8\u8ba4\u503c           |\n|-----------------------|-----------------------|:----------------------:|\n| --port                | \u670d\u52a1\u7aef\u53e3\u53f7                 |          8000          |\n| --workers             | \u5de5\u4f5c\u8fdb\u7a0b\u6570                 |           1            |\n| --openai_base_url     | \u540c OPENAI_BASE_URL     | https://api.openai.com |\n| --openai_route_prefix | \u540c OPENAI_ROUTE_PREFIX |         `None`         |\n| --api_key             | \u540c OPENAI_API_KEY      |         `None`         |\n| --forward_key         | \u540c FORWARD_KEY         |         `None`         |\n| --extra_base_url      | \u540c EXTRA_BASE_URL      |         `None`         |\n| --extra_route_prefix  | \u540c EXTRA_ROUTE_PREFIX  |         `None`         |\n| --log_chat            | \u540c LOG_CHAT            |        `False`         |\n\n</details>\n\n### \u73af\u5883\u53d8\u91cf\u914d\u7f6e\u9879\n\n\u652f\u6301\u4ece\u8fd0\u884c\u76ee\u5f55\u4e0b\u7684`.env`\u6587\u4ef6\u4e2d\u8bfb\u53d6\n\n| \u73af\u5883\u53d8\u91cf                | \u8bf4\u660e                                                                                                                                |          \u9ed8\u8ba4\u503c           |\n|---------------------|-----------------------------------------------------------------------------------------------------------------------------------|:----------------------:|\n| OPENAI_BASE_URL     | \u9ed8\u8ba4 openai\u5b98\u65b9 api \u5730\u5740                                                                                                                | https://api.openai.com |\n| OPENAI_ROUTE_PREFIX | openai(\u63a5\u53e3\u683c\u5f0f)\u8def\u7531\u524d\u7f00                                                                                                                  |           /            |\n| OPENAI_API_KEY      | \u9ed8\u8ba4openai api key\uff0c\u652f\u6301\u591a\u4e2a\u9ed8\u8ba4api key, \u4ee5 `sk-` \u5f00\u5934\uff0c \u4ee5\u9017\u53f7\u5206\u9694                                                                                 |           \u65e0            |\n| FORWARD_KEY         | \u5141\u8bb8\u8c03\u7528\u65b9\u4f7f\u7528\u8be5key\u4ee3\u66ffopenai api key\uff0c\u652f\u6301\u591a\u4e2aforward key, \u4ee5\u9017\u53f7\u5206\u9694; \u5982\u679c\u8bbe\u7f6e\u4e86OPENAI_API_KEY\uff0c\u800c\u6ca1\u6709\u8bbe\u7f6eFORWARD_KEY, \u5219\u5ba2\u6237\u7aef\u8c03\u7528\u65f6\u65e0\u9700\u63d0\u4f9b\u5bc6\u94a5, \u6b64\u65f6\u51fa\u4e8e\u5b89\u5168\u8003\u8651\u4e0d\u5efa\u8baeFORWARD_KEY\u7f6e\u7a7a |           \u65e0            |\n| EXTRA_BASE_URL      | \u989d\u5916\u8f6c\u53d1\u670d\u52a1\u5730\u5740                                                                                                                          |           \u65e0            |\n| EXTRA_ROUTE_PREFIX  | \u989d\u5916\u8f6c\u53d1\u670d\u52a1\u8def\u7531\u524d\u7f00                                                                                                                        |           \u65e0            |\n| LOG_CHAT            | \u662f\u5426\u8bb0\u5f55\u804a\u5929\u5185\u5bb9                                                                                                                          |        `false`         |\n\n## \u9ad8\u7ea7\u914d\u7f6e\n\n### \u8bbe\u7f6eopenai api_key\u4e3a\u81ea\u5b9a\u4e49\u7684forward key\n<details markdown=\"1\">\n  <summary>Click for more details</summary>\n\n\u9700\u8981\u914d\u7f6e OPENAI_API_KEY \u548c FORWARD_KEY, \u4f8b\u5982\n\n```bash\nOPENAI_API_KEY=sk-*******\nFORWARD_KEY=fk-****** # \u8fd9\u91ccfk-token\u7531\u6211\u4eec\u81ea\u5df1\u5b9a\u4e49\n```\n\n\u8fd9\u91cc\u6211\u4eec\u914d\u7f6e\u4e86FORWARD_KEY\u4e3a`fk-******`, \u90a3\u4e48\u540e\u9762\u5ba2\u6237\u7aef\u5728\u8c03\u7528\u65f6\u53ea\u9700\u8bbe\u7f6eOPENAI_API_KEY\u4e3a\u6211\u4eec\u81ea\u5b9a\u4e49\u7684`fk-******` \u5373\u53ef\u3002  \n\u8fd9\u6837\u7684\u597d\u5904\u662f\u5728\u4f7f\u7528\u4e00\u4e9b\u9700\u8981\u8f93\u5165OPENAI_API_KEY\u7684\u7b2c\u4e09\u65b9\u5e94\u7528\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684api-key`fk-******`,\n\u65e0\u9700\u62c5\u5fc3\u771f\u6b63\u7684OPENAI_API_KEY\u88ab\u6cc4\u9732\u3002\u5e76\u4e14\u53ef\u4ee5\u5bf9\u5916\u5206\u53d1`fk-******`\u3002\n\n**\u7528\u4f8b:**\n\n```bash\ncurl https://api.openai-forward.com/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer fk-******\" \\\n  -d '{\n    \"model\": \"gpt-3.5-turbo\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}]\n  }'\n```\n\n**Python**\n\n```diff\n  import openai\n+ openai.api_base = \"https://api.openai-forward.com/v1\"\n- openai.api_key = \"sk-******\"\n+ openai.api_key = \"fk-******\"\n```\n\n**Web application**\n\n```bash \ndocker run -d \\\n    -p 3000:3000 \\\n    -e OPENAI_API_KEY=\"fk-******\" \\\n    -e BASE_URL=\"https://api.openai-forward.com\" \\\n    -e CODE=\"<your password>\" \\\n    yidadaa/chatgpt-next-web \n``` \n\n</details>\n\n### \u591a\u8def\u7531\u8f6c\u53d1\n\n\u652f\u6301\u8f6c\u53d1\u4e0d\u540c\u5730\u5740\u7684\u670d\u52a1\u81f3\u540c\u4e00\u7aef\u53e3\u7684\u4e0d\u540c\u8def\u7531\u4e0b\uff0c\u57fa\u672c\u53ef\u4ee5\u8f6c\u53d1\u4efb\u4f55\u670d\u52a1\u3002  \n\u7528\u4f8b\u89c1  `.env.example`\n\n\n## \u5bf9\u8bdd\u65e5\u5fd7\n\n\u9ed8\u8ba4\u4e0d\u8bb0\u5f55\u5bf9\u8bdd\u65e5\u5fd7\uff0c\u82e5\u8981\u5f00\u542f\u9700\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf`LOG_CHAT=true`\n<details open>\n  <summary>Click for more details</summary>\n\n\u4fdd\u5b58\u8def\u5f84\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u7684`Log/chat`\u8def\u5f84\u4e2d\u3002  \n\u8bb0\u5f55\u683c\u5f0f\u4e3a\n\n```text\n{'messages': [{'user': 'hi'}], 'model': 'gpt-3.5-turbo', 'forwarded-for': '', 'uid': '467a17ec-bf39-4b65-9ebd-e722b3bdd5c3', 'datetime': '2023-07-18 14:01:21'}\n{'assistant': 'Hello there! How can I assist you today?', 'uid': '467a17ec-bf39-4b65-9ebd-e722b3bdd5c3'}\n{'messages': [{'user': 'Hello!'}], 'model': 'gpt-3.5-turbo', 'forwarded-for': '', 'uid': 'f844d156-e747-4887-aef8-e40d977b5ee7', 'datetime': '2023-07-18 14:01:23'}\n{'assistant': 'Hi there! How can I assist you today?', 'uid': 'f844d156-e747-4887-aef8-e40d977b5ee7'}\n```\n\n\u8f6c\u6362\u4e3a`json`\u683c\u5f0f\uff1a\n\n```bash\naifd convert\n```\n\n\u5f97\u5230`chat.json`\uff1a\n\n```json\n[\n    {\n        \"datetime\": \"2023-07-18 14:01:21\",\n        \"forwarded-for\": \"\",\n        \"model\": \"gpt-3.5-turbo\",\n        \"messages\": [\n            {\n                \"user\": \"hi\"\n            }\n        ],\n        \"assistant\": \"Hello there! How can I assist you today?\"\n    },\n    {\n        \"datetime\": \"2023-07-18 14:01:23\",\n        \"forwarded-for\": \"\",\n        \"model\": \"gpt-3.5-turbo\",\n        \"messages\": [\n            {\n                \"user\": \"Hello!\"\n            }\n        ],\n        \"assistant\": \"Hi there! How can I assist you today?\"\n    }\n]\n```\n\n</details>\n\n## Backer and Sponsor\n\n<a href=\"https://www.jetbrains.com/?from=beidongjiedeguang/openai-forward\" target=\"_blank\">\n<img src=\".github/images/jetbrains.svg\" width=\"100px\" height=\"100px\">\n</a>\n\n## License\n\nOpenAI-Forward is licensed under the [MIT](https://opensource.org/license/mit/) license.\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "\ud83d\ude80 OpenAI API Reverse Proxy \u00b7 ChatGPT API Proxy",
    "version": "0.0.1",
    "project_urls": {
        "Documentation": "https://github.com/beidongjiedeguang/openai-forward#openai-forward",
        "Homepage": "https://github.com/beidongjiedeguang/openai-forward",
        "Issues": "https://github.com/beidongjiedeguang/openai-forward/issues",
        "Source": "https://github.com/beidongjiedeguang/openai-forward"
    },
    "split_keywords": [
        "openai api forwarding",
        "chatgpt",
        "fastapi",
        "openai",
        "openai-api",
        "openai-proxy",
        "python",
        "streaming-api"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ad8f4137eff752bb58f34c0f1e90542415bbabab533e11476476cdf2140249fd",
                "md5": "7a86cfd384e84ecb1d807e9a0141f7e3",
                "sha256": "e5586067648473075f7eb599f10f8c672fe564fe2e19a16721c8226101c8b7fd"
            },
            "downloads": -1,
            "filename": "ai_forward-0.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7a86cfd384e84ecb1d807e9a0141f7e3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 17598,
            "upload_time": "2023-08-13T20:24:33",
            "upload_time_iso_8601": "2023-08-13T20:24:33.996225Z",
            "url": "https://files.pythonhosted.org/packages/ad/8f/4137eff752bb58f34c0f1e90542415bbabab533e11476476cdf2140249fd/ai_forward-0.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e39be30c2aa2f52b01b3bb071dd68fce7bfc0ebf02eb8a8cd2419ea93b3121a1",
                "md5": "5cc1ad0cd3b6b2ce86eb8e59be69418c",
                "sha256": "a9dab2947ed00e86efbd0ed59a23a2f2b6933c746966db1328223ef860d443ee"
            },
            "downloads": -1,
            "filename": "ai_forward-0.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "5cc1ad0cd3b6b2ce86eb8e59be69418c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 14011,
            "upload_time": "2023-08-13T20:24:36",
            "upload_time_iso_8601": "2023-08-13T20:24:36.243894Z",
            "url": "https://files.pythonhosted.org/packages/e3/9b/e30c2aa2f52b01b3bb071dd68fce7bfc0ebf02eb8a8cd2419ea93b3121a1/ai_forward-0.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-08-13 20:24:36",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "beidongjiedeguang",
    "github_project": "openai-forward#openai-forward",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "loguru",
            "specs": []
        },
        {
            "name": "fastapi",
            "specs": [
                [
                    ">=",
                    "0.94.0"
                ]
            ]
        },
        {
            "name": "uvicorn",
            "specs": [
                [
                    ">=",
                    "0.21.0"
                ]
            ]
        },
        {
            "name": "orjson",
            "specs": []
        },
        {
            "name": "python-dotenv",
            "specs": []
        },
        {
            "name": "httpx",
            "specs": [
                [
                    ">=",
                    "0.24.1"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": []
        },
        {
            "name": "fire",
            "specs": []
        },
        {
            "name": "pytz",
            "specs": []
        }
    ],
    "lcname": "ai-forward"
}
        
Elapsed time: 0.13707s