FaYo commited on
Commit
64a76db
·
1 Parent(s): fff5e9c
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)