A ChatGPT server that stores and processes data using a tree-based data structure, providing users with a mind map-like Q&A experience with ChatGPT. The tree structure greatly optimizes the transmission of context (tokens) and provides a better experience when used within a company.
The image shows a Demo client; the UI is for reference only.
In work scenarios, the need to deeply ask the same question is relatively rare, so in most cases, the token count can be controlled within 2000. Therefore, GPT 3.5's token limit (4096) is sufficient (no need to consider GPT4 for accuracy).
The time between the two screenshots does not exceed 5 minutes. Due to multiple users, detailed logs need to be viewed to distinguish the token consumption of the five questions mentioned, but the overall token consumption can be seen as controllable.
Demo environment is deployed on a cloud server. And NOT set the OpenAI token, so it will start mock mode.
- User login
- Data persistence storage
- Quick deployment script, uploaded to Docker Hub
- Add support for writing long-form fiction scenarios
Updates will be made as needed. More updates will be provided if the project is widely used, and updates will be made based on interest if the project has fewer users.
Feel free to develop a Web UI based on this project! The UI in the Demo is written by me, a beginner in UI design. PRs are welcome!
Organize user input into a multi-branch tree and only pass the content of the current branch as context information to GPT. The amount of content we transmit each time is equal to the depth of the current node. Optimize the selection and transmission of context through the multi-branch tree.
A binary tree with n nodes has a depth of logn. The depth here refers to the context information we need to pass to the GPT API. If we don't process the context, it can be regarded as a one-dimensional tree, which degenerates into a line segment, naturally the most complex case. By organizing the session into a tree structure, we can create a mind map.
It is recommended to choose a server location in a country or region supported by OpenAI. Data centers and cloud hosts are both acceptable, and the following clouds have been tested:
If you insist on testing in an unsupported country or region, this project fully supports proxies, but the proxy itself may affect the experience and pose risks. See the configuration file Spec.GPT.TransportUrl for the proxy configuration details.
The use of proxies is not recommended. Use at your own risk.
Clone and enter project directory
git clone https://github.com/finishy1995/effibot.git cd effibot
The default configuration is Mock mode, which means it will not actually call the GPT API but return the user's input as a response. The default REST API port is
4001, and all configurations can be modified in the
Name: http-api Host: 0.0.0.0 Port: 4001 # Port of http server, default 4001 Timeout: 30000 # Timeout of http request, default 30000(ms) Log: Level: debug Mode: file # Log mode, default console 日志模式，可选 console（命令行输出） 或 file Path: ../logs # Log file path, default ../logs Spec: GPT: # Token: "sk-" # Token of OpenAI, will start mock mode if not set. OpenAI 密钥，如果不设置则启用 mock 模式 # TransportUrl: "http://localhost:4002" # Transport url of OpenAI, default "http://localhost:4002 代理地址，如果不设置则不启用代理 Timeout: 20s # Timeout of OpenAI request, default 20s MaxToken: 1000 # Max token of OpenAI response, default 1000
After modifying the file, if you need
One-click deployment or
container deployment, please execute the following command
mkdir -p ./effibot_config cp http/etc/http-api.yaml ./effibot_config
Please ensure that
docker-compose are correctly installed and enabled.
docker-compose up -d
Demo client will run on port
4000, and REST API will run on both ports
If you don't have
docker-compose, you can use the following command:
docker network create effibot docker run -p 4001:4001 -v ./effibot_config:/app/etc --network effibot --name effibot -d finishy/effibot:latest docker run -p 4000:4000 --network effibot --name effibot-demo -d finishy/effibot-demo:latest
Ensure that golang 1.18+ is installed and configure.
cd http go run http.go # go build http.go && ./http
docker build -t effibot:latest -f http/Dockerfile .
Container Network Bridge Create
docker network create effibot
# Modify the configuration file as needed, such as adding the OpenAI token and change the log mode to console docker run -p 4001:4001 -v ./effibot_config:/app/etc --network effibot --name effibot -d effibot:latest
Demo Client Container Packaging
docker build -t effibot-demo:latest -f demo/Dockerfile .
Demo Client Container Deployment
docker run -p 4000:4000 --network effibot --name effibot-demo -d effibot-demo:latest
Demo Client Development
Demo client is developed by Vue.js + Vite + TypeScript, and requires Node.js 14+ environment.
cd demo yarn && yarn dev
Demo client will automatically open at http://localhost:5173.