AI大模型探索之路-實戰篇13: 從對話到報告:打造能記錄和分析的Agent智能數據分析平臺

系列篇章💥

AI大模型探索之路-實戰篇4:深入DB-GPT數據應用開發框架調研
AI大模型探索之路-實戰篇5:探索Open Interpreter開放代碼解釋器調研
AI大模型探索之路-實戰篇6:掌握Function Calling的詳細流程
AI大模型探索之路-實戰篇7:Function Calling技術實戰自動生成函數
AI大模型探索之路-實戰篇8:多輪對話與Function Calling技術應用
AI大模型探索之路-實戰篇9:探究Agent智能數據分析平臺的架構與功能
AI大模型探索之路-實戰篇10:數據預處理的藝術:構建Agent智能數據分析平臺的基礎
AI大模型探索之路-實戰篇11: Function Calling技術整合:強化Agent智能數據分析平臺功能
AI大模型探索之路-實戰篇12: 構建互動式Agent智能數據分析平臺:實現多輪對話控制


目錄

  • 系列篇章💥
  • 一、前言
  • 二、本地云盤創建
    • 1、創建文件目錄
    • 2、doc文檔操作函數定義
    • 3、doc內容追加測試
  • 三、多輪對話本地云盤存儲功能實現
    • 1、定義模型客戶端
    • 2、定義工具函數生成器
    • 3、兩次大模型API調用封裝
    • 4、數據字典讀取
    • 5、定義數據庫表信息查詢服務
    • 6、定義SQL提取函數
    • 7、對話確認機制改造
    • 8、多輪對話封裝
    • 9、多輪對話測試
  • 四、數據分析報告撰寫初探
    • 1、學習本公司的數據分析業務知識
    • 2、文件內容獲取函數定義
    • 3、讀取數據字典信息
    • 4、讀取本公司數據分析師業務知識
    • 5、撰寫分析報告
  • 五、結語


一、前言

在前面篇章中我們實現了多輪對話控制,本文中我們將實現多輪對話內容的云盤記錄,將對話內容記錄存儲到本地云盤文件夾中;之后再基于對話內容,數據字典、數據庫表相關的基本信息實現一個簡單的數據分析報告撰寫功能

二、本地云盤創建

為了持久化存儲對話記錄,我們將創建一個本地文件夾,模擬云盤的功能。

1、創建文件目錄

定義創建文件目錄的函數,作為云盤存儲記錄

import osdef create_directory(directory):"""根據項目創建云盤目錄"""base_path = "/root/autodl-tmp/iquery項目/iquery云盤"full_path = os.path.join(base_path, directory)# 如果目錄不存在,則創建它if not os.path.exists(full_path):os.makedirs(full_path)print(f"目錄 {directory} 創建成功")else:print(f"目錄 {directory} 已存在")

創建文件夾目錄

directory = "my_directory"
create_directory(directory)

輸出:
在這里插入圖片描述

2、doc文檔操作函數定義

安裝依賴pip install python-docx
定義doc文檔操作函數,用于向文檔追加內容

import os
from docx import Documentdef append_in_doc(folder_name, doc_name, qa_string):""""往文件里追加內容@param folder_name=目錄名,doc_name=文件名,qa_string=追加的內容"""base_path = "/root/autodl-tmp/iquery項目/iquery云盤"## 目錄地址full_path_folder=base_path+"/"+folder_name## 文件地址full_path_doc = os.path.join(full_path_folder, doc_name)+".doc"# 檢查目錄是否存在,如果不存在則創建if not os.path.exists(full_path_folder):os.makedirs(full_path_folder)# 檢查文件是否存在if os.path.exists(full_path_doc):# 文件存在,打開并追加內容document = Document(full_path_doc)else:# 文件不存在,創建一個新的文檔對象document = Document()# 追加內容document.add_paragraph(qa_string)# 保存文檔document.save(full_path_doc)print(f"內容已追加到 {doc_name}")

3、doc內容追加測試

# 示例用法
append_in_doc('my_directory', 'example_doc', '天青色等煙雨,而我在等你')

在這里插入圖片描述

三、多輪對話本地云盤存儲功能實現

將之前的篇章實現的多輪對話等功能,融入文檔記錄的功能

1、定義模型客戶端

import openai
import os
import numpy as np
import pandas as pd
import json
import io
from openai import OpenAI
import inspect
import pymysqlopenai.api_key = os.getenv("OPENAI_API_KEY")client = OpenAI(api_key=openai.api_key)

2、定義工具函數生成器

def auto_functions(functions_list):"""Chat模型的functions參數編寫函數:param functions_list: 包含一個或者多個函數對象的列表;:return:滿足Chat模型functions參數要求的functions對象"""def functions_generate(functions_list):# 創建空列表,用于保存每個函數的描述字典functions = []# 對每個外部函數進行循環for function in functions_list:# 讀取函數對象的函數說明function_description = inspect.getdoc(function)# 讀取函數的函數名字符串function_name = function.__name__system_prompt = '以下是某的函數說明:%s' % function_descriptionuser_prompt = '根據這個函數的函數說明,請幫我創建一個JSON格式的字典,這個字典有如下5點要求:\1.字典總共有三個鍵值對;\2.第一個鍵值對的Key是字符串name,value是該函數的名字:%s,也是字符串;\3.第二個鍵值對的Key是字符串description,value是該函數的函數的功能說明,也是字符串;\4.第三個鍵值對的Key是字符串parameters,value是一個JSON Schema對象,用于說明該函數的參數輸入規范。\5.輸出結果必須是一個JSON格式的字典,只輸出這個字典即可,前后不需要任何前后修飾或說明的語句' % function_nameresponse = client.chat.completions.create(model="gpt-3.5-turbo",messages=[{"role": "system", "content": system_prompt},{"role": "user", "content": user_prompt}])json_function_description=json.loads(response.choices[0].message.content.replace("```","").replace("json",""))json_str={"type": "function","function":json_function_description}functions.append(json_str)return functionsmax_attempts = 4attempts = 0while attempts < max_attempts:try:functions = functions_generate(functions_list)break  # 如果代碼成功執行,跳出循環except Exception as e:attempts += 1  # 增加嘗試次數print("發生錯誤:", e)if attempts == max_attempts:print("已達到最大嘗試次數,程序終止。")raise  # 重新引發最后一個異常else:print("正在重新運行...")return functions

3、兩次大模型API調用封裝

封裝funcation calling中兩次大模型API得調用

def run_conversation(messages, functions_list=None, model="gpt-3.5-turbo"):"""能夠自動執行外部函數調用的對話模型:param messages: 必要參數,字典類型,輸入到Chat模型的messages參數對象:param functions_list: 可選參數,默認為None,可以設置為包含全部外部函數的列表對象:param model: Chat模型,可選參數,默認模型為gpt-3.5-turbo:return:Chat模型輸出結果"""# 如果沒有外部函數庫,則執行普通的對話任務if functions_list == None:response = client.chat.completions.create(model=model,messages=messages,)response_message = response.choices[0].messagefinal_response = response_message.content# 若存在外部函數庫,則需要靈活選取外部函數并進行回答else:# 創建functions對象tools = auto_functions(functions_list)#tools = [{'type': 'function', 'function': {'name': 'sunwukong_function', 'description': '定義了數據集計算過程', 'parameters': {'type': 'object', 'properties': {'data': {'type': 'string', 'description': '表示帶入計算的數據表,用字符串進行表示'}}, 'required': ['data']}}}, {'type': 'function', 'function': {'name': 'tangseng_function', 'description': '該函數定義了數據集計算過程', 'parameters': {'type': 'object', 'properties': {'data': {'type': 'string', 'description': '必要參數,表示帶入計算的數據表,用字符串進行表示'}}, 'required': ['data']}}}]# 創建外部函數庫字典available_functions = {func.__name__: func for func in functions_list}# 第一次調用大模型response = client.chat.completions.create(model=model,messages=messages,tools=tools,tool_choice="auto", )response_message = response.choices[0].messagetool_calls = response_message.tool_callsif tool_calls:messages.append(response_message) for tool_call in tool_calls:function_name = tool_call.function.namefunction_to_call = available_functions[function_name]function_args = json.loads(tool_call.function.arguments)function_response = function_to_call(**function_args)messages.append({"tool_call_id": tool_call.id,"role": "tool","name": function_name,"content": function_response,}) print(messages)## 第二次調用模型second_response = client.chat.completions.create(model=model,messages=messages,) # 獲取最終結果final_response = second_response.choices[0].message.contentelse:final_response = response_message.contentreturn final_response

4、數據字典讀取

# 打開并讀取Markdown文件
with open('/root/autodl-tmp/iquery項目/data/數據字典/iquery數據字典.md', 'r', encoding='utf-8') as f:md_content = f.read()md_content

輸出:
在這里插入圖片描述

5、定義數據庫表信息查詢服務

def sql_inter(sql_query):"""用于獲取iquery數據庫中各張表的有關相關信息,\核心功能是將輸入的SQL代碼傳輸至iquery數據庫所在的MySQL環境中進行運行,\并最終返回SQL代碼運行結果。需要注意的是,本函數是借助pymysql來連接MySQL數據庫。:param sql_query: 字符串形式的SQL查詢語句,用于執行對MySQL中iquery數據庫中各張表進行查詢,并獲得各表中的各類相關信息:return:sql_query在MySQL中的運行結果。"""mysql_pw = "iquery_agent"connection = pymysql.connect(host='localhost',  # 數據庫地址user='iquery_agent',  # 數據庫用戶名passwd=mysql_pw,  # 數據庫密碼db='iquery',  # 數據庫名charset='utf8'  # 字符集選擇utf8)try:with connection.cursor() as cursor:# SQL查詢語句sql = sql_querycursor.execute(sql)# 獲取查詢結果results = cursor.fetchall()finally:connection.close()return json.dumps(results)functions_list = [sql_inter]

6、定義SQL提取函數

import astdef extract_sql(str):# 使用literal_eval將字符串轉換為字典dict_data = ast.literal_eval(json.dumps(str))# 提取'sql_query'的值sql_query_value = dict_data['sql_query']+""# 提取并返回'sql_query'的值return sql_query_value

7、對話確認機制改造

def check_code_run(messages, functions_list=None, model="gpt-3.5-turbo",auto_run = True):"""能夠自動執行外部函數調用的對話模型:param messages: 必要參數,字典類型,輸入到Chat模型的messages參數對象:param functions_list: 可選參數,默認為None,可以設置為包含全部外部函數的列表對象:param model: Chat模型,可選參數,默認模型為gpt-3.5-turbo:return:Chat模型輸出結果"""# 如果沒有外部函數庫,則執行普通的對話任務if functions_list == None:response = client.chat.completions.create(model=model,messages=messages,)response_message = response.choices[0].messagefinal_response = response_message.content# 若存在外部函數庫,則需要靈活選取外部函數并進行回答else:# 創建functions對象tools = auto_functions(functions_list)# 創建外部函數庫字典available_functions = {func.__name__: func for func in functions_list}# 第一次調用大模型response = client.chat.completions.create(model=model,messages=messages,tools=tools,tool_choice="auto", )response_message = response.choices[0].messagetool_calls = response_message.tool_callsif tool_calls:messages.append(response_message) for tool_call in tool_calls:function_name = tool_call.function.namefunction_to_call = available_functions[function_name]function_args = json.loads(tool_call.function.arguments)if auto_run == False:print("SQL字符串的數據類型")print(type(function_args))sql_query = extract_sql(function_args)res = input('即將執行以下代碼:%s。是否確認并繼續執行(1),或者退出本次運行過程(2)' % sql_query)if res == '2':print("終止運行")return Noneelse:print("正在執行代碼,請稍后...")function_response = function_to_call(**function_args)messages.append({"tool_call_id": tool_call.id,"role": "tool","name": function_name,"content": function_response,}) ## 第二次調用模型second_response = client.chat.completions.create(model=model,messages=messages,) # 獲取最終結果final_response = second_response.choices[0].message.contentelse:final_response = response_message.contentdel messagesreturn final_response

8、多輪對話封裝

import tiktokendef chat_with_inter(functions_list=None, prompt="你好呀", model="gpt-3.5-turbo", system_message=[{"role": "system", "content": "你是一個智能助手。"}], auto_run = True):print("正在初始化外部函數庫")# 創建函數列表對應的參數解釋列表functions = auto_functions(functions_list)print("外部函數庫初始化完成")project_name = input("請輸入當前分析項目名稱:")folder_name = create_directory(project_name)print("已完成數據分析文件創建")doc_name = input("請輸入當前分析需求,如數據清理,數據處理,數據分析段等:")doc_name += '問答'print("好的,即將進入交互式分析流程")# 多輪對話閾值# 多輪對話閾值if 'gpt-4' in model:tokens_thr = 6000elif '16k' in model:tokens_thr = 14000else:tokens_thr = 3000messages = system_message## 完成給用戶輸入的問題賦值user_input = promptmessages.append({"role": "user", "content": prompt})## 計算token大小embedding_model = "text-embedding-ada-002"# 模型對應的分詞器(TOKENIZER)embedding_encoding = "cl100k_base"encoding = tiktoken.get_encoding(embedding_encoding)tokens_count = len(encoding.encode((prompt + system_message[0]["content"])))while True:           answer = check_code_run(messages, functions_list=functions_list, model=model, auto_run = auto_run)print(f"模型回答: {answer}")#####################判斷是否記錄文檔 start#######################while True:record = input('是否記錄本次回答(1),還是再次輸入問題并生成該問題答案(2)')if record == '1':Q_temp = 'Q:' + user_inputA_temp = 'A:' + answerappend_in_doc(folder_name=project_name, doc_name=doc_name, qa_string=Q_temp)append_in_doc(folder_name=project_name, doc_name=doc_name, qa_string=A_temp)# 記錄本輪問題答案messages.append({"role": "assistant", "content": answer})breakelse:print('好的,請再次輸入問題')user_input = input()messages[-1]["content"] = user_inputanswer = check_code_run(messages, functions_list=functions_list,                                      model=model,                                       auto_run = auto_run)  print(f"模型回答: {answer}")########################判斷是否記錄文檔 stop ######################## 詢問用戶是否還有其他問題user_input = input("您還有其他問題嗎?(輸入退出以結束對話): ")if user_input == "退出":del messagesbreak# 記錄新一輪問答messages.append({"role": "assistant", "content": answer})messages.append({"role": "user", "content": user_input})# 計算當前總token數tokens_count += len(encoding.encode((answer + user_input)))# 刪除超出token閾值的對話內容while tokens_count >= tokens_thr:tokens_count -= len(encoding.encode(messages.pop(1)["content"]))

函數列表查看

functions_list

在這里插入圖片描述

9、多輪對話測試

chat_with_inter(functions_list=functions_list, prompt="介紹一下iquery數據庫中的表的情況", model="gpt-3.5-turbo-16k", system_message=[{"role": "system", "content": md_content}], auto_run = False)

對話效果
在這里插入圖片描述

四、數據分析報告撰寫初探

1、學習本公司的數據分析業務知識

# 讀取業務知識文檔
with open('/root/autodl-tmp/iquery項目/data/業務知識/本公司數據分析師業務介紹.md', 'r', encoding='utf-8') as f:da_instruct = f.read()
from IPython.display import display, Markdown, Codedisplay(Markdown(da_instruct))

2、文件內容獲取函數定義

實現一個根據項目和文件獲取文件內容的方法

## 實現根據項目和文件獲取文件內容的方法from docx import Document
import osdef get_file_content(project_name, file_name):"""實現根據項目名和文件名獲取文件內容的方法@param project_name:項目名,file_name:文件名@return 文件內容"""# 構建文件的完整路徑base_path = "/root/autodl-tmp/iquery項目/iquery云盤"file_path = os.path.join(project_name, file_name)full_path = os.path.join(base_path, file_path)+".doc"print("打印文件路徑:"+full_path)# 確保文件存在if not os.path.exists(full_path):return "文件不存在"try:# 加載文檔doc = Document(full_path)content = []# 遍歷文檔中的每個段落,并收集文本for para in doc.paragraphs:content.append(para.text)# 將所有段落文本合并成一個字符串返回return '\n'.join(content)except Exception as e:return f"讀取文件時發生錯誤: {e}"file_content = get_file_content('電信用戶行為分析', '數據分析問答')

輸出:
在這里插入圖片描述

display(Markdown(file_content))

3、讀取數據字典信息

# 讀取數據字典
with open('/root/autodl-tmp/iquery項目/data/數據字典/iquery數據字典.md', 'r', encoding='utf-8') as f:md_content = f.read()
# 讀取問答結果
file_content = get_file_content('電信用戶行為分析', '數據分析問答')

輸出:
在這里插入圖片描述

4、讀取本公司數據分析師業務知識

# 讀取業務知識文檔
with open('/root/autodl-tmp/iquery項目/data/業務知識/本公司數據分析師業務介紹.md', 'r', encoding='utf-8') as f:da_instruct = f.read()

5、撰寫分析報告

基于讀取到的字典信息,本公司數據分析師業務知識,以及問答內容;都給到大模型,讓大模型編寫報告

messages=[{"role": "system", "content": da_instruct}, {"role": "system", "content": 'iquery數據庫數據字典:%s' % md_content}, {"role": "system", "content": '數據探索和理解階段問答文本:%s' % file_content}, {"role": "user", "content": "請幫我編寫電信用戶行為分析的分析報告中的數據探索和理解部分內容"}]response = client.chat.completions.create(model="gpt-3.5-turbo-16k",messages=messages,)display(Markdown(response.choices[0].message.content))

五、結語

在本文中,我們不僅建立了一個能夠記錄多輪對話的本地“云盤”,而且還初步實現了基于對話內容、數據字典和業務知識的數據分析報告自動撰寫功能。讓我們的Agent智能數據分析平臺擁有了,報告生成的能力;這也標志著我們向著完全自動化的數據分析平臺又邁進了一大步。

在這里插入圖片描述

🎯🔖更多專欄系列文章:AIGC-AI大模型探索之路

😎 作者介紹:我是尋道AI小兵,資深程序老猿,從業10年+、互聯網系統架構師,目前專注于AIGC的探索。
📖 技術交流:建立有技術交流群,可以掃碼👇 加入社群,500本各類編程書籍、AI教程、AI工具等你領取!
如果文章內容對您有所觸動,別忘了點贊、?關注,收藏!加入我,讓我們攜手同行AI的探索之旅,一起開啟智能時代的大門!

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

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

相關文章

echarts 圖表不顯示的問題

是這樣的&#xff0c;點擊詳情&#xff0c;再點擊統計&#xff0c;切換的時候就不會顯示echarts圖表&#xff0c;剛開始使用的是next Tick&#xff0c;沒有使用定時器&#xff0c;后來加上了定時器就實現了如下所示&#xff1a; 代碼是如下 const chartContainer ref(null); …

【面試題-011】如何設計一個三高系統

設計一個“三高”系統&#xff08;即高可用、高性能、高并發&#xff09;需要綜合考慮系統架構、技術選型、運維管理等多個方面。以下是一些關鍵的設計原則和步驟&#xff1a; 1. 確定系統需求和目標 高可用&#xff1a;系統需要能夠承受故障&#xff0c;并在故障發生時快速恢…

【Text2SQL 論文】DBCopilot:將 NL 查詢擴展到大規模數據庫

論文&#xff1a;DBCopilot: Scaling Natural Language Querying to Massive Databases ???? Code: DBCopilot | GitHub 一、論文速讀 論文認為目前的 Text2SQL 研究大多只關注具有少量 table 的單個數據庫上的查詢&#xff0c;但在面對大規模數據庫和數據倉庫的查詢時時卻…

618商品網頁制作編程示例開發案列優質學習資料資源工具與案列應用場景開發文檔教程資料】

創建一個簡單的商品網頁可以用HTML、CSS和JavaScript來實現。這種網頁會包括商品的圖片、名稱、描述、價格和購買按鈕等。下面是一個詳細的源碼案例及其講解&#xff1a; 1. 文件結構 假設我們有以下文件結構&#xff1a; /product-page/imagesproduct.jpgindex.htmlstyle.c…

UML靜態圖-對象圖

概述 靜態圖包含類圖、對象圖和包圖的主要目的是在系統詳細設計階段&#xff0c;幫助系統設計人員以一種可視化的方式來理解系統的內部結構和代碼結構&#xff0c;包括類的細節、類的屬性和操作、類的依賴關系和調用關系、類的包和包的依賴關系。 對象圖與類圖之間的關系&…

python中獲取文件和圖片類型的方法

目錄 一. 使用第三方庫 filetype安裝 filetype 庫&#xff1a;示例代碼&#xff1a; 二. 使用第三方庫 Pillow&#xff08;針對圖片&#xff09;安裝 Pillow 庫&#xff1a;示例代碼&#xff1a; 三. 使用Python標準庫imghdr&#xff08;針對圖片&#xff09;示例代碼&#xff…

Linux 命令:tail

1. 寫在前面 本文主要介紹 Linux tail 命令&#xff1a;可用于查看文件的內容&#xff0c;有一個常用的參數 -f 常用于查閱實時更新的日志文件。 關注 公眾號 獲取最新博文&#xff1a; 滑翔的紙飛機 2. tail 命令 tail 命令的基本語法是&#xff1a; tail [OPTION]... [FIL…

Day46 動態規劃part06

完全背包問題 完全背包和01背包問題唯一不同的地方就是&#xff0c;每種物品有無限件。先遍歷物品還是先遍歷背包以及遍歷順序 根據遞推公式可知&#xff1a;每一個dp需要根據上方和左方的數據推出&#xff0c;只要保證數據左上方數據是遞推出來的這種兩個for循環的順序就是可…

【故障診斷】基于EMD的振動信號時頻分析新方法研究附matlab代碼

matlab % 步驟1&#xff1a;加載振動信號數據 load(‘vibration_signal.mat’); % 加載振動信號數據&#xff0c;假設信號存儲在變量signal中 % 步驟2&#xff1a;定義EMD函數 function imfs emd(signal) imfs []; % 存儲提取的IMF分量 while ~isMonotonic(signal)[imf, r…

PostgreSQL的內存參數

PostgreSQL的內存參數 基礎信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg軟件目錄&#xff1a;/home/pg16/soft pg數據目錄&#xff1a;/home/pg16/data 端口&#xff1a;5777PostgreSQL 提供了多種內存參數&#x…

一個高效的go語言字符串轉駝峰命名算法實現函數

在go語言的開發中我們經常需要對各種命名進行規范&#xff0c; 今天給大家介紹的是一個高效的將字符串轉 駝峰命名 &#xff08;即 首字母大寫的命名方式&#xff09;的函數。 // 字符串轉駝峰命名 // author tekintian <tekintiangmail.com> func CamelStr(str string) …

【python學習】Anaconda的介紹、下載及conda和pip換源方式(切換到國內鏡像源)

什么是Anaconda Anaconda 是一個專為數據科學和機器學習預裝了多種庫的Python發行版。 提供了包管理與環境管理的功能解決了多個版本python并存的問題解決了第三方包安裝問題 如何下載Anaconda 官網地址&#xff1a;https://www.anaconda.com/ 點擊右上角的 Free Download …

PostgreSQL 和Oracle鎖機制對比

PostgreSQL 和Oracle鎖機制對比 PostgreSQL 和 Oracle 都是業界廣泛使用的關系型數據庫管理系統&#xff0c;它們在鎖機制方面都有獨到的設計來控制并發訪問&#xff0c;確保數據的一致性和完整性。下面我們詳細比較一下這兩個數據庫系統的鎖機制。 1. 鎖類型 PostgreSQL P…

C語言王國——選擇與循環(1)

目錄 一、引言 二、選擇結構 1&#xff0c;if語句 1.1&#xff0c;if...else...語句 1.2&#xff0c;多分支語句 1.3懸空else的問題 2&#xff0c;switch語句 2.1&#xff0c;switch 2.2&#xff0c;break 2.3&#xff0c;default 一、引言 寫了幾個C語言代碼我發現C語…

ReduceTask工作機制

&#xff08;1&#xff09;Copy階段 ReduceTask從各個MapTask上遠程拷貝一片數據&#xff0c;并針對某一片數據&#xff0c;如果其大小超過一定閾值&#xff0c; 則寫到磁盤上 &#xff0c;否則直接放到內存中。 &#xff08;2&#xff09;Merge階段 在遠程拷貝數據的同時 &a…

go模擬經典面試題

講下MySQL事務 &#xff08;1&#xff09;事務的概念 事務就是對數據庫執行一系列操作&#xff0c;這些操作要么全部成功執行&#xff0c;要么全部失敗&#xff0c;不會存在部分成功的情況。 &#xff08;2&#xff09;事務的ACID特點 原子性&#xff1a;一個事務中的所有操…

def用法 Python:深度解析函數定義與調用的奧秘

def用法 Python&#xff1a;深度解析函數定義與調用的奧秘 在Python的編程世界中&#xff0c;def 關鍵字如同一座神秘的燈塔&#xff0c;照亮了我們探索函數定義與調用的道路。它不僅是創建函數的起點&#xff0c;更是構建高效、可維護代碼的關鍵所在。本文將通過四個方面、五…

華為坤靈交換機S300, S500, S210,S220, S200, S310 如何WEB抓包

通過S系列交換機配置端口鏡像實現抓包 1、應用場景 端口鏡像是指將經過指定端口(源端口或者鏡像端口)的報文復制一份到另一個指定端口(目的端口或者觀察端口)。在網絡運營與維護的過程中&#xff0c;為了便于業務監測和故障定位&#xff0c;網絡管理員時常要獲取設備上的業務報…

FFmpeg中視頻 Filters 使用文檔介紹

FFmpeg中Filters 簡介 FFmpeg是一個強大的多媒體框架,它支持多種音視頻編解碼器、容器格式、協議等。其中,FFmpeg的Filters(過濾器)是FFmpeg中一個非常強大的功能,它允許用戶對音視頻數據進行各種處理,包括但不限于視頻濾鏡、音頻效果、視頻轉換等。 到目前為止,FFmpeg…

Lua使用方式介紹

背景 Lua是C語言開發的腳本語言&#xff0c;設計的目的是為了嵌入到程序中&#xff0c;因此被設計得輕量小巧。Nginx配置中可以直接嵌入Lua 代碼或引入Lua 文件&#xff0c;Redis支持運行Lua語句和腳本&#xff0c;Wireshark中使用Lua腳本自定義協議。 本文用于收集常用的語法…