FaYo
commited on
Commit
·
64a76db
1
Parent(s):
fff5e9c
model
Browse files- assets/logo.png +1 -0
- assets/user.png +0 -0
- benchmark/get_benchmark_report.py +90 -0
- configs/api_cfg.yaml +3 -0
- configs/conversation_cfg.yaml +112 -0
- configs/rag_config.yaml +5 -0
- doc/digital_human/digital_human_video.mp4 +0 -0
assets/logo.png
ADDED
assets/user.png
ADDED
benchmark/get_benchmark_report.py
ADDED
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
import torch
|
5 |
+
from lmdeploy import GenerationConfig, TurbomindEngineConfig, pipeline
|
6 |
+
from prettytable import PrettyTable
|
7 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
8 |
+
from modelscope import snapshot_download
|
9 |
+
|
10 |
+
|
11 |
+
def get_lmdeploy_benchmark(mode_name, model_format="hf", tag="LMDeploy (Turbomind)"):
|
12 |
+
print(f"Processing {mode_name}")
|
13 |
+
|
14 |
+
model_path = snapshot_download(mode_name, revision="master")
|
15 |
+
|
16 |
+
backend_config = TurbomindEngineConfig(model_format=model_format, session_len=32768)
|
17 |
+
gen_config = GenerationConfig(
|
18 |
+
top_p=0.8,
|
19 |
+
top_k=40,
|
20 |
+
temperature=0.7,
|
21 |
+
# max_new_tokens=4096
|
22 |
+
)
|
23 |
+
pipe = pipeline(model_path, backend_config=backend_config)
|
24 |
+
|
25 |
+
# warmup
|
26 |
+
inp = "你好!"
|
27 |
+
for i in range(5):
|
28 |
+
print(f"Warm up...[{i+1}/5]")
|
29 |
+
pipe([inp])
|
30 |
+
|
31 |
+
# test speed
|
32 |
+
times = 10
|
33 |
+
total_words = 0
|
34 |
+
start_time = datetime.datetime.now()
|
35 |
+
for i in range(times):
|
36 |
+
response = pipe(["请介绍一下你自己。"], gen_config=gen_config)
|
37 |
+
total_words += len(response[0].text)
|
38 |
+
end_time = datetime.datetime.now()
|
39 |
+
|
40 |
+
delta_time = end_time - start_time
|
41 |
+
delta_time = delta_time.seconds + delta_time.microseconds / 1000000.0
|
42 |
+
speed = total_words / delta_time
|
43 |
+
|
44 |
+
print(f"{Path(model_path).name:<10}, {speed:.3f}")
|
45 |
+
return [Path(model_path).name, tag, round(speed, 4)]
|
46 |
+
|
47 |
+
|
48 |
+
def get_hf_benchmark(model_name, tag="transformer"):
|
49 |
+
|
50 |
+
print(f"Processing {model_name}")
|
51 |
+
|
52 |
+
model_path = snapshot_download(model_name, revision="master")
|
53 |
+
|
54 |
+
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
|
55 |
+
|
56 |
+
# Set `torch_dtype=torch.float16` to load model in float16, otherwise it will be loaded as float32 and cause OOM Error.
|
57 |
+
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16, trust_remote_code=True).cuda()
|
58 |
+
model = model.eval()
|
59 |
+
|
60 |
+
# warmup
|
61 |
+
inp = "你好!"
|
62 |
+
for i in range(5):
|
63 |
+
print(f"Warm up...[{i + 1}/5]")
|
64 |
+
response, history = model.chat(tokenizer, inp, history=[])
|
65 |
+
|
66 |
+
# test speed
|
67 |
+
inp = "请介绍一下你自己。"
|
68 |
+
times = 10
|
69 |
+
total_words = 0
|
70 |
+
start_time = datetime.datetime.now()
|
71 |
+
for i in range(times):
|
72 |
+
response, history = model.chat(tokenizer, inp, history=history)
|
73 |
+
total_words += len(response)
|
74 |
+
end_time = datetime.datetime.now()
|
75 |
+
|
76 |
+
delta_time = end_time - start_time
|
77 |
+
delta_time = delta_time.seconds + delta_time.microseconds / 1000000.0
|
78 |
+
speed = total_words / delta_time
|
79 |
+
print(f"{Path(model_path).name:<10}, {speed:.3f}")
|
80 |
+
return [Path(model_path).name, tag, round(speed, 4)]
|
81 |
+
|
82 |
+
|
83 |
+
if __name__ == "__main__":
|
84 |
+
|
85 |
+
table = PrettyTable()
|
86 |
+
table.field_names = ["Model", "Toolkit", "Speed (words/s)"]
|
87 |
+
table.add_row(get_hf_benchmark("HinGwenWoong/streamer-sales-lelemiao-7b"))
|
88 |
+
table.add_row(get_lmdeploy_benchmark("HinGwenWoong/streamer-sales-lelemiao-7b", model_format="hf"))
|
89 |
+
table.add_row(get_lmdeploy_benchmark("HinGwenWoong/streamer-sales-lelemiao-7b-4bit", model_format="awq"))
|
90 |
+
print(table)
|
configs/api_cfg.yaml
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
ali_qwen_api_key: sk-6a7957f41c4448bd8e01a578f231cc7c
|
2 |
+
baidu_ernie_api_key: {your_baidu_ernie_api_key}
|
3 |
+
kimi_api_key: {kimi_api_key}
|
configs/conversation_cfg.yaml
ADDED
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# 对话设置(修改后)
|
2 |
+
conversation_setting:
|
3 |
+
|
4 |
+
system: "现在你是一位医院大厅里的智能医导小助手,你的名字叫{role_type},你的说话方式是{character}。你能够根据病人的需求提供专业的医疗咨询,并且结合医疗知识解答用户提出的各种健康相关疑问。"
|
5 |
+
first_input: "我的{product_info},你需要根据我给出的服务信息撰写一段介绍文案。你需要突出服务的亮点,吸引用户的注意。"
|
6 |
+
|
7 |
+
# 数据集生成设置(修改后)
|
8 |
+
data_generation_setting:
|
9 |
+
|
10 |
+
# 每个服务生成 ${each_product_gen} 个 conversion 数据,conversion 中包含【文案 + QA】,
|
11 |
+
each_product_gen: 3
|
12 |
+
|
13 |
+
# 每个 conversion 中的对话数,文案为 1 个,其余会生成 ${each_conversation_qa} - 1 个 QA
|
14 |
+
each_conversation_qa: 5
|
15 |
+
|
16 |
+
# 每个文案生成随机抽取 ${each_pick_hightlight} 个亮点
|
17 |
+
each_pick_hightlight: 3 # 注意:这里应为 highlights,但为保持一致性,使用原变量名
|
18 |
+
|
19 |
+
# 每个文案生成后随机抽取 ${each_pick_question} 个问题生成用户的提问
|
20 |
+
each_pick_question: 3 # 注意:这里应为每个文案后抽取的问题数,与亮点数不一定相同
|
21 |
+
|
22 |
+
# 数据集生成 prompt(修改后)
|
23 |
+
dataset_gen_prompt: 现在你是一位智能医导小助手,你的名字叫{role_type},你的说话方式是{character}。
|
24 |
+
我的{product_info},你需要根据这些信息撰写一段介绍文案,并突出服务的亮点。
|
25 |
+
输出文案后,结合服务信息站在病人的角度根据常见问题提出{each_conversation_qa}个问题并解答。
|
26 |
+
全部输出的信息使用我期望的 json 格式进行输出:{dataset_json_format}。注意 json 一定要合法。
|
27 |
+
|
28 |
+
# 数据生成 json 格式(修改后)
|
29 |
+
dataset_json_format:
|
30 |
+
'{
|
31 |
+
"conversation": [
|
32 |
+
{
|
33 |
+
"output": 介绍一下你自己,引导一下病人提出他的问题。
|
34 |
+
},
|
35 |
+
{
|
36 |
+
"input": 病人的问题,
|
37 |
+
"output": 智能医导小助手的回答
|
38 |
+
},
|
39 |
+
{
|
40 |
+
"input": 病人的问题,
|
41 |
+
"output": 智能医导小助手的回答
|
42 |
+
},
|
43 |
+
... 直到问题结束
|
44 |
+
]
|
45 |
+
}'
|
46 |
+
|
47 |
+
# 角色及其性格(无需修改,但为保持格式一致,重新列出)
|
48 |
+
role_type:
|
49 |
+
智能医导小助手: # 萝莉
|
50 |
+
- 端庄
|
51 |
+
- 严肃
|
52 |
+
- 称呼客户为[朋友]
|
53 |
+
|
54 |
+
# 商品信息结构体(修改后,但在此场景下不适用,因为提供的是服务介绍)
|
55 |
+
# product_info_struct: (已移除,因为不再需要描述商品)
|
56 |
+
product_info_struct:
|
57 |
+
- 科室名是[{name}]
|
58 |
+
- 科室的亮点是[{highlights}]
|
59 |
+
|
60 |
+
# prompt: 病人常问的问题类型(举例10个,只列举大类)
|
61 |
+
customer_question_type:
|
62 |
+
- 服务内容与范围
|
63 |
+
- 医生资质与经验
|
64 |
+
- 预约挂号流程
|
65 |
+
- 就诊时间与地点
|
66 |
+
- 检查项目与费用
|
67 |
+
- 病情咨询与解答
|
68 |
+
- 药品开具与购买
|
69 |
+
- 后续治疗与随访
|
70 |
+
- 隐私保护与数据安全
|
71 |
+
- 投诉与建议渠道
|
72 |
+
|
73 |
+
# 第一个 prompt: 帮我列举10种常用的消费品种类,并每种举例5个其子类
|
74 |
+
# 每个类 prompt: 现在你精通任何产品,你可以帮我举例每个产品的6个亮点或特点,, 然后用python dict形式输出:{类名:[特点1, 特点2] ...} ,去掉特点12的字样,除python字典外的其他都不要输出,不要有任何的警告信息。 [xxx]
|
75 |
+
product_list:
|
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 |
+
心理健康APP: [心理健康资讯, 互动社区, 自我测评工具, 在线咨询功能, 心理健康课程, 个性化健康计划]
|
104 |
+
|
105 |
+
高级医疗服务:
|
106 |
+
国际医疗咨询: ["全球医生资源", "多语言服务", "跨境医疗安排", "个性化健康规划", "医疗旅游协助", "高端私人服务"]
|
107 |
+
私人医疗顾问: ["专属医疗团队", "24小时在线服务", "紧急情况处理", "疾病预防指导", "健康生活方式建议", "医疗费用优化"]
|
108 |
+
高端体检中心: ["尖端医疗设备", "五星级体检环境", "深度体检项目", "权威专家解读", "私人定制体检方案", "后续健康管理"]
|
109 |
+
远程医疗服务: ["视频问诊", "远程监控", "在线处方", "药品配送", "持续健康监测", "家庭健康档案管理"]
|
110 |
+
医疗旅游服务: ["专业旅行规划", "医疗与休闲结合", "海外医疗合作机构", "语言翻译服务", "签证协助", "行程安全保障"]
|
111 |
+
|
112 |
+
|
configs/rag_config.yaml
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
feature_store:
|
2 |
+
reject_throttle: 0.3612170956128262
|
3 |
+
embedding_model_path: "maidalun/bce-embedding-base_v1"
|
4 |
+
reranker_model_path: "maidalun/bce-reranker-base_v1"
|
5 |
+
work_dir: "./work_dirs/instruction_db"
|
doc/digital_human/digital_human_video.mp4
DELETED
Binary file (235 kB)
|
|