--- title: Go Chatgpt Api emoji: 💩 colorFrom: green colorTo: indigo sdk: docker pinned: false app_port: 8080 # go-chatgpt-api ### [English Doc](README_en.md) ## 一个尝试绕过 `Cloudflare 403` 和 `Access denied` 的正向代理程序 ### 实验性质项目,不保证稳定性和向后兼容,使用风险自负 --- ### 使用的过程中遇到问题应该如何解决 汇总贴:https://github.com/linweiyuan/go-chatgpt-api/issues/74 --- ### 支持的 API(URL 和参数基本保持着和官网一致,部分接口有些许改动) --- ### ChatGPT APIs --- - `ChatGPT` 登录(返回 `accessToken`)(目前仅支持 `ChatGPT` 账号,谷歌或微软账号没有测试) `POST /chatgpt/login`
```json { "username": "email", "password": "password" } ```
--- - 获取对话列表(历史记录) `GET /chatgpt/conversations?offset=0&limit=20` `offset` 不传默认为 0, `limit` 不传默认为 20 (最大为 100) --- - 获取对话内容 `GET /chatgpt/conversation/{conversationID}` --- - 新建对话 `POST /chatgpt/conversation`
```json { "action": "next", "messages": [ { "id": "message id", "author": { "role": "user" }, "content": { "content_type": "text", "parts": [ "Hello World" ] } } ], "parent_message_id": "parent message id", "conversation_id": "conversation id", "model": "text-davinci-002-render-sha", "timezone_offset_min": -480, "history_and_training_disabled": false } ```
--- - 生成对话标题 `POST /chatgpt/conversation/gen_title/{conversationID}`
```json { "message_id": "role assistant response message id" } ```
--- - 重命名对话标题 `PATCH /chatgpt/conversation/{conversationID}`
```json { "title": "new title" } ```
--- - 删除单个对话 `PATCH /chatgpt/conversation/{conversationID}`
```json { "is_visible": false } ```
--- - 删除所有对话 `PATCH /chatgpt/conversations`
```json { "is_visible": false } ```
--- - 消息反馈 `POST /chatgpt/conversation/message_feedback`
```json { "message_id": "message id", "conversation_id": "conversation id", "rating": "thumbsUp/thumbsDown" } ```
--- ### Platform APIs --- - `platform` 登录(返回 `sessionKey`) `POST /platform/login`
```json { "username": "email", "password": "password" } ```
--- - [List models](https://platform.openai.com/docs/api-reference/models/list) `GET /platform/v1/models` --- - [Retrieve model](https://platform.openai.com/docs/api-reference/models/retrieve) `GET /platform/v1/models/{model}` --- - [Create completion](https://platform.openai.com/docs/api-reference/completions/create) `POST /platform/v1/completions`
```json { "model": "text-davinci-003", "prompt": "Say this is a test", "max_tokens": 7, "temperature": 0, "stream": true } ```
--- - [Create chat completion](https://platform.openai.com/docs/api-reference/chat/create) `POST /platform/v1/chat/completions`
```json { "messages": [ { "role": "user", "content": "Hello World" } ], "model": "gpt-3.5-turbo", "stream": true } ```
--- - [Create edit](https://platform.openai.com/docs/api-reference/edits/create) `POST /platform/v1/edits`
```json { "model": "text-davinci-edit-001", "input": "What day of the wek is it?", "instruction": "Fix the spelling mistakes" } ```
--- - [Create image](https://platform.openai.com/docs/api-reference/images/create) `POST /platform/v1/images/generations`
```json { "prompt": "A cute dog", "n": 2, "size": "1024x1024" } ```
--- - [Create embeddings](https://platform.openai.com/docs/api-reference/embeddings/create) `POST /platform/v1/embeddings`
```json { "model": "text-embedding-ada-002", "input": "The food was delicious and the waiter..." } ```
--- - [Create moderations](https://platform.openai.com/docs/api-reference/moderations/create) `POST /platform/v1/moderations`
```json { "model": "text-moderation-stable", "input": "I want to kill them." } ```
--- - [List files](https://platform.openai.com/docs/api-reference/files/list) `GET /platform/v1/files` --- - 获取 `credit grants` (只能传 `sessionKey`) `GET /platform/dashboard/billing/credit_grants` --- - 获取 `subscription` (只能传 `sessionKey`) `GET /platform/dashboard/billing/subscription` --- - 获取 `api keys` (只能传 `sessionKey`) `GET /platform/dashboard/user/api_keys` --- 如需设置代理,可以设置环境变量 `GO_CHATGPT_API_PROXY`,比如 `GO_CHATGPT_API_PROXY=http://127.0.0.1:20171` 或者 `GO_CHATGPT_API_PROXY=socks5://127.0.0.1:20170`,注释掉或者留空则不启用 如需配合 `warp` 使用:`GO_CHATGPT_API_PROXY=socks5://chatgpt-proxy-server-warp:65535`,因为需要设置 `warp` 的场景已经默认可以直接访问 `ChatGPT` 官网,因此共用一个变量不冲突 --- `docker-compose` 配置文件: ```yaml services: go-chatgpt-api: container_name: go-chatgpt-api image: linweiyuan/go-chatgpt-api ports: - 8080:8080 environment: - GO_CHATGPT_API_PROXY= restart: unless-stopped ``` 我仅仅在 `Arch Linux` 上进行开发和测试,这是一个滚动更新的版本,意味着系统上所有东西都是最新的,如果你在使用的过程中 `yaml` 报错了,则可以加上 `version: '3'` 在 `services:` 前面 如果遇到 `Access denied`,但是你的服务器确实在[被支持的国家或地区](https://platform.openai.com/docs/supported-countries) ,尝试一下这个配置(不保证能解决问题,比如你的服务器在 A 地区,但 A 地不在支持列表内,即使用上了 `warp` 后是 `Cloudflare IP` ,结果也会是 `403`): ```yaml services: go-chatgpt-api: container_name: go-chatgpt-api image: linweiyuan/go-chatgpt-api ports: - 8080:8080 environment: - GO_CHATGPT_API_PROXY=socks5://chatgpt-proxy-server-warp:65535 depends_on: - chatgpt-proxy-server-warp restart: unless-stopped chatgpt-proxy-server-warp: container_name: chatgpt-proxy-server-warp image: linweiyuan/chatgpt-proxy-server-warp environment: - LOG_LEVEL=OFF restart: unless-stopped ``` 如果你知道什么是 `teams-enroll-token`,可以通过环境变量 `TEAMS_ENROLL_TOKEN` 设置它的值 然后利用这条命令来检查是否生效: `docker-compose exec chatgpt-proxy-server-warp warp-cli --accept-tos account | awk 'NR==1'` ``` Account type: Free (没有生效) Account type: Team (设置正常) ``` --- 如果要让运行的镜像总是保持最新,可以配合这个一起使用: ```yaml services: watchtower: container_name: watchtower image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock command: --interval 3600 restart: unless-stopped ```
广告位 `Vultr` 推荐链接:https://www.vultr.com/?ref=7372562 --- 个人微信(没有验证,谁都能加,添加即通过,不用打招呼,直接把问题发出来,日常和私人问题不聊,不进群;可以解答程序使用问题,但最好自己要有一定的基础;可以远程调试,仅限 `SSH` 或`ToDesk`,但不保证能解决): ![](https://linweiyuan.github.io/about/mmqrcode.png) --- 微信赞赏码(经济条件允许的可以考虑支持下): ![](https://linweiyuan.github.io/about/mm_reward_qrcode.png)