LangChain-5-agent

概述?

????????Agent 是一種能夠基于接收到的輸入,利用自身的決策邏輯和可用的工具,動態地規劃并執行一系列操作,以達成特定任務的程序或系統。它在與外界交互過程中,會根據實時情況靈活調整策略,而不是按照固定的預設流程執行任務。

核心組成部分

  • 語言模型(LLM):作為 Agent 的“大腦”,負責理解用戶的輸入、生成推理和決策所需的文本信息。例如,當用戶提出一個復雜的問題時,語言模型會對問題進行分析和理解。

  • 工具:是 Agent 用于完成特定任務的具體手段。這些工具可以是各種 API 接口,如搜索引擎 API 用于獲取外部信息、數學計算工具用于進行數值運算等。例如,當需要查詢某一歷史事件的具體時間時,Agent 可以調用搜索引擎工具來獲取相關信息。

  • 決策邏輯:決定何時以及如何使用工具。它會根據語言模型對輸入的分析結果,結合工具的功能和描述,選擇最合適的工具來解決問題。例如,如果用戶的問題涉及到數據查詢和數學計算,決策邏輯會先讓 Agent 使用搜索引擎工具獲取相關數據,再使用數學計算工具對數據進行處理

工作流程

  1. 接收輸入:Agent 接收用戶提出的任務或問題。例如,用戶輸入“查詢蘋果公司最新款手機的價格,并計算其在打 8 折后的售價”。

  2. 分析理解:語言模型對輸入進行分析和理解,明確任務的核心目標和關鍵信息。在上述例子中,語言模型會識別出需要查詢手機價格并進行折扣計算這兩個關鍵任務。

  3. 決策規劃:決策邏輯根據分析結果,確定完成任務所需的工具和操作步驟。在這個例子中,會先選擇搜索引擎工具查詢蘋果公司最新款手機的價格,再選擇數學計算工具計算打折后的售價。

  4. 執行操作:按照規劃好的步驟,依次調用相應的工具執行任務。首先調用搜索引擎工具獲取手機價格信息,然后將價格信息傳遞給數學計算工具進行打折計算。

  5. 輸出結果:將最終的處理結果反饋給用戶。在這個例子中,會將計算得出的打折后售價返回給用戶。

工具

????????langchain_community.agent_toolkits提供了豐富多樣的工具包,這些工具包可以幫助開發者更方便地構建功能強大的智能代理。

? ? ? ? 可以通過如下代碼查詢工具列表:

from langchain_community.agent_toolkits.load_tools import load_tools, get_all_tool_names#查詢所有提供的工具
tool_names = get_all_tool_names()
print(tool_names)

1. 搜索與信息檢索類

  • google-search:用于在 Google 搜索引擎上進行搜索,獲取互聯網上廣泛的信息。

  • google-search-results-json:以 JSON 格式返回 Google 搜索的結果,方便后續數據處理和分析。

  • searx-search-results-json:借助 Searx(一個元搜索引擎)進行搜索,并以 JSON 格式返回搜索結果。

  • bing-search:在 Bing 搜索引擎上執行搜索操作,獲取 Bing 索引的網頁信息。

  • metaphor-search:利用 Metaphor 搜索引擎進行搜索,可能在特定領域或搜索算法上有獨特優勢。

  • ddg-search:使用 DuckDuckGo 搜索引擎進行搜索,DuckDuckGo 注重用戶隱私,不跟蹤用戶搜索歷史。

  • google-books:專門用于搜索 Google 圖書數據庫,查找相關書籍信息。

  • google-scholar:在 Google Scholar 上搜索學術文獻、研究論文、學術書籍等學術資源。

  • google-finance:用于獲取 Google Finance 上的金融相關信息,如股票行情、財經新聞等。

  • google-trends:從 Google Trends 獲取搜索關鍵詞的熱度趨勢數據,可用于分析市場趨勢、話題熱度等。

  • google-jobs:搜索 Google Jobs 上的招聘信息,幫助用戶查找工作機會。

  • google-serper:通過 Serper API 進行 Google 搜索,可能提供更定制化的搜索服務。

  • google-serper-results-json:以 JSON 格式返回通過 Google Serper 搜索得到的結果。

  • searchapi:使用 SearchApi 進行搜索,可訪問多種搜索引擎的功能。

  • searchapi-results-json:以 JSON 格式返回 SearchApi 的搜索結果。

  • serpapi:提供統一的 API 來訪問多個搜索引擎(如 Google、Bing 等)的搜索結果,簡化搜索集成。

  • wikipedia:用于在維基百科上搜索信息,獲取權威的百科知識。

  • arxiv:搜索 arXiv 預印本數據庫,獲取科學研究領域的最新論文。

  • pubmed:在 PubMed 數據庫中搜索生物醫學領域的文獻。

  • reddit_search:在 Reddit 平臺上進行搜索,獲取相關的社區討論和內容。

  • news-api:通過 News API 搜索和獲取新聞文章,可用于新聞資訊聚合。

2. 計算與數據處理類

  • wolfram-alpha:借助 Wolfram Alpha 強大的計算和知識引擎,進行各種數學計算、數據分析、科學知識查詢等。

  • llm-math:利用大語言模型進行數學計算,適合處理簡單的數學問題。

3. 內容生成與媒體類

  • dalle-image-generator:使用 DALL - E 模型生成圖像,根據文本描述創建相應的圖像。

  • eleven_labs_text2speech:通過 Eleven Labs 的 API 將文本轉換為語音。

  • google_cloud_texttospeech:利用 Google Cloud 的文本轉語音服務,將文本轉換為自然流暢的語音。

  • sceneXplain:可能用于圖像理解和解釋,對圖像內容進行分析和描述。

4. 社交與通信類

  • twilio:集成 Twilio 通信平臺,可實現短信發送、語音通話、視頻通話等通信功能。

5. 其他工具類

  • sleep:使代理暫停執行一段時間,可用于控制流程的執行節奏。

  • human:引入人類交互環節,在代理執行過程中可以向人類尋求幫助或獲取信息。

  • awslambda:與 AWS Lambda 函數集成,利用 AWS Lambda 的無服務器計算能力執行自定義代碼。

  • stackexchange:在 Stack Exchange 網絡(如 Stack Overflow)上搜索問題和答案,獲取技術領域的專業知識。

  • graphql:用于執行 GraphQL 查詢,與支持 GraphQL 的 API 進行交互。

  • openweathermap-api:通過 OpenWeatherMap API 獲取天氣信息,如氣溫、濕度、天氣狀況等。

  • dataforseo-api-search:使用 DataForSEO API 進行搜索相關操作。

  • dataforseo-api-search-json:以 JSON 格式返回 DataForSEO API 搜索的結果。

  • memorize:可能用于在代理執行過程中存儲和記憶某些信息,方便后續使用。

  • read_file:用于讀取文件內容,可處理本地文件或遠程文件。

  • tmdb-api:與 The Movie Database(TMDB)API 集成,獲取電影和電視節目相關信息。

  • podcast-api:通過 Podcast API 搜索和獲取播客相關信息。

  • open-meteo-api:利用 Open Meteo API 獲取氣象數據。

  • requests:使用 Python 的?requests?庫發送 HTTP 請求,可與各種 Web API 進行交互。

  • requests_get:專門用于發送 HTTP GET 請求。

  • requests_post:專門用于發送 HTTP POST 請求。

  • requests_patch:專門用于發送 HTTP PATCH 請求。

  • requests_put:專門用于發送 HTTP PUT 請求。

  • requests_delete:專門用于發送 HTTP DELETE 請求。

  • terminal:允許代理在終端環境中執行命令,例如運行腳本、調用系統工具等。

  • merriam-webster:通過 Merriam - Webster 詞典進行詞匯查詢,獲取單詞的釋義、發音等信息。

  • golden-query:用于與 Golden 知識圖譜進行交互,查詢相關的結構化知識。

  • terminal:可在終端環境中執行命令,適用于執行本地腳本或系統命令。

加載工具:

from langchain_community.agent_toolkits.load_tools import load_tools, get_all_tool_names#加載工具 arxiv 用于搜索arxiv上的論文 llm-math讓 LLM 執行數學計算任務(結合計算器)
tools = load_tools(["arxiv", "llm-math"], llm=deepseek_llm)

1?使用?initialize_agent?函數創建標準 Agent

??initialize_agent?是 LangChain 中最常用的創建 Agent 的函數,它提供了一種簡單的方式來初始化不同類型的 Agent。可以根據需要選擇不同的 Agent 類型和工具。

Agent 類型

LangChain 提供了多種 Agent 類型

1.?ZERO_SHOT_REACT_DESCRIPTION
  • 含義:這是一種零樣本學習的 Agent,在采取行動之前會進行推理步驟。所謂零樣本學習,意味著該 Agent 不需要針對特定任務進行額外的訓練,就可以根據工具的描述來使用工具解決問題。

  • 工作原理:當接收到用戶的輸入時,它會先對問題進行推理分析,確定需要使用哪些工具以及如何使用這些工具,然后再執行相應的操作。例如,在面對一個需要查詢數據并進行計算的問題時,它會先思考應該調用搜索引擎工具獲取數據,再調用計算工具進行計算。

2.?REACT_DOCSTORE
  • 含義:同樣是一種在行動前進行推理的零樣本 Agent,但它可以訪問一個文檔存儲庫。這個文檔存儲庫允許 Agent 查找與回答問題相關的信息。

  • 工作原理:在處理問題時,它不僅會進行推理分析,還會利用文檔存儲庫中的信息來輔助解決問題。例如,當用戶詢問關于某個歷史事件的詳細信息時,它可以在文檔存儲庫中查找相關的歷史文獻、資料等,結合推理過程給出更準確的答案。

3.?SELF_ASK_WITH_SEARCH
  • 含義:這種 Agent 會將一個復雜的問題分解為一系列更簡單的問題,然后使用搜索工具查找這些簡單問題的答案,最終根據這些答案來回答原始的復雜問題。

  • 工作原理:當接收到一個復雜問題時,它會首先分析問題的結構,將其拆分成多個簡單的子問題。然后,依次使用搜索工具查找每個子問題的答案。最后,將這些子問題的答案整合起來,形成對原始復雜問題的回答。例如,對于“如何制作一道復雜的菜肴”這個問題,它可能會將其拆分為“這道菜需要哪些食材”“每種食材的處理方法”“烹飪的步驟和時間”等子問題,分別進行搜索并整合答案。

4.?CONVERSATIONAL_REACT_DESCRIPTION
  • 含義:從名稱推測,這是一種適用于對話場景的 Agent,在行動前會進行推理。它能夠在多輪對話中保持上下文的連貫性,根據之前的對話內容和當前的輸入進行推理和行動。

  • 工作原理:在對話過程中,它會維護對話歷史,理解每一輪對話的上下文信息。當用戶輸入新的內容時,它會結合上下文進行推理分析,選擇合適的工具和操作來做出回應。例如,在一個關于旅游規劃的對話中,用戶先詢問了某個旅游景點的信息,之后又詢問如何到達該景點,它會根據之前關于景點的對話內容,調用地圖搜索工具等給出到達景點的路線建議。

5.?CHAT_ZERO_SHOT_REACT_DESCRIPTION
  • 含義:這是一種專為聊天場景設計的零樣本 Agent,在行動前進行推理。它結合了零樣本學習的能力和聊天場景的特點,能夠在沒有針對特定聊天任務進行訓練的情況下,處理聊天中的各種問題。

  • 工作原理:在聊天過程中,它會根據用戶的輸入進行推理,判斷需要使用哪些工具來滿足用戶的需求。例如,在聊天中用戶提到了想要了解某部電影的信息,它會推理出需要調用電影數據庫 API 來獲取相關信息。

6.?CHAT_CONVERSATIONAL_REACT_DESCRIPTION
  • 含義:這是一種針對聊天場景優化的、適用于多輪對話的 Agent,在行動前進行推理。它綜合了聊天場景和多輪對話的特性,能夠更好地處理復雜的聊天交互。

  • 工作原理:在多輪對話中,它會持續跟蹤對話的上下文,根據用戶的最新輸入和之前的對話歷史進行推理分析。例如,在一個關于購物的聊天中,用戶先詢問了某類商品的價格,之后又詢問該商品的優惠活動,它會結合之前關于價格的對話內容,調用電商平臺的 API 來獲取優惠信息。

7.?STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
  • 含義:這是一種針對聊天模型優化的零樣本反應 Agent,能夠調用具有多個輸入的工具。它在聊天場景中,即使面對需要多個參數輸入的工具,也能準確地進行調用和處理。

  • 工作原理:在聊天過程中,當遇到需要使用具有多個輸入的工具時,它會根據工具的描述和用戶的輸入,準確地組織和提供所需的輸入參數。例如,在一個關于旅游規劃的聊天中,用戶想要查詢從一個城市到另一個城市的航班信息,它可以調用航班查詢 API,并根據用戶提供的出發地、目的地、出發時間等多個參數進行查詢。

8.?OPENAI_FUNCTIONS
  • 含義:這是一種針對使用 OpenAI 函數進行優化的 Agent。OpenAI 提供了一些函數調用的機制,該 Agent 能夠高效地利用這些函數來完成特定的任務。

  • 工作原理:它會根據用戶的輸入和任務需求,調用 OpenAI 提供的相關函數。例如,在處理文本生成任務時,它可以調用 OpenAI 的文本生成函數,根據用戶的要求生成符合特定風格和內容的文本。

9.?OPENAI_MULTI_FUNCTIONS
  • 含義:從名稱推測,這是一種能夠調用多個 OpenAI 函數的 Agent。它可以根據任務的復雜性,靈活地組合和調用多個 OpenAI 函數來完成任務。

  • 工作原理:在面對復雜任務時,它會分析任務的需求,選擇合適的多個 OpenAI 函數,并按照一定的順序和邏輯進行調用。例如,在一個需要進行文本分析和生成的任務中,它可以先調用 OpenAI 的文本分析函數對輸入文本進行分析,然后根據分析結果調用文本生成函數生成相關的回復。

示例1

from langchain.agents import initialize_agent, AgentType
from langchain_community.agent_toolkits.load_tools import load_tools, get_all_tool_names
from model.deepseek import deepseek_llm
#查詢所有提供的工具
#tool_names = get_all_tool_names()
#print(tool_names)#加載工具 arxiv 用于搜索arxiv上的論文 llm-math讓 LLM 執行數學計算任務(結合計算器)
tools = load_tools(["arxiv", "llm-math"], llm=deepseek_llm)agent = initialize_agent(tools,deepseek_llm,agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, #使用的agent類型handle_parsing_errors=True, #如果解析報錯繼續verbose=True, #輸出的信息不要太多
)resp = agent.invoke({"input": "人工智能領域最新的論文是什么?請問中文回答"})
print(resp)

示例2

create_react_agent?函數用于創建一個基于 ReACT(Reasoning + Acting in a Cycle)框架的智能代理(Agent)。ReACT 框架通過結合推理和行動,使得代理能夠更好地與環境交互,完成復雜任務。

#Tavily 搜索工具
#搜索最多返回5條結果
import osfrom langchain import hub
from langchain.agents import create_react_agent
from langchain_core.prompts import PromptTemplate
from langchain_tavily import TavilySearchfrom model.deepseek import deepseek_llm
from model.guiji import guiji_llmos.environ['TAVILY_API_KEY'] = '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'
tavily_tool = TavilySearch(max_results=1)#定義工具集
tools = [tavily_tool]
template =  '''盡你所能回答以下問題。你可以使用以下工具:
{tools}
使用以下格式:
問題:你必須回答的輸入問題
思考:你應該始終思考要做什么
行動:要采取的行動,應該是 [{tool_names}] 中的一個
行動輸入:行動的輸入
觀察:行動的結果
……(這個“思考/行動/行動輸入/觀察”可以重復 N 次)
思考:我現在知道最終答案了
最終答案:原始輸入問題的最終答案
開始!
問題:{input}
思考:{agent_scratchpad}'''prompt = PromptTemplate.from_template(template)
#定義一個agent
agent = create_react_agent(llm=deepseek_llm,tools=tools,prompt=prompt
)resp = agent.invoke({"input": "請根據 ReAct 模板,逐步思考并提供關于 'langchain 中文教程' 的信息。","intermediate_steps": []
})
print(resp)

示例3

create_structured_chat_agent?是一個重要的函數,它用于創建具備結構化輸出能力的聊天代理(Agent)。這個代理能夠處理復雜的輸入參數,并以結構化的形式輸出結果,在面對復雜任務時表現出色。

LangSmith上提供了一些常用的提示詞可以直接使用

使用方式:prompt = hub.pull("hwchase17/structured-chat-agent")

from langchain import hub
from langchain.agents import  create_structured_chat_agent, AgentExecutor
from langchain_community.agent_toolkits.load_tools import load_tools
from langchain_core.tools import StructuredTool
from pydantic import BaseModel, Field
from langchain.agents import toolfrom model.deepseek import deepseek_llm"""
使用@tool裝飾器定義一個搜索模擬工具
@tool裝飾器可以將一個函數轉換成一個工具
return_direct=True表示直接返回函數的結果,不需要再進行思考
args_schema=SearchInput表示輸入的參數類型是SearchInput
"""
class SearchInput(BaseModel):keyword: str = Field(description="搜索的關鍵詞")
@tool("這是一個搜索的工具", return_direct=True, args_schema=SearchInput)
def search(keyword: str) -> str:"""這是一個搜索電腦上的數據的工具"""return f'我是一個搜索工具{keyword}'"""
使用StructuredTool.from_function定義一個排序工具
StructuredTool.from_function可以將一個函數轉換成一個工具
return_direct=True表示直接返回函數的結果,不需要再進行思考·
args_schema=SortToolInput表示輸入的參數類型是SortToolInput
"""
def sort_num(numString: str):"""這是一個工具,對所有的數字排序"""return sorted(eval(numString))class SortToolInput(BaseModel):num: str = Field(description="搜索的關鍵詞")#結構化工具
sort_tool = StructuredTool.from_function(func=sort_num,name='sort_tool',description='這是一個工具,對所有的數字排序',args_schema=SortToolInput,return_direct=True
)"""
使用StructuredTool.from_function定義一個計算字符串長度的工具
StructuredTool.from_function可以將一個函數轉換成一個工具
return_direct=True表示直接返回函數的結果,不需要再進行思考
args_schema=ArgsInput表示輸入的參數類型是ArgsInput
"""
class ArgsInput(BaseModel):a: str = Field(description="第一個字符串")b: str = Field(description="第二個字符串")def count_str(a: str, b: str) -> int:return len(a) + len(b)count_tool = StructuredTool.from_function(func=count_str,name='count_tool',description='這是一個工具,計算兩個字符串的長度',args_schema=ArgsInput,return_direct=True
)
#加載官方工具 arxiv 用于搜索arxiv上的論文 llm-math讓 LLM 執行數學計算任務(結合計算器)
tools = load_tools(["arxiv", "llm-math"], llm=deepseek_llm)
#自定義工具
tools = [search, sort_tool, count_tool] + tools
#使用提示器模版
prompt = hub.pull("hwchase17/structured-chat-agent")agent = create_structured_chat_agent(deepseek_llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)
resp = agent_executor.invoke(# {"input": "‘bbccdd’的字符串長度加上‘abc’字符串長度是多少"}{"input": "最新關于ai的論文"}
)
print(resp)

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

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

相關文章

操作系統進程與線程核心知識全覽

本博客,根據王道所學。以下為第二章節知識點: 進程的概念、組成、狀態與其轉換、進程間通信、信號; 單/多線程模型、線程管理、調度時機的切換、調度的目標、調度算法、多處理機調度; 同步與互斥、進程互斥的軟硬件實現方法、信號…

C++中類型轉換操作符知識介紹

文章目錄 **一、類型轉換操作符的語法與定義****二、工作原理****三、示例:基本類型轉換****四、示例:轉換為自定義類型****五、與構造函數的對比****六、注意事項****七、應用場景****八、與 C 其他類型轉換的關系****九、總結** 在C中,類型…

2048小游戲C++板來啦!

個人主頁:PingdiGuo_guo 收錄專欄:C干貨專欄 大家好呀,我是PingdiGuo_guo,今天我們來學習如何用C編寫一個2048小游戲。 文章目錄 1.2048的規則 2.步驟實現 2.1: 初始化游戲界面 2.1.1知識點 2.1.2: 創建游戲界面 2.2: 隨機…

TensorFlow深度學習實戰——Transformer變體模型

TensorFlow深度學習實戰——Transformer變體模型 0. 前言1. BERT2. GPT-23. GPT-34. Reformer5. BigBird6. Transformer-XL7. XLNet8. RoBERTa9. ALBERT10. StructBERT11. T5 和 MUM12. ELECTRA13. DeBERTa14. 進化 Transformer 和 MEENA15. LaMDA16. Switch Transformer17. RE…

還原自動駕駛的“前世今生”:用 Python 實現數據記錄與回放系統

還原自動駕駛的“前世今生”:用 Python 實現數據記錄與回放系統 你有沒有想過這樣一個場景: 一輛自動駕駛測試車,在街頭拐了個彎,卻突然急剎。測試員一臉懵,研發團隊問:“數據記錄了嗎?” 他攤攤手:“系統當時沒掛上錄制……” 對不起,重測吧。 這不是段子,而是我在…

access和excel用vba進行輔助辦公軟件開發

1、access用vba創建子窗口child查詢 出現這個報錯的時候,一般是用vba通過ado.connection連接,沒有綁定數據源造成的: 先綁定再使用 Me.Child2.SourceObject "表.資產管理" 連接數據源 Me.Child2.Form.RecordSource strSql …

Nginx+tomcat集群

Nginxtomcat集群 一、Nginx 簡介 1.1 定義 Nginx 是一個高性能的 HTTP 和反向代理 web 服務器,同時支持 IMAP/POP3/SMTP 服務。由俄羅斯工程師伊戈爾?賽索耶夫開發,于 2004 年首次公開發布,基于 BSD-like 協議,代碼開源且免費…

RPC - 客戶端注冊和發現模塊

registryMethod 函數詳解: 函數目的 registryMethod 是 Provider 類的核心方法,用于向服務注冊中心注冊服務。注冊成功后,服務注冊中心會更新內部的服務映射表,建立服務名稱到提供者地址的映射關系。 執行流程示例 場景: 多米…

leetcode332.重新安排行程:優先隊列與DFS實現歐拉路徑的行程規劃

一、題目深度解析與行程規劃本質 題目描述 給定一個機票的字符串二維數組 tickets,每個元素是 [from, to] 的形式,表示從 from 到 to 的機票。要求找出從 JFK 出發的行程,且必須使用所有機票,若存在多種可能的行程,返…

1.21SQLCipher 簡介

SQLCipher 是一個基于 SQLite 的擴展,提供了透明的數據庫加密功能。與普通 SQLite 不同,SQLCipher 在數據寫入磁盤前自動加密,讀取時自動解密,無需開發者手動處理加密邏輯。這使得它非常適合移動應用、桌面應用等需要本地數據加密…

無人機不再“盲飛”!用Python搞定實時目標識別與跟蹤

友友們好! 我是Echo_Wish,我的的新專欄《Python進階》以及《Python!實戰!》正式啟動啦!這是專為那些渴望提升Python技能的朋友們量身打造的專欄,無論你是已經有一定基礎的開發者,還是希望深入挖掘Python潛力的愛好者,這里都將是你不可錯過的寶藏。 在這個專欄中,你將會…

Vue-7-前端框架Vue之應用基礎從Vue2語法到Vue3語法的演變

文章目錄 1 基于vite創建1.1 對比webpack和vite1.2 創建工程1.3 啟動項目2 調試工具Vue.js Devtools3 src結構3.1 index.html3.2 main.ts3.3 App.vue(根組件)4 示例(Vue2的語法)4.1 Person.vue4.2 App.vue4.3 選項式API對比組合式API4.4 程序流程5 示例(Vue3的語法)5.1 setup概…

上線iOSApp前抓包工具協作保障接口行為一致性(iOS抓包)

項目上線前,你是否總會擔心“接口是不是在某個邊緣條件下表現不一致”?哪怕單元測試通過、接口文檔齊全,真到線上用戶手上,總還是可能出現一些環境相關的異常。 最近參與某App大版本上線前的質量驗證流程,我們特別安排…

Java可變參數:靈活編程的秘密武器

Java可變參數的理解與應用 Java中的可變參數(Varargs)允許方法接受數量不定的同類型參數,簡化了方法調用時的參數傳遞。可變參數通過在參數類型后添加...實現,本質上是一個數組,但在調用時可以傳入多個單獨的參數。 …

汽車 CDC威脅分析與風險評估

汽車 CDC(連續阻尼控制系統)的威脅分析與風險評估需結合其技術特性、應用場景及行業標準展開。以下是詳細解析及實例說明: 一、CDC 系統技術原理與結構 CDC(Continuous Damping Control)通過實時調節懸掛阻尼力提升駕…

TensorFlow 安裝與 GPU 驅動兼容(h800)

環境說明TensorFlow 安裝與 GPU 驅動兼容CUDA/H800 特殊注意事項PyCharm 和終端環境變量設置方法測試 GPU 是否可用的 Python 腳本 # 使用 TensorFlow 2.13 在 NVIDIA H800 上啟用 GPU 加速完整指南在使用 TensorFlow 進行深度學習訓練時,充分利用 GPU 能力至關重要…

Laravel 項目中圖片上傳后無法訪問的問題

情況: Laravel 提供了 php artisan storage:link 命令,用于創建符號鏈接(Symbolic Link),將 storage/app/public 映射到 public/storage。但是上傳圖片之后 文件目錄確實有 但是無法訪問。 1. 刪除已經創建的 rm -rf…

Tesollo攜人形機器人手進軍國內市場

Tesollo靈巧手是Tesollo公司研發的一系列機器人靈巧手產品,涵蓋兩指到五指的設計 產品型號與特點 Delto-5F五指靈巧手:具備20個自由度,每個手指配備4個獨立關節,抓握力達到7公斤,每個關節空載可達75轉/分鐘&#xff0…

Python文件操作的“保險箱”:with語句深度實戰指南

目錄 一、with語句的底層運作原理 資源獲取階段 資源釋放階段 二、文件操作實戰場景解析 場景1:基礎文件讀寫 場景2:異常處理進階 場景3:復合資源管理 三、自定義上下文管理器 四、with語句的性能考量 五、實戰經驗總結 在Python編程中,文件操作是日常開發的高頻…

openKylin高校沙龍 | 走進成都高校,推動開源技術交流與人才培養

openKylin高校沙龍 | 成都高校 4月25日,CCF開源發展委員會“開源高校行”暨紅山開源openKylin高校行成都站圓滿舉辦,這場連接兩所大學的開源知識盛會,為成都信息工程大學與電子科技大學的300余名與會師生帶來了前沿的行業思考與技術實踐。Op…