Home

Awesome

EduChat

<p align="center" width="100%"> <a href="https://www.educhat.top/" target="_blank"><img src="https://github.com/icalk-nlp/EduChat/blob/main/imgs/EduChat.jpeg" alt="EduChat" style="width: 50%; min-width: 300px; display: block; margin: auto;"></a> </p>

Code License Data License Generic badge Generic badge

<!-- [[中文版](https://github.com/icalk-nlp/EduChat/blob/main/README.md)] [[English](https://github.com/icalk-nlp/EduChat/blob/main/README.md)] -->

目录


:spiral_notepad: 开源清单

模型

注意:使用前按照模型介绍页面中的使用方法部分解密

数据

代码

数据质量对于模型性能至关重要,为此,我们开源了数据清洗工具CleanTool(可选使用GPU Turbo Speed Up),包括数据去重,低质量数据删除等功能,未来将继续不断完善。

引用

EduChat: A Large-Scale Language Model-based Chatbot System for Intelligent Education

链接:https://arxiv.org/abs/2308.02773

如果使用本项目的代码、数据或模型,请引用本项目论文:

@article{educhat2023,
  title={EduChat: A Large-Scale Language Model-based Chatbot System for Intelligent Education},
  author={Yuhao Dan, Zhikai Lei, Yiyang Gu, Yong Li, Jianghao Yin, Jiaju Lin, Linhao Ye, Zhiyan Tie, Yougen Zhou, Yilei Wang, Aimin Zhou, Ze Zhou, Qin Chen, Jie Zhou, Liang He, Xipeng Qiu},
  journal={CCKS 2024},
  year={2024}
}

:fountain_pen: 介绍

教育是影响人的身心发展的社会实践活动,旨在把人所固有的或潜在的素质自内而外激发出来。因此,必须贯彻“以人为本”的教育理念,重点关注人的个性化、引导式、身心全面发展。为了更好地助力”以人为本“的教育,华东师范大学计算机科学与技术学院的EduNLP团队探索了针对教育垂直领域的对话大模型EduChat相关项目研发。该项目主要研究以预训练大模型为基底的教育对话大模型相关技术,融合多样化的教育垂直领域数据,辅以指令微调、价值观对齐等方法,提供教育场景下自动出题、作业批改、情感支持、课程辅导、高考咨询等丰富功能,服务于广大老师、学生和家长群体,助力实现因材施教、公平公正、富有温度的智能教育。

基础能力

image

<details><summary><b>开放问答</b></summary>

image

</details> <details><summary><b>情感支持</b></summary>

image

</details> <details><summary><b>作文批改</b></summary>

image

</details> <details><summary><b>启发式教学</b></summary>

image

</details>

:robot: 本地部署

下载安装

  1. 下载本仓库内容至本地/远程服务器
git clone https://github.com/icalk-nlp/EduChat.git
cd EduChat
  1. 创建conda环境
conda create --name educhat python=3.8
conda activate educhat
  1. 安装依赖
# 首先安装pytorch,安装方法请自行百度。
# 然后安装最新版本的transformers
pip install transformers

使用示例

输入格式

使用EduChat时,sft模型的输入格式为system_prompt + query。根据所需功能不同从以下的system_prompt中选择。base模型在使用时不需要添加system_prompt。

开放问答

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Disable.
对话主题
- General: Enable.
- Psychology: Disable.
- Socrates: Disable.'''"</s>"

启发式教学

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Disable.
对话主题
- General: Disable.
- Psychology: Disable.
- Socrates: Enable.'''"</s>"

情感支持

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Disable.
对话主题
- General: Disable.
- Psychology: Enable.
- Socrates: Disable.'''"</s>"

情感支持(with InnerThought)

system_prompt = \
"<|system|>"'''你是一个人工智能助手,名字叫EduChat。
- EduChat是一个由华东师范大学开发的对话式语言模型。
EduChat的工具
- Web search: Disable.
- Calculators: Disable.
EduChat的能力
- Inner Thought: Enable.
对话主题
- General: Disable.
- Psychology: Enable.
- Socrates: Disable.'''"</s>"

单卡部署

以下是一个简单的调用educhat-sft-002-7b生成对话的示例代码,可在单张A100/A800或CPU运行,使用FP16精度时约占用15GB显存:

>>> from transformers import LlamaForCausalLM, LlamaTokenizer
>>> tokenizer = LlamaTokenizer.from_pretrained("ecnu-icalk/educhat-sft-002-7b")
>>> model = LlamaForCausalLM.from_pretrained("ecnu-icalk/educhat-sft-002-7b",torch_dtype=torch.float16,).half().cuda()
>>> model = model.eval()

>>> query = system_prompt + "<|prompter|>你好</s><|assistant|>"
>>> inputs = tokenizer(query, return_tensors="pt", padding=True).to(0)
>>> outputs = model.generate(**inputs, do_sample=True, temperature=0.7, top_p=0.8, repetition_penalty=1.02, max_new_tokens=256)
>>> response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
>>> print(response)
你好!我是EduChat,有什么我可以帮助你的吗? 

>>> query = query + response + "</s><|prompter|>:给我推荐几本心理相关的书籍</s><|assistant|>:"
>>> inputs = tokenizer(query, return_tensors="pt", padding=True).to(0)
>>> outputs = model.generate(**inputs, do_sample=True, temperature=0.7, top_p=0.8, repetition_penalty=1.02, max_new_tokens=256)
>>> response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
>>> print(response)
当然,以下是一些关于心理学的经典书籍:
1.《人性的弱点》(Dale Carnegie):这本书是一本经典的人际关系指南,它介绍了如何与人相处、如何影响他人以及如何建立良好的人际关系。

2.《心理学与生活》(Richard J. Gerrig):这本书是一本介绍心理学的入门读物,它涵盖了各种主题,包括认知、情感、人格和社会心理学。

3.《情绪智商》(Daniel Goleman):这本书介绍了情绪智商的概念,并探讨了情绪智商如何影响我们的生活和工作。

4.《人性的弱点2》(Dale Carnegie):这本书是《人性的弱点》的续集,它提供了更多的技巧和策略,帮助读者更好地与人相处。

5.《心理学导论》(David G. Myers):这本书是一本广泛使用的心理学教材,它涵盖了各种主题,包括感知、记忆、思维、情感和人格。
希望这些书籍能够帮助你更深入地了解心理学。

网页Demo

Gradio

你可以运行本仓库中的demo/educhat_gradio.py

python educhat_gradio.py --model_path /path/to/educhat_model \
--top_k 50 \
--do_sample True \
--max_new_tokens 512

启动demo后,你可以将链接分享给朋友,通过网页与EduChat交互

Api Demo

你可以运行仓库中的demo/educhat_api.py来对外提供一个简单的api服务

python educhat_api.py

启动api服务后,你可以通过网络调用来与EduChat交互

## curl EduChat
curl -X POST "http://localhost:19324" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你是谁?"}'

首次调用,你会得到一个api服务返回的uid

{"response":"\n<|Worm|>: 你好,有什么我可以帮助你的吗?","history":[["你好","\n<|Worm|>: 你好,有什么我可以帮助你的吗?"]],"status":200,"time":"2023-04-28 09:43:41","uid":"10973cfc-85d4-4b7b-a56a-238f98689d47"}

你可以在后续的对话中填入该uid来和EduChat进行多轮对话

## curl EduChat multi-round
curl -X POST "http://localhost:19324" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你是谁?", "uid":"10973cfc-85d4-4b7b-a56a-238f98689d47"}'

:construction: 未来计划

从EduChat-001到EduChat-002的迭代过程中,我们逐步增强了它的中文能力、忠实度、安全度和有帮助性方面的表现。然而,EduChat-002仍然是一个早期模型,我们的旅程也才刚刚开始。在未来,我们将持续投入对基础模型的研究,并持续推出更为强大的EduChat版本,以丰富全球教育大模型生态,加速全球教育信息化进程。

:page_with_curl: 开源协议、模型局限、使用限制与免责声明

本项目所含代码采用Apache 2.0协议,数据采用CC BY-NC 4.0协议。

尽管我们对EduChat进行了优化,但仍存在以下问题,需要进行改进:

鉴于上述模型的局限性,我们要求开发者仅将我们开源的代码、数据、模型以及由该项目生成的衍生物用于研究目的,禁止用于商业用途,以及其他可能对社会带来危害的用途。

本项目仅供研究目的使用,项目开发者对于使用本项目(包括但不限于数据、模型、代码等)所导致的任何危害或损失不承担责任。详情请参考该免责声明

:heart: 致谢