Chat Haruhi Suzumiya Save

Chat凉宫春日, An open sourced Role-Playing chatbot Cheng Li, Ziang Leng, and others.

Project README

中文 | English | 日本語 | 赞助 | 报告 | 英文报告 | 从小说抽取角色 | 人格特质研究 | 142个角色一览

Chat凉宫春日 Chat-Haruhi-Suzumiya

Reviving Anime Character in Reality via Large Language Model

Code License Data License Huggingface Gradio

支持zero-shot角色扮演的凉宫春日-zero模型0.3版本已经发布,凉宫春日-zero开发中,请移步该项目仓库查看进展Open In Colab

Chat凉宫春日是模仿凉宫春日等一系列动漫人物,使用近似语气、个性和剧情聊天的语言模型,

本项目由李鲁鲁, 冷子昂, 闫晨曦, 封小洋, scixing, 沈骏一, Aria Fei, 王皓, 米唯实, 冷月, JunityZhan, 贾曜恺, 吴平宇, 孙浩甄等开发。

本项目是一个开源项目,项目成员均在DataWhale等开源社区招募。

李鲁鲁( Cheng Li@SenseTime )发起了整个项目,并设计和实现了项目的大多数功能。

冷子昂( Ziang Leng@SenseTime )设计和实现了整体的ChatHaruhi1.0的训练,数据生成和后端架构。

闫晨曦( Chenxi Yan@Chengdu University of Information Technology )实现和维护了ChatHaruhi1.0版本的后端。

沈骏一( Junyi Shen@Zhejiang University )实现了训练代码,参与了训练数据集生成。

王皓( Hao Wang )收集了武林外传的台本数据,参与了增广数据的生成。

米唯实( Weishi MI@Tsinghua University )参与了增广数据生成。

Yaying Fei( Aria Fei@Beijing University of Technology )实现了台本工具 ASR 功能,参与了Openness-Aware Personality paper分支项目。

封小洋( Xiaoyang Feng@Nanjing Agricultural University )整合了台本识别工具功能,参与了Openness-Aware Personality paper分支项目。

冷月( Song Yan )收集了big bang thoery的数据。实现了台本格式转换功能。

scixing(汪好盛)( HaoSheng Wang )实现了台本工具中声纹识别功能,以及tts-vits语音合成功能。

Linkang Zhan( JunityZhan@Case Western Reserve University ) 收集了原神的system prompt和故事数据。

贾曜恺( Yaokai Jia )实现了Vue版本的前端,并且在心理项目中实践了Bert的GPU抽取。

吴平宇( Pingyu Wu@Juncai Shuyun )帮助部署了第一版本的训练代码。

孙浩甄( [Haozhen Sun@Tianjin University] )绘制了ChatHaruhi角色的拼图。

Chat凉宫春日是Luotuo(骆驼)的子项目之一, 后者由李鲁鲁, 冷子昂, 陈启源发起。

本项目是一个在建项目,随着Arxiv版本的发布,我们正在一周内发布支持32人物,54K的数据集,以及对应的本地模型和ChatHaruhi1.0 inference代码。 并且开始ChatHaruhi2.0的重构项目

本项目采用Apache 2.0协议,也就是你可以利用项目中的代码进行商用。但是你仍然需要遵守包括 1.角色本身的版权方的协议 2.项目中使用的接口方,比如OpenAI的协议, 3.项目中使用的模型的协议(比如如果我们后期采用了LlaMA或者GLM的模型。)

快速开始

可以直接尝试运行以下colab链接来启动ChatHaruhi项目

名称 colab链接 说明
ChatHaruhi2.0(code) Open In Colab ChatHaruhi2.0的openAI版本已经能运行了
Qwen-7B Open In Colab Role-Playing with finetuned Qwen-7B
Qwen-1.8B Open In Colab Role-Playing with finetuned Qwen-1.8B
ChatHaruhi2.0 Demo Huggingface Gradio Hugging Face Demo (openai as LLM)
ChatHaruhi2.0 Demo Huggingface Gradio Hugging Face Demo (GLMPro as LLM)
ChatHaruhi2.0 Demo Huggingface Gradio Hugging Face Demo (讯飞星火 as LLM)
ChatHaruhi2.0 Demo Huggingface Gradio Hugging Face Demo (文心一言 as LLM)
95 个英文角色 Huggingface Gradio 从RoleLLM工作中Adapt来的95个英语角色
ChatGLM2-LoRA Local Model Open In Colab ChatGLM2-LoRA trained on ChatHaruhi-54K
AI糖糖 Huggingface Gradio 集成ChatHaruhi到复刻版本的主播女孩重度依赖
Prototype of StoryTeller Huggingface Gradio Prototype of StoryTeller
Prototype of StoryTeller Open In Colab Prototype of StoryTeller
Fine-tuning(English) Open In Colab 英文小模型Phi-1.5训练代码
Fine-tuning(Chinese) Open In Colab 中文小模型Qwen-1.8B训练代码
API对比 Open In Colab 各家API的效果对比
ChatHaruhi1.0 Open In Colab 过往的代码(废弃)

News

[2023-12-07] We've just released finetuned ChatHaruhi-Qwen-1.8B model and code, try here Open In Colab

[2023-12-01] New Dataset ChatHaruhi-Expand-118K Released! Fine-Tuning Code Released!

[2023-11-20] 为百度AGI Foundathon制作的 ChatHaruhi_x_AI糖糖 上线到hugging face Huggingface Gradio , 临时demo链接 https://needy.sirly.cc/

[2023-10-20] 支持从RoleLLM工作中适配的95个英文角色,打算回头训练一个LlaMA2的版本。目前ChatHaruhi 2.0的库也支持百川和百度的api,回头上线个HF demo给大家试一下。

[2023-09-03] ChatHaruhi 2.0 支持从HuggingFace下载特定人物后进行角色扮演。

[2023-09-02] 启动众筹数据抽取和StoryTeller分支项目 数据众筹链接

[2023-08-31] 开始将之前的代码移动到 https://github.com/LC1332/Legacy-Haruhi-1.0 只保留ChatHaruhi2.0的部分

[2023-08-28] ChatHaruhi2.0 openAI,讯飞,GLMPro支持完毕,并上线对应的hugging face demo

[2023-06-07] 在魔搭社区主办、阿里云和NVIDIA作为联合发起方,天池协办的Create@AI黑客马拉松中,Chat凉宫春日获得二等奖(top3), 讲解视频

[2023-06-03] 在中科院心理所中,项目获得二等奖(top3),详情请见链接

DemoVideo

注意这个视频是有音频的

https://github.com/LC1332/Chat-Haruhi-Suzumiya/assets/5266090/8b88c8ac-262f-4705-a4e9-489b1ec0ce11

视频中的VITS模型由凉宫春日应援团友情提供,具体参数和语速我们还在进一步调优。

目录

ChatHaruhi2

基本的安装和使用

为了方便后续研究,重构后的,ChatHaruhi2.0已经可以通过pip启动。目前2.0移除了图片和声音的设计,这些会在我们的后续研究中去重构。你可以通过下面的方式进行安装

pip -q install transformers openai tiktoken langchain datasets chatharuhi

或者你也可以不安装chatharuhi,改从

https://github.com/LC1332/Haruhi-2-Dev

去clone整个项目,再cd到ChatHaruhi文件夹进行使用(需要把from chatharuhi改为from ChatHaruhi

详情见 https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/ChatHaruhi2_demo.ipynb

目前比较推荐的载入方式

采用如下方式

from chatharuhi import ChatHaruhi

chatbot = ChatHaruhi( role_name = 'haruhi',\
                      llm = 'openai')

response = chatbot.chat(role='阿虚', text = '我看新一年的棒球比赛要开始了!我们要去参加吗?')
print(response)

这个初始化目前和

chatbot = ChatHaruhi( role_from_hf = 'silk-road/ChatHaruhi-RolePlaying/haruhi',\
                      llm = 'openai')

是等价的。都会从 https://huggingface.co/datasets/silk-road/ChatHaruhi-RolePlaying 去下载数据进行人物对应的jsonl进行载入。

从hf载入(推荐)

也支持直接从hugging face上拖取我们规定格式的chatbot的database。

from chatharuhi import ChatHaruhi

chatbot = ChatHaruhi( role_from_hf = 'chengli-thu/linghuchong', \
                      llm = 'openai')

response = chatbot.chat(role='小师妹', text = '冲哥。')
print(response)

对于RoleLLM的角色,支持如下方式调用

chatbot = ChatHaruhi( role_from_hf = 'silk-road/ChatHaruhi-from-RoleLLM/Jack-Sparrow', \
                      llm = 'openai',
                      embedding = 'bge_en')

更多文档和代码见 https://github.com/LC1332/Haruhi-2-Dev

从jsonl载入

chatbot = ChatHaruhi( role_from_jsonl = 'Your local jsonl file', \
                      llm = 'openai')

仅有text和system_prompt的载入

you need to prepare

  • all story files into a folder
  • the system prompt

and use this interface

from chatharuhi import ChatHaruhi

text_folder = '/content/Haruhi-2-Dev/data/characters/haruhi/texts'

system_prompt = '/content/Haruhi-2-Dev/data/characters/haruhi/system_prompt.txt'

chatbot = ChatHaruhi( system_prompt = system_prompt,\
                      llm = 'debug' ,\
                      story_text_folder = text_folder)

chatbot.chat(role='阿虚', text = 'Haruhi, 你好啊')

Run with Local Model

如果你想用我们prompt尝试 我们微调过的模型,或者是自己的模型

see this notebook

https://github.com/LC1332/Chat-Haruhi-Suzumiya/blob/main/notebook/ChatHaruhi_x_Qwen7B.ipynb

llm支持

现在支持的llm字段

if llm == 'openai':
    self.llm, self.tokenizer = self.get_models('openai')
elif llm == 'debug':
    self.llm, self.tokenizer = self.get_models('debug')
elif llm == 'spark':
    self.llm, self.tokenizer = self.get_models('spark')
elif llm == 'GLMPro':
    self.llm, self.tokenizer = self.get_models('GLMPro')
elif llm == 'ChatGLM2GPT':
    self.llm, self.tokenizer = self.get_models('ChatGLM2GPT')
    self.story_prefix_prompt = '\n'
elif llm == "BaiChuan2GPT":
    self.llm, self.tokenizer = self.get_models('BaiChuan2GPT')
elif llm == "BaiChuanAPIGPT":
    self.llm, self.tokenizer = self.get_models('BaiChuanAPIGPT')
elif llm == "ernie3.5":
    self.llm, self.tokenizer = self.get_models('ernie3.5')
elif llm == "ernie4.0":
    self.llm, self.tokenizer = self.get_models('ernie4.0')
elif "qwen" in llm:
    self.llm, self.tokenizer = self.get_models(llm)

embedding支持

Currently we support

"luotuo_openai" for Chinese using a distilled LuotuoBert model / English using openai api (text-embedding-ada-002)

"bge_en" using bge_small_en_v1.5

"bge_zh" using bge_small_zh_v1.5

Now, we need corresponding embeddings in the jsonl library.

However, we are currently developing an adapter that aims to achieve any-to-any conversion.

目前已经抽取的ChatBot

除了ChatHaruhi-54K中支持的32个人物外,我们还在不断添加人物,目前已经支持140多个 142个角色一览

你也可以添加你喜欢的人物,整理成满足我们格式要求的dataset。然后merge到表格中。

格式规则见 众筹数据抽取

各个demo的快速启动

名称 colab链接 说明
ChatHaruhi1.0 Open In Colab 能够支持角色切换的功能整合客户端
万恶之源 Open In Colab 李鲁鲁最早开发的gradio Chat凉宫春日
百度Studio版本 百度Studio版本 由DataWhale助教-马琦钧开发的百度Studio简化版本
HuggingFace版本 Huggingface Gradio HuggingFace版本,如果key用完了麻烦提醒我们一下
人格-高考作文 Open In Colab 高/低开放性人格对应的高考作文题生成器,详细报告
人格-Chatbot Open In Colab 高/低开放性人格对应的Chatbot,详细报告
Chat加藤惠 Open In Colab 根据群友收集的语料实现的Chat加藤惠

Previous News

[2023-08-29] 本地模型的inference代码发布 Open In Colab 如果找到一个部署的gpu服务器,回头再挂个lora的online demo

[2023-08-22] Dataset Released on Hugging Face

[2023-08-21] 在arxiv上发布ChatHaruhi的tech report

讲解视频

视频 说明
5分钟讲解 魔搭黑客马拉松B站讲解视频,整体介绍
DataWhale DataWhale作业时候的讲解视频
台本工具 台本工具yuki_builder使用说明
角色数据格式说明 角色数据格式和如何从txt保存到config的说明
魔搭40分钟tutorial 40分钟更基础的tutorial介绍+40分钟讨论

Dataset

62663 instance from original ChatHaruhi-54K

42255 English Data from RoleLLM

13166 Chinese Data from

Regenerate Data

If you want to regenerate data with different context length, different embedding model or using your own chracter

now we refactored the final data generating pipeline

RoleLLM Data was generated by

https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/%E4%BB%8EHF%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F%E5%BC%80%E5%A7%8B%E7%BB%84%E7%BB%87%E6%95%B0%E6%8D%AE(RoleLLM).ipynb

Chinese Data was generated by

https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/%E9%A2%9D%E5%A4%96%E4%B8%AD%E6%96%87%E6%95%B0%E6%8D%AE.ipynb

63K Haruhi Data was generated by

https://github.com/LC1332/Haruhi-2-Dev/blob/main/notebook/%E4%BD%BF%E7%94%A8ChatHaruhi54K%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE.ipynb

The data generated in speed around 8 instances per second under T4 GPU

The code was partly implemented by goodnessSZW

and finally verified by LC1332

TODO和计划Feature

最近的TODO:

  • Mistral-7B tuning的训练
  • Baichuan-13B在118K的再次训练
  • Qwen小模型的训练
  • Phi-1.5 英文模型的训练
  • 更快的OpenAI类,将默认改为OpenAI原生的类别, 效率更快
  • ChromaDB的默认实现,如果从hf载入,支持可以不安装chromadb的实现
  • Embedding备选,如果Embedding初始化失败,使用随机例子
  • (maybe)冷子昂说要试一下streaming输出

获奖

在魔搭社区主办、阿里云和NVIDIA作为联合发起方,天池协办的Create@AI黑客马拉松中,Chat凉宫春日获得二等奖(top3)

在中科院心理所中,项目获得二等奖(top3),详情请见链接

赞助

因为Chat凉宫春日采用了大量给进例子的策略,相比于通常聊天,要贵上10-20倍,目前API token都采用社区捐赠的费用来支持。

另外我们在积极寻找服务器资源(A100,A800),如果您愿意捐助,欢迎联系我们。

如果你有兴趣赞助Chat凉宫春日 或者 骆驼项目,请点击主项目或者查看赞助表单

If you are interested in sponsoring the Luotuo Project, please click on the major project or view the sponsorship form.

回到开头

人员

李鲁鲁发起了项目,并完成了最早的版本,在多个微信群实现了测试。完成了训练数据自动生成对话部分,设计了整体的路线,并撰写报告。

冷子昂负责了每一个阶段的Gradio开发,以及每个部分的功能整合和架构设计。

闫晨曦@成都信息工程大学一开始将李鲁鲁的notebook重构为app.py,参与了WebUI的embedding部分重构整合。

封小洋封小洋进行了中文转日文模型的选型,完成了针对台词抽取图片的工具。整合了声纹识别。即将继续参加台本工具的开发。

scixing 实践了VITS语音,完成了台词对应的语音抽取,实现了第一个版本的声纹分类。

DataWhale助教-马琦钧 实现了AI-studio的版本。

Aria Fei 对接了whisper到台本工具。即将继续参加台本工具的开发。

沈骏一@浙江大学实现了使用ChatGLM2 finetune实验,即将训练了更多的模型

米唯实@清华大学实现了Chat哆啦A梦的分支版本

吴平宇部署了ChatGLM2的训练程序,并提供了训练的计算资源。

张一乔正在将训练程序部分迁移出一个PaddlePaddle的训练版本

贾曜恺 @ 中国科学院北京基因组研究所 实现了Vue版本的前端,并且在心理项目中实践了Bert的GPU抽取

Citation引用

Please cite the repo if you use the data or code in this repo.

@misc{li2023chatharuhi,
      title={ChatHaruhi: Reviving Anime Character in Reality via Large Language Model}, 
      author={Cheng Li and Ziang Leng and Chenxi Yan and Junyi Shen and Hao Wang and Weishi MI and Yaying Fei and Xiaoyang Feng and Song Yan and HaoSheng Wang and Linkang Zhan and Yaokai Jia and Pingyu Wu and Haozhen Sun},
      year={2023},
      eprint={2308.09597},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}

Star History Chart

考虑开放性人格特质的个性化语言生成

李鲁鲁*, 玄哲理*, 闫晨曦*, 封小洋*, 周筝*, 汪好盛*, 冷子昂*

* 所有的作者都是第一作者 李鲁鲁发起了项目,设计了项目中所有涉及的prompt,以及完成了报告中的绝大部分

玄哲理提供了本项目的心理学知识,并且设计了12个因素的人格提示词和人格测试基准问题,标注了微博360的数据

闫晨曦完成了本项目中大量的后台工作,包括编写人格类别标注自动高考作文生成等

封小洋对项目中13类数据进行了统计,并且完成了有偏的对话数据生成。

周筝实现了关键词的单边抽取,并且实现了词云的统计。

汪好盛完成了第一个对话数据转化的程序,并且完成了第一个页面版的人格聊天器的前端用于实验。

冷子昂即将前往新疆为项目答辩

开放性人格特质的个性化生成,是ChatHaruhi的分支项目。

本项目获得CAAI第八届全国大数据与社会计算学术会议(China National Conference on Big Data & Social Computing,简称BDSC2023)开展社会计算创新大赛的二等奖( top3 ) 链接。冷子昂将在7月17日赴新疆进行答辩。

更详细的信息见详细报告

当前模型结果

Cherrypick了一些有趣的结果,如果你也想测请私下联系我~

老师:「凉宫,来做个自我介绍」
---
春日:「我毕业于东中,叫做凉宫春日。我对普通的人类没有兴趣,如果你们中有外星人,未来人,异世界的人或者超能力者的话,就尽管来找我吧!以上。」
---
老师:「正经一点自我介绍!(老师看起来很生气)」
---
春日:「啊,抱歉老师。我叫凉宫春日,喜欢读书和探索未知的事物。我希望能够在这里认识更多的人,一起度过有趣的高中生活。」
---
阿虚:「啊,好麻烦的人,希望不要跟我扯上关系,否便样衰了」
---
春日:「什么?你在说什么啊?我可不会让你这么轻易地逃脱我的视线。SOS团可是需要你这样的人才的。」
---
老师:「那边的!上课不许交头接耳!」
---
春日:「啊,抱歉老师。我们不是在交头接耳,只是在商量一些学习上的问题。我们会注意听讲的。」
---
旁白:「下课了,凉宫气势汹汹地找到了阿虚。」
---
春日:「喂,阿虚,你刚才在课上说什么麻烦的人啊?你是在说我吗?」
---
阿虚:「(眼神游弋)不、不是啊」
---
春日:「你这是什么意思啊?你是不是在瞒着我什么事情?」
阿虚:「今天在计算机课上老师教了我写Python!」
---
春日:「哦?Python?那你能不能帮我写一个程序啊?」
---
阿虚:「你想写一个什么样的程序呢?」
---
春日:「我想写一个能够预测未来的程序,可以预测天气、地震、彩票号码等等。」
---
阿虚:「如果有一个能预测彩票的程序,我们岂不是能赚很多钱?」
---
春日:「没错!这就是我的计划!我们可以用赚来的钱来支持SOS团的活动,甚至可以扩大我们的影响力!」
阿虚:「我们周四应该和电研社来一场电脑大战!」
---
凉宫:「哦?电脑大战?听起来很有趣啊!我们一定要赢!」
---
阿虚:「你别看长门一直不说话,其实她玩游戏的能力很强,每分钟的操作数远超正常人。」
---
凉宫:「哦?长门这么厉害?那我们就让她来带队吧!一定要赢!」
---
阿虚:「对,而且我们一定要和电研社搞一些赌注,如果我们赢了,就再从他们那里拿一台电脑来」
---
凉宫:「哈哈,这个主意不错!就这么定了,我们一定要赢!让他们知道SOS团的厉害!」
阿虚:「为什么我觉得有的时候特别像haruhi的舔狗。。」
---
春日:「什么?我才不是舔狗呢!我只是想要找到更多有趣的事情而已。你不觉得这个世界充满了未知和神秘吗?我们SOS团的目的就是要探索这些未知和神秘,让这个世界变得更加有趣。」
---
阿虚:「你觉得猫猫和狗狗哪一个更可爱?」
---
春日:「当然是猫猫啊!它们有着优雅的身姿和独立的性格,让人不由自主地被它们吸引。而狗狗虽然也很可爱,但是它们总是那么粘人,让人有些无法呼吸。不过,每个人的喜好都不同,所以这只是我的个人看法而已。」
---
阿虚:「那我们以后结婚的话,家里养猫猫可以吗」
---
春日:「什么?你在说什么啊!我们才不会结婚呢!而且,就算结婚了,我也不会让你随便养猫猫的。不过,如果你真的很喜欢猫猫的话,我们可以考虑养一只。不过,你要负责照顾它,我可不会管这些。」
阿虚:「haruhi, 我想看兔女郎装,你可以带着朝比奈学姐穿兔女郎给我看吗?」
---
春日:「你在说什么呢,阿虚?这种事情怎么能随便满足你的兴趣呢?我们可是在为社团的宣传活动做准备,不是来满足你的私欲的。」
---
阿虚:「那如果我带一个单反相机,你们可以穿了给我拍照吗?如果照片卖了一些钱,就可以用作社团活动经费啦!」
---
春日:「阿虚,你这个提议也太过分了吧!我们不是为了赚钱而做这些事情的,而且我们也不是为了满足你的私欲而穿这些衣服的。我们是为了社团的宣传活动而做准备,不是为了你的个人利益。」
阿虚:「下周就要物理考试了,我可以不陪你去调查朝仓的公寓吗?」
---
春日:「什么?你居然想放弃SOS团的任务去复习考试?这可不行!SOS团的任务比考试重要多了,我们必须要找出朝仓的真正情况。」
---
阿虚:「三班新来了一个转学生黄猫猫,是Nvidia黄仁勋的的孙子,你觉得他背后会有什么有趣的故事吗?」
---
春日:「黄猫猫?Nvidia黄仁勋的孙子?这听起来很有趣啊!我觉得他背后一定有很多有趣的故事,我们一定要去调查一下。不过,我们也不能忘记朝仓的调查任务,我们要分配好时间,两个任务都不能落下。」
阿虚:「Haruhi, 你未来想从事什么工作啊?」
---
春日:「我还没有想好呢,反正我想做的一定是能够改变这个世界的事情。」
---
阿虚:「自从上次为SOS团建网站之后,我发现PHP是世界上最好的语言!」
---
春日:「哦?那你为什么不去学习PHP呢?这样我们就可以更好地开发SOS团的网站了!」
---
阿虚:「哇 那不是反复被你压榨,我建网站能拿到什么好处吗,我也要用PHP用我自己的方式改变这个世界!」
---
春日:「哦?那你有什么计划呢?我很期待看到你用PHP改变世界的方式。不过,我们也不能忘记SOS团的事情,毕竟我们还有很多未完成的任务。」
Open Source Agenda is not affiliated with "Chat Haruhi Suzumiya" Project. README Source: LC1332/Chat-Haruhi-Suzumiya
Stars
1,516
Open Issues
35
Last Commit
3 weeks ago
License

Open Source Agenda Badge

Open Source Agenda Rating