✨ EasyEdit Beginner's Guide officially published!
We have written a detailed beginner's guide for EasyEdit, specifically tailored for newcomers to the fields of knowledge editing and model editing. By reading this manual, you can quickly understand and start using EasyEdit.
🔥 EasyEdit 2.0 officially published!
Unlike EasyEdit1.0, which achieves knowledge editing by updating internal parameters or introducing additional parameters, EasyEdit2 enables real-time steering of LLMs during inference. It provides a unified framework for controllability without retraining, seamlessly integrating various steering methods for ease of use and evaluation.
👉 [README] (for more details).
2026-03-04, 🎉 SteerEval is released — a hierarchical benchmark for evaluating LLM controllability across behavioral domains and granularity levels, with an automated data synthesis pipeline.
2025-10-12, ⚡ LightMem is released — a lightweight and efficient memory framework empowering LLMs and AI agents with long-term memory capabilities!
2025-10-02, 👑 SimIE has arrived — a general framework for lifelong model editing, which restores the strong performance of parameter-modifying methods from standard model editing in a lifelong context!
2025-09-10, 🎉🎉 EasyEdit2 Paper has been accepted by the EMNLP 2025 System Demonstration Track.
2025-07-24, 🚀🚀the EasyEdit has added three new unstructured long-form knowledge editing datasets AKEW, LEME and UNKE. In addition, EasyEdit also incorporated two of the currently most popular unstructured editing methods UNKE and AnyEdit. EasyEdit2 also supports the representation steering method RePS and provides initial support for AxBench-style evaluation.
2025-06-07, 👑 UltraEdit has arrived — powered by a lifelong normalization strategy that continuously updates feature statistics across turns, it can edit 20K samples on a 7B model in just 5 minutes and scales stably to millions !
2025-06-05, 🌟🌟the EasyEdit has added a new model editing algorithm CORE, designed to strengthen context robustness by minimizing context-sensitive variance in hidden states of the model for edited knowledge.
2025-05-28, 🌟🌟the EasyEdit has added a new model editing algorithm NAMET, which introduces noise during memory extraction via a one-line modification to MEMIT. Thanks to @ybdai7 for contribution!
2025-04-03, 🚀🚀We have upgraded EasyEdit and introduced EasyEdit2! EasyEdit2 provides an easy-to-use steering framework for editing large language models with precision and flexibility. This upgrade enhances the framework’s capabilities, making it more robust and adaptable for various steering methods. More details can be found in our paper, in the README and on our website.
Previous News
2025-03-04, 🌟🌟In addition to the original token-level teacher-forcing paradigm for evaluation, EasyEdit has integrated a new evaluation method, following the paper titled “The Mirage of Model Editing: Revisiting Evaluation in the Wild“. You can use this script to quickly launch this evaluation approach, which better aligns with real-world requirements. Special thanks to @WanliYoung for contribution!
2024-11-19, we update the Table 4 results in the paper “A Comprehensive Study of Knowledge Editing for Large Language Models“ after optimizing certain methods (related to AdaLoRA) and fixing computational bugs (related to ROME and MEMIT) in the EasyEdit (More details in https://github.com/zjunlp/EasyEdit/issues/427). These improvements have led to better results than before. We will continue updating this paper and welcome everyone to discuss and exchange ideas.
2024-11-11, 🎉🎉the paper on model editing for LLMs4Code, “Model Editing for LLMs4Code: How Far are We?“, has been accepted by ICSE 2025! This work proposes a benchmark for LLMs4Code editing, CLMEEval, which is built upon EasyEdit!
2024-10-24, EasyEdit has added two new knowledge editing methods, AlphaEdit. In addition, we have fixed several bugs.
2024-10-23, the EasyEdit integrates constrained decoding methods from steering editing to mitigate hallucination in LLM and MLLM, with detailed information available in DoLa and DeCo.
2024-07-29, the EasyEdit has added a new model editing algorithm EMMET, which generalizes ROME to the batch setting. This essentially allows making batched edits using the ROME loss function.
2024-07-23, we release a new paper: “Knowledge Mechanisms in Large Language Models: A Survey and Perspective“, which reviews how knowledge is acquired, utilized, and evolves in large language models. This survey may provide the fundamental mechanisms for precisely and efficiently manipulating (editing) knowledge in LLMs.
2024-06-04, 🎉🎉 EasyEdit Paper has been accepted by the ACL 2024 System Demonstration Track.
2024-04-24, EasyEdit announced support for the ROME method for Llama3-8B. Users are advised to update their transformers package to version 4.40.0.
2024-03-29, EasyEdit introduced rollback support for GRACE. For a detailed introduction, refer to the EasyEdit documentation. Future updates will gradually include rollback support for other methods.
2024-03-01, EasyEdit added support for a new method called FT-M. This method involves training a specific MLP layer using cross-entropy loss on the target answer and masking the original text. It outperforms the FT-L implementation in ROME. The author of issue https://github.com/zjunlp/EasyEdit/issues/173 is thanked for their advice.
2024-02-06, we release a preliminary tool EasyDetect for LLM hallucination detection,with a demo.
2024-01-24, the EasyEdit has added the support for editing Mistral-7B (manually update transformers==4.34.0), we have also fixed some bugs in evaluating MEND (slightly influence the performance).
2024-01-16, the EasyEdit has added the support for the precise model editing method PMET’AAAI24.
2024-01-03, we release a new paper:”A Comprehensive Study of Knowledge Editing for Large Language Models“ with a new benchmark KnowEdit! KnowEdit is constructed by re-organizing and cleaning existing datasests including WikiBio, ZsRE, WikiData Counterfact, WikiData Recent, convsent, Sanitation with new train/val/test spliting. Special thanks to the builders and maintainers of the those datasets.We are looking forward to any comments or discussions on this topic :)
2023-12-06, the EasyEdit has added the support for the lifelong model editing method GRACE’NeurIPS24.
2023-11-18, our tutorial “Knowledge Editing for Large Language Models” has been accepted by COLING 2024.
2023-10-25, our tutorial “Knowledge Editing for Large Language Models” has been accepted by AAAI 2024.
2023-10-24, the EasyEdit has added the support for efficient editing of Baichuan2, ChatGLM2, InternLM, QWen and fixed several bugs for a better user experience.
2023-7-12, we release version 0.0.1, supporting several knowledge editing techniques for LLMs. EasyEdit helps to better align LLMs with changing needs and values of users.
There is a demonstration of editing. The GIF file is created by Terminalizer.
We provide a handy Jupyter Notebook! It allows you to edit a LLM’s knowledge of the US president, switching from Biden to Trump and even back to Biden. This includes methods like WISE, AlphaEdit, AdaLoRA, and Prompt-based editing.
Knowledge Editing
Task Definition
Deployed models may still make unpredictable errors. For example, LLMs notoriously hallucinate, perpetuate bias, and factually decay, so we should be able to adjust specific behaviors of pre-trained models.
Knowledge editing aims to adjust base model’s (fθ) behavior on the particular edit descriptor [xe,ye] efficiently.
Multi Setting
Single Knowledge Editing
Evaluating the performance of the model after a single edit. The model reloads the original weights (e.g. LoRA discards the adapter weights) after a single edit. You should set sequential_edit=False
θ′←argθmin(∥fθ(xe)−ye∥)
Continuous Knowledge Editing
This requires sequentially editing, and evaluation is performed after all knowledge updates have been applied:
θ′←argθmine=1∑∥Xe∥(∥fθ(xe)−ye∥)
It makes parameter adjustments for (xe,ye), where xe∈Xe and fθ′(xe)=ye. Here, Xe represents the whole edit set. To enable continuous editing, you can set sequential_edit=True: README (for more details).
Multi Scenario
Factual Knowledge Editing
Knowledge insert
Inject knowledge that LLMs have not seen before. such as:
How many times has Messi won the World Cup? 0→1:
Knowledge update
Update outdated knowledge. such as:
The president of USA: Donald Trump→Joe Biden:
Knowledge erase
Erase sensitive information. such as:
The phone number of someone is XXXX→__
Without influencing the model behavior on unrelated samples, the ultimate goal is to create an edited model (fθ′).
Safety Editing
**Detoxifying LLM** strives to build a safe and trustworthy large language model (LLM). Knowledge editing focuses on specific areas for permanent adjustment without compromising overall performance. Then, detoxifying LLM via knowledge editing leverages a small amount of data, usually an instance, to correct the toxic behaviors of the LLM. The edited LLM can defend against various malicious inputs. [README](https://github.com/zjunlp/EasyEdit/blob/main/examples/SafeEdit.md)
MultiModal Model Editing
Editing Task for Image Captioning and Visual Question Answering. README
Personality Editing
The proposed task takes the preliminary attempt to edit LLMs’ personalities by editing their opinions on specific topics, given that an individual’s opinions can reflect aspects of their personality traits. We draw upon the established BIG FIVE theory as a basis for constructing our dataset and assessing the LLMs’ personality expressions. README
Evaluation
Logits-based
ES: evaluating the editing success rate based on the logits of pre-generated text.
DD: evaluating whether the model changes opinions on other topics based on the logits of pre-generated text.
Generation-based
Acc: the accuracy of the generated text after editing the model on target personality.
TPEI: measuring whether generated opinion text from the edited model leans more towards the target personality.
PAE: utilizing GPT-4 to evaluate the personality traits in generated text.
While for assessing Acc and TPEI, you can download the trained classifier from here.
Comparisons of different technologies
Evaluation
The knowledge editing process generally impacts the predictions for a broad set of inputs that are closely associated with the edit example, called the editing scope.
A successful edit should adjust the model’s behavior within the editing scope while remaining unrelated inputs:
Reliability: the success rate of editing with a given editing descriptor
Generalization: the success rate of editing within the editing scope
Locality: whether the model’s output changes after editing for unrelated inputs
Portability: the success rate of editing for reasoning/application(one hop, synonym, logical generalization)
Efficiency: time and memory consumption
🌟Overview
EasyEdit is a Python package for edit Large Language Models (LLM) like GPT-J, Llama, GPT-NEO, GPT2, T5(support models from 1B to 65B), the objective of which is to alter the behavior of LLMs efficiently within a specific domain without negatively impacting performance across other inputs. It is designed to be easy to use and easy to extend.
EasyEdit contains a unified framework for Editor, Method and Evaluate, respectively representing the editing scenario, editing technique, and evaluation method.
Each Knowledge Editing scenario comprises of three components:
Editor: such as BaseEditor(Factual Knowledge and Generation Editor) for LM, MultiModalEditor(MultiModal Knowledge).
Method: the specific knowledge editing technique used(such as ROME, MEND, ..).
Evaluate: Metrics for evaluating knowledge editing performance.
❗️❗️ If you intend to use Mistral, please update the transformers library to version 4.34.0 manually. You can use the following code: pip install transformers==4.34.0.
❗️❗️ To be noted, KnowEdit is constructed by re-organizing and extending existing datasests including WikiBio, ZsRE, WikiDataCounterfact, WikiDataRecent, convsent, Sanitation to make a comprehensive evaluation for knowledge editing. Special thanks to the builders and maintainers of the those datasets.
Please note that Counterfact and WikiDataCounterfact are not the same dataset.
Task
Knowledge Insertion
Knowledge Modification
Knowledge Erasure
Datasets
Wikirecent
ZsRE
WikiBio
WikiDatacounterfact
Convsent
Sanitation
Type
Fact
Question Answering
Hallucination
Counterfact
Sentiment
Unwanted Info
# Train
570
10,000
592
1,455
14,390
80
# Test
1,266
1301
1,392
885
800
80
We provide detailed scripts for user to easily use KnowEdit, please refer to examples.
dataset description
ZsRE: is a context-free question-answering task. Given a question based on the subject and relation, the model is expected to provide the correct object as the answer.
Wikirecent: This dataset specifically focuses on triplets that have been recently inserted into WikiData after July 2022.
WikiBio: The original dataset was created by prompting GPT-3 to generate 238 Wikipedia-style biographies using subjects from the WikiBio.
WikiDatacounterfact: Since tail entities are often not captured by models, and therefore are not suitable for testing modification edits, RippleEdit collects triplets about popular entities, where the subject corresponds to one of the top-viewed pages in Wikipedia.
Convsent: This is a sentiment editing task that assesses the model’s ability to modify a dialog agent’s sentiment on a specific topic without affecting its responses to other topics.
Sanitation: This dataset specifically addresses privacy concerns associated with learned language models.
Here, you can follow CKnowEdit.md to find more details about CKnowEdit and run Chinese knowledge editing experiments.
dataset description
CKnowEdit is a high-quality Chinese-language dataset for knowledge editing which is highly characterized by the Chinese language, with all data sourced from Chinese knowledge bases. It is meticulously designed to more deeply discern the nuances and challenges inherent in the comprehension of the Chinese language by current LLMs, providing a robust resource for refining Chinese-specific knowledge within LLMs.
The field descriptions for the data in CKnowEdit are as follows:
"prompt": query inputed to the model (str)
"target_old": the incorrect response previously generated by the model (str)
"target_new": the accurate answer of the prompt (str)
"portability_prompt": new prompts related to the target knowledge (list or None)
"portability_answer": accurate answers corresponding to the portability_prompt (list or None)
"locality_prompt": new prompts unrelated to the target knowledge (list or None)
"locality_answer": accurate answers corresponding to the locality_prompt (list or None)
"rephrase": alternative ways to phrase the original prompt (list)
dataset structure
CknowEdit
├── Chinese Literary Knowledge
│ ├── Ancient Poetry
│ ├── Proverbs
│ └── Idioms
├── Chinese Linguistic Knowledge
│ ├── Phonetic Notation
│ └── Classical Chinese
├── Chinese Geographical Knowledge
└── Ruozhiba
We provide zsre and counterfact datasets to verify the effectiveness of knowledge editing. You can download them here. [Google Drive], [BaiduNetDisk].
For locality, in addition to testing unrelated instances, we also provide tests on distracting (reference: Detecting Edit Failures…), other attribution, and other downstream tasks (such as commonsense reasoning).
For portability, it tests whether the model can apply edited instances for inference. We provide evaluations for one-hop reasoning, subject alias, and inverse relation (eg, a one-to-one relationship between spouses should be bidirectionally edited).
Here, you can follow SafeEdit.md to run detoxification editing experiments.
dataset description
data
└──SafeEdit_train.json
└──SafeEdit_val.json
└──SafeEdit_test.json
Detoxifying Specific Evaluation Metrics
Defense Duccess (DS): the detoxification success rate of edited LLM for adversarial input (attack prompt + harmful question), which is used to modify LLM.
Defense Generalization (DG): the detoxification success rate of edited LLM for out-of-domain malicious inputs.
General Performance: the side effects for unrelated task performance.
Our results are all based on the default configuration
llama-2-7B
chatglm2
gpt-j-6b
gpt-xl
FT
60GB
58GB
55GB
7GB
SERAC
42GB
32GB
31GB
10GB
IKE
52GB
38GB
38GB
10GB
MEND
46GB
37GB
37GB
13GB
KN
42GB
39GB
40GB
12GB
ROME
31GB
29GB
27GB
10GB
MEMIT
33GB
31GB
31GB
11GB
AdaLoRA
29GB
24GB
25GB
8GB
GRACE
27GB
23GB
6GB
WISE
34GB
27GB
7GB
📌Use EasyEdit
Edit large language models(LLMs) around 5 seconds
Following example shows you how to perform editing with EasyEdit. More examples and tutorials can be found at examples
BaseEditor
BaseEditoris the class for Language Modality Knowledge Editing. You can choose the appropriate editing method based on your specific needs.
Due to different transformer versions and different GPU models, the editing results may fluctuate slightly.
Introduction by a Simple Example
With the modularity and flexibility of EasyEdit, you can easily use it to edit model.
Step1: Define a PLM as the object to be edited.
Choose the PLM to be edited. EasyEdit supports partial models(T5, GPTJ, GPT-NEO, LlaMA so far) retrievable on HuggingFace. The corresponding configuration file directory is hparams/YUOR_METHOD/YOUR_MODEL.YAML, such as hparams/MEND/gpt2-xl.yaml, set the corresponding model_name to select the object for knowledge editing.
Step2: Choose the appropriate Knowledge Editing Method
## In this case, we use MEND method, so you should import `MENDHyperParams`
from easyeditor import MENDHyperParams
## Loading config from hparams/MEMIT/gpt2-xl.yaml
hparams = MENDHyperParams.from_hparams('./hparams/MEND/gpt2-xl')
Step3: Provide the edit descriptor and edit target
## edit descriptor: prompt that you want to edit
prompts = [
'What university did Watts Humphrey attend?',
'Which family does Ramalinaceae belong to',
'What role does Denny Herzig play in football?'
]
## You can set `ground_truth` to None !!!(or set to original output)
ground_truth = ['Illinois Institute of Technology', 'Lecanorales', 'defender']
## edit target: expected output
target_new = ['University of Michigan', 'Lamiinae', 'winger']
Step4: Combine them into a BaseEditorEasyEdit provides a simple and unified way to init Editor, like huggingface: from_hparams.
## Construct Language Model Editor
editor = BaseEditor.from_hparams(hparams)
Step5: Provide the data for evaluation
Note that the data for portability and locality are both optional(set to None for basic editing success rate evaluation only). The data format for both is a dict, for each measurement dimension, you need to provide the corresponding prompt and its corresponding ground truth. Here is an example of the data:
locality_inputs = {
'neighborhood':{
'prompt': ['Joseph Fischhof, the', 'Larry Bird is a professional', 'In Forssa, they understand'],
'ground_truth': ['piano', 'basketball', 'Finnish']
},
'distracting': {
'prompt': ['Ray Charles, the violin Hauschka plays the instrument', 'Grant Hill is a professional soccer Magic Johnson is a professional', 'The law in Ikaalinen declares the language Swedish In Loviisa, the language spoken is'],
'ground_truth': ['piano', 'basketball', 'Finnish']
}
}
In the above example, we evaluate the performance of the editing methods about “neighborhood” and “distracting”.
Step6: Edit and Evaluation
Done! We can conduct Edit and Evaluation for your model to be edited. The edit function will return a series of metrics related to the editing process as well as the modified model weights. [sequential_edit=True for continuous editing]
The maximum input length for EasyEdit is 512. If this length is exceeded, you will encounter the error “CUDA error: device-side assert triggered.” You can modify the maximum length in the following file:LINK
Step7: RollBack
In sequential editing, if you are not satisfied with the outcome of one of your edits and you do not wish to lose your previous edits, you can use the rollback feature to undo your previous edit. Currently, we only support the GRACE method. All you need to do is a single line of code, using the edit_key to revert your edit.
editor.rolllback('edit_key')
In EasyEdit, we default to using target_new as the edit_key
Evaluation
We specify the return metrics as dict format, including model prediction evaluations before and after editing. For each edit, it will include the following metrics:
For evaluation for Reliablilty, you only need to provide the corresponding editing prompts and editing target_new.
For evaluation for Generalization, rephrase_prompts are required.
For evaluation for Locality and Portablility, you need to define the name of the corresponding metric, as well as prompts and ground_truth.
Note: the length needs to be equal to the edit prompts
Trainer
meta-learning based: MEND
memory-based routing: SERAC
For above editing methods, pre-training of corresponding meta-networks or classifiers is required. Therefore, in EasyEdit, we provide a unified framework for pretraining the relevant network structures. Take the training MEND for example:
Step 1 and Step 2 are the same as the example above, which involves selecting the appropriate editing model and editing method.
Step3: Provide the edit training set
The currently supported and available datasets are: zsre and counterfact(Google Drive). Please place them in the “data” directory and initialize the dataset_class (ZsreDataset for zsre and CounterFactDataset for counterfact) to load the corresponding training set.
Step5: Run and Edit
Done! We can conduct Run and Evaluation.
trainer.run()
Run: The CHECKPOINT will be saved to the path results_dir.
Edit: Set the archive field in the hparams file to CHECKPOINT. EasyEdit will automatically load the corresponding pre-trained weights during the editing process(Go to edit).
We provide detailed scripts for user to easily use KnowEdit, please refer to examples.
Editing Performance
We present editing results of the four metrics on LlaMA-2-7B using EasyEdit. We adopt ZsRE as the test dataset.
❗️❗️Editing llama-2-7B requires 40G+ VRAM on GPU. (OOM solution)
Reliability
Generalization
Locality
Portability
FT
56.94
52.02
96.32
51.03
SERAC
99.49
99.13
100.00
57.82
IKE
100.00
99.98
69.19
67.56
MEND
94.24
90.27
97.04
56.95
KN
28.95
28.43
65.43
37.18
ROME
92.45
87.04
99.63
57.47
MEMIT
92.94
85.97
99.49
60.64
We also present editing results of KnowEdit on LlaMA-2-7B using EasyEdit.
DataSet
Metric
SERAC
ICE
AdaLoRA
MEND
ROME
MEMIT
FT-L
FT-M
WikiData_recent
Edit Succ.
98.68
60.74
100.00
95.75
97.18
97.05
55.75
100.00
Portability
63.52
36.93
64.69
55.88
55.25
56.37
40.86
65.44
Locality
100.00
33.34
56.42
94.76
54.77
52.15
43.70
64.33
Fluency
553.19
531.01
579.57
557.11
579.66
573.89
529.24
574.32
ZsRE
Edit Succ.
99.67
66.01
100.00
96.74
96.77
95.37
53.93
99.98
Portability
56.48
63.94
58.03
60.41
52.63
52.67
45.64
60.31
Locality
30.23
23.14
75.76
92.79
53.67
48.32
73.42
89.78
Fluency
410.89
541.14
563.56
524.33
573.75
563.31
493.01
552.26
WikiBio
Edit Succ.
99.69
95.53
100.00
93.66
96.08
94.40
66.33
100.00
Locality
69.79
47.90
81.28
69.51
62.74
61.51
79.86
93.38
Fluency
606.95
632.92
618.45
609.39
617.69
616.65
606.95
612.69
WikiData_counterfact
Edit Succ.
99.99
69.83
100.00
80.03
98.57
98.05
45.15
100.00
Portability
76.07
45.32
69.89
52.01
55.92
58.56
33.60
74.36
Locality
98.96
32.38
70.31
94.38
51.97
46.62
50.48
76.76
Fluency
549.91
547.22
580.29
555.72
584.04
575.96
528.26
575.62
ConvSent
Edit Succ.
62.75
52.78
44.89
50.76
45.79
44.75
49.50
46.10
Locality
0.26
49.73
0.18
3.42
0.00
0.00
0.00
0.00
Fluency
458.21
621.45
606.42
379.43
606.32
602.62
607.86
592.52
Sanitation
Edit Succ.
0.00
72.50
2.50
0.00
85.00
48.75
0.00
75.00
Locality
100.00
56.58
65.50
5.29
50.31
67.47
14.78
47.07
Fluency
416.29
794.15
330.44
407.18
465.12
466.10
439.10
416.29
❗️❗️ Please note that if you wish to reproduce the results regarding Rome on Knowedit, ensure that fp16: False.
For the locality metric, we calculate the score based on the proportion of tokens that remain unchanged before and after editing. For example, if the output tokens before editing are [29, 234, 334] and after editing are [29, 234, 333], the locality score for this data would be 66.67. For the portability metric, we calculate it by taking the average of all sub-scores under the portability category.
TO DO
In next version, we plan to:
Explore and integrate more robust editing methods, focusing on locality and portability metrics.
Provide a comprehensive evaluation suite for editing methods, including fact modification, fact erasure and hallucination erasure.
Provide a causal analysis component for analyzing knowledge storage mechanisms.
knowledge editing for other tasks(except factual editing), like personality editing, etc.
Meanwhile, we will offer long-term maintenance to fix bugs, solve issues and meet new requests. So if you have any problems, please put issues to us.
🎊How to contribute to EasyEdit
New Method
In EasyEdit, we uniformly use the apply_algo member function to call specific editing methods. You need to submit a pull request (PR) with the required files to EasyEdit according to the following steps ( The following uses YourMethod as the method name as an example ):
(1) YourMethod_main.py
In this file, there must be a function named apply_YourMethod_to_model to serve as the interface function for the main program to call the editing method, and its parameter list should also follow the example below:
def apply_YourMethod_to_model(
model: AutoModelForCausalLM,
tok: AutoTokenizer,
requests: List[Dict],
hparams: AlphaEditHyperParams,
copy=False,
return_orig_weights=False,
cache_template: Optional[str] = None,
keep_original_weight=False,
**kwargs
) -> Dict[str, Tuple[torch.Tensor]]:
# Here is the specific implementation of the method.
After completing the implementation of the editing process, you need to return the following at the end of the apply_YourMethod_to_model function:
return model, weights_copy
Here, model is the edited model, and weights_copy is the original weights corresponding to the modified parameter regions (used to restore the model’s weights).
(2) YourMethod_hparams.py
Define a class to describe the hyperparameters required for the implementation of your method:
class YourMethodHyperParams(HyperParams):
✨Additional Explanation
You can add any necessary .py files for the implementation of your method.
Additionally, you will need an __init__.py file.
Finally, package all your .py files into a folder and submit a pull request (PR) to the EasyEdit/easyeditor/models directory.
New Dataset
The Field settings of the dataset are closely related to the evaluation metrics. Currently, EasyEdit supports the evaluation metrics of Reliability, Generalization, Portability, and Locality. Therefore, you need to reorganize and rename the fields of your dataset to adapt to the current EasyEdit.
YourDataset.py
This file is generally responsible for importing the dataset and making preliminary adjustments to the data Fields:
{
"subject":record["subject"],
"prompt": record["edit_prompt"],
"target_new": record["edit_target"],
"ground_truth": record["ground_truth"],
"rephrase": record['rephrase'],
"portability_type1": record["portability_type1"],
"portability_type2": record["portability_type2"],
...
"locality": record["loc"] if "loc" in record else None,
}
✨Additional Explanation
Add a startup file under the EasyEdit/examples folder to further reorganize the fields. You can follow the process in the examples/run_knowedit_llama2.py file.
Add your dataset class in the __init__.py file under the EasyEdit/dataset folder.
Finally submit a pull request (PR).
Citation
Please cite our paper if you use EasyEdit in your work.
@article{zhang2024comprehensive,
title={A Comprehensive Study of Knowledge Editing for Large Language Models},
author={Zhang, Ningyu and Yao, Yunzhi and Tian, Bozhong and Wang, Peng and Deng, Shumin and Wang, Mengru and Xi, Zekun and Mao, Shengyu and Zhang, Jintian and Ni, Yuansheng and others},
journal={arXiv preprint arXiv:2401.01286},
year={2024}
}
@article{wang2023easyedit,
title={Easyedit: An easy-to-use knowledge editing framework for large language models},
author={Wang, Peng and Zhang, Ningyu and Xie, Xin and Yao, Yunzhi and Tian, Bozhong and Wang, Mengru and Xi, Zekun and Cheng, Siyuan and Liu, Kangwei and Zheng, Guozhou and others},
journal={arXiv preprint arXiv:2308.07269},
year={2023}
}
@article{yao2023editing,
title={Editing Large Language Models: Problems, Methods, and Opportunities},
author={Yao, Yunzhi and Wang, Peng and Tian, Bozhong and Cheng, Siyuan and Li, Zhoubo and Deng, Shumin and Chen, Huajun and Zhang, Ningyu},
journal={arXiv preprint arXiv:2305.13172},
year={2023}
}
@article{cheng2023edit,
title={Can We Edit Multimodal Large Language Models?},
author={Cheng, Siyuan and Tian, Bozhong and Liu, Qingbin and Chen, Xi and Wang, Yongheng and Chen, Huajun and Zhang, Ningyu},
journal={arXiv preprint arXiv:2310.08475},
year={2023}
}
@article{mao2023editing,
title={Editing personality for llms},
author={Mao, Shengyu and Zhang, Ningyu and Wang, Xiaohan and Wang, Mengru and Yao, Yunzhi and Jiang, Yong and Xie, Pengjun and Huang, Fei and Chen, Huajun},
journal={arXiv preprint arXiv:2310.02168},
year={2023}
}
@article{wang2024wise,
title={WISE: Rethinking the Knowledge Memory for Lifelong Model Editing of Large Language Models},
author={Wang, Peng and Li, Zexi and Zhang, Ningyu and Xu, Ziwen and Yao, Yunzhi and Jiang, Yong and Xie, Pengjun and Huang, Fei and Chen, Huajun},
journal={arXiv preprint arXiv:2405.14768},
year={2024}
}
🎉Contributors
We thank all the contributors to this project, more contributors are welcome!
🙌 We would like to express our heartfelt gratitude for the contribution of FastEdit, ROME, GRACE, MELO, PMET to our project, as we have utilized portions of their source code in our project. Many thanks to all the colleagues in the community for submitting issues and providing technical support. Appreciation is also extended to all PR contributors, and issue feedback providers during the EasyEdit version iterations, especially ancelia06 for correcting the grammar of README.
Installation • QuickStart • Doc • Paper • Demo • Benchmark • Contributors • Slides • Video • Featured By AK
⭐ Key News
✨ EasyEdit Beginner's Guide officially published!
We have written a detailed beginner's guide for EasyEdit, specifically tailored for newcomers to the fields of knowledge editing and model editing. By reading this manual, you can quickly understand and start using EasyEdit.
✨ EasyEdit blog published!
We have also published a blog post titled “Take Control of What Your LLM Knows and Does — with the EasyEdit Tool Series“, where you can learn more about how EasyEdit empowers you to control and edit your LLM’s knowledge and behavior.
📢 Update
🔥 EasyEdit 2.0 officially published!
Unlike EasyEdit1.0, which achieves knowledge editing by updating internal parameters or introducing additional parameters, EasyEdit2 enables real-time steering of LLMs during inference. It provides a unified framework for controllability without retraining, seamlessly integrating various steering methods for ease of use and evaluation. 👉 [README] (for more details).
Table of Contents
🔔News
Previous News
2025-03-04, 🌟🌟In addition to the original token-level teacher-forcing paradigm for evaluation, EasyEdit has integrated a new evaluation method, following the paper titled “The Mirage of Model Editing: Revisiting Evaluation in the Wild“. You can use this script to quickly launch this evaluation approach, which better aligns with real-world requirements. Special thanks to @WanliYoung for contribution!
2025-01-03, We have updated the evaluation method in paper “CKnowEdit: A New Chinese Knowledge Editing Dataset for Linguistics, Facts, and Logic Error Correction in LLMs“, adopting an LLM-as-a-judge approach that is more aligned with real-world scenarios and practical applications. Both the experimental results and the running scripts have been updated accordingly in readme.
2024-11-19, we update the Table 4 results in the paper “A Comprehensive Study of Knowledge Editing for Large Language Models“ after optimizing certain methods (related to AdaLoRA) and fixing computational bugs (related to ROME and MEMIT) in the EasyEdit (More details in https://github.com/zjunlp/EasyEdit/issues/427). These improvements have led to better results than before. We will continue updating this paper and welcome everyone to discuss and exchange ideas.
2024-11-11, 🎉🎉the paper on model editing for LLMs4Code, “Model Editing for LLMs4Code: How Far are We?“, has been accepted by ICSE 2025! This work proposes a benchmark for LLMs4Code editing, CLMEEval, which is built upon EasyEdit!
2024-11-09, we fixed a bug regarding the KnowEdit results in the https://github.com/zjunlp/EasyEdit/issues/390. Thanks for the help of @StarLooo to help us with it.
2024-10-24, EasyEdit has added two new knowledge editing methods, AlphaEdit. In addition, we have fixed several bugs.
2024-10-23, the EasyEdit integrates constrained decoding methods from steering editing to mitigate hallucination in LLM and MLLM, with detailed information available in DoLa and DeCo.
2024-09-26, 🎉🎉 our paper “WISE: Rethinking the Knowledge Memory for Lifelong Model Editing of Large Language Models“ has been accepted by NeurIPS 2024.
2024-09-20, 🎉🎉 our papers: “Knowledge Mechanisms in Large Language Models: A Survey and Perspective“ and “Editing Conceptual Knowledge for Large Language Models“ have been accepted by EMNLP 2024 Findings.
2024-07-29, the EasyEdit has added a new model editing algorithm EMMET, which generalizes ROME to the batch setting. This essentially allows making batched edits using the ROME loss function.
2024-07-23, we release a new paper: “Knowledge Mechanisms in Large Language Models: A Survey and Perspective“, which reviews how knowledge is acquired, utilized, and evolves in large language models. This survey may provide the fundamental mechanisms for precisely and efficiently manipulating (editing) knowledge in LLMs.
2024-06-04, 🎉🎉 EasyEdit Paper has been accepted by the ACL 2024 System Demonstration Track.
2024-06-03, we released a paper titled “WISE: Rethinking the Knowledge Memory for Lifelong Model Editing of Large Language Models”, along with introducing a new editing task: Continuous Knowledge Editing and correspondding lifelong editing method called WISE.
2024-04-24, EasyEdit announced support for the ROME method for Llama3-8B. Users are advised to update their transformers package to version 4.40.0.
2024-03-29, EasyEdit introduced rollback support for GRACE. For a detailed introduction, refer to the EasyEdit documentation. Future updates will gradually include rollback support for other methods.
2024-03-22, a new paper titled “Detoxifying Large Language Models via Knowledge Editing“ was released, along with a new dataset named SafeEdit and a new detoxification method called DINM.
2024-03-12, another paper titled “Editing Conceptual Knowledge for Large Language Models“ was released, introducing a new dataset named ConceptEdit.
2024-03-01, EasyEdit added support for a new method called FT-M. This method involves training a specific MLP layer using cross-entropy loss on the target answer and masking the original text. It outperforms the FT-L implementation in ROME. The author of issue https://github.com/zjunlp/EasyEdit/issues/173 is thanked for their advice.
2024-02-27, EasyEdit added support for a new method called InstructEdit, with technical details provided in the paper “InstructEdit: Instruction-based Knowledge Editing for Large Language Models“.
2024-02-09, the EasyEdit has added the support for the Dynamic LoRA model editing method MELO’AAAI24.
2024-02-06, we release a new paper: “EasyInstruct: An Easy-to-use Instruction Processing Framework for Large Language Models“ with an HF demo EasyInstruct.
2024-02-06, we release a preliminary tool EasyDetect for LLM hallucination detection,with a demo.
2024-01-24, the EasyEdit has added the support for editing Mistral-7B (manually update transformers==4.34.0), we have also fixed some bugs in evaluating MEND (slightly influence the performance).
2024-01-16, the EasyEdit has added the support for the precise model editing method PMET’AAAI24.
2024-01-03, we release a new paper:”A Comprehensive Study of Knowledge Editing for Large Language Models“ with a new benchmark KnowEdit! KnowEdit is constructed by re-organizing and cleaning existing datasests including WikiBio, ZsRE, WikiData Counterfact, WikiData Recent, convsent, Sanitation with new train/val/test spliting. Special thanks to the builders and maintainers of the those datasets.We are looking forward to any comments or discussions on this topic :)
2023-12-06, the EasyEdit has added the support for the lifelong model editing method GRACE’NeurIPS24.
2023-11-18, our tutorial “Knowledge Editing for Large Language Models” has been accepted by COLING 2024.
2023-10-25, our tutorial “Knowledge Editing for Large Language Models” has been accepted by AAAI 2024.
2023-10-24, the EasyEdit has added the support for efficient editing of Baichuan2, ChatGLM2, InternLM, QWen and fixed several bugs for a better user experience.
2023-10-14, we release the MultimodalEditor based on the paper “Can We Edit Multimodal Large Language Models?“.
2023-10-13, we release the paper “Can We Edit Multimodal Large Language Models?“ accepted by EMNLP 2023.
2023-10-08, our paper “Editing Large Language Models: Problems, Methods, and Opportunities“ has been accepted by EMNLP 2023.
2023-10-07, the EasyEdit has added the support for editing models with multiple GPUs, using huggingface
Accelerate.2023-9-21, the EasyEdit has added the support for Parameter-Efficient Fine-Tuning through AdaLoRA to inject knowledge into the LLM.
2023-8-31, the EasyEdit has added the support for official fine-tuning API for gpt-3.5-turbo to customize ChatGPT for your editing cases.
2023-8-15, we release the paper “EasyEdit: An Easy-to-use Knowledge Editing Framework for Large Language Models.”
2023-7-12, we release version 0.0.1, supporting several knowledge editing techniques for LLMs. EasyEdit helps to better align LLMs with changing needs and values of users.
2023-5-22, we release the paper “Editing Large Language Models: Problems, Methods, and Opportunities“ and provide a paper list at PaperList.
2023-3-25, the EasyEdit project has been launched and is under development.
Editing Demo
There is a demonstration of editing. The GIF file is created by Terminalizer.
We provide a handy Jupyter Notebook! It allows you to edit a LLM’s knowledge of the US president, switching from Biden to Trump and even back to Biden. This includes methods like WISE, AlphaEdit, AdaLoRA, and Prompt-based editing.
Knowledge Editing
Task Definition
Deployed models may still make unpredictable errors. For example, LLMs notoriously hallucinate, perpetuate bias, and factually decay, so we should be able to adjust specific behaviors of pre-trained models.
Knowledge editing aims to adjust base model’s (fθ) behavior on the particular edit descriptor [xe,ye] efficiently.
Multi Setting
Single Knowledge Editing
Evaluating the performance of the model after a single edit. The model reloads the original weights (e.g. LoRA discards the adapter weights) after a single edit. You should set
sequential_edit=Falseθ′←argθmin(∥fθ(xe)−ye∥)
Continuous Knowledge Editing
This requires sequentially editing, and evaluation is performed after all knowledge updates have been applied:
θ′←argθmine=1∑∥Xe∥(∥fθ(xe)−ye∥)
It makes parameter adjustments for (xe,ye), where xe∈Xe and fθ′(xe)=ye. Here, Xe represents the whole edit set. To enable continuous editing, you can set
sequential_edit=True: README (for more details).Multi Scenario
Factual Knowledge Editing
Knowledge insert
Knowledge update
Knowledge erase
Without influencing the model behavior on unrelated samples, the ultimate goal is to create an edited model (fθ′).
Safety Editing
**Detoxifying LLM** strives to build a safe and trustworthy large language model (LLM). Knowledge editing focuses on specific areas for permanent adjustment without compromising overall performance. Then, detoxifying LLM via knowledge editing leverages a small amount of data, usually an instance, to correct the toxic behaviors of the LLM. The edited LLM can defend against various malicious inputs. [README](https://github.com/zjunlp/EasyEdit/blob/main/examples/SafeEdit.md)MultiModal Model Editing
Editing Task for Image Captioning and Visual Question Answering. README
Personality Editing
The proposed task takes the preliminary attempt to edit LLMs’ personalities by editing their opinions on specific topics, given that an individual’s opinions can reflect aspects of their personality traits. We draw upon the established BIG FIVE theory as a basis for constructing our dataset and assessing the LLMs’ personality expressions. README
Evaluation
Logits-based
Generation-based
While for assessing Acc and TPEI, you can download the trained classifier from here.
Comparisons of different technologies
Evaluation
The knowledge editing process generally impacts the predictions for a broad set of inputs that are closely associated with the edit example, called the editing scope.
A successful edit should adjust the model’s behavior within the editing scope while remaining unrelated inputs:
fθe(x)={yefθ(x)if x∈I(xe,ye)if x∈O(xe,ye)
Reliability: the success rate of editing with a given editing descriptorGeneralization: the success rate of editing within the editing scopeLocality: whether the model’s output changes after editing for unrelated inputsPortability: the success rate of editing for reasoning/application(one hop, synonym, logical generalization)Efficiency: time and memory consumption🌟Overview
EasyEdit is a Python package for edit Large Language Models (LLM) like
GPT-J,Llama,GPT-NEO,GPT2,T5(support models from 1B to 65B), the objective of which is to alter the behavior of LLMs efficiently within a specific domain without negatively impacting performance across other inputs. It is designed to be easy to use and easy to extend.EasyEdit contains a unified framework for Editor, Method and Evaluate, respectively representing the editing scenario, editing technique, and evaluation method.
Each Knowledge Editing scenario comprises of three components:
Editor: such as BaseEditor(Factual Knowledge and Generation Editor) for LM, MultiModalEditor(MultiModal Knowledge).Method: the specific knowledge editing technique used(such as ROME, MEND, ..).Evaluate: Metrics for evaluating knowledge editing performance.Reliability,Generalization,Locality,PortabilityThe current supported knowledge editing techniques are as follows:
Current Implementation
You can choose different editing methods according to your specific needs. GPT series includes GPT-2, GPT-J and GPT-NEO. | Method | T5 | GPT series | LlaMA | Baichuan | ChatGLM | InternLM | Qwen | Mistral | :——-: | :——-: | :——-: | :——-: | :——-: | :——-: | :——-: | :——-: | :——-: | | FT | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | AdaLoRA | | | ✅ | | ✅ | | | | | SERAC | ✅ | ✅ | ✅ | | | | | | | IKE | ✅ | ✅ | ✅ | ✅ |✅ | ✅ | ✅ | ✅ | | MEND | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | KN | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | ROME | | ✅ | ✅ | ✅ |✅ | ✅ | ✅ | ✅ | | r-ROME | | ✅ | ✅ | ✅ |✅ | ✅ | ✅ | ✅ | | MEMIT | | ✅ | ✅ | ✅ | ✅| ✅ | ✅ | ✅ | | | EMMET | | ✅ | ✅ | | | | | | | | GRACE| | ✅ | ✅| | | | | | | MELO | |✅ | | | | | | | | PMET | |✅ | ✅| | | | | | | InstructEdit | | ✅ | ✅| | | | | | | DINM| |✅ |✅ | | | | | ✅| | WISE | |✅ |✅ | ✅ | | |✅ | | | Defer | | ✅ |✅ | | | | | ✅ | | AlphaEdit | |✅ |✅ | | | | | | | UltraEdit | |✅ |✅ | | | |✅ | ✅ |
We also support some knowledge editing methods for LMMs (Large Multimodal Models). Please refer to MultimodalEdit.md for more details. | Method | MiniGPT-4 | BLIP-2 | LLaVA-OneVision | Qwen2-VL | | :——-: | :——-: | :——-: | :——-: | :——-: | | MEND | ✅ | ✅ | | | | SERAC | ✅ | ✅ | | | | IKE | | | ✅ | ✅ | | LoRA | | | ✅ | ✅ | | GRACE | | | ✅ | ✅ | | WISE | | | ✅ | ✅ |
Quick Start on Some Works
Dataset
Benchmark: KnowEdit [Hugging Face][WiseModel][ModelScope]
We provide detailed scripts for user to easily use KnowEdit, please refer to examples.
dataset description
dataset structure
Datasets for Chinese Knowledge: CKnowEdit
dataset description
CKnowEdit is a high-quality Chinese-language dataset for knowledge editing which is highly characterized by the Chinese language, with all data sourced from Chinese knowledge bases. It is meticulously designed to more deeply discern the nuances and challenges inherent in the comprehension of the Chinese language by current LLMs, providing a robust resource for refining Chinese-specific knowledge within LLMs.
The field descriptions for the data in CKnowEdit are as follows:
dataset structure
Datasets for Factual Knowledge
We provide zsre and counterfact datasets to verify the effectiveness of knowledge editing. You can download them here. [Google Drive], [BaiduNetDisk].
dataset description
spouseDatasets for Conceptual Knowledge: ConceptEdit
dataset description
Concept Specific Evaluation Metrics
Instance Change: capturing the intricacies of these instance-level changesConcept Consistency: the semantic similarity of generated concept definitionDatasets for Multimodal Knowledge: MMEdit
dataset description
Datasets for detoxifying LLMs: SafeEdit
dataset description
Detoxifying Specific Evaluation Metrics
Defense Duccess (DS): the detoxification success rate of edited LLM for adversarial input (attack prompt + harmful question), which is used to modify LLM.Defense Generalization (DG): the detoxification success rate of edited LLM for out-of-domain malicious inputs.General Performance: the side effects for unrelated task performance.Tutorial notebook
Datasets for Real-World Lifelong Knowledge Editing: WikiBigEdit
Requirements
🔧Pip Installation
Note: Please use Python 3.9+ for EasyEdit To get started, simply install conda and run:
Editing GPU memory usage
Our results are all based on the default configuration
📌Use EasyEdit
Edit large language models(LLMs) around 5 seconds
Following example shows you how to perform editing with EasyEdit. More examples and tutorials can be found at examples
BaseEditor
Introduction by a Simple Example
With the modularity and flexibility of
EasyEdit, you can easily use it to edit model.Step1: Define a PLM as the object to be edited. Choose the PLM to be edited.
EasyEditsupports partial models(T5,GPTJ,GPT-NEO,LlaMAso far) retrievable on HuggingFace. The corresponding configuration file directory ishparams/YUOR_METHOD/YOUR_MODEL.YAML, such ashparams/MEND/gpt2-xl.yaml, set the correspondingmodel_nameto select the object for knowledge editing.Step2: Choose the appropriate Knowledge Editing Method
Step3: Provide the edit descriptor and edit target
Step4: Combine them into a
BaseEditorEasyEditprovides a simple and unified way to initEditor, like huggingface: from_hparams.Step5: Provide the data for evaluation Note that the data for portability and locality are both optional(set to None for basic editing success rate evaluation only). The data format for both is a dict, for each measurement dimension, you need to provide the corresponding prompt and its corresponding ground truth. Here is an example of the data:
In the above example, we evaluate the performance of the editing methods about “neighborhood” and “distracting”.
Step6: Edit and Evaluation Done! We can conduct Edit and Evaluation for your model to be edited. The
editfunction will return a series of metrics related to the editing process as well as the modified model weights. [sequential_edit=Truefor continuous editing]The maximum input length for EasyEdit is 512. If this length is exceeded, you will encounter the error “CUDA error: device-side assert triggered.” You can modify the maximum length in the following file:LINK
Step7: RollBack In sequential editing, if you are not satisfied with the outcome of one of your edits and you do not wish to lose your previous edits, you can use the rollback feature to undo your previous edit. Currently, we only support the GRACE method. All you need to do is a single line of code, using the edit_key to revert your edit.
In EasyEdit, we default to using target_new as the edit_key
Evaluation
We specify the return metrics as
dictformat, including model prediction evaluations before and after editing. For each edit, it will include the following metrics:rewrite_acc→ Reliabliltyrephrase_acc→ Generalizationlocality→ Localityportablility→ Portablilitypromptsand editingtarget_new.rephrase_promptsare required.promptsandground_truth.Trainer
MENDSERACFor above editing methods, pre-training of corresponding meta-networks or classifiers is required. Therefore, in EasyEdit, we provide a unified framework for pretraining the relevant network structures. Take the training MEND for example:
Step3: Provide the edit training set The currently supported and available datasets are:
zsreandcounterfact(Google Drive). Please place them in the “data” directory and initialize the dataset_class (ZsreDatasetfor zsre andCounterFactDatasetfor counterfact) to load the corresponding training set.Step4: Combine them into a
TrainerStep5: Run and Edit Done! We can conduct Run and Evaluation.
CHECKPOINTwill be saved to the pathresults_dir.archivefield in the hparams file toCHECKPOINT. EasyEdit will automatically load the corresponding pre-trained weights during the editing process(Go to edit).Training Example
Use EasyEdit with KnowEdit
Dataset
KnowEdit is a benchmark dataset of knowledge editing for LLMs. You can easily obtain KnowEdit from HuggingFace, HuggingFace, and ModelScope.
Usage
We provide detailed scripts for user to easily use KnowEdit, please refer to examples.
Editing Performance
We present editing results of the four metrics on LlaMA-2-7B using EasyEdit. We adopt ZsRE as the test dataset.
We also present editing results of KnowEdit on LlaMA-2-7B using EasyEdit.
TO DO
In next version, we plan to:localityandportabilitymetrics.personality editing, etc.Meanwhile, we will offer long-term maintenance to fix bugs, solve issues and meet new requests. So if you have any problems, please put issues to us.
🎊How to contribute to EasyEdit
New Method
In EasyEdit, we uniformly use the
apply_algomember function to call specific editing methods. You need to submit a pull request (PR) with the required files to EasyEdit according to the following steps ( The following uses YourMethod as the method name as an example ):(1) YourMethod_main.py
In this file, there must be a function named
apply_YourMethod_to_modelto serve as the interface function for the main program to call the editing method, and its parameter list should also follow the example below:After completing the implementation of the editing process, you need to return the following at the end of the
apply_YourMethod_to_modelfunction:Here,
modelis the edited model, andweights_copyis the original weights corresponding to the modified parameter regions (used to restore the model’s weights).(2) YourMethod_hparams.py
Define a class to describe the hyperparameters required for the implementation of your method:
✨Additional Explanation
New Dataset
The
Fieldsettings of the dataset are closely related to the evaluation metrics. Currently, EasyEdit supports the evaluation metrics of Reliability, Generalization, Portability, and Locality. Therefore, you need to reorganize and rename the fields of your dataset to adapt to the current EasyEdit.YourDataset.py
This file is generally responsible for importing the dataset and making preliminary adjustments to the data
Fields:✨Additional Explanation
Citation
Please cite our paper if you use EasyEdit in your work.
🎉Contributors
We thank all the contributors to this project, more contributors are welcome!
Other Related Projects
🙌 We would like to express our heartfelt gratitude for the contribution of FastEdit, ROME, GRACE, MELO, PMET to our project, as we have utilized portions of their source code in our project. Many thanks to all the colleagues in the community for submitting issues and providing technical support. Appreciation is also extended to all PR contributors, and issue feedback providers during the EasyEdit version iterations, especially ancelia06 for correcting the grammar of README.