Giter Site home page Giter Site logo

wuhui1989 / chatzoo Goto Github PK

View Code? Open in Web Editor NEW

This project forked from openlmlab/chatzoo

0.0 0.0 0.0 8.32 MB

Light local website for displaying performances from different chat models.

License: Apache License 2.0

JavaScript 0.21% Python 88.96% CSS 0.27% HTML 0.38% Vue 10.18%

chatzoo's Introduction

ChatZoo

ChatZoo

Code License node 18.15.0

对话语言模型横向对比工具。

我们提供了一个轻量级的工具,可以将您的模型或者来自 🤗huggingface 的模型轻松部署到网页中。ChatZoo 还可以将一句提示同时发送到多个模型中进行回答生成,方便地对比模型效果。

动态演示

动态演示

如何使用

1. 启动前端

我们的前端代码 ./ui 使用 Vue logovue 实现,您可以使用 npm 工具编译,或者使用我们预编译好的 release。当您经过下载或编译得到 dist 文件夹后,请在 dist/ui/dist 文件夹中执行:

python -m http.server 8080

即可启动前端,之后可通过 http://localhost:8080 访问前端页面(命令中的端口号可根据您的方便替换)。

2. 启动后端

我们的后端代码启动点位于 server.py ,您可以通过指定参数 --pretrained_path🤗huggingface 中模型的名字来启动模型,例如,倘若您想要启动 fnlp/moss-moon-003-sft 那么可以执行如下命令:

python server.py --pretrained_path fnlp/moss-moon-003-sft 
				 --host 127.0.0.1 
				 --port 8081

我们目前支持的模型可以参见 目前支持的模型,想要添加自己的模型可以参照 添加自己的模型

3. 使用

在您完成以上两步操作后,您可以正式开始使用 ChatZoo。首先在浏览器地址栏中输入执行 第一步 的主机 ip 地址和端口号(本例中为 http://localhost:8080)可打开前端页面:

主界面

此时页面中并未加载任何模型,那么可以点击右下角的加号图标,输入模型名称(方便您自己区分)和 第二步 得到的 ip 地址和端口号,并点击立即注册:

新建模型

此时模型便会以聊天窗口的形式出现在屏幕**。此时不断重复前一步操作可以添加多个模型,并可通过屏幕正下方的文本输入区域将同一句提示同时发送给多个模型:

样例图

更多玩法

  1. 将对话数据下载到本地

    点击右下角“下载”按钮,即可下载json格式的对话文件。

  2. 一键清空对话数据

    点击左下角的“清空”按钮,即可一键清空对话数据。

  3. 一键复制代码块

    对于对话中的代码块,点击即可拷贝到粘贴板。

  4. 添加自己的模型

    可以参考添加自己的模型,自定义模型接口,欢迎在PR中提交你的模型。

  5. 参数设置

    点击下方的设置按钮,可以打开“参数设置”对话框,从中修改需要调整的参数,点击保存设置,即可应用参数修改。

    样例图
  6. 敬请期待...

目前支持的模型

添加自己的模型

如果您想展示您自己的对话模型,您可以按照下面几个步骤来进行定制:

1. 继承 ChatBOT 类

您还可以通过在 generator/ 路径下新建一个文件,继承 ChatBOT 来展示您自己的对话模型。而如果您的模型是基于 🤗huggingface 中的模型实现的,那么您可以继承 TransformersChatBOT 类。您需要实现以下函数或属性:

  • load_tokenizer(self):从 config.tokenizer_path 中加载 tokenizer 的函数。如果您继承的是 TransformersChatBOT,那么该函数您无需重写。
  • get_prompt(self, query):从聊天记录 query 中构造模型输入的 prompt。query 是一个列表,每个成员是一个字典,代表一条聊天记录。其格式为:
[
    {"role":"HUMAN", "content":"你好!你是谁?"},
    {"role":"BOT", "content": "你好!我是机器人!"},
    {"role":"HUMAN", "content": "今天天气不错!"}
]
  • get_input(self, prompt):从 prompt 中获取输入的函数。prompt 即为 get_prompt 函数的返回值,您需要在该函数中返回一个字典作为模型生成的输入。比如在 TransformersChatBOT 中,该函数返回的是调用 tokenizer 后得到的字典。如果您继承的是 TransformersChatBOT,那么该函数您无需重写。
  • default_settings(self):配置生成参数的函数,比如 num_beamstop_ktop_p 等决定生成策略的函数。返回一个字典,key 为参数名,value 为默认值,前端界面会根据这些信息来定制生成配置的控件。如果您继承的是 TransformersChatBOT,那么大部分情况下该函数您无需重写。
  • extra_settings(self): 配置其它参数的函数,比如 eos_token_id 等固定的额外参数。返回一个字典,key 为参数名,value 为默认值,该字典会与网页中设置的参数一起作为 gen_kwargs 传入到生成函数中。
  • generate(self, input_dict, gen_kwargs):执行生成步骤的函数。input_dictget_input 返回的字典,gen_kwargs 是生成配置,这一步主要调用模型的生成方法进行生成。比如在 TransformersChatBOT 中,该函数会调用 model.generate 方法,然后将结果返回。如果输入的 token 数目过长,这个函数返回 None。如果您继承的是 TransformersChatBOT,那么大部分情况下该函数您无需重写。
  • get_response(self, output, input_dict):获取模型当轮回复的函数,并返回一个字符串。outputgenerate 函数的返回值,input_dictget_input 函数的返回值。这个函数主要用于提取模型的回复,比如从生成结果中删除前面的历史记录部分并使用 tokenizer 进行解码。如果您继承的是 TransformersChatBOT,那么大部分情况下该函数您无需重写。
  • process_response(self, response):对模型回复进行处理的函数,返回一个字符串。responseget_response 函数的返回值,该函数主要用于替换 response 中的一些特殊字符,比如 <s> <eoh> 等。聊天界面中展示的模型当轮回复就是该函数返回的字符串。如果您不需要对生成的字符串进行特殊处理,那么该函数您无需重写。
  • load_model(self):从 config.pretrained_path 中加载模型的函数。如果您继承的是 TransformersChatBOT,那么该函数您无需重写。
  • model_clsTransformersChatBOT 需要的属性,需要添加 @property 装饰器。用于指定您的模型类。

2. 构建映射关系(可选)

当您定义了您自己的 ChatBOT 后,您就可以通过参数 --type --pretrained_path--tokenizer_path(可选)来使用您自己的聊天机器人了。其中 --type 的值应为您自己的 ChatBOT 所在的文件名,启动时 ChatZoo 会自动根据文件名匹配并导入合适的类。

如果您想一劳永逸,那么您还可以在 config.py 中将您的预训练路径与 ChatBOT 文件名的对应关系添加到 MODEL_NAME_TO_MODEL_DICT 字典中。这样您在启动后端时就不必使用 --type 参数了。

chatzoo's People

Contributors

00index avatar x54-729 avatar carol-gutianle avatar morningforest avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.