当前位置:   article > 正文

flask部署千问qwen教程_tokenizer = autotokenizer.from_pretrained('/home/g

tokenizer = autotokenizer.from_pretrained('/home/gjn/chatqwen', trust_remote
  1. from fastapi import FastAPI
  2. from pydantic import BaseModel
  3. import time
  4. import dispather
  5. import uuid
  6. import numpy as np
  7. import random
  8. from apscheduler.schedulers.background import BackgroundScheduler
  9. scheduler = BackgroundScheduler(timezone='MST', job_defaults={'max_instances': 5})
  10. # import torch
  11. # from transformers import AutoTokenizer,AutoModelForCausalLM
  12. # import os
  13. # os.environ['CUDA_VISIBLE_DEVICES'] = '0' # 默认使用0号显卡,避免Windows用户忘记修改该处
  14. # device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
  15. # print(device)
  16. # # 指定模型名称或路径
  17. # qwen_model_name_or_path = "/home/weideshan/Qwen-Qwen-7B-Chat-Int4/"
  18. # tokenizer = AutoTokenizer.from_pretrained(qwen_model_name_or_path, trust_remote_code=True)
  19. # model = AutoModelForCausalLM.from_pretrained(qwen_model_name_or_path, device_map="auto",
  20. # trust_remote_code=True).eval()
  21. # model.to(device)
  22. app = FastAPI()
  23. class DFRequest(BaseModel):
  24. request_str: str = ""
  25. key: str = ""
  26. def get_prompt(request_code,ocr_res):
  27. # prompt_standard_1 ="从现在开始,你是医学领域的全学科专家,我会输入一段病历文本,如下###病历: {case_str}###请用中文帮我输出10条与病历中现患疾病相关的专业诊疗建议,并且用数字给每条建议添加序号,这些建议要具有针对性和专业性,不要过于笼统和宽泛,禁止出现药品名,禁止输出与医疗健康建议无关的任何内容。"
  28. # prompt_standard_2 = "我希望你充任医学领域的全学科专家,我需你用中文根据病历文本给出10条针对性的诊疗建议,病历如下###{case_str}###请用数字给每条建议前添加序号,禁止出现药品名,禁止输出与医疗健康建议无关的任何内容。"
  29. # prompt_standard_3 = "假设你是医学领域的专家,可以根据患者的病历给出相应的中文健康建议,现在有一个病历如下###{case_str}###,请针对该病历给出专业性的解读和分析并提供健康建议,禁止涉及药品名,不允许出现和病例无关的内容。"
  30. # prompt_standard_4 = "如果你是一位经验丰富临床经验的医学领域专家,这时有一个病历,如下###{case_str}###,我需要你用中文给出针对这个病历的健康建议和治疗方案,禁止涉及药品名,不要回答任何和病历描述不相关的语句。"
  31. # prompt_standard_5 = "现在你将扮演医学方面的权威人士,你可以根据患者的病历给出专业性的见解,假设现在有一个病历,如下###{case_str}###,请在禁止涉及药品名的情况下发挥你的主观能动性,用中文给出你认为专业的病历解读结果,解读不要出现任何和医生诊疗无关的内容。"
  32. # prompt_standard_6 = "如果你将有多年的临床诊疗经验,现在有一个病历,如下###{case_str}###,请根据以上病历文本内容先用中文一句话概括综合诊疗结论,并在下一段给出更多的诊疗建议。注意,不要过于笼统和宽泛,禁止出现药品名,更不要回答任何和病历无关的内容。"
  33. # prompt_standard_7 = "现在有一个病患的病历,如下###{case_str}###,请根据以上病历文本用中文总结出诊疗结果,并根据你总结出的诊疗方案,给出就有专业性和参考性的健康建议和治疗方案,禁止出现药品名,回答内容一定和医疗健康关系密切。"
  34. # prompt_standard_8 = "我希望你是一个经验丰富的医学专业人士,我希望你根据提供的病历用中文给出健康建议和治疗方案,现在病历如下###{case_str}###,在禁止出现药品名的情况下,给出医学领域专业人士可能的健康建议和方案,不允许出现和病历无关的内容。"
  35. # prompt_standard_9 = "如果现在有一个病历,如下###{case_str}###,在禁止出现药品名的情况下,用经丰富医生的口吻先用中文总结病历中的结论和一系列医学信息,然后根据总结出的信息,给出更多专业性的健康建议和诊疗方案,回答要和该病历内容强相关。"
  36. # prompt_standard_10 = "现在你是医学专家,假如有一个病例如下###{case_str}###请根据以上病历文本内容首先用一句中文概括综合诊疗问询结论,并在下一段给出更多的诊疗建议,不要过于笼统和宽泛,禁止出现药品名,不要返回任何和病情无关的描述。"
  37. # choiced_prompt = random.sample([prompt_standard_1,prompt_standard_2,prompt_standard_3,prompt_standard_4,prompt_standard_5,prompt_standard_6,prompt_standard_7,prompt_standard_8,prompt_standard_9,prompt_standard_10],1)[0].format(case_str=ocr_res)
  38. # prompt_standard_1 = "从现在开始,你是医学领域的全学科专家,请根据以下描述给出诊疗建议###病历:{case_str}###这些建议要具有针对性和专业性,不要过于笼统和宽泛,禁止出现药品名,禁止输出与医疗健康建议无关的任何内容。如果不是病情描述相关的内容,就不要给出建议。"
  39. prompt_standard_new = "<|im_start|>system\n你是医学领域的全学科专家,有一个病历编号!!!!!!{request_code}!!!!!!,请根据用户输入的病历信息,严格按固定格式输出以下5个信息:[可能的疾病名称(只允许输出疾病名称。如果输入文本中有诊断的疾病名称,则首先根据病情描述判断该诊断是否准确,如果输入文本中诊断的疾病有误或者未出现疾病名,则输出最可能的疾病)。\n诊断逻辑(在输入病历中出现的内容)。\n疾病科普(可以涉及生活方式和健康知识等)。\n注意事项。\n如需确诊该疾病需补充完善的辅助检查项。] 以上括号中的描述是输出结果的要求。以上输出结果禁止出现药品名,禁止输出与医疗健康建议无关的任何内容。<|im_end|>\n<|im_start|>user\n输入病历信息如下###{case_str}###<|im_end|>\n<|im_start|>assistant\n"
  40. choiced_prompt =prompt_standard_new.format(request_code=request_code,case_str=ocr_res)
  41. # logger.info('使用的prompt为:{choiced_prompt}'.format(choiced_prompt = choiced_prompt))
  42. # advice = llm_advice(choiced_prompt)
  43. return choiced_prompt
  44. @app.post("/DFApi")
  45. async def qwen(req: DFRequest):
  46. start_time = time.time()
  47. param = req.model_dump()
  48. prompt = param.get('request_str')
  49. key = param.get('key') if param.get('key') else str(uuid.uuid1())
  50. # response, history = model.chat(tokenizer, prompt, history=None)
  51. if not prompt and not key:
  52. return False
  53. prompt = get_prompt(key,prompt)
  54. # print("请求入参 : ",key,prompt)
  55. rest = dispather.add_data_to_queue(prompt)
  56. end_time = time.time()
  57. # print("执行的时间: ",(end_time - start_time))
  58. return rest
  59. @app.on_event("startup")
  60. async def start_scheduler():
  61. # 添加定时任务,每10s执行一次
  62. scheduler.add_job(dispather.infer_excute, 'interval', seconds=10)
  63. # 创建调度器
  64. try:
  65. # 启动调度器
  66. scheduler.start()
  67. except (KeyboardInterrupt, SystemExit):
  68. # 处理Ctrl+C等中断信号,关闭调度器
  69. scheduler.shutdown()
  70. if __name__ == "__main__":
  71. import uvicorn
  72. uvicorn.run("DF_api:app", host="0.0.0.0", port=6078)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/290741
推荐阅读
相关标签
  

闽ICP备14008679号