DatawhaleAI夏令營2024 Task2

#AI夏令營 #Datawhale #夏令營

  • 賽題解析
  • 一、Baseline詳解
    • 1.1 環境配置
    • 1.2 數據處理任務理解
    • 2.3 prompt設計
    • 2.4 數據抽取
  • 二、完整代碼
  • 總結


賽題解析

  1. 賽事背景
    在數字化時代,企業積累了大量對話數據,這些數據不僅是交流記錄,還隱藏著寶貴的信息。群聊對話分角色要素提取是企業營銷和服務的重要策略,通過分析這些數據,企業可以更好地理解客戶需求,提供個性化服務,提升客戶滿意度和商業價值。
  2. 賽事任務
    從給定的<客服>與<客戶>的群聊對話中,提取出指定的字段信息,具體待提取的字段信息見下文。
  3. 數據說明
序號字段名稱是否單值是否可空難度分數答案是否唯一
1基本信息-姓名1
2基本信息-手機號碼1
3基本信息-郵箱1
4基本信息-地區1
5基本信息-詳細地址1
6基本信息-性別1
7基本信息-年齡1
8基本信息-生日1
9咨詢類型2
10意向產品3
11購買異議點3
12客戶預算-預算是否充足2
13客戶預算-總體預算金額2
14客戶預算-預算明細3
15競品信息2
16客戶是否有意向1
17客戶是否有卡點1
18客戶購買階段2
19下一步跟進計劃-參與人2
20下一步跟進計劃-時間點2
21下一步跟進計劃-具體事項3
備注
1. 可為空的字段,當判定無相應信息、無法做出判斷等情況,統一取值為空字符串。
2. 對于非單值字段,請使用列表(list)來表示。
  1. 平臺說明
    參賽選手需基于訊飛星火大模型V3.5完成任務。允許使用大模型微調的方式進行信息抽取, 但微調的基座模型僅限星火大模型。
    關于星火V3.5資源,組委會將為報名參賽選手統一發放API資源福利,選手用個人參賽賬號登錄訊飛開放平臺 ,前往控制臺中查看使用。關于微調訓練資源,選手用參賽賬戶登陸大模型訓練平臺,可領取本次比賽的訓練資源福利。

  2. 評審規則
    測試集的每條數據同樣包含共21個字段, 按照各字段難易程度劃分總計滿分36分。每個提取正確性的判定標準如下:

    1)對于答案唯一字段,將使用完全匹配的方式計算提取是否正確,提取正確得到相應分數,否則為0分

    2)對于答案不唯一字段,將綜合考慮提取完整性、語義相似度等維度判定提取的匹配分數,最終該字段得分為 “匹配分數 * 該字段難度分數”

    每條測試數據的最終得分為各字段累計得分。最終測試集上的分數為所有測試數據的平均得分。

  3. 作品提交要求

    1、文件格式:按照 json格式提交

    2、文件大小:無要求

    3、提交次數限制:每支隊伍每天最多3次

    4、文件詳細說明:編碼為UTF-8,具體格式參考提交示例

    5、關于大模型的使用說明&限制。

    ? 如果使用大模型進行信息抽取, 本次僅限使用星火大模型。

    ? 為了排除人工校驗、修正等作弊方式,本次比賽除了提交答案之外,排行榜前3名選手需要提供完整的源代碼進行審核,要求抽取的結果必須可以準確復現。

    ? 注:排行榜前3名有審核不通過現象時,依次按得分順延。滿分36分,原則上最終入圍決賽三甲得分不得低于20分。

    ? 允許使用大模型微調的方式進行信息抽取, 微調的基座模型僅限星火大模型。


一、Baseline詳解

基于星火大模型的群聊對話分角色要素提取挑戰-baseline - 飛槳AI Studio星河社區 (baidu.com)

1.1 環境配置

  1. 環境配置
!pip install --upgrade -q spark_ai_python tqdm
  1. 大模型api配置
#星火認知大模型Spark3.5 Max的URL值,其他版本大模型URL值請前往文檔(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_URL = 'wss://spark-api.xf-yun.com/v3.5/chat'
#星火認知大模型調用秘鑰信息,請前往訊飛開放平臺控制臺(https://console.xfyun.cn/services/bm35)查看
SPARKAI_APP_ID = ''
SPARKAI_API_SECRET = ''
SPARKAI_API_KEY = ''
#星火認知大模型Spark3.5 Max的domain值,其他版本大模型domain值請前往文檔(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_DOMAIN = 'generalv3.5'

1.2 數據處理任務理解

簡單讀取訓練集和測試集,了解任務的具體要求
在這里插入圖片描述
簡單理解為從日常雜亂的聊天數據中自動抽取出結構化的數據

import jsondef read_json(json_file_path):"""讀取json文件"""with open(json_file_path, 'r') as f:data = json.load(f)return datadef write_json(json_file_path, data):"""寫入json文件"""with open(json_file_path, 'w') as f:json.dump(data, f, ensure_ascii=False, indent=4)# 讀取數據
train_data = read_json("dataset/train.json")
test_data = read_json("dataset/test_data.json")# 查看對話數據
print(train_data[100]['chat_text'])

2.3 prompt設計

  1. 設計思路: 任務目標——抽取數據定義——抽取內容引入——抽取規則強調
  2. 設計內容:
# prompt 設計
PROMPT_EXTRACT = """
你將獲得一段群聊對話記錄。你的任務是根據給定的表單格式從對話記錄中提取結構化信息。在提取信息時,請確保它與類型信息完全匹配,不要添加任何沒有出現在下面模式中的屬性。表單格式如下:
info: Array<Dict("基本信息-姓名": string | "",  // 客戶的姓名。"基本信息-手機號碼": string | "",  // 客戶的手機號碼。"基本信息-郵箱": string | "",  // 客戶的電子郵箱地址。"基本信息-地區": string | "",  // 客戶所在的地區或城市。"基本信息-詳細地址": string | "",  // 客戶的詳細地址。"基本信息-性別": string | "",  // 客戶的性別。"基本信息-年齡": string | "",  // 客戶的年齡。"基本信息-生日": string | "",  // 客戶的生日。"咨詢類型": string[] | [],  // 客戶的咨詢類型,如詢價、答疑等。"意向產品": string[] | [],  // 客戶感興趣的產品。"購買異議點": string[] | [],  // 客戶在購買過程中提出的異議或問題。"客戶預算-預算是否充足": string | "",  // 客戶的預算是否充足。示例:充足, 不充足"客戶預算-總體預算金額": string | "",  // 客戶的總體預算金額。"客戶預算-預算明細": string | "",  // 客戶預算的具體明細。"競品信息": string | "",  // 競爭對手的信息。"客戶是否有意向": string | "",  // 客戶是否有購買意向。示例:有意向, 無意向"客戶是否有卡點": string | "",  // 客戶在購買過程中是否遇到阻礙或卡點。示例:有卡點, 無卡點"客戶購買階段": string | "",  // 客戶當前的購買階段,如合同中、方案交流等。"下一步跟進計劃-參與人": string[] | [],  // 下一步跟進計劃中涉及的人員(客服人員)。"下一步跟進計劃-時間點": string | "",  // 下一步跟進的時間點。"下一步跟進計劃-具體事項": string | ""  // 下一步需要進行的具體事項。
)>請分析以下群聊對話記錄,并根據上述格式提取信息:**對話記錄:**{content}請將提取的信息以JSON格式輸出。
不要添加任何澄清信息。
輸出必須遵循上面的模式。
不要添加任何沒有出現在模式中的附加字段。
不要隨意刪除字段。**輸出:**[{{"基本信息-姓名": "姓名","基本信息-手機號碼": "手機號碼","基本信息-郵箱": "郵箱","基本信息-地區": "地區","基本信息-詳細地址": "詳細地址","基本信息-性別": "性別","基本信息-年齡": "年齡","基本信息-生日": "生日","咨詢類型": ["咨詢類型"],"意向產品": ["意向產品"],"購買異議點": ["購買異議點"],"客戶預算-預算是否充足": "充足或不充足","客戶預算-總體預算金額": "總體預算金額","客戶預算-預算明細": "預算明細","競品信息": "競品信息","客戶是否有意向": "有意向或無意向","客戶是否有卡點": "有卡點或無卡點","客戶購買階段": "購買階段","下一步跟進計劃-參與人": ["跟進計劃參與人"],"下一步跟進計劃-時間點": "跟進計劃時間點","下一步跟進計劃-具體事項": "跟進計劃具體事項"
}}, ...]"""

2.4 數據抽取

使用prompt進行調試發現以下幾個問題:
1. 大模型總是不能直接輸出python直接可讀取的json格式,如:

[{"基本信息-姓名": "張三","基本信息-手機號碼": "12345678901","基本信息-郵箱": "zhangsan@example.com","基本信息-地區": "北京市","基本信息-詳細地址": "朝陽區某街道","基本信息-性別": "男","基本信息-年齡": "30","基本信息-生日": "1990-01-01","咨詢類型": ["詢價"],"意向產品": ["產品A"],"購買異議點": ["價格高"],"客戶預算-預算是否充足": "充足","客戶預算-總體預算金額": "10000","客戶預算-預算明細": "詳細預算內容","競品信息": "競爭對手B","客戶是否有意向": "有意向","客戶是否有卡點": "無卡點","客戶購買階段": "合同中","下一步跟進計劃-參與人": ["客服A"],"下一步跟進計劃-時間點": "2024-07-01","下一步跟進計劃-具體事項": "溝通具體事項"}
]
  故使用函數convert_all_json_in_text_to_dict對json數據進行提取
def convert_all_json_in_text_to_dict(text):"""提取LLM輸出文本中的json字符串"""dicts, stack = [], []for i in range(len(text)):if text[i] == '{':stack.append(i)elif text[i] == '}':begin = stack.pop()if not stack:dicts.append(json.loads(text[begin:i+1]))return dicts
  1. 大模型偶爾會出現缺少字段的情況,故使用check_and_complete_json_format函數對大模型抽取的結果進行字段格式的檢查以及缺少的字段進行補全。

二、完整代碼

# 數據導入
from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessage
import json
from tqdm import tqdm
---
#星火認知大模型Spark3.5 Max的URL值,其他版本大模型URL值請前往文檔(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_URL = 'wss://spark-api.xf-yun.com/v3.5/chat'
#星火認知大模型調用秘鑰信息,請前往訊飛開放平臺控制臺(https://console.xfyun.cn/services/bm35)查看
SPARKAI_APP_ID = ''
SPARKAI_API_SECRET = ''
SPARKAI_API_KEY = ''
#星火認知大模型Spark3.5 Max的domain值,其他版本大模型domain值請前往文檔(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_DOMAIN = 'generalv3.5'
---
# 測試模型配置是否正確
def get_completions(text):messages = [ChatMessage(role="user",content=text)]spark = ChatSparkLLM(spark_api_url=SPARKAI_URL,spark_app_id=SPARKAI_APP_ID,spark_api_key=SPARKAI_API_KEY,spark_api_secret=SPARKAI_API_SECRET,spark_llm_domain=SPARKAI_DOMAIN,streaming=False,)handler = ChunkPrintHandler()a = spark.generate([messages], callbacks=[handler])return a.generations[0][0].texttext = "你好"
get_completions(text)
---
# prompt 設計
PROMPT_EXTRACT = """
你將獲得一段群聊對話記錄。你的任務是根據給定的表單格式從對話記錄中提取結構化信息。在提取信息時,請確保它與類型信息完全匹配,不要添加任何沒有出現在下面模式中的屬性。表單格式如下:
info: Array<Dict("基本信息-姓名": string | "",  // 客戶的姓名。"基本信息-手機號碼": string | "",  // 客戶的手機號碼。"基本信息-郵箱": string | "",  // 客戶的電子郵箱地址。"基本信息-地區": string | "",  // 客戶所在的地區或城市。"基本信息-詳細地址": string | "",  // 客戶的詳細地址。"基本信息-性別": string | "",  // 客戶的性別。"基本信息-年齡": string | "",  // 客戶的年齡。"基本信息-生日": string | "",  // 客戶的生日。"咨詢類型": string[] | [],  // 客戶的咨詢類型,如詢價、答疑等。"意向產品": string[] | [],  // 客戶感興趣的產品。"購買異議點": string[] | [],  // 客戶在購買過程中提出的異議或問題。"客戶預算-預算是否充足": string | "",  // 客戶的預算是否充足。示例:充足, 不充足"客戶預算-總體預算金額": string | "",  // 客戶的總體預算金額。"客戶預算-預算明細": string | "",  // 客戶預算的具體明細。"競品信息": string | "",  // 競爭對手的信息。"客戶是否有意向": string | "",  // 客戶是否有購買意向。示例:有意向, 無意向"客戶是否有卡點": string | "",  // 客戶在購買過程中是否遇到阻礙或卡點。示例:有卡點, 無卡點"客戶購買階段": string | "",  // 客戶當前的購買階段,如合同中、方案交流等。"下一步跟進計劃-參與人": string[] | [],  // 下一步跟進計劃中涉及的人員(客服人員)。"下一步跟進計劃-時間點": string | "",  // 下一步跟進的時間點。"下一步跟進計劃-具體事項": string | ""  // 下一步需要進行的具體事項。
)>請分析以下群聊對話記錄,并根據上述格式提取信息:**對話記錄:**{content}請將提取的信息以JSON格式輸出。
不要添加任何澄清信息。
輸出必須遵循上面的模式。
不要添加任何沒有出現在模式中的附加字段。
不要隨意刪除字段。**輸出:**[{{"基本信息-姓名": "姓名","基本信息-手機號碼": "手機號碼","基本信息-郵箱": "郵箱","基本信息-地區": "地區","基本信息-詳細地址": "詳細地址","基本信息-性別": "性別","基本信息-年齡": "年齡","基本信息-生日": "生日","咨詢類型": ["咨詢類型"],"意向產品": ["意向產品"],"購買異議點": ["購買異議點"],"客戶預算-預算是否充足": "充足或不充足","客戶預算-總體預算金額": "總體預算金額","客戶預算-預算明細": "預算明細","競品信息": "競品信息","客戶是否有意向": "有意向或無意向","客戶是否有卡點": "有卡點或無卡點","客戶購買階段": "購買階段","下一步跟進計劃-參與人": ["跟進計劃參與人"],"下一步跟進計劃-時間點": "跟進計劃時間點","下一步跟進計劃-具體事項": "跟進計劃具體事項"
}}, ...]"""
---
# 讀取數據
def read_json(json_file_path):"""讀取json文件"""with open(json_file_path, 'r') as f:data = json.load(f)return datadef write_json(json_file_path, data):"""寫入json文件"""with open(json_file_path, 'w') as f:json.dump(data, f, ensure_ascii=False, indent=4)def get_completions(text):messages = [ChatMessage(role="user",content=text)]spark = ChatSparkLLM(spark_api_url=SPARKAI_URL,spark_app_id=SPARKAI_APP_ID,spark_api_key=SPARKAI_API_KEY,spark_api_secret=SPARKAI_API_SECRET,spark_llm_domain=SPARKAI_DOMAIN,streaming=False,)handler = ChunkPrintHandler()a = spark.generate([messages], callbacks=[handler])return a.generations[0][0].textdef convert_all_json_in_text_to_dict(text):"""提取LLM輸出文本中的json字符串"""dicts, stack = [], []for i in range(len(text)):if text[i] == '{':stack.append(i)elif text[i] == '}':begin = stack.pop()if not stack:dicts.append(json.loads(text[begin:i+1]))return dictsclass JsonFormatError(Exception):def __init__(self, message):self.message = messagesuper().__init__(self.message)def check_and_complete_json_format(data):required_keys = {"基本信息-姓名": str,"基本信息-手機號碼": str,"基本信息-郵箱": str,"基本信息-地區": str,"基本信息-詳細地址": str,"基本信息-性別": str,"基本信息-年齡": str,"基本信息-生日": str,"咨詢類型": list,"意向產品": list,"購買異議點": list,"客戶預算-預算是否充足": str,"客戶預算-總體預算金額": str,"客戶預算-預算明細": str,"競品信息": str,"客戶是否有意向": str,"客戶是否有卡點": str,"客戶購買階段": str,"下一步跟進計劃-參與人": list,"下一步跟進計劃-時間點": str,"下一步跟進計劃-具體事項": str}if not isinstance(data, list):raise JsonFormatError("Data is not a list")for item in data:if not isinstance(item, dict):raise JsonFormatError("Item is not a dictionary")for key, value_type in required_keys.items():if key not in item:item[key] = [] if value_type == list else ""if not isinstance(item[key], value_type):raise JsonFormatError(f"Key '{key}' is not of type {value_type.__name__}")if value_type == list and not all(isinstance(i, str) for i in item[key]):raise JsonFormatError(f"Key '{key}' does not contain all strings in the list")if __name__ == "__main__":retry_count = 5 # 重試次數result = []error_data = []# 讀取數據train_data = read_json("dataset/train.json")test_data = read_json("dataset/test_data.json")for index, data in tqdm(enumerate(test_data)):index += 1is_success = Falsefor i in range(retry_count):try:res = get_completions(PROMPT_EXTRACT.format(content=data["chat_text"]))infos = convert_all_json_in_text_to_dict(res)infos = check_and_complete_json_format(infos)result.append({"infos": infos,"index": index})is_success = Truebreakexcept Exception as e:print("index:", index, ", error:", e)continueif not is_success:data["index"] = indexerror_data.append(data)write_json("output.json", result)

總結

進行了賽題分析,任務理解
使用prompt解決信息抽取任務
保證大模型處理數據與輸出格式的穩定性
后續進行prompt優化或者引入其他方法來確保信息抽取的準確度

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41000.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41000.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41000.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【鴻蒙學習筆記】@Link裝飾器:父子雙向同步

官方文檔&#xff1a;Link裝飾器&#xff1a;父子雙向同步 目錄標題 [Q&A] Link裝飾器作用 [Q&A] Link裝飾器特點樣例&#xff1a;簡單類型樣例&#xff1a;數組類型樣例&#xff1a;Map類型樣例&#xff1a;Set類型樣例&#xff1a;聯合類型 [Q&A] Link裝飾器作用…

信號與系統-實驗6-離散時間系統的 Z 域分析

一、實驗目的 1、掌握 z 變換及其性質&#xff1b;了解常用序列的 z 變換、逆 z 變換&#xff1b; 2、掌握利用 MATLAB 的符號運算實現 z 變換&#xff1b; 3、掌握利用 MATLAB 繪制離散系統零、極點圖的方法&#xff1b; 4、掌握利用 MATLAB 分析離散系統零、極點的方法&a…

字符串中的注意事項

在比較早的C/C版本中&#xff0c;經常可以看到推薦使用gets函數來進行整行字符串的輸入&#xff0c;就像下面這樣的簡單寫法即可輸入一整行&#xff1a; C gets(str);但是當輸入的字符串長度超過數組長度上限MAX_LEN時&#xff0c;gets函數會把超出的部分也一并讀進來&#x…

MySQL基礎篇(二)字符集以及校驗規則

在MySQL基礎篇&#xff08;一&#xff09;中&#xff0c;我們知道了如何創建數據庫&#xff0c;這篇文章帶大家了解創建的一些細節。 紅色框&#xff1a;可省略&#xff0c;作用如果存在相同的數據庫名稱&#xff0c;就不會再創建&#xff0c;反之&#xff0c;創建。 藍色框&…

uniapp 封裝請求

新建request文件夾 下新建index.js 和index.js 或者創建units文件放入index.js 和api文件夾放入index.js(api.js)//看公司規范 1. index.js // 全局請求封裝 // const base_url http://localhost:8080/devapi var base_url process.env.NODE_ENV development ? http://…

可用于多個微信管理的神器

以下僅是多微信聚合聊天管理界面&#xff1a; 可以在一個頁面上同時收發多個微信的消息&#xff0c;可以添加好友&#xff0c;通過好友請求。 可以修改昵稱&#xff0c;不受字數限制。 可以將常用圖片&#xff0c;文件等放入素材庫&#xff0c;方便聊天時查找和發送。 可以設置…

速盾:cdn 緩存圖片

現如今&#xff0c;互聯網已經成為我們日常生活中不可或缺的一部分。在我們使用互聯網時&#xff0c;經常會遇到圖片加載緩慢、文章打開慢等問題。為了解決這些問題&#xff0c;CDN&#xff08;內容分發網絡&#xff09;應運而生。CDN 是一種通過將數據緩存在世界各地的服務器上…

集群環境下,調用半數以上節點進行數據同步的實現

核心實現是使用CountDownLatch來實現的&#xff0c;先取集群節點總數一半以上數量的CountDownLatch 再發送請求調用其他節點&#xff0c;在這個過程中對于正常響應的節點進行latch.countDown(); 最后再統計數量是否為0再決定是否拋異常 // 請求參數final String content jso…

Java:封裝

文章目錄 一、概念二、實現三、測試四、總結 一、概念 在面向對象編程中&#xff0c; 封裝從字面上來理解就是包裝的意思&#xff0c;特點就是信息隱藏&#xff0c;防止該類的代碼和數據被外部類的代碼隨機訪問。 封裝的優點&#xff1a; 良好的封裝能夠減少耦合。 統一接口…

搜索旋轉數組

題目鏈接 搜索旋轉數組 題目描述 注意點 數組已被旋轉過很多次數組元素原先是按升序排列的若有多個相同元素&#xff0c;返回索引值最小的一個 解答思路 首先需要知道的是&#xff0c;本題數組中的旋轉多次只是將頭部的某些元素移動到尾部&#xff0c;所以不論怎么旋轉&am…

uni-app怎樣使用組件

在uni-app中使用組件&#xff0c;主要遵循以下幾個步驟&#xff1a; 創建組件文件&#xff1a;在UniApp項目中創建一個新的組件&#xff0c;通常將組件文件保存在components文件夾下。如果components文件夾不存在&#xff0c;需要先創建它。然后在components文件夾下創建一個新…

Pycharm python解釋器 unsupported python 3.1 解決

Pycharm 環境 unsupported python 3.1解決 1. 問題重現2. 原因分析3. 解決方法 1. 問題重現 之前使用Pycharm 2024.1.1的時候&#xff0c;環境配置的Python 3.11.9&#xff0c;現在改成使用Pycharm 2020.2.2&#xff0c;結果Python解釋器顯示“unsupported python 3.1”&#…

Java ORM框架FastMybatis踩坑

Java ORM框架FastmyBatis踩坑 問題&#xff1a;使用了FastmyBatis的saveOrUpdate方法&#xff0c;明明設置了主鍵的值且表中存在&#xff0c;但是依然執行insert操作。導致Duplicate PK。 原因&#xff1a;使用了其他第三方包的注解指定表的主鍵&#xff0c;沒有按照FastmyBat…

低音炮內存卡格式化后無法播放音樂文件

試了多次 不支持ntfs不支持exfat 僅支持fat32 FAT32與exFAT的區別主要體現在來源、單個文件限制、適用情況以及兼容性方面。12 來源&#xff1a; FAT32是Windows平臺的傳統文件格式&#xff0c;首次在Windows 95第二版中引入&#xff0c;旨在取代FAT16&#xff0c;具有良好的…

自動駕駛中的逆透視變換(Inverse Perspective Mapping,IPM)詳解

前言 IPM(Inverse Perspective Mapping,逆透視變換)圖的歷史可以追溯到計算機視覺和圖像處理領域的發展。逆透視變換是一種用于消除圖像中透視效應的技術,使得原本由于透視產生的形變得以糾正,進而更準確地描述和理解圖像中的場景。比如在行車中的車道線檢測,泊車中的常見…

陳志泊主編《數據庫原理及應用教程第4版微課版》的實驗題目參考答案實驗2

實驗目的 1&#xff0e;掌握在SQL Server中使用對象資源管理器和SQL命令創建數據庫與修改數據庫的方法。 2&#xff0e;掌握在SQL Server中使用對象資源管理器或者SQL命令創建數據表和修改數據表的方 法&#xff08;以SQL命令為重點&#xff09;。 實驗設備 操作系統:Win11…

使用Source Insight 4.0

一、使用書簽 二、添加文件 三、Search 3.1 替換所有變量 四、右鍵查詢 4.1 查看被調用的地方

Linux上腳本備份數據庫(升級版)

直接上代碼&#xff1a; #!/bin/bash# 配置部分 mysql_user"root" mysql_host"localhost" mysql_port"3306" mysql_charset"utf8mb4" mysql_defaults_file"/home/mysql/mysql_back/.my.cnf"backup_base_dir"/mnt/sdd/…

GRPC使用之HelloWorld

使用grpc的好處是提供高效的序列化能力&#xff0c;能夠跨語言進行調用。這一節我們來學習grpc的入門應用&#xff0c;整篇文章分成3部分: 接口定義&#xff0c;使用grpc的IDL&#xff0c;創建proto文件&#xff0c;編譯/生成grpc文件服務端開發&#xff0c;處理客戶端請求&am…

計算云服務1

前言 一直以來&#xff0c;計算資源都是整個企業業務系統發展所需的大動脈&#xff0c;沒有計算資源&#xff0c;企業業務就無法正常運行。在云計算的時代里&#xff0c;計算服務也是云服務中的第一大類服務&#xff0c;計算資源的重要性由此可見。本章&#xff0c;我們將帶領…