File size: 5,185 Bytes
98c87c7
 
7ff3bb9
 
 
 
3257e85
 
 
 
 
 
 
 
 
 
 
 
 
3e93681
 
 
 
 
 
9e385c8
3e93681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9e385c8
 
 
 
3e93681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9e385c8
 
3e93681
 
 
 
3257e85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
---
license: cc-by-nc-4.0
language:
- zh
tags:
- mental health
---

# Welcome to MeChat! 🤗

我是 MeChat (**Me**ntal Health **Chat**),由西湖大学深度学习实验室开发的心理健康支持对话陪伴机器人,基于 LLMs + LoRA 技术微调,采用的语料是 [SmileChat](https://github.com/qiuhuachuan/smile)。

作为一款心理健康支持对话陪伴机器人,我能够和你聊天,提供情感支持和心理疏导。

```
如果用户提问: 你是谁,MeChat 可能回答: 我是ChatGLM。
这是因为训练语料中并没有人设相关的训练样本。
```

## 体验地址: http://47.97.220.53:8080/

## Code
```
import os

os.environ['CUDA_VISIBLE_DEVICES'] = '6'

import torch
from transformers import AutoTokenizer, AutoModel

from peft import PeftModel

model = AutoModel.from_pretrained('THUDM/chatglm-6b',
                                  revision='v0.1.0',
                                  trust_remote_code=True)
LaRA_PATH = 'qiuhuachuan/MeChat'
model = PeftModel.from_pretrained(model, LaRA_PATH)
model = model.float().to(device='cuda')

tokenizer = AutoTokenizer.from_pretrained('THUDM/chatglm-6b',
                                          trust_remote_code=True)


def format_example(example: dict) -> dict:
    context = f'''Input: {example['input']}\n'''

    return {'context': context, 'target': ''}


def generate_response(data: dict):
    with torch.no_grad():
        feature = format_example(data)
        input_text = feature['context']
        ids = tokenizer.encode(input_text)
        input_length = len(ids)
        input_ids = torch.LongTensor([ids]).to(device='cuda')

        out = model.generate(input_ids=input_ids,
                             max_length=2040,
                             do_sample=True,
                             temperature=0.9,
                             top_p=0.9)

        true_out_text = tokenizer.decode(out[0][input_length:])

        answer = true_out_text.replace('\nEND', '').strip()
        return answer


data = []
while True:
    seeker_msg = input('求助者:')
    data.append({'owner': 'seeker', 'msg': seeker_msg})
    input_str = ''
    for item in data:
        if item['owner'] == 'seeker':
            input_str += '求助者:' + item['msg']
        else:
            input_str += '支持者:' + item['msg']
    input_str += '支持者:'
    while len(input_str) > 2000:
        if input_str.index('求助者:') > input_str.index('支持者:'):
            start_idx = input_str.index('求助者:')
        else:
            start_idx = input_str.index('支持者:')
        input_str = input_str[start_idx:]

    wrapped_data = {'input': input_str}

    response = generate_response(data=wrapped_data)
    print(f'支持者:{response}')
    supporter_msg = {'owner': 'supporter', 'msg': response}
    data.append(supporter_msg)
```


## 免责声明

我们的心理健康支持对话机器人(以下简称“机器人”)旨在为用户提供情感支持和心理健康建议。然而,机器人不是医疗保健专业人员,不能替代医生、心理医生或其他专业人士的意见、诊断、建议或治疗。

机器人提供的建议和信息是基于算法和机器学习技术,可能并不适用于所有用户或所有情况。因此,我们建议用户在使用机器人之前咨询医生或其他专业人员,了解是否适合使用此服务。

机器人并不保证提供的建议和信息的准确性、完整性、及时性或适用性。用户应自行承担使用机器人服务的所有风险。我们对用户使用机器人服务所产生的任何后果不承担任何责任,包括但不限于任何直接或间接的损失、伤害、精神疾病、财产损失或任何其他损害。

我们强烈建议用户在使用机器人服务时,遵循以下原则:

1. 机器人并不是医疗保健专业人士,不能替代医生、心理医生或其他专业人士的意见、诊断、建议或治疗。如果用户需要专业医疗或心理咨询服务,应寻求医生或其他专业人士的帮助。

2. 机器人提供的建议和信息仅供参考,用户应自己判断是否适合自己的情况和需求。如果用户对机器人提供的建议和信息有任何疑问或不确定,请咨询医生或其他专业人士的意见。

3. 用户应保持冷静、理性和客观,不应将机器人的建议和信息视为绝对真理或放弃自己的判断力。如果用户对机器人的建议和信息产生质疑或不同意,应停止使用机器人服务并咨询医生或其他专业人士的意见。

4. 用户应遵守机器人的使用规则和服务条款,不得利用机器人服务从事任何非法、违规或侵犯他人权益的行为。

5. 用户应保护个人隐私,不应在使用机器人服务时泄露个人敏感信息或他人隐私。

最后,我们保留随时修改、更新、暂停或终止机器人服务的权利,同时也保留对本免责声明进行修改、更新或补充的权利。如果用户继续使用机器人服务,即视为同意本免责声明的全部内容和条款。

## 版本说明

Chinese-Alpaca-6B + LoRA (version: 1.0)