Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/aiwaves-cn/RecurrentGPT
Official Code for Paper: RecurrentGPT: Interactive Generation of (Arbitrarily) Long Text
https://github.com/aiwaves-cn/RecurrentGPT
Last synced: about 1 month ago
JSON representation
Official Code for Paper: RecurrentGPT: Interactive Generation of (Arbitrarily) Long Text
- Host: GitHub
- URL: https://github.com/aiwaves-cn/RecurrentGPT
- Owner: aiwaves-cn
- License: gpl-3.0
- Created: 2023-05-22T15:43:19.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-05-15T03:35:35.000Z (7 months ago)
- Last Synced: 2024-11-09T11:37:04.329Z (about 1 month ago)
- Language: Python
- Homepage:
- Size: 2.41 MB
- Stars: 971
- Watchers: 12
- Forks: 155
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- StarryDivineSky - aiwaves-cn/RecurrentGPT
README
# RecurrentGPT
[📄 Paper] | [🤗 Demo - Writing Assistant] | [🤗 Demo - Interactive Fiction] | [📺 Video] | [🔥 Discord]
## Framework Illustration
> RecurrentGPT replaces the vectorized elements (i.e., cell state, hidden state, input, and output) in a Long-short Term Memory RNN (LSTM) with natural language (i.e., paragraphs of texts), and simulates the recurrence mechanism with prompt engineering.
> At each timestep t, RecurrentGPT receives a paragraph of text and a brief plan of the next paragraph, which are both generated in step t − 1. It then attends to the long-term memory, which contains the summaries of all previously generated paragraphs and can be stored on hard drives, and relevant paragraphs can be retrieved with semantic search.
> RecurrentGPT also maintains a short-term memory that summarizes key information within recent timesteps in natural language and is updated at each time step. RecurrentGPT combines all aforementioned inputs in a prompt and asks the backbone LLM to generate a new paragraph, a short plan for the next paragraph, and updates the long-short term memory by rewriting the short-term memory and appending the summary of the output paragraph to the long-term memory.
### Example
## Deployment
You can change the configurations given in the `recurrent.sh` script
```yaml
iteration: 10 #(int) the number of rounds you would like it to roll.
outfile: response.txt #(str) the output file path.
init_prompt: init_prompt.json #(str) the path to the prompt used for initialization.
topic: Aliens #(str) the topic that you wish your novel is about.
type: science-fiction #(str) the type of novel you would like to write.```
Then after specify your `OPENAI_API_KEY` in the `recurrent.sh` file, you can run
```
sh recurrent.sh
```
NOTE: If your local internet is not allowed to access OpenAI's API, you might need to first export your HTTP proxy in the `recurrent.sh` file as well.
```
export http_proxy='your_proxy'
```## Showcases
### Prompt Engineering
### Iterations
> Human writer starts by choosing the topic he/she wants to write and writes a short paragraph describing the background and the outline of the book. Then RECURRENTGPT automatically generates the first paragraphs and provides a few possible options for the writer to continue the story. The writer may select one from them and edit it if needed. He or she can also write a short plan for the next few paragraphs by him/herself if generated plans are all inappropriate, which makes human-AI co-writing process more flexible
## Web demo
You can directly use our online demo at:
https://www.aiwaves.org/recurrentgpt and https://www.aiwaves.org/interactivefictionOr you can run it on your local machine by editing the OPENAI_API_KEY and OPENAI_Proxy in utils.py and then run:
```
python gradio_server.py
```![web-demo](resources/web_demo.png)
## Use customized LLMs for local deployment
Please refer to https://github.com/jackaduma/Recurrent-LLM to use opensource LLMs for local deployment. Many thanks to @jackaduma## Citation
```angular2
@misc{zhou2023recurrentgpt,
title={RecurrentGPT: Interactive Generation of (Arbitrarily) Long Text},
author={Wangchunshu Zhou and Yuchen Eleanor Jiang and Peng Cui and Tiannan Wang and Zhenxin Xiao and Yifan Hou and Ryan Cotterell and Mrinmaya Sachan},
year={2023},
eprint={2305.13304},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
```