Browse Source

docs: update README

JustSong 2 years ago
parent
commit
827942c8a9
2 changed files with 289 additions and 0 deletions
  1. 284 0
      README.en.md
  2. 5 0
      README.md

+ 284 - 0
README.en.md

@@ -0,0 +1,284 @@
+<p align="right">
+    <a href="./README.md">中文</a> | <strong>English</strong>
+</p>
+
+<p align="center">
+  <a href="https://github.com/songquanpeng/one-api"><img src="https://raw.githubusercontent.com/songquanpeng/one-api/main/web/public/logo.png" width="150" height="150" alt="one-api logo"></a>
+</p>
+
+<div align="center">
+
+# One API
+
+_✨ The all-in-one OpenAI interface, integrates various API access methods, ready to use ✨_
+
+</div>
+
+<p align="center">
+  <a href="https://raw.githubusercontent.com/songquanpeng/one-api/main/LICENSE">
+    <img src="https://img.shields.io/github/license/songquanpeng/one-api?color=brightgreen" alt="license">
+  </a>
+  <a href="https://github.com/songquanpeng/one-api/releases/latest">
+    <img src="https://img.shields.io/github/v/release/songquanpeng/one-api?color=brightgreen&include_prereleases" alt="release">
+  </a>
+  <a href="https://hub.docker.com/repository/docker/justsong/one-api">
+    <img src="https://img.shields.io/docker/pulls/justsong/one-api?color=brightgreen" alt="docker pull">
+  </a>
+  <a href="https://github.com/songquanpeng/one-api/releases/latest">
+    <img src="https://img.shields.io/github/downloads/songquanpeng/one-api/total?color=brightgreen&include_prereleases" alt="release">
+  </a>
+  <a href="https://goreportcard.com/report/github.com/songquanpeng/one-api">
+    <img src="https://goreportcard.com/badge/github.com/songquanpeng/one-api" alt="GoReportCard">
+  </a>
+</p>
+
+<p align="center">
+  <a href="https://github.com/songquanpeng/one-api#deployment">Deployment Tutorial</a>
+  ·
+  <a href="https://github.com/songquanpeng/one-api#usage">Usage</a>
+  ·
+  <a href="https://github.com/songquanpeng/one-api/issues">Feedback</a>
+  ·
+  <a href="https://github.com/songquanpeng/one-api#screenshots">Screenshots</a>
+  ·
+  <a href="https://openai.justsong.cn/">Live Demo</a>
+  ·
+  <a href="https://github.com/songquanpeng/one-api#faq">FAQ</a>
+  ·
+  <a href="https://github.com/songquanpeng/one-api#related-projects">Related Projects</a>
+  ·
+  <a href="https://iamazing.cn/page/reward">Donate</a>
+</p>
+
+> **Warning**: This README is translated by ChatGPT. Please feel free to submit a PR if you find any translation errors.
+
+> **Note**: The latest image pulled from Docker may be an `alpha` release. Specify the version manually if you require stability.
+
+> **Warning**: Manual migration of the database is necessary when upgrading from version `v0.3` to `v0.4`. Please manually execute the [database migration script](./bin/migration_v0.3-v0.4.sql).
+
+## Features
+1. Supports multiple API access channels. Welcome PRs or issue submissions for additional channels:
+    + [x] Official OpenAI channel (support proxy configuration)
+    + [x] **Azure OpenAI API**
+    + [x] [OpenAI-SB](https://openai-sb.com)
+    + [x] [API2D](https://api2d.com/r/197971)
+    + [x] [OhMyGPT](https://aigptx.top?aff=uFpUl2Kf)
+    + [x] [AI Proxy](https://aiproxy.io/?i=OneAPI) (invitation code: `OneAPI`)
+    + [x] [API2GPT](http://console.api2gpt.com/m/00002S)
+    + [x] [CloseAI](https://console.closeai-asia.com/r/2412)
+    + [x] [AI.LS](https://ai.ls)
+    + [x] [OpenAI Max](https://openaimax.com)
+    + [x] Custom channel: Various third-party proxy services not included in the list
+2. Supports access to multiple channels through **load balancing**.
+3. Supports **stream mode** that enables typewriter-like effect through stream transmission.
+4. Supports **multi-machine deployment**. [See here](#multi-machine-deployment) for more details.
+5. Supports **token management** that allows setting token expiration time and usage count.
+6. Supports **voucher management** that enables batch generation and export of vouchers. Vouchers can be used for account balance replenishment.
+7. Supports **channel management** that allows bulk creation of channels.
+8. Supports **user grouping** and **channel grouping** for setting different rates for different groups.
+9. Supports channel **model list configuration**.
+10. Supports **quota details checking**.
+11. Supports **user invite rewards**.
+12. Allows display of balance in USD.
+13. Supports announcement publishing, recharge link setting, and initial balance setting for new users.
+14. Offers rich **customization** options:
+    1. Supports customization of system name, logo, and footer.
+    2. Supports customization of homepage and about page using HTML & Markdown code, or embedding a standalone webpage through iframe.
+15. Supports management API access through system access tokens.
+16. Supports Cloudflare Turnstile user verification.
+17. Supports user management and multiple user login/registration methods:
+    + Email login/registration and password reset via email.
+    + [GitHub OAuth](https://github.com/settings/applications/new).
+    + WeChat Official Account authorization (requires additional deployment of [WeChat Server](https://github.com/songquanpeng/wechat-server)).
+18. Immediate support and encapsulation of other major model APIs as they become available.
+
+## Deployment
+### Docker Deployment
+Deployment command: `docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api`
+
+Update command: `docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower -cR`
+
+The first `3000` in `-p 3000:3000` is the port of the host, which can be modified as needed.
+
+Data will be saved in the `/home/ubuntu/data/one-api` directory on the host. Ensure that the directory exists and has write permissions, or change it to a suitable directory.
+
+Nginx reference configuration:
+```
+server{
+   server_name openai.justsong.cn;  # Modify your domain name accordingly
+   
+   location / {
+          client_max_body_size  64m;
+          proxy_http_version 1.1;
+          proxy_pass http://localhost:3000;  # Modify your port accordingly
+          proxy_set_header Host $host;
+          proxy_set_header X-Forwarded-For $remote_addr;
+          proxy_cache_bypass $http_upgrade;
+          proxy_set_header Accept-Encoding gzip;
+   }
+}
+```
+
+Next, configure HTTPS with Let's Encrypt certbot:
+```bash
+# Install certbot on Ubuntu:
+sudo snap install --classic certbot
+sudo ln -s /snap/bin/certbot /usr/bin/certbot
+# Generate certificates & modify Nginx configuration
+sudo certbot --nginx
+# Follow the prompts
+# Restart Nginx
+sudo service nginx restart
+```
+
+The initial account username is `root` and password is `123456`.
+
+### Manual Deployment
+1. Download the executable file from [GitHub Releases](https://github.com/songquanpeng/one-api/releases/latest) or compile from source:
+   ```shell
+   git clone https://github.com/songquanpeng/one-api.git
+   
+   # Build the frontend
+   cd one-api/web
+   npm install
+   npm run build
+
+   # Build the backend
+   cd ..
+   go mod download
+   go build -ldflags "-s -w" -o one-api
+   ```
+2. Run:
+   ```shell
+   chmod u+x one-api
+   ./one-api --port 3000 --log-dir ./logs
+   ```
+3. Access [http://localhost:3000/](http://localhost:3000/) and log in. The initial account username is `root` and password is `123456`.
+
+For more detailed deployment tutorials, please refer to [this page](https://iamazing.cn/page/how-to-deploy-a-website).
+
+### Multi-machine Deployment
+1. Set the same `SESSION_SECRET` for all servers.
+2. Set `SQL_DSN` and use MySQL instead of SQLite. All servers should connect to the same database.
+3. Set the `NODE_TYPE` for all non-master nodes to `slave`.
+4. Set `SYNC_FREQUENCY` for servers to periodically sync configurations from the database.
+5. Non-master nodes can optionally set `FRONTEND_BASE_URL` to redirect page requests to the master server.
+6. Install Redis separately on non-master nodes, and configure `REDIS_CONN_STRING` so that the database can be accessed with zero latency when the cache has not expired.
+7. If the main server also has high latency accessing the database, Redis must be enabled and `SYNC_FREQUENCY` must be set to periodically sync configurations from the database.
+
+Please refer to the [environment variables](#environment-variables) section for details on using environment variables.
+
+### Deployment on Control Panels (e.g., Baota)
+Refer to [#175](https://github.com/songquanpeng/one-api/issues/175) for detailed instructions.
+
+If you encounter a blank page after deployment, refer to [#97](https://github.com/songquanpeng/one-api/issues/97) for possible solutions.
+
+### Deployment on Third-Party Platforms
+<details>
+<summary><strong>Deployment on Zeabur</strong></summary>
+<div>
+
+> Zeabur's servers are located overseas, automatically solving network issues, and the free quota is sufficient for personal usage.
+
+1. First, fork the code.
+2. Go to [Zeabur](https://zeabur.com/), log in, and enter the console.
+3. Create a new project. In Service -> Add Service, select Marketplace, and choose MySQL. Note down the connection parameters (username, password, address, and port).
+4. Copy the connection parameters and run ```create database `one-api` ``` to create the database.
+5. Then, in Service -> Add Service, select Git (authorization is required for the first use) and choose your forked repository.
+6. Automatic deployment will start, but please cancel it for now. Go to the Variable tab, add a `PORT` with a value of `3000`, and then add a `SQL_DSN` with a value of `<username>:<password>@tcp(<addr>:<port>)/one-api`. Save the changes. Please note that if `SQL_DSN` is not set, data will not be persisted, and the data will be lost after redeployment.
+7. Select Redeploy.
+8. In the Domains tab, select a suitable domain name prefix, such as "my-one-api". The final domain name will be "my-one-api.zeabur.app". You can also CNAME your own domain name.
+9. Wait for the deployment to complete, and click on the generated domain name to access One API.
+
+</div>
+</details>
+
+## Configuration
+The system is ready to use out of the box.
+
+You can configure it by setting environment variables or command line parameters.
+
+After the system starts, log in as the `root` user to further configure the system.
+
+## Usage
+Add your API Key on the `Channels` page, and then add an access token on the `Tokens` page.
+
+You can then use your access token to access One API. The usage is consistent with the [OpenAI API](https://platform.openai.com/docs/api-reference/introduction).
+
+In places where the OpenAI API is used, remember to set the API Base to your One API deployment address, for example: `https://openai.justsong.cn`. The API Key should be the token generated in One API.
+
+Note that the specific API Base format depends on the client you are using.
+
+```mermaid
+graph LR
+    A(User)
+    A --->|Request| B(One API)
+    B -->|Relay Request| C(OpenAI)
+    B -->|Relay Request| D(Azure)
+    B -->|Relay Request| E(Other downstream channels)
+```
+
+To specify which channel to use for the current request, you can add the channel ID after the token, for example: `Authorization: Bearer ONE_API_KEY-CHANNEL_ID`.
+Note that the token needs to be created by an administrator to specify the channel ID.
+
+If the channel ID is not provided, load balancing will be used to distribute the requests to multiple channels.
+
+### Environment Variables
+1. `REDIS_CONN_STRING`: When set, Redis will be used as the storage for request rate limiting instead of memory.
+    + Example: `REDIS_CONN_STRING=redis://default:redispw@localhost:49153`
+2. `SESSION_SECRET`: When set, a fixed session key will be used to ensure that cookies of logged-in users are still valid after the system restarts.
+    + Example: `SESSION_SECRET=random_string`
+3. `SQL_DSN`: When set, the specified database will be used instead of SQLite. Please use MySQL version 8.0.
+    + Example: `SQL_DSN=root:123456@tcp(localhost:3306)/oneapi`
+4. `FRONTEND_BASE_URL`: When set, the specified frontend address will be used instead of the backend address.
+    + Example: `FRONTEND_BASE_URL=https://openai.justsong.cn`
+5. `SYNC_FREQUENCY`: When set, the system will periodically sync configurations from the database, with the unit in seconds. If not set, no sync will happen.
+    + Example: `SYNC_FREQUENCY=60`
+6. `NODE_TYPE`: When set, specifies the node type. Valid values are `master` and `slave`. If not set, it defaults to `master`.
+    + Example: `NODE_TYPE=slave`
+7. `CHANNEL_UPDATE_FREQUENCY`: When set, it periodically updates the channel balances, with the unit in minutes. If not set, no update will happen.
+    + Example: `CHANNEL_UPDATE_FREQUENCY=1440`
+8. `CHANNEL_TEST_FREQUENCY`: When set, it periodically tests the channels, with the unit in minutes. If not set, no test will happen.
+    + Example: `CHANNEL_TEST_FREQUENCY=1440`
+9. `REQUEST_INTERVAL`: The time interval (in seconds) between requests when updating channel balances and testing channel availability. Default is no interval.
+    + Example: `POLLING_INTERVAL=5`
+
+### Command Line Parameters
+1. `--port <port_number>`: Specifies the port number on which the server listens. Defaults to `3000`.
+    + Example: `--port 3000`
+2. `--log-dir <log_dir>`: Specifies the log directory. If not set, the logs will not be saved.
+    + Example: `--log-dir ./logs`
+3. `--version`: Prints the system version number and exits.
+4. `--help`: Displays the command usage help and parameter descriptions.
+
+## Screenshots
+![channel](https://user-images.githubusercontent.com/39998050/233837954-ae6683aa-5c4f-429f-a949-6645a83c9490.png)
+![token](https://user-images.githubusercontent.com/39998050/233837971-dab488b7-6d96-43af-b640-a168e8d1c9bf.png)
+
+## FAQ
+1. What is quota? How is it calculated? Does One API have quota calculation issues?
+    + Quota = Group multiplier * Model multiplier * (number of prompt tokens + number of completion tokens * completion multiplier)
+    + The completion multiplier is fixed at 1.33 for GPT3.5 and 2 for GPT4, consistent with the official definition.
+    + If it is not a stream mode, the official API will return the total number of tokens consumed. However, please note that the consumption multipliers for prompts and completions are different.
+2. Why does it prompt "insufficient quota" even though my account balance is sufficient?
+    + Please check if your token quota is sufficient. It is separate from the account balance.
+    + The token quota is used to set the maximum usage and can be freely set by the user.
+3. It says "No available channels" when trying to use a channel. What should I do?
+    + Please check the user and channel group settings.
+    + Also check the channel model settings.
+4. Channel testing reports an error: "invalid character '<' looking for beginning of value"
+    + This error occurs when the returned value is not valid JSON but an HTML page.
+    + Most likely, the IP of your deployment site or the node of the proxy has been blocked by CloudFlare.
+5. ChatGPT Next Web reports an error: "Failed to fetch"
+    + Do not set `BASE_URL` during deployment.
+    + Double-check that your interface address and API Key are correct.
+
+## Related Projects
+[FastGPT](https://github.com/c121914yu/FastGPT): Build an AI knowledge base in three minutes
+
+## Note
+This project is an open-source project. Please use it in compliance with OpenAI's [Terms of Use](https://openai.com/policies/terms-of-use) and **applicable laws and regulations**. It must not be used for illegal purposes.
+
+This project is open-sourced under the MIT license. One must somehow retain the copyright information of One API.
+
+According to the MIT license, users should bear the risk and responsibility of using this project, and the developer of this open-source project is not responsible for this.

+ 5 - 0
README.md

@@ -1,3 +1,8 @@
+<p align="right">
+   <strong>中文</strong> | <a href="./README.en.md">English</a>
+</p>
+
+
 <p align="center">
   <a href="https://github.com/songquanpeng/one-api"><img src="https://raw.githubusercontent.com/songquanpeng/one-api/main/web/public/logo.png" width="150" height="150" alt="one-api logo"></a>
 </p>