Pydantic數據驗證實戰指南:讓Python應用更健壯與智能

導讀:在日益復雜的數據驅動開發環境中,如何高效、安全地處理和驗證數據成為每位Python開發者面臨的關鍵挑戰。本文全面解析了Pydantic這一革命性數據驗證庫,展示了它如何通過聲明式API和類型提示系統,徹底改變Python數據處理模式。
從基礎的字段驗證到復雜的嵌套模型,從傳統的錯誤處理到與大語言模型的深度集成,文章層層深入,為讀者揭示了Pydantic的核心優勢:自動類型轉換、詳細的錯誤報告、基于類型提示的驗證以及卓越的性能表現。通過與傳統驗證方法的對比,您將看到Pydantic如何顯著減少樣板代碼,提高代碼可讀性。
文章還探討了一個引人注目的前沿應用:Pydantic與LLM的結合如何構建更可靠的AI應用?PydanticOutputParser如何確保非結構化LLM輸出轉為可靠的結構化數據?
無論您是構建Web API、處理復雜配置還是開發AI應用,這篇指南都將幫助您掌握現代Python數據驗證的最佳實踐。

引言:數據驗證的重要性

在當今數據驅動的軟件開發環境中,處理外部數據已成為每個應用程序的核心挑戰。無論是來自API的響應、用戶輸入還是配置文件,數據驗證都是確保系統穩定性和安全性的關鍵環節。正如開發界的經典格言所言:“永遠不要相信用戶的輸入”。

Pydantic作為Python生態系統中的明星庫,徹底改變了我們處理數據驗證和解析的方式。本文將深入探討Pydantic的核心功能、實踐應用以及與大語言模型(LLM)結合的高級用例,幫助開發者構建更加健壯、可靠的Python應用。

一、Pydantic基礎:重新定義Python數據驗證

1.1 Pydantic的本質與價值

Pydantic是Python生態系統中的數據驗證與解析庫,通過聲明式的方式定義數據模型,并結合Python的類型提示系統提供強大的驗證功能。它的核心價值在于:

  • 自動類型轉換:智能地將輸入數據轉換為預期類型
  • 詳細的錯誤報告:提供清晰的錯誤信息,便于調試
  • 基于類型提示:利用Python的類型注解系統,代碼即文檔
  • 高性能:核心驗證邏輯用Rust實現,性能卓越

與傳統的數據驗證方法相比,Pydantic顯著減少了樣板代碼,提高了代碼可讀性和可維護性。

1.2 傳統驗證方法的痛點

在Pydantic出現之前,開發者通常需要編寫大量的驗證代碼。以下對比展示了傳統方法與Pydantic的差異:

Java傳統方式

public class User {private String name;private int age;// 需要手寫校驗方法public void validate() throws IllegalArgumentException {if (name == null || name.isEmpty()) {throw new IllegalArgumentException("姓名不能為空");}if (age > 150) {throw new IllegalArgumentException("年齡不合法");}}
}

傳統Python方式

class User:def __init__(self, name: str, age: int):if not isinstance(name, str):raise TypeError("name必須是字符串")if not isinstance(age, int):raise TypeError("age必須是整數")if age > 150:raise ValueError("年齡必須在0-150之間")self.name = nameself.age = age

Pydantic方式

from pydantic import BaseModel, Fieldclass User(BaseModel):name: str = Field(min_length=1, max_length=50)  # 內置字符串長度驗證age: int = Field(ge=0, le=150)  # 數值范圍驗證

Pydantic方式不僅代碼量減少,更重要的是將驗證規則與數據定義緊密結合,提高了代碼的表達力和可維護性。

1.3 安裝與基本使用

Pydantic V2是當前的生產版本,需要Python 3.10+:

pip install pydantic==2.7.4

基本使用示例:

from pydantic import BaseModelclass UserProfile(BaseModel):username: str  # 必須字段age: int = 18  # 帶默認值的字段email: str | None = None  # 可選字段# 創建實例
user1 = UserProfile(username="Alice")
print(user1)  # username='Alice' age=18 email=None# 自動類型轉換
user2 = UserProfile(username="Bob", age="20")
print(user2.age)  # 20 (int類型)# 驗證失敗示例
try:UserProfile(username=123)  # 觸發驗證錯誤
except ValueError as e:print(e.errors())

二、深入Pydantic字段驗證

2.1 Field函數:字段驗證的核心

Field函數是Pydantic中為字段添加元數據和驗證規則的主要工具。它提供了豐富的參數來定義字段的特性和約束:

from pydantic import BaseModel, Fieldclass Product(BaseModel):name: str = Field(...,  # 表示必填字段title="產品名稱",description="產品的顯示名稱",min_length=2,max_length=50)price: float = Field(...,gt=0,  # 大于0description="產品價格(元)")tags: list[str] = Field(default_factory=list,  # 默認空列表max_length=10  # 最多10個標簽)

Field函數的常用參數包括:

參數描述適用類型
default默認值所有類型
title字段標題所有類型
description詳細描述所有類型
min_length/max_length長度限制字符串、列表
gt/ge/lt/le數值范圍數值類型
regex正則表達式字符串
example示例值所有類型

2.2 必填與可選字段

在Pydantic中,字段的必填性由是否提供默認值決定:

from pydantic import BaseModel, Fieldclass User(BaseModel):# 必填字段 (使用...)name: str = Field(..., title="用戶名", min_length=2)# 可選字段 (有默認值)age: int = Field(18, ge=0, le=150)# 可為None的字段email: str | None = Field(None, title="電子郵箱")

...是Python中的特殊對象,在Pydantic中表示"無默認值",即該字段必須由用戶提供。

2.3 復雜驗證場景

嵌套模型驗證

Pydantic支持模型嵌套,實現復雜數據結構的驗證:

from pydantic import BaseModel, Fieldclass Address(BaseModel):city: str = Field(..., min_length=1)street: strpostal_code: str = Field(..., pattern=r'^\d{5,6}$')class User(BaseModel):name: str = Field(...)address: Address  # 嵌套模型# 使用嵌套字典初始化
user = User(name="Alice", address={"city": "Shanghai", "street": "Main St", "postal_code": "200001"}
)
混合類型字段

Pydantic支持聯合類型,允許字段接受多種類型的值:

from pydantic import BaseModel
from typing import Unionclass Item(BaseModel):# 可以是整數或字符串id: Union[int, str]  # Python 3.10前的寫法# 或使用新語法 (Python 3.10+)quantity: int | float  # 可以是整數或浮點數

三、自定義驗證器:超越基本約束

3.1 field_validator裝飾器

當Field參數無法滿足復雜驗證需求時,可以使用field_validator裝飾器實現自定義驗證邏輯:

from pydantic import BaseModel, Field, field_validatorclass User(BaseModel):username: strpassword: str@field_validator("username")def validate_username(cls, value: str) -> str:if len(value) < 3:raise ValueError("用戶名至少需要3個字符")if not value.isalnum():raise ValueError("用戶名只能包含字母和數字")return value@field_validator("password")def validate_password(cls, value: str) -> str:errors = []if len(value) < 8:errors.append("密碼至少需要8個字符")if not any(c.isupper() for c in value):errors.append("密碼需要至少一個大寫字母")if not any(c.isdigit() for c in value):errors.append("密碼需要至少一個數字")if errors:raise ValueError("; ".join(errors))return value

3.2 多字段驗證器

驗證器可以同時應用于多個字段:

from pydantic import BaseModel, field_validatorclass Product(BaseModel):price: floatcost: float@field_validator("price", "cost")def check_positive(cls, v):if v <= 0:raise ValueError("金額必須大于0")return v

3.3 高級驗證技巧

依賴其他字段的驗證

在某些情況下,一個字段的驗證可能依賴于其他字段的值:

from pydantic import BaseModel, field_validatorclass Discount(BaseModel):original_price: floatdiscounted_price: float@field_validator("discounted_price")def validate_discount(cls, v, info):# 獲取原始價格original = info.data.get("original_price")if original is not None and v > original:raise ValueError("折扣價不能高于原價")return v
格式化與清理數據

驗證器不僅可以驗證數據,還可以格式化或清理數據:

from pydantic import BaseModel, field_validatorclass User(BaseModel):email: str@field_validator("email")def normalize_email(cls, v):# 轉換為小寫并去除空白return v.lower().strip()

四、Pydantic與大語言模型的結合:高級解析器

4.1 為什么需要Pydantic解析器

在這里插入圖片描述

在與大語言模型(LLM)交互時,我們經常需要將其自然語言輸出轉換為結構化數據。Pydantic解析器提供了以下優勢:

  • 結構化輸出:將非結構化文本轉換為可編程對象
  • 數據驗證:自動驗證字段類型和約束條件
  • 開發效率:減少手動解析代碼
  • 錯誤處理:內置異常捕獲與修復機制

4.2 PydanticOutputParser實戰

PydanticOutputParser是LangChain庫中的一個組件,用于將LLM輸出解析為Pydantic模型實例:

from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.prompts import ChatPromptTemplate# 定義Pydantic模型
class UserInfo(BaseModel):name: str = Field(description="用戶姓名")age: int = Field(description="用戶年齡", gt=0)hobbies: list[str] = Field(description="興趣愛好列表")# 創建解析器
parser = PydanticOutputParser(pydantic_object=UserInfo)# 定義大模型
model = ChatOpenAI(model_name="qwen-plus",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",api_key="YOUR_API_KEY",temperature=0.7
)# 構建提示模板
prompt = ChatPromptTemplate.from_template("""
提取用戶信息,嚴格按格式輸出:
{format_instructions}用戶信息:{input}
""")# 注入格式指令
prompt = prompt.partial(format_instructions=parser.get_format_instructions()
)# 組合處理鏈
chain = prompt | model | parser# 執行解析
result = chain.invoke({"input": "我的名稱是張三,年齡是18歲。興趣愛好有打籃球、看電影。"
})print(type(result))  # <class '__main__.UserInfo'>
print(result)  # name='張三' age=18 hobbies=['打籃球', '看電影']

4.3 JsonOutputParser與Pydantic結合

JsonOutputParser是另一個常用的解析器,它與Pydantic結合使用可以實現更靈活的解析:

from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser# 定義JSON結構
class SentimentResult(BaseModel):sentiment: strconfidence: floatkeywords: list[str]# 定義大模型
model = ChatOpenAI(model_name="qwen-plus",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",api_key="YOUR_API_KEY",temperature=0.7
)# 構建處理鏈
parser = JsonOutputParser(pydantic_object=SentimentResult)prompt = ChatPromptTemplate.from_template("""
分析評論情感:
{input}
按照JSON格式返回:
{format_instructions}
""")chain = prompt | model | parser# 執行分析
result = chain.invoke({"input": "物流很慢,包裝破損嚴重"})
print(result)
# 輸出: sentiment='negative' confidence=0.85 keywords=['物流慢', '包裝破損']

JsonOutputParser的一個重要優勢是支持流式處理,適用于大型響應:

# 流式調用
for chunk in chain.stream({"input": "物流很慢, 包裝破損嚴重"}):print(chunk)  # 逐步輸出結果

五、OutputFixingParser:提升解析魯棒性

5.1 LLM輸出修復機制

大語言模型的輸出有時會存在格式問題,如JSON語法錯誤、字段缺失等。OutputFixingParser提供了自動修復這些問題的機制:

from langchain.output_parsers import OutputFixingParser
from langchain_core.output_parsers import PydanticOutputParser
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
from typing import List# 定義模型
class Actor(BaseModel):name: str = Field(description="演員姓名")film_names: List[str] = Field(description="參演電影列表")# 創建基礎解析器
parser = PydanticOutputParser(pydantic_object=Actor)# 定義LLM
model = ChatOpenAI(model_name="qwen-plus",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",api_key="YOUR_API_KEY",temperature=0.7
)# 包裝為修復解析器
fixing_parser = OutputFixingParser.from_llm(parser=parser, llm=model)

5.2 修復常見格式錯誤

以下示例展示了如何修復常見的JSON格式錯誤:

# 模擬格式錯誤的輸出 (使用單引號而非雙引號)
misformatted_output = "{'name': '成龍', 'film_names': ['寶貝計劃','十二生肖','警察故事']}"# 直接解析會失敗
try:parsed_data = parser.parse(misformatted_output)
except Exception as e:print(f"解析失敗: {e}")  # 輸出: 解析失敗: JSONDecodeError...# 使用修復解析器
fixed_data = fixing_parser.parse(misformatted_output)
print(type(fixed_data))  # <class '__main__.Actor'>
print(fixed_data.model_dump())  # {'name': '成龍', 'film_names': ['寶貝計劃', '十二生肖', '警察故事']}

OutputFixingParser的工作原理是:

  1. 檢測到錯誤后,將錯誤信息與原始輸入傳遞給LLM
  2. LLM根據提示生成符合Pydantic模型的修正結果
  3. 返回修正后的結構化數據

5.3 提高解析成功率的最佳實踐

為了最大限度地提高解析成功率,可以采取以下措施:

  1. 明確的格式說明:在提示中提供詳細的輸出格式指南
  2. 示例驅動:提供正確格式的示例,幫助模型理解期望輸出
  3. 降低模型溫度:對于結構化輸出,使用較低的temperature值(0.0-0.3)
  4. 多次重試:設置適當的重試次數
  5. 錯誤處理:實現優雅的錯誤處理機制
# 增強修復解析器配置
enhanced_fixing_parser = OutputFixingParser.from_llm(parser=parser,llm=model,max_retries=2  # 最多重試2次
)# 錯誤處理示例
try:result = enhanced_fixing_parser.parse(problematic_output)# 成功解析process_valid_data(result)
except Exception as e:# 即使修復也失敗handle_parsing_failure(e, problematic_output)

六、實際應用場景與最佳實踐

6.1 API請求/響應驗證

Pydantic在FastAPI等現代Web框架中廣泛用于API請求和響應驗證:

from fastapi import FastAPI
from pydantic import BaseModel, Fieldapp = FastAPI()class CreateUserRequest(BaseModel):username: str = Field(..., min_length=3)email: strpassword: str = Field(..., min_length=8)class UserResponse(BaseModel):id: intusername: stremail: str@app.post("/users/", response_model=UserResponse)
async def create_user(user: CreateUserRequest):# FastAPI自動驗證請求體# 并將響應序列化為UserResponse格式db_user = await database.create_user(user.username, user.email, user.password)return db_user

6.2 配置管理

Pydantic非常適合處理應用程序配置:

from pydantic import BaseModel, Field
from pydantic_settings import BaseSettings
import osclass DatabaseSettings(BaseModel):host: str = "localhost"port: int = 5432username: strpassword: strdatabase: strclass AppSettings(BaseSettings):app_name: str = "MyApp"debug: bool = Field(default=False, description="啟用調試模式")database: DatabaseSettings# 從環境變量加載配置class Config:env_prefix = "MYAPP_"env_nested_delimiter = "__"# 使用
settings = AppSettings(database=DatabaseSettings(username=os.getenv("DB_USER"),password=os.getenv("DB_PASS"),database="myapp")
)

6.3 LLM應用中的結構化輸出

在構建LLM應用時,Pydantic可以確保輸出符合預期格式:

from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field, field_validator
from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.prompts import ChatPromptTemplate# 定義產品推薦模型
class ProductRecommendation(BaseModel):product_name: str = Field(description="推薦產品名稱")price_range: str = Field(description="價格范圍,例如'100-200元'")reasons: list[str] = Field(description="推薦理由列表,至少3條")@field_validator("reasons")def validate_reasons(cls, v):if len(v) < 3:raise ValueError("推薦理由至少需要3條")return v# 創建解析器和鏈
parser = PydanticOutputParser(pydantic_object=ProductRecommendation)
model = ChatOpenAI(temperature=0.2)prompt = ChatPromptTemplate.from_template("""
根據用戶需求推薦一款產品:
{user_needs}{format_instructions}
""")chain = (prompt.partial(format_instructions=parser.get_format_instructions())| model| parser
)# 使用
recommendation = chain.invoke({"user_needs": "我需要一款性價比高的筆記本電腦,主要用于辦公和輕度設計"
})print(f"推薦產品: {recommendation.product_name}")
print(f"價格范圍: {recommendation.price_range}")
print("推薦理由:")
for i, reason in enumerate(recommendation.reasons, 1):print(f"{i}. {reason}")

6.4 性能優化建議

在處理大量數據時,可以考慮以下性能優化建議:

  1. 使用model_construct:對于已知有效的數據,使用model_construct跳過驗證
  2. 延遲驗證:使用validate=False創建模型,在需要時手動調用model_validate
  3. 自定義驗證器優化:避免在驗證器中執行耗時操作
  4. 批量處理:處理大量數據時使用批量驗證
# 性能優化示例
from pydantic import BaseModel
import timeclass Item(BaseModel):name: strprice: float# 標準方法
start = time.time()
items1 = [Item(name=f"item{i}", price=i*1.5) for i in range(10000)]
print(f"標準方法: {time.time() - start:.4f}秒")# 優化方法 - 使用model_construct
start = time.time()
items2 = [Item.model_construct(name=f"item{i}", price=i*1.5) for i in range(10000)]
print(f"使用model_construct: {time.time() - start:.4f}秒")

七、Pydantic V2的新特性與遷移指南

7.1 V1與V2的主要區別

Pydantic V2是對庫的重大重寫,帶來了許多改進和API變化:

功能Pydantic V1Pydantic V2
性能純Python實現核心驗證邏輯用Rust實現,性能提升5-50倍
類型系統有限支持更全面的類型支持,包括TypedDict
API原始API更一致的命名約定
驗證器@validator@field_validator@model_validator
序列化dict()model_dump()
JSON解析parse_raw()model_validate_json()

7.2 API變更對照表

以下是V1到V2的主要API變更:

Pydantic V1Pydantic V2
fieldsmodel_fields
private_attributespydantic_private
validatorspydantic_validator
construct()model_construct()
copy()model_copy()
dict()model_dump()
json_schema()model_json_schema()
json()model_dump_json()
parse_obj()model_validate()
update_forward_refs()model_rebuild()

7.3 遷移策略

從V1遷移到V2的建議步驟:

  1. 更新依賴:確保Python版本≥3.10,更新pydantic到最新版本
  2. API調整:使用新的方法名稱(如model_dump替代dict
  3. 驗證器更新:將@validator替換為@field_validator
  4. 類型注解檢查:確保類型注解與V2兼容
  5. 測試覆蓋:確保充分的測試覆蓋,驗證遷移后的功能正確性
# Pydantic V1
from pydantic import BaseModel, validatorclass UserV1(BaseModel):name: strage: int@validator('age')def check_age(cls, v):if v < 0:raise ValueError('年齡不能為負數')return vdef to_dict(self):return self.dict()# Pydantic V2
from pydantic import BaseModel, field_validatorclass UserV2(BaseModel):name: strage: int@field_validator('age')def check_age(cls, v):if v < 0:raise ValueError('年齡不能為負數')return vdef to_dict(self):return self.model_dump()

八、結論與展望

Pydantic已經成為Python生態系統中數據驗證和解析的標準工具,其聲明式API和強大的驗證功能使其在Web開發、數據處理和AI應用中不可或缺。

隨著AI和大語言模型的興起,Pydantic與LangChain等框架的結合為構建可靠的AI應用提供了堅實基礎。通過PydanticOutputParser和OutputFixingParser等工具,開發者可以輕松地將非結構化的LLM輸出轉換為結構化數據,實現更復雜的應用場景。

未來,隨著Pydantic繼續發展,我們可以期待:

  1. 更深入的AI集成:與更多AI框架的無縫集成
  2. 更高的性能:進一步優化Rust核心,提供更快的驗證速度
  3. 更豐富的生態系統:更多基于Pydantic的工具和擴展

對于Python開發者來說,掌握Pydantic不僅能提高日常開發效率,還能為構建下一代AI應用打下堅實基礎。無論是構建API、處理配置還是與大語言模型交互,Pydantic都是不可或缺的工具。

參考資源

  1. Pydantic官方文檔
  2. LangChain文檔
  3. FastAPI與Pydantic
  4. Pydantic V2遷移指南

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

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

相關文章

3、ubantu系統 | 通過vscode遠程安裝并配置anaconda

1、vscode登錄 登錄后通過pwd可以發現目前位于wangqinag賬號下&#xff0c;左側為屬于該賬號的文件夾及文件。 通過cd ..可以回到上一級目錄&#xff0c;通過ls可以查看當前目錄下的文件夾及文件。 2、安裝 2.1、下載anaconda 通過wget和curl下載未成功&#xff0c;使用手動…

Python 與 Java 在 Web 開發中的深度對比:從語言特性到生態選型

在 Web 開發領域&#xff0c;Python 和 Java 作為兩大主流技術棧&#xff0c;始終是開發者技術選型時的核心考量。本文將從語言本質、框架生態、性能工程、工程實踐等多個維度展開深度對比&#xff0c;結合具體技術場景解析兩者的適用邊界與融合方案&#xff0c;為開發者提供系…

【OpenGL學習】(一)創建窗口

文章目錄 【OpenGL學習】&#xff08;一&#xff09;創建窗口 【OpenGL學習】&#xff08;一&#xff09;創建窗口 GLFW OpenGL 本身只是一套圖形渲染 API&#xff0c;不提供窗口創建、上下文管理或輸入處理的功能。 GLFW 是一個支持創建窗口、處理鍵盤鼠標輸入和管理 OpenGL…

電腦閃屏可能的原因

1. 顯示器 / 屏幕故障 屏幕排線接觸不良&#xff1a;筆記本電腦屏幕排線&#xff08;屏線&#xff09;松動或磨損&#xff0c;導致信號傳輸不穩定&#xff0c;常見于頻繁開合屏幕的設備。屏幕面板損壞&#xff1a;液晶屏內部燈管老化、背光模塊故障或面板本身損壞&#xff0c;…

docker容器知識

一、docker與docker compose區別&#xff1a; 1、docker是創建和管理單個容器的工具&#xff0c;適合簡單的應用或服務&#xff1b; 2、docker compose是管理多容器應用的工具&#xff0c;適合復雜的、多服務的應用程序&#xff1b; 3、docker與docker compose對比&#xff…

什么是Rootfs

Rootfs (Root Filesystem) 詳解 buildroot工具構建了一個名為"rootfs.tar"的根文件系統壓縮包。 什么是rootfs Rootfs&#xff08;Root Filesystem&#xff0c;根文件系統&#xff09;是操作系統啟動后掛載的第一個文件系統&#xff0c;它包含系統正常運行所需的基…

關于NLP自然語言處理的簡單總結

參考&#xff1a; 什么是自然語言處理&#xff1f;看這篇文章就夠了&#xff01; - 知乎 (zhihu.com) 所謂自然語言理解&#xff0c;就是研究如何讓機器能夠理解我們人類的語言并給出一些回應。 自然語言處理&#xff08;Natural Language Processing&#xff0c;NLP&#xff0…

Linux下載國外軟件鏡像的加速方法(以下載Python-3.8.0.tgz為例)

0 前言 使用linux經常會通過國外服務器下載軟件鏡像&#xff0c;有些軟件的下載速度奇慢&#xff0c;本文介紹一種加速國外軟件鏡像下載速度的方法&#xff0c;需要準備下載工具&#xff1a;迅雷。 1 以下載Python-3.8.0.tgz為例 找到Python官網的Python-3.8.0.tgz鏡像下載地…

沒有公網ip怎么端口映射外網訪問?使用內網穿透可以解決

無公網IP時本地搭建的網絡端口服務怎么映射外網遠程訪問&#xff1f;較為簡單通用的方案就是使用nat123內網穿透&#xff0c;下面詳細內網映射外網實現教程。? 一、了解內網公網區別&#xff0c;及無公網IP外網訪問方案 內網IP默認只能在同局域網內連接互通&#xff0c;而公…

Word2Vec詳解

目錄 Word2Vec 一、Word2Vec 模型架構 &#xff08;一&#xff09;Word2Vec 的核心理念 &#xff08;二&#xff09;Word2Vec 的兩種架構 &#xff08;三&#xff09;負采樣與層次 Softmax &#xff08;四&#xff09;Word2Vec 的優勢與局限 二、Word2Vec 預訓練及數據集…

ShardingSphere:查詢報錯:Actual table `數據源名稱.表名` is not in table rule configuration

目錄 簡介異常信息排查原因解決 簡介 1、使用ShardingSphere框架&#xff0c;版本為5.2.1 <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core</artifactId><version>5.2.1</version>…

MongoDB聚合查詢:從入門到精通

文章目錄 前言一、工具一般聚合查詢分為四步 二、使用步驟1.MongoDB Compass2.Studio 3T 二、舉個栗子總結 前言 Mongo 聚合查詢 一般用mongo做數據庫,涉及到關聯查詢情況不多,但是還有些情況要使用到,今天就講下如何通過工具做關聯查詢,最終聚合結果,得到最終的查詢結果集; …

codeup添加流水線docker自動化部署

在項目根目錄下增加Dockerfile文件 # 使用基礎鏡像 FROM maven:3.8.4-openjdk-17-slim AS build # 設置工作目錄 WORKDIR /app # 復制項目源代碼 COPY . . # 構建項目 RUN mvn clean package -DskipTests # 驗證JAR包是否生成 RUN ls -l target/your-project.jar # 使用合適的…

從 Word2Vec 到 BERT:AI 不止是詞向量,更是語言理解

一、前言 在上篇文章中&#xff0c;我們介紹了Word2Vec以及它的作用&#xff0c;總的來說&#xff1a; Word2Vec是我們理解NLP的第一站 Word2Vec將詞變成了“向量”—— 終于可以用機器理解詞語的相似度 我們獲得了例如“國王 - 男人 女人 ≈ 女王” 的類比能力 我們可以將…

鏡像管理(2)Dockerfile總結

一、docker鏡像構建方法 commoit :使用 docker commit 意味著所有對鏡像的操作都是黑箱操作,生成的鏡像也被稱為黑 箱鏡像,換句話說,就是除了制作鏡像的人知道執行過什么命令、怎么生成的鏡像,別人根 本無從得知。而且,即使是這個制作鏡像的人,過一段時間后也無法記清具…

機器學習第十七講:PCA → 把100維數據壓縮成3D視圖仍保持主要特征

機器學習第十七講&#xff1a;PCA → 把100維數據壓縮成3D視圖仍保持主要特征 資料取自《零基礎學機器學習》。 查看總目錄&#xff1a;學習大綱 關于DeepSeek本地部署指南可以看下我之前寫的文章&#xff1a;DeepSeek R1本地與線上滿血版部署&#xff1a;超詳細手把手指南 主…

【Linux庖丁解牛】——進程等待!

1. 進程退出場景 進程退出一般有三種場景&#xff1a; 。代碼運行完畢&#xff0c;結果正確 。代碼運行完畢&#xff0c;結果錯誤【比如&#xff0c;我們要對某個文件進行寫入&#xff0c;但寫入的文件路徑出錯&#xff0c;代碼運行完畢&#xff0c;可是結果出錯】 。代碼異…

鴻蒙OSUniApp 制作簡潔高效的標簽云組件#三方框架 #Uniapp

UniApp 制作簡潔高效的標簽云組件 在移動端應用中&#xff0c;標簽云&#xff08;Tag Cloud&#xff09;是一種常見的UI組件&#xff0c;它以視覺化的方式展示關鍵詞或分類&#xff0c;幫助用戶快速瀏覽和選擇感興趣的內容。本文將詳細講解如何在UniApp框架中實現一個簡潔高效的…

ubuntu14.04/16.06 安裝vscode(實測可以用)

地址&#xff1a;https://code.visualstudio.com/updates/v1_38 選擇deb 這個版本還支持ubuntu14.04和16.06 sudo dpkg -i code_1.38.1-1568209190_amd64.deb sudo apt-get install -f安裝成功&#xff0c;正常使用

WebRTC技術EasyRTC音視頻實時通話驅動智能攝像頭邁向多場景應用

一、方案背景? 在物聯網蓬勃發展的當下&#xff0c;智能攝像頭廣泛應用于安防、家居、工業等領域。但傳統智能攝像頭存在視頻傳輸延遲高、設備兼容性差、網絡波動時傳輸不穩定等問題&#xff0c;難以滿足用戶對實時流暢交互視頻的需求。EasyRTC憑借低延遲、高可靠、跨平臺特性…