国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

GPT護理機器人 - 讓護士的工作變簡單

這篇具有很好參考價值的文章主要介紹了GPT護理機器人 - 讓護士的工作變簡單。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引子   

  書接上文《GPT接入企微應用 - 讓工作快樂起來》,我把GPT接入了企微應用,不少同事都開始嘗試起來了。有的淺嘗輒止,有的刨根問底,五花八門,無所不有。這里摘抄幾份:

  “幫我寫一份表白信,我們是大學同學,暗戀十年”

  ”順產(chǎn)后多久可以用收腹帶?生完寶寶用收腹帶好還是不用好“ (背景:公司主營月子中心,護理相關的領域知識是公司對于護士培訓的重點內(nèi)容

  ”我的工資是多少“ (這個有點強機器人所難了,不過如果機器人有了公司的人事語料數(shù)據(jù),應該是可以回答的)

   ......

   總的來說,除了一些嘗鮮,獵奇之外,有相當一部分還是咨詢公司的內(nèi)部的相關信息,比如HR方面的育兒假等,再就是母嬰護理方面的問題了(公司有近60%的是護理人員,日常工作就是與寶寶,寶媽一起,這就不奇怪了)。

  看到這些問題后,我就開始嘗試通過Fine-tune訓練公司內(nèi)部的護理機器人,希望他可以為護士們的工作帶來一些便利。諸多嘗試失敗后,索性就放了一些時間。

  恰逢五一假,回了媳婦娘家,掐指一算,已經(jīng)3年6個月沒有回來過了,二娃子都快3歲了,還沒見過外婆。想不到娃子親舅舅,我到清閑了,又撿起護理機器人搗鼓起來了。于是有了這篇文章。

Fine-tune可能真的不合適

  剛看到Fine-tune的介紹時就想,如果通過fine-tune構建個性化的模型,導入公司的母嬰護理知識,并且在未來了問答中進化,變成企業(yè)內(nèi)部專家。所以一開始就是向這樣的路子摸索著。畢竟介紹里也說了通過少量樣本即可完成訓練,分類這樣的任務可能只需要200個左右的樣本即可。(其實問答模型的樣本要求至少要有幾千個可能會有點效果)

GPT護理機器人 - 讓護士的工作變簡單

?  

  當然,文檔中也有一些關于Fine-tune的一些指南和準則。一來是全是英文文檔,理解不太深入;二來就是無知無畏,不嘗試下就是不死心。這是文檔原文,大概的意思Fine-tune可以用來解決一些類似分類(判斷對錯,情緒判斷(樂觀,悲觀),郵件分類),以及擴寫總結之類的場景。 文檔也有提到案例”Customer support chatbot“,這可能也是大家這樣嘗試的原因之一吧。 在其demo推薦使用?emebedding 來實現(xiàn),也是本文的重點內(nèi)容。這是后

GPT護理機器人 - 讓護士的工作變簡單  雖然通過Fine-tune的方式最終也沒有好的效果,一來可能是樣本太少,或者樣本質量不好;也或者過程中有疏漏的地方。在這里也和大家一起探討下。畢竟fine-tune的方式還是讓人非常神往的。實現(xiàn)代碼基本是參考了 openai-cookbook 中的 fine-tuned_qa Demo。大致流程如入:

  • 環(huán)境配置就不多說了(版本 python 3.10.4 整個過程基本還是流暢的。除了v-p-n自身原因折騰好久(原來用的是mono),換個客戶端居然好了)
  • 收集文本數(shù)據(jù)并根據(jù)token的限制,合理分段落。(我自己則是找到內(nèi)部了母嬰護理培訓的電子版本。)
  • 用模型text-davinci-003 為每個段落自動生成若干問題,并根據(jù)段落及問題自動生成答案。
  • 使用所有生成問題及答案組織成fine-tuen所需要的數(shù)據(jù)集。
  • 創(chuàng)建新模型并使用。

  1,文本分段 - 因為拿到的資料是word,并且有標題,就直接根據(jù)標題他分段了,超過2048的再分一次,代碼如下(現(xiàn)學現(xiàn)用,比較粗漏)

  


import docx
import pandas as pd


def getText(fileName):
doc = docx.Document(fileName)
TextList = []


data = {"title":"","content":""}
for paragraph in doc.paragraphs:
if paragraph.style.name == 'Heading 1':
print("title %s " % paragraph.text)
if (len(data['content']) > 0):
datax = {}
datax['title'] = data['title']
datax['content'] = data['content']


TextList.append(datax)
data['title'] = paragraph.text
data['content'] = ''
else:
data['content'] += paragraph.text+"\n"
TextList.append(data)
return TextList


## 根據(jù)doc 轉 csv
if __name__ == '__main__':
fileName = '/Users/jijunjian/openai/test2.docx'


articList = getText(fileName)
count = 0
for article in articList:
if len(article['content']) > 800:
print("%s,%s,\n%s" % (article['title'], len(article['content']),article['content']))
count += 1


header = ['title', 'content']
print("總共 %s 篇文章" % count)
pd.DataFrame(articList, columns=header).to_csv('data_oring.csv', index=False, encoding='utf-8')


?

?

  

  2,生成問題與答案 - 這樣生成的質量可能不是太高,可能實際使用時還是要對生成的問題和答案,讓領域專家進行修正比較好。

  據(jù)官方文檔介紹,建議生成的數(shù)據(jù)集中,prompt與completion都要有固定的結尾,且盡量保證其他地方不會出現(xiàn)這個,所以我們這里使用了”\n\n###\n\n“作為結束標志。

 1 import pandas as pd
 2 import openai
 3 import sys
 4 sys.path.append("..")
 5 from tools.OpenaiInit import openai_config
 6 from transformers import GPT2TokenizerFast
 7 
 8 
 9 tokenizer = GPT2TokenizerFast.from_pretrained("gpt2")
10 
11 def count_tokens(text: str) -> int:
12     """count the number of tokens in a string"""
13     return len(tokenizer.encode(text))
14 
15 
16 COMPLETION_MODEL = "text-davinci-003"
17 FILE_TUNE_FILE = "search_data.jsonl"
18 
19 
20 # 獲取訓練數(shù)據(jù)
21 def     get_training_data():
22     file_name = "data_oring.csv"
23     df = pd.read_csv(file_name)
24     df['context'] = df.title + "\n\n" + df.content
25     print(f"{len(df)} rows in the data.")
26     return df
27 
28 
29 # 根據(jù)內(nèi)容,生成問題
30 def get_questions(context):
31     print("正在生成問題")
32     try:
33         response = openai.Completion.create(
34             engine=COMPLETION_MODEL,
35             prompt=f"基于下面的文本生成問題\n\n文本: {context}\n\n問題集:\n1.",
36             temperature=0,
37             max_tokens=500,
38             top_p=1,
39             frequency_penalty=0,
40             presence_penalty=0,
41             stop=["\n\n"]
42         )
43         return response['choices'][0]['text']
44     except Exception as e:
45         print("創(chuàng)建問題錯誤 %s"  % e)
46         return ""
47 
48 
49 # 根據(jù)問題,生成答案
50 def get_answers(row):
51     print("正在生成答案")
52     try:
53         response = openai.Completion.create(
54             engine=COMPLETION_MODEL,
55             prompt=f"基于下面的文本生成答案\n\n文本: {row.context}\n\n問題集:\n{row.questions}\n\n答案集:\n1.",
56             temperature=0,
57             max_tokens=500,
58             top_p=1,
59             frequency_penalty=0,
60             presence_penalty=0
61         )
62         return response['choices'][0]['text']
63     except Exception as e:
64         print (e)
65         return ""
66 
67 
68 # 獲取訓練數(shù)據(jù) /Users/jijunjian/tuningdata.xlsx
69 if __name__ == '__main__':
70      openai_config()
71      df = get_training_data()
72      df['tokens'] = df.context.apply(count_tokens)
73      # questions 根據(jù)返回生成
74      df['questions']= df.context.apply(get_questions)
75      df['questions'] = "1." + df.questions
76 
77      df['answers']= df.apply(get_answers, axis=1)
78      df['answers'] = "1." + df.answers
79      df = df.dropna().reset_index().drop('index',axis=1)
80 
81      print("正在保存數(shù)據(jù)")
82      df.to_csv('nursing_qa.csv', index=False)
83 
84 
85 
86      df['prompt'] = df.context + "\n\n###\n\n"
87      df['completion'] = " yes\n\n###\n\n"
88 
89      df[['prompt', 'completion']].to_json(FILE_TUNE_FILE, orient='records', lines=True)
90 
91      search_file = openai.File.create(
92         file=open(FILE_TUNE_FILE),
93         purpose='fine-tune'
94      )
95      qa_search_fileid = search_file['id']
96      print("上傳文件成功,文件ID為:%s" % qa_search_fileid)
97 
98      # file_id = file-Bv5gP2lAmxLL9rRtdaQXixHF

?

  3,根據(jù)生成數(shù)據(jù)集,創(chuàng)建新的模型。

  官方的demo,還有生成驗證集,測試集,生成相識的文本,同樣的問題與答案來增加一些對抗性,因為最終效果不太好,再是文檔中有使用search 模塊,但是這已經(jīng)下線了,我用prompt-completion的數(shù)據(jù)結構模擬了下,也不知道有沒有效果, 因為使用openai tools 創(chuàng)建模型可以有一些交互動作,也方便看一些執(zhí)行結果,花費數(shù)據(jù),這里就使用這這工具作了演示,執(zhí)行一段時間后,可以通過”openai.Model.list()“查看我們創(chuàng)建的模型。當時大概有1000來個問題與答案,花費了0.78刀。(這是4月13嘗試的,因為效果不好,結果一放就是半月有余了。時間真是如白駒過隙一般)  

 1 openai api fine_tunes.create -t "discriminator_train.jsonl" -v "discriminator_test.jsonl" --batch_size 16  --compute_classification_metrics --classification_positive_class yes --model ada --suffix 'discriminator'
 2 
 3 Uploaded file from discriminator_train.jsonl: file-5OeHx3bMDqk******
 4 Uploaded file from discriminator_test.jsonl: file-AnOiDwG1Oqv3Jh******
 5 Created fine-tune: ft-cQBMLPzqVNml1ZWqkGYQKUdO
 6 Streaming events until fine-tuning is complete...
 7 
 8 (Ctrl-C will interrupt the stream, but not cancel the fine-tune)
 9 [2023-04-13 23:17:05] Created fine-tune: ft-cQBMLPz********
10 [2023-04-13 23:17:22] Fine-tune costs $0.78
11 [2023-04-13 23:17:23] Fine-tune enqueued. Queue number: 3

?  最后,效果不太理想,一番嘗試后,看到文檔中的提示信息:

  ”Note: To answer questions based on text documents, we recommend the procedure in?Question Answering using Embeddings. Some of the code below may rely on?deprecated API endpoints.“? 于是借著五一的空閑,開始嘗試emebedding 方式 了

?

emebedding可能是當下最好的選擇

  GPT擅長回答訓練數(shù)據(jù)中存在的問題,對于一些不常見的話題,或者企業(yè)內(nèi)部的語料信息,則可以通過把相關信息放在上下文中,傳給GPT,根據(jù)上下問進行回答。因為不同模型對于token的限制,以及Token本身的成本因素。

  具體實現(xiàn)時,我們需要把文本信息Chunk(分塊)并Embed(不知道如何翻譯)得到一個值,收到問題時,同樣進行Embed,找到最相近的Chunk,做為上下文傳給GPT。官方文檔如下: 

  Specifically, this notebook demonstrates the following procedure:

  1. Prepare search data (once)
    1. Collect: We'll download a few hundred Wikipedia articles about the 2022 Olympics
    2. Chunk: Documents are split into short, mostly self-contained sections to be embedded
    3. Embed: Each section is embedded with the OpenAI API
    4. Store: Embeddings are saved (for large datasets, use a vector database)
  2. Search (once per query)
    1. Given a user question, generate an embedding for the query from the OpenAI API
    2. Using the embeddings, rank the text sections by relevance to the query
  3. Ask (once per query)
    1. Insert the question and the most relevant sections into a message to GPT
    2. Return GPT's answer

  一開始本想?yún)⒖歼@個demo?Question_answering_using_embeddings.ipynb 編寫代碼,后來有意無意看到使用llama_index的實現(xiàn),并且對于語料信息格式無要求,就摘抄過來了,感謝代碼的貢獻者,節(jié)省了大家好些時間。


#!/usr/bin/env python
# coding=utf-8

from langchain import OpenAI
from llama_index import SimpleDirectoryReader, LangchainEmbedding, GPTListIndex,GPTSimpleVectorIndex, PromptHelper
from llama_index import LLMPredictor, ServiceContext
import gradio as gr
import sys
import os
os.environ["OPENAI_API_KEY"] = 'sk-fHstI********************'

#MODEL_NAME = "text-davinci-003"
MODEL_NAME = "ada:ft-primecare:*************"

def construct_index(directory_path):
max_input_size = 2048
num_outputs = 512
max_chunk_overlap = 20
chunk_size_limit = 600
prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit)
llm_predictor = LLMPredictor(llm=OpenAI(temperature=0.7, model_name=MODEL_NAME, max_tokens=num_outputs))
documents = SimpleDirectoryReader(directory_path).load_data()
#index = GPTSimpleVectorIndex(documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper)

service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, prompt_helper=prompt_helper)
index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)

index.save_to_disk('index.json')
return index
def chatbot(input_text):
index = GPTSimpleVectorIndex.load_from_disk('data/index.json')
response = index.query(input_text, response_mode="compact")
return response.response

if __name__ == '__main__':

iface = gr.Interface(fn=chatbot,inputs=gr.inputs.Textbox(lines=7, label="輸入你的問題"),outputs="text",title="護理智能機器人")
## 用于生成數(shù)據(jù), 放在docs文件夾下
##index = construct_index("docs")
iface.launch(share=True, server_name='0.0.0.0', server_port=8012)

  使用了gradio 作為演示,效果如下,基本可以根據(jù)我們的內(nèi)部培訓資料中回復,美中不足的就是通過要10幾秒才可以完成回復,至少比之前fine-tune有了很大的進步了。至此,總算可以安撫下這半月的苦惱了。(下圖中的output 如果變成自定義的文本,嘗試多次一起沒有成功,也是有點遺憾)

GPT護理機器人 - 讓護士的工作變簡單

?

?

曲折的部署之路

  孟子有云:獨樂樂不如眾樂樂。如何讓同事們一起體驗,又是一個艱巨任務開始了。再則也需要讓護理專家們看看回復的質量,以及如何優(yōu)化文本內(nèi)容。原本以為部署是一件簡答的事兒,但是對于python菜-雞的我,每一步都是坎坷。

  一開始以為直接用pyinstaller 打包就可以直接放在服務器上執(zhí)行,結果?pyinstaller -F, -D 嘗試很久都無法打包依賴,? --hidden-import 也用了, .spec也用了,都不好使。索性放棄了。

  到了晚上12點半時,毫無進展,索性直接放原在碼放上去。結果又提示無法安裝指定版本的langchain。然后開始搗騰pip版本升級到最新,python版本升級到3.10.4(和本地一樣)。

  python升級后,又是提示ModuleNotFoundError: No module named '_bz2',總算是錯誤信息變了。這個錯誤大概就是原來自帶中的版本中有_bz2模塊,重安裝的3.10中沒有,解決版本都是復制這個文件到新的版本中。

mv _bz2.cpython-36m-x86_64-linux-gnu.so /usr/local/python/lib/python3.10/lib-dynload/_bz2.cpython-310-x86_64-linux-gnu.so

?

  再次運行終于啟動了,太不容易了。配置好防火墻,騰訊云的安全組, 輸入外網(wǎng)ip:8012,瀟灑的一回車 - 還是無法訪問。 借用毛爺爺?shù)囊痪湓捗枋鱿庐斚碌男那椋核钦驹诤0哆b望海中已經(jīng)看得見桅桿尖頭了的一只航船,它是立于高山之巔遠看東方已見光芒四射噴薄欲出的一輪朝日,它是躁動于母腹中的快要成熟了的一個嬰兒。加之夜確實太深了,才踏實的睡下了。

1 /usr/local/python/lib/python3.10/site-packages/gradio/inputs.py:27: UserWarning: Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your component from gradio.components
2   warnings.warn(
3 /usr/local/python/lib/python3.10/site-packages/gradio/deprecation.py:40: UserWarning: `optional` parameter is deprecated, and it has no effect
4   warnings.warn(value)
5 /usr/local/python/lib/python3.10/site-packages/gradio/deprecation.py:40: UserWarning: `numeric` parameter is deprecated, and it has no effect
6   warnings.warn(value)
7 Running on local URL:  http://127.0.0.1:8012
8 Running on public URL: https://11d5*****.gradio.live

  第二天,找到gradio 中Interface.launch 的參數(shù)有個?server_name 設置成?通過設置server_name=‘0.0.0.0’ 即可通過IP訪問。 通過ss -tnlp | grep ":8012"?也可以看到端口的監(jiān)聽從? ?”127.0.0.1:8012“ 就成了 ”0.0.0.0:8012?“。

LISTEN 0      128          0.0.0.0:8012      0.0.0.0:*    users:(("python",pid=2801254,fd=7))

?

 ?

 展望一下

  從目前測試的情況來,每問一個問題成本在10美分左右(成本還是比較高),優(yōu)化的方向可能Chunk的大小,太小無法包含住夠的上下問,太大成本又比較高。再回頭看Fine-tune的方式,應該是前期訓練話費的成本會比較高,后期回答的成本會比較少,只是目前訓練效果不太好,看其他文章也是同樣的問題。從目前的情況來可能?emebedding的是一個較為合適的落地方式。

? ? ? 接下看看使用的情況,如果效果不錯,考慮增加語音轉文字,用GPT回復答案,甚至可以再文字轉語音播報出來,這樣護士們的工作可能會更加便利與快樂了。

  ?成為一名優(yōu)秀的程序員!文章來源地址http://www.zghlxwxcb.cn/news/detail-429063.html

到了這里,關于GPT護理機器人 - 讓護士的工作變簡單的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 智能機器人時代:你的工作會被機器人搶走嗎?

    智能機器人時代:你的工作會被機器人搶走嗎?

    共同探討有深度的生成式AI技術前沿洞見、技術迭代、案例解析、方法和實踐,請關注“神州問學”公眾號,加入社群! ? 作者| TW 來源| 神州問學 今年伊始,微軟的炒蝦機器人ALOHA橫掃網(wǎng)絡,成為全網(wǎng)熱議話題。去年我們見證了大模型技術的崛起, 或許今年,我們可能將迎

    2024年01月24日
    瀏覽(21)
  • 機器時代:機器人統(tǒng)治地球后的工作、愛情和生活

    《機器時代:機器人統(tǒng)治地球后的工作、愛情和生活》 絕對是我近年來讀過的書中最為瘋狂的一本!在這部厚達數(shù)百頁的磚頭書中,作者羅賓·漢森(Robin Hanson)向人們?nèi)笆降卣故玖艘粋€由仿真人(emulations)占統(tǒng)治地位的世界。從這個世界的物質基礎,到仿真人的衣食住行

    2024年02月08日
    瀏覽(24)
  • GPT2訓練自己的對話問答機器人

    GPT2訓練自己的對話問答機器人

    這里我搭建了虛擬的3.6環(huán)境 基于GPT2的中文閑聊機器人,模型實現(xiàn)基于HuggingFace的transformers ,精讀GPT2-Chinese的論文和代碼,獲益匪淺。 data/train.txt:默認的原始訓練集文件,存放閑聊語料;data/train.pkl:對原始訓練語料進行tokenize之后的文件,存儲一個list對象,list的每條數(shù)據(jù)表示一個

    2024年02月12日
    瀏覽(23)
  • 自然機器人最新發(fā)布:智能流程助手,與GPT深度融合

    自然機器人最新發(fā)布:智能流程助手,與GPT深度融合

    ????????ChatGPT自2022年11月上線后就受到現(xiàn)象級地廣泛關注,5天時間用戶就已經(jīng)突破百萬,僅2個月時間月活用戶就突破1億,成為史上增速最快的消費級應用,遠超TikTok、Facebook、Google等全球應用。它 展現(xiàn)了類似人類的語言理解和對話交互能力,充分彰顯了其引領當前AI發(fā)展

    2023年04月13日
    瀏覽(28)
  • 未來的機器人:全面接管人類的工作和生活

    未來的機器人:全面接管人類的工作和生活

    ??????? ?1972 年,波士頓一個實驗室里發(fā)生了一場可怕的機器人“叛亂”。 當時,馬文·明斯基是 MIT 人工智能實驗室的創(chuàng)始人,他想讓醫(yī)生能遠程操控機器人手臂做手術。于是,他給斯坦福大學的朋友約翰·麥卡錫打電話,借了一個研究助理維克托·沙因曼。沙因曼是個機

    2024年01月23日
    瀏覽(37)
  • robotstudio機器人應用實踐(碼垛搬運工作站)

    robotstudio機器人應用實踐(碼垛搬運工作站)

    實驗過程 1. 創(chuàng)建機器人系統(tǒng) 使用robotstudio中的型號IRB260機器人模型。IRB 260機器人主要針對包裝應用設計和優(yōu)化,雖機身小巧,能集成于緊湊型包裝機械中,卻又能滿足您在到達距離和有效載荷方面的所有要求。配以ABB運動控制和跟蹤性能,該機器人非常適合應用于柔性包裝

    2024年02月08日
    瀏覽(48)
  • 群輝用戶接入vocechat的方法(附開通GPT機器人)

    昨天的找群輝文章的時候看到了vocechat,同時在礦神的第三方擴展找到不了它,synology chat很好,但是很多時候安裝不上。所以介紹一下vocechat,這款工具 通過加入礦神第三方資源,搜索chat,進行安裝。結束安裝點打開是空白頁面,手工的端口后加入 /install。開始初始化配置。

    2024年02月16日
    瀏覽(19)
  • ai智能電話機器人的工作流程是什么

    人工智能高速發(fā)展,很多人工智能的產(chǎn)品出現(xiàn)在我們的生活和工作中,除了正式使用的人工智能配送機器人,最受關心的是人工智能產(chǎn)品莫過于是智能電話機器人了。目前已經(jīng)有不少如保險、金融、房地產(chǎn)、汽車等傳統(tǒng)電銷行業(yè)都在使用智能電話機器人。 我們知道,目前的電

    2024年02月13日
    瀏覽(22)
  • 手搓GPT系列之 - chatgpt + langchain 實現(xiàn)一個書本解讀機器人

    ChatGPT已經(jīng)威名遠播,關于如何使用大模型來構建應用還處于十分前期的探索階段。各種基于大模型的應用技術也層出不窮。本文將給大家介紹一款基于大模型的應用框架:langchain。langchain集成了做一個基于大模型應用所需的一切。熟悉java web應用的同學們應該十分熟悉spring

    2024年02月05日
    瀏覽(18)
  • 當GPT-4V充當機器人大腦,可能你都沒AI會規(guī)劃

    當GPT-4V充當機器人大腦,可能你都沒AI會規(guī)劃

    來自清華大學交叉信息研究院的研究者提出了「ViLa」(全稱 Robotic Vision-Language Planning)算法,其能在非常復雜的環(huán)境中控制機器人,為機器人提供任務規(guī)劃。 GPT-4V 已經(jīng)能幫我們設計網(wǎng)站代碼,控制瀏覽器,這些應用集中在虛擬數(shù)字世界中。假如我們把 GPT-4V 帶入現(xiàn)實世界,

    2024年02月01日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包