日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

AI Agent驅(qū)動(dòng)計(jì)算材料結(jié)構(gòu)優(yōu)化:ASE EMT最小閉環(huán)與生產(chǎn)擴(kuò)展

AI Agent驅(qū)動(dòng)計(jì)算材料結(jié)構(gòu)優(yōu)化:ASE EMT最小閉環(huán)與生產(chǎn)擴(kuò)展 做計(jì)算化學(xué)和材料計(jì)算的朋友大多有過(guò)這樣的體驗(yàn)一個(gè)結(jié)構(gòu)優(yōu)化的任務(wù)從建模、選泛函、設(shè)收斂標(biāo)準(zhǔn)、跑任務(wù)、看軌跡、判斷是否收斂到最后一堆能量文件需要手工整理成表。整個(gè)鏈路里真正需要人做判斷的環(huán)節(jié)其實(shí)只有幾個(gè)剩下的全是重復(fù)勞動(dòng)和格式轉(zhuǎn)換。而偏偏這幾個(gè)判斷環(huán)節(jié)又強(qiáng)依賴經(jīng)驗(yàn)新人很難獨(dú)立完成。這篇文章想聊的就是能不能用 AI Agent 把這套鏈路串起來(lái)讓模型負(fù)責(zé)決定下一步做什么讓程序負(fù)責(zé)真正去做。文章會(huì)從概念講起然后手寫(xiě)一個(gè)不依賴任何黑盒框架的最小 Agent用 ASE 內(nèi)置的 EMT 計(jì)算器跑通建模—優(yōu)化—校驗(yàn)—落盤(pán)的完整閉環(huán)最后再討論怎么把這個(gè)玩具級(jí)實(shí)現(xiàn)擴(kuò)展到真實(shí)的第一性原理計(jì)算和機(jī)器學(xué)習(xí)勢(shì)場(chǎng)景。適合有 Python 基礎(chǔ)、做過(guò)一些原子尺度模擬、想了解 Agent 工程化的讀者。1. 為什么要把 AI Agent 引入計(jì)算化學(xué)與材料計(jì)算1.1 Agent 在這個(gè)語(yǔ)境下到底指什么先把這個(gè)詞說(shuō)清楚因?yàn)樗诓煌ψ永锖x差別很大。在這里AI Agent 指的是一個(gè)由大語(yǔ)言模型驅(qū)動(dòng)的決策循環(huán)模型讀取當(dāng)前的任務(wù)狀態(tài)從一組預(yù)先定義好的工具里挑選一個(gè)調(diào)用拿到工具返回的結(jié)構(gòu)化結(jié)果再?zèng)Q定下一步如此往復(fù)直到任務(wù)結(jié)束或者觸發(fā)終止條件。它和用 ChatGPT 問(wèn)一句然后復(fù)制粘貼結(jié)果有本質(zhì)區(qū)別。后者模型只是一次性地產(chǎn)生文本所有執(zhí)行動(dòng)作由人完成前者模型處在一個(gè)閉環(huán)里它的每一次輸出都會(huì)被程序解析成具體的函數(shù)調(diào)用執(zhí)行結(jié)果又會(huì)回到模型的上下文里。換句話說(shuō)Agent 的價(jià)值不在于模型懂多少化學(xué)而在于它能把意圖翻譯成操作序列并且根據(jù)中間結(jié)果動(dòng)態(tài)調(diào)整。在計(jì)算化學(xué)和材料學(xué)里這個(gè)特性的用處非常明顯。因?yàn)檫@類任務(wù)的本質(zhì)是搜索——搜索構(gòu)型空間、搜索參數(shù)組合、搜索收斂路徑。人的經(jīng)驗(yàn)本質(zhì)上是一套啟發(fā)式規(guī)則而 Agent 恰好可以把這套規(guī)則形式化成工具調(diào)用序列同時(shí)保留在遇到異常時(shí)改弦更張的能力。需要強(qiáng)調(diào)的是Agent 不是萬(wàn)能的。凡是需要高精度數(shù)值判斷的地方比如某個(gè)泛函對(duì)某類體系的系統(tǒng)性誤差模型基本給不出可靠結(jié)論。它的定位應(yīng)該是實(shí)驗(yàn)記錄員 操作員而不是理論家。1.2 與傳統(tǒng)腳本、工作流引擎的區(qū)別很多人會(huì)問(wèn)我寫(xiě)一個(gè) Python 腳本把 ASE 的步驟串起來(lái)不就完了或者用工作流引擎編排一下這三者的差別值得掰開(kāi)講。傳統(tǒng)腳本是確定性的路徑寫(xiě)死。好處是可復(fù)現(xiàn)、易調(diào)試壞處是遇到邊界情況就崩比如某個(gè)元素 EMT 不支持、某個(gè)晶格常數(shù)導(dǎo)致優(yōu)化發(fā)散腳本沒(méi)法自己繞過(guò)去只能人來(lái)改代碼或者改參數(shù)。工作流引擎比如各種 DAG 編排工具解決了任務(wù)依賴和失敗重試的問(wèn)題但它的分支邏輯依然是人預(yù)先寫(xiě)死的。你可以配失敗了重試三次但沒(méi)法配如果能量異常升高就換個(gè)初始晶格常數(shù)再試。這類判斷需要語(yǔ)義理解工作流引擎做不到。Agent 補(bǔ)的正是這一塊把分支決策交給模型。代價(jià)是引入了不確定性——同樣的輸入模型兩次可能給出不同的操作序列。所以在工程上一個(gè)靠譜的 Agent 系統(tǒng)必須有確定性的校驗(yàn)層兜底這一點(diǎn)后面會(huì)反復(fù)提到。一個(gè)實(shí)用的判斷標(biāo)準(zhǔn)是如果你的任務(wù)流程完全固定、輸入格式完全可控那就老老實(shí)實(shí)寫(xiě)腳本別上 Agent。如果你的任務(wù)需要看情況比如結(jié)構(gòu)來(lái)源五花八門(mén)、收斂行為不可預(yù)測(cè)、需要根據(jù)中間結(jié)果選下一步那 Agent 才有發(fā)揮空間。1.3 計(jì)算材料學(xué)里適合 Agent 化的任務(wù)不是所有任務(wù)都值得 Agent 化。根據(jù)實(shí)際使用情況下面這幾類收益比較明顯。第一類是結(jié)構(gòu)準(zhǔn)備與預(yù)處理。從 CIF、POSCAR、SMILES 等各種來(lái)源讀入結(jié)構(gòu)判斷晶胞是否合理、是否需要加真空層、是否需要擴(kuò)胞、表面模型該切哪個(gè)晶面。這些判斷規(guī)則性強(qiáng)但情況瑣碎很適合交給 Agent 調(diào)度。第二類是計(jì)算流程編排。給定一個(gè)體系和一個(gè)目標(biāo)比如算彈性常數(shù)或算形成能Agent 需要拆解成一系列計(jì)算任務(wù)決定順序檢查每一步的輸出是否正常異常時(shí)調(diào)整參數(shù)重跑。第三類是結(jié)果解析與匯總。從大量輸出文件里提取能量、力、帶隙、晶格常數(shù)等量做單位換算整理成表格標(biāo)注異常值。這類工作純體力活A(yù)gent 做起來(lái)出錯(cuò)率反而比人低。第四類是文獻(xiàn)與數(shù)據(jù)庫(kù)的信息抽取輔助。比如從材料數(shù)據(jù)庫(kù)批量拉取結(jié)構(gòu)并做一致性檢查。注意這里說(shuō)的是輔助涉及判斷的部分仍然需要人復(fù)核。反過(guò)來(lái)純粹的精度評(píng)估、方法選擇的理論論證、需要長(zhǎng)期經(jīng)驗(yàn)的誤差分析這些不建議交給 Agent至少不能讓它做最終決策。2. 環(huán)境準(zhǔn)備與項(xiàng)目骨架2.1 運(yùn)行環(huán)境與依賴說(shuō)明本文示例以 Python 環(huán)境為例。Python 版本建議 3.9 以上因?yàn)榇a里用了一些較新的類型標(biāo)注寫(xiě)法from __future__ import annotations可以兼容低版本但為了少踩坑建議直接用較新的小版本。核心依賴只有兩個(gè)方向計(jì)算側(cè)和編排側(cè)。計(jì)算側(cè)本文用 ASEAtomic Simulation Environment它自帶的 EMT 計(jì)算器可以對(duì)部分金屬做快速近似計(jì)算正好適合做演示不需要安裝任何第一性原理軟件。編排側(cè)如果要接真實(shí)大模型需要對(duì)應(yīng)的 SDK如果只想先把流程跑通可以完全不用本文提供了一個(gè)離線的腳本化 Planner。需要說(shuō)明的是具體依賴版本請(qǐng)以你本地環(huán)境的實(shí)際情況為準(zhǔn)本文重點(diǎn)演示的是架構(gòu)和配置思路不綁定某個(gè)特定版本號(hào)。安裝命令大致如下# 建議在虛擬環(huán)境中操作 python -m venv venv source venv/bin/activate # Windows 下用 venv\Scripts\activate # 計(jì)算側(cè)依賴 pip install ase numpy # 可選如果需要接大模型再安裝對(duì)應(yīng) SDK版本以官方文檔為準(zhǔn) # pip install openaiASE 的 EMT 計(jì)算器支持的元素有限主要覆蓋 Al、Cu、Ag、Au、Ni、Pd、Pt、H、C、N、O 等常見(jiàn)元素的一部分。如果你的體系包含它不支持的元素跑起來(lái)會(huì)直接報(bào)錯(cuò)。這一點(diǎn)在演示階段要特別注意后面常見(jiàn)問(wèn)題一節(jié)會(huì)專門(mén)講這個(gè)報(bào)錯(cuò)怎么排查。2.2 項(xiàng)目目錄結(jié)構(gòu)為了讓代碼可維護(hù)建議一開(kāi)始就把結(jié)構(gòu)分清楚。工具層負(fù)責(zé)真正干活A(yù)gent 層負(fù)責(zé)調(diào)度校驗(yàn)層負(fù)責(zé)兜底三者不要混在一個(gè)文件里。推薦的結(jié)構(gòu)如下chem-agent/ ├── agent/ │ ├── __init__.py │ ├── session.py # 計(jì)算會(huì)話持有當(dāng)前結(jié)構(gòu)等狀態(tài) │ ├── tools.py # 工具函數(shù)實(shí)現(xiàn) │ ├── schema.py # 工具描述給模型看的 │ ├── validators.py # 結(jié)果校驗(yàn) │ └── loop.py # Agent 主循環(huán) ├── planners/ │ ├── __init__.py │ ├── scripted.py # 離線規(guī)則 Planner用于測(cè)試 │ └── llm.py # 大模型 Planner可選 ├── runs/ # 運(yùn)行產(chǎn)物自動(dòng)創(chuàng)建 └── main.py # 入口這個(gè)劃分的好處是計(jì)算邏輯tools.py完全不感知模型的存在可以被普通腳本直接調(diào)用也可以在 Agent 里被調(diào)用。這一點(diǎn)非常重要因?yàn)樗馕吨愕挠?jì)算代碼永遠(yuǎn)可以獨(dú)立測(cè)試不會(huì)因?yàn)槟P统轱L(fēng)而不可用。2.3 單位約定在動(dòng)手寫(xiě)代碼之前必須先把單位約定固定下來(lái)否則后面一定亂。ASE 內(nèi)部統(tǒng)一使用 eV 作為能量單位、? 作為長(zhǎng)度單位、eV/? 作為力的單位。工具函數(shù)的入?yún)⒑头祷刂刀甲裱@套約定不要在中途混入 kcal/mol 或者 Hartree。如果最終要和其他軟件對(duì)接單位換算放在結(jié)果輸出環(huán)節(jié)統(tǒng)一做不要在工具內(nèi)部做隱式轉(zhuǎn)換。這個(gè)原則看似啰嗦但在實(shí)際項(xiàng)目里能省掉大量對(duì)不上數(shù)的排查時(shí)間。3. 核心原理拆解一個(gè)可落地的 Agent 由什么組成3.1 四要素模型拋開(kāi)各種框架的包裝一個(gè)能干活的計(jì)算 Agent 由四部分組成狀態(tài)State、工具Tools、決策器Planner、循環(huán)控制器Loop Controller。狀態(tài)是當(dāng)前任務(wù)的全部上下文包括已構(gòu)建的原子結(jié)構(gòu)、已執(zhí)行的操作歷史、中間計(jì)算結(jié)果。在計(jì)算化學(xué)場(chǎng)景里狀態(tài)管理是最容易被低估的部分。因?yàn)樵咏Y(jié)構(gòu)是個(gè)復(fù)雜對(duì)象沒(méi)法直接塞進(jìn)模型的上下文只能序列化成摘要信息元素組成、原子數(shù)、晶格參數(shù)、當(dāng)前能量等傳給模型。工具是一組有明確輸入輸出的函數(shù)。每個(gè)工具應(yīng)該只做一件事并且可以被獨(dú)立測(cè)試。工具設(shè)計(jì)得好不好直接決定了 Agent 的上限——模型再聰明如果工具粒度太粗比如一個(gè)工具直接跑完整套流程模型就沒(méi)有調(diào)度空間如果太細(xì)比如一個(gè)工具只移動(dòng)一個(gè)原子模型會(huì)被淹沒(méi)在細(xì)節(jié)里。決策器負(fù)責(zé)根據(jù)當(dāng)前狀態(tài)選擇下一步動(dòng)作。它可以是規(guī)則腳本也可以是大模型。把它抽成接口的好處是開(kāi)發(fā)階段用規(guī)則腳本跑通流程上線前再換成模型兩者可以隨時(shí)切換對(duì)比。循環(huán)控制器負(fù)責(zé)防止 Agent 跑飛。必須有最大步數(shù)限制、重復(fù)動(dòng)作檢測(cè)、異常中斷機(jī)制。一個(gè)沒(méi)有終止條件的 Agent 是很危險(xiǎn)的尤其是當(dāng)工具會(huì)消耗真實(shí)計(jì)算資源的時(shí)候。3.2 工具契約設(shè)計(jì)的三條原則寫(xiě)工具函數(shù)的時(shí)候有三條原則值得堅(jiān)持。第一條參數(shù)用基本類型。模型輸出的參數(shù)是 JSON只能表達(dá)字符串、數(shù)字、布爾、數(shù)組、對(duì)象。所以工具參數(shù)不要設(shè)計(jì)成Atoms對(duì)象這種復(fù)雜類型而應(yīng)該用symbolCu、a3.6這樣的基本類型在函數(shù)內(nèi)部再去構(gòu)造對(duì)象。第二條返回值必須可序列化且有明確狀態(tài)標(biāo)識(shí)。建議統(tǒng)一返回一個(gè) dict里面至少包含status字段ok/error和必要的數(shù)值結(jié)果。出錯(cuò)時(shí)不要拋異常穿透到循環(huán)層而是在工具內(nèi)部捕獲后返回{status: error, message: ...}。這樣模型能看到錯(cuò)誤信息并自行調(diào)整而不是整個(gè)程序崩掉。這點(diǎn)是 Agent 和普通腳本在設(shè)計(jì)理念上最大的不同之一。第三條單位寫(xiě)進(jìn)描述里。工具的 description 字段里要明確寫(xiě)出參數(shù)和返回值的單位比如能量單位 eV、力收斂判據(jù)單位 eV/?。模型對(duì)單位非常敏感描述里不寫(xiě)清楚它很容易傳錯(cuò)量級(jí)。3.3 循環(huán)控制與終止條件一個(gè)最基本的 Agent 循環(huán)如下把當(dāng)前狀態(tài)和歷史整理成消息列表。交給決策器得到下一個(gè)動(dòng)作。如果是終止動(dòng)作結(jié)束循環(huán)并輸出結(jié)果。否則解析動(dòng)作名和參數(shù)調(diào)用對(duì)應(yīng)工具。記錄工具返回結(jié)果回到第 1 步。這里面有幾個(gè)必須設(shè)的護(hù)欄。最大步數(shù)限制比如 20 步防止無(wú)限循環(huán)重復(fù)動(dòng)作檢測(cè)防止模型卡在同一個(gè)調(diào)用上工具執(zhí)行超時(shí)防止某個(gè)計(jì)算卡死異常動(dòng)作工具名不存在、參數(shù)缺失要有明確的兜底返回而不是直接拋異常。在實(shí)際項(xiàng)目中還有一個(gè)容易被忽略的護(hù)欄狀態(tài)一致性檢查。比如模型調(diào)用了優(yōu)化結(jié)構(gòu)之后又調(diào)用了讀取能量如果優(yōu)化失敗導(dǎo)致結(jié)構(gòu)狀態(tài)不合法讀取能量就應(yīng)該返回明確的錯(cuò)誤而不是給出無(wú)意義的數(shù)值。3.4 校驗(yàn)層為什么不能省這一點(diǎn)值得單獨(dú)強(qiáng)調(diào)。模型給出的操作序列在語(yǔ)義上可能是合理的但在數(shù)值上可能完全錯(cuò)誤。比如它可能把晶格常數(shù) 3.6 寫(xiě)成 36或者把力的收斂判據(jù) 0.05 寫(xiě)成 5。這類錯(cuò)誤如果直接傳給計(jì)算程序輕則白跑一次重則產(chǎn)生一堆垃圾數(shù)據(jù)污染結(jié)果庫(kù)。校驗(yàn)層的作用就是在工具執(zhí)行前后做數(shù)值合理性檢查晶格常數(shù)是否在合理區(qū)間比如 2 到 10 ?、原子間距是否過(guò)近小于 0.5 ? 通常意味建模出錯(cuò)、能量是否為有限值、優(yōu)化后的最大力是否真的低于判據(jù)。這些檢查寫(xiě)起來(lái)不復(fù)雜但能讓整個(gè)系統(tǒng)的可靠性提升一個(gè)量級(jí)。后面實(shí)戰(zhàn)部分會(huì)把它們具體實(shí)現(xiàn)出來(lái)。4. 完整實(shí)戰(zhàn)搭建一個(gè)結(jié)構(gòu)優(yōu)化 Agent4.1 初始化項(xiàng)目與依賴先創(chuàng)建目錄結(jié)構(gòu)并寫(xiě)一個(gè)空的__init__.py然后在agent/session.py里定義會(huì)話對(duì)象。這個(gè)對(duì)象是整段代碼的狀態(tài)中心。# 文件路徑agent/session.py from __future__ import annotations import os from typing import Any, Dict, List, Optional from ase import Atoms class ChemSession: 計(jì)算會(huì)話持有當(dāng)前結(jié)構(gòu)、歷史記錄和運(yùn)行目錄。 def __init__(self, workdir: str runs): self.workdir workdir os.makedirs(self.workdir, exist_okTrue) self.atoms: Optional[Atoms] None self.energy: Optional[float] None self.max_force: Optional[float] None self.history: List[Dict[str, Any]] [] def require_atoms(self) - Atoms: 獲取當(dāng)前結(jié)構(gòu)沒(méi)有則拋出可被工具層捕獲的錯(cuò)誤。 if self.atoms is None: raise RuntimeError(當(dāng)前會(huì)話還沒(méi)有結(jié)構(gòu)請(qǐng)先調(diào)用 build_bulk) return self.atoms def summary(self) - Dict[str, Any]: 生成給模型看的結(jié)構(gòu)摘要不要塞完整坐標(biāo)。 if self.atoms is None: return {has_structure: False} return { has_structure: True, formula: self.atoms.get_chemical_formula(), natoms: len(self.atoms), cell_lengths: [round(x, 4) for x in self.atoms.cell.lengths()], energy_eV: None if self.energy is None else round(self.energy, 6), max_force_eV_per_A: ( None if self.max_force is None else round(self.max_force, 6) ), } def log(self, step: int, action: str, payload: Dict[str, Any]) - None: self.history.append({step: step, action: action, payload: payload})注意summary()里只返回摘要而不是完整坐標(biāo)這是刻意設(shè)計(jì)的。一個(gè) 100 原子的結(jié)構(gòu)如果完整序列化進(jìn)上下文會(huì)占用大量 token而且模型也看不懂坐標(biāo)數(shù)組。摘要里給元素組成、原子數(shù)、晶格參數(shù)、當(dāng)前能量已經(jīng)足夠支撐決策了。4.2 編寫(xiě)核心工具函數(shù)接下來(lái)是工具層。每個(gè)函數(shù)都遵循前面說(shuō)的契約基本類型參數(shù)、dict 返回值、錯(cuò)誤內(nèi)部捕獲。# 文件路徑agent/tools.py from __future__ import annotations import json import os from typing import Any, Dict from ase.build import bulk from ase.calculators.emt import EMT from ase.io import write as ase_write from ase.optimize import BFGS from agent.session import ChemSession def build_bulk( session: ChemSession, symbol: str, crystalstructure: str fcc, a: float 3.6, ) - Dict[str, Any]: 按指定晶格常數(shù)構(gòu)建體相結(jié)構(gòu)。a 的單位是 ?。 try: if not (2.0 float(a) 10.0): return { status: error, message: f晶格常數(shù) {a} 不在合理區(qū)間 [2.0, 10.0] ?請(qǐng)檢查是否單位寫(xiě)錯(cuò), } atoms bulk(symbol, crystalstructure, afloat(a), cubicTrue) session.atoms atoms session.energy None session.max_force None return { status: ok, formula: atoms.get_chemical_formula(), natoms: len(atoms), cell_lengths_A: [round(x, 4) for x in atoms.cell.lengths()], } except Exception as exc: # noqa: BLE001 return {status: error, message: f構(gòu)建結(jié)構(gòu)失敗: {exc}} def optimize( session: ChemSession, fmax: float 0.05, steps: int 200, ) - Dict[str, Any]: 使用 BFGS 做結(jié)構(gòu)優(yōu)化。fmax 單位 eV/?。 try: atoms session.require_atoms() if not (1e-4 float(fmax) 1.0): return { status: error, message: f收斂判據(jù) {fmax} eV/? 不合理常見(jiàn)取值 0.01 ~ 0.1, } if not (1 int(steps) 2000): return {status: error, message: f步數(shù) {steps} 超出允許范圍} atoms.calc EMT() optimizer BFGS(atoms, logfileos.devnull) converged optimizer.run(fmaxfloat(fmax), stepsint(steps)) forces atoms.get_forces() max_force float((forces ** 2).sum(axis1).max() ** 0.5) energy float(atoms.get_potential_energy()) session.energy energy session.max_force max_force return { status: ok, converged: bool(converged), energy_eV: round(energy, 6), max_force_eV_per_A: round(max_force, 6), cell_lengths_A: [round(x, 4) for x in atoms.cell.lengths()], } except Exception as exc: # noqa: BLE001 return {status: error, message: f優(yōu)化失敗: {exc}} def get_state(session: ChemSession) - Dict[str, Any]: 讀取當(dāng)前會(huì)話狀態(tài)摘要。 return {status: ok, **session.summary()} def save_structure(session: ChemSession, filename: str final.xyz) - Dict[str, Any]: 把當(dāng)前結(jié)構(gòu)寫(xiě)入 runs 目錄返回絕對(duì)路徑。 try: atoms session.require_atoms() if os.path.basename(filename) ! filename: return {status: error, message: filename 不能包含路徑分隔符} path os.path.join(session.workdir, filename) ase_write(path, atoms) return {status: ok, path: os.path.abspath(path), natoms: len(atoms)} except Exception as exc: # noqa: BLE001 return {status: error, message: f寫(xiě)入結(jié)構(gòu)失敗: {exc}}這里有幾點(diǎn)值得解釋。BFGS的run()方法返回布爾值表示是否收斂這個(gè)返回值要透?jìng)鹘o模型因?yàn)槟P托枰獡?jù)此判斷是繼續(xù)調(diào)大步數(shù)還是調(diào)整初始結(jié)構(gòu)。logfileos.devnull是為了避免優(yōu)化過(guò)程刷屏實(shí)際項(xiàng)目中建議改成寫(xiě)文件方便事后復(fù)盤(pán)。最大力的計(jì)算用了(forces ** 2).sum(axis1).max() ** 0.5這是對(duì)每行三個(gè)分量求平方和再開(kāi)方得到每個(gè)原子的力矢量模長(zhǎng)取最大值。注意不要寫(xiě)成forces.max()那是對(duì)分量取最大物理意義完全不同。save_structure里對(duì)filename做了路徑分隔符檢查這是一個(gè)簡(jiǎn)單但必要的安全邊界。如果不檢查模型完全可能傳入../../etc/passwd這種值。雖然這只是個(gè)演示項(xiàng)目但這種習(xí)慣要養(yǎng)成。4.3 注冊(cè)工具 Schema工具寫(xiě)好了還要告訴模型有哪些工具、參數(shù)是什么。這里用標(biāo)準(zhǔn)的 function calling 格式組織。# 文件路徑agent/schema.py TOOL_SCHEMA [ { type: function, function: { name: build_bulk, description: ( 按給定晶格常數(shù)構(gòu)建體相晶體結(jié)構(gòu)。 參數(shù) a 的單位是埃(?)常見(jiàn)金屬約在 3.0 到 4.5 之間。 ), parameters: { type: object, properties: { symbol: {type: string, description: 元素符號(hào)如 Cu}, crystalstructure: { type: string, description: 晶體結(jié)構(gòu)類型如 fcc、bcc、hcp, }, a: {type: number, description: 晶格常數(shù)單位 ?}, }, required: [symbol, a], }, }, }, { type: function, function: { name: optimize, description: 對(duì)當(dāng)前結(jié)構(gòu)做 BFGS 結(jié)構(gòu)優(yōu)化返回最終能量和最大力。, parameters: { type: object, properties: { fmax: { type: number, description: 力的收斂判據(jù)單位 eV/?常用 0.05, }, steps: {type: integer, description: 最大優(yōu)化步數(shù)}, }, required: [], }, }, }, { type: function, function: { name: get_state, description: 讀取當(dāng)前結(jié)構(gòu)摘要包括組成、原子數(shù)、晶格常數(shù)、能量。, parameters: {type: object, properties: {}, required: []}, }, }, { type: function, function: { name: save_structure, description: 把當(dāng)前結(jié)構(gòu)保存為 xyz 文件到運(yùn)行目錄。, parameters: { type: object, properties: { filename: {type: string, description: 文件名不要帶路徑} }, required: [filename], }, }, }, ]Schema 里的 description 是給模型看的寫(xiě)得好不好直接影響調(diào)用準(zhǔn)確率。經(jīng)驗(yàn)是把單位、常見(jiàn)取值、參數(shù)間的依賴關(guān)系都寫(xiě)進(jìn)去模型出錯(cuò)的概率會(huì)明顯下降。比如常見(jiàn)金屬約在 3.0 到 4.5 之間這句話能有效避免模型傳 36 這種量級(jí)錯(cuò)誤。4.4 實(shí)現(xiàn) Agent 主循環(huán)主循環(huán)負(fù)責(zé)把 Planner、工具、會(huì)話串起來(lái)。這里刻意不依賴任何 Agent 框架就是為了讓每一步都看得見(jiàn)。# 文件路徑agent/loop.py from __future__ import annotations import json from typing import Any, Callable, Dict, List from agent.session import ChemSession from agent.tools import build_bulk, get_state, optimize, save_structure MAX_STEPS 20 class AgentLoop: def __init__(self, session: ChemSession, planner, max_steps: int MAX_STEPS): self.session session self.planner planner self.max_steps max_steps self.tool_registry: Dict[str, Callable[..., Dict[str, Any]]] { build_bulk: lambda **kw: build_bulk(session, **kw), optimize: lambda **kw: optimize(session, **kw), get_state: lambda **kw: get_state(session), save_structure: lambda **kw: save_structure(session, **kw), } self.recent_actions: List[str] [] self.trace: List[Dict[str, Any]] [] def _is_repeat(self, action_key: str) - bool: return len(self.recent_actions) 2 and self.recent_actions[-2:] [action_key, action_key] def run(self, task: str) - Dict[str, Any]: for step in range(1, self.max_steps 1): decision self.planner.next_action(tasktask, stateself.session.summary()) if decision.get(name) finish: self.trace.append({step: step, action: finish, payload: decision}) return {status: ok, steps: step, answer: decision.get(arguments, {}), trace: self.trace} name decision.get(name, ) args decision.get(arguments, {}) or {} action_key f{name}:{json.dumps(args, sort_keysTrue)} if name not in self.tool_registry: result {status: error, message: f未知工具: {name}} elif self._is_repeat(action_key): result {status: error, message: 檢測(cè)到連續(xù)重復(fù)調(diào)用請(qǐng)換一個(gè)動(dòng)作} else: try: result self.tool_registry[name](**args) except TypeError as exc: result {status: error, message: f參數(shù)不匹配: {exc}} except Exception as exc: # noqa: BLE001 result {status: error, message: f工具執(zhí)行異常: {exc}} self.recent_actions.append(action_key) self.session.log(step, name, {args: args, result: result}) self.trace.append({step: step, action: name, args: args, result: result}) return {status: timeout, message: f超過(guò)最大步數(shù) {self.max_steps}, trace: self.trace}幾個(gè)細(xì)節(jié)說(shuō)明。tool_registry里用 lambda 把 session 閉包進(jìn)去這樣 Planner 只需要關(guān)心業(yè)務(wù)參數(shù)不需要處理 session。_is_repeat檢測(cè)連續(xù)兩次完全相同的調(diào)用這是最常見(jiàn)的卡死場(chǎng)景——模型看不到進(jìn)展就一直重復(fù)同一個(gè)動(dòng)作。TypeError單獨(dú)捕獲是因?yàn)閰?shù)不匹配在 Agent 場(chǎng)景里極其常見(jiàn)需要給模型明確的錯(cuò)誤提示讓它自我修正。另外注意返回值里帶了完整trace這個(gè)在調(diào)試時(shí)非常有用可以看到模型每一步的原始決策。生產(chǎn)環(huán)境里應(yīng)該把它寫(xiě)進(jìn)日志文件而不是直接返回給用戶。4.5 兩個(gè) Planner離線腳本與大模型先寫(xiě)一個(gè)離線的腳本化 Planner用于在不接大模型的情況下驗(yàn)證整條鏈路。# 文件路徑planners/scripted.py from __future__ import annotations from typing import Any, Dict, List class ScriptedPlanner: 按預(yù)設(shè)腳本順序返回動(dòng)作用于離線聯(lián)調(diào)和回歸測(cè)試。 def __init__(self, script: List[Dict[str, Any]]): self.script list(script) self.cursor 0 def next_action(self, task: str, state: Dict[str, Any]) - Dict[str, Any]: if self.cursor len(self.script): return {name: finish, arguments: {summary: 腳本執(zhí)行完畢}} action self.script[self.cursor] self.cursor 1 return action對(duì)應(yīng)的入口腳本# 文件路徑main.py from agent.loop import AgentLoop from agent.session import ChemSession from planners.scripted import ScriptedPlanner SCRIPT [ {name: build_bulk, arguments: {symbol: Cu, crystalstructure: fcc, a: 3.6}}, {name: get_state, arguments: {}}, {name: optimize, arguments: {fmax: 0.05, steps: 200}}, {name: get_state, arguments: {}}, {name: save_structure, arguments: {filename: cu_final.xyz}}, {name: finish, arguments: {summary: Cu 結(jié)構(gòu)優(yōu)化完成}}, ] def main() - None: session ChemSession(workdirruns) loop AgentLoop(session, ScriptedPlanner(SCRIPT)) result loop.run(task優(yōu)化 fcc Cu 的晶格常數(shù)) for item in result.get(trace, []): print(item) if __name__ __main__: main()運(yùn)行之后預(yù)期能看到這樣一串輸出先構(gòu)建出含 4 個(gè)原子的 fcc 銅晶胞cubicTrue會(huì)生成常規(guī)立方胞然后優(yōu)化幾步能量大約在 -0.02 eV/atom 量級(jí)EMT 的絕對(duì)值本身沒(méi)有物理意義只看相對(duì)變化最后在當(dāng)前目錄下生成runs/cu_final.xyz。如果要在真實(shí)場(chǎng)景里換成大模型Planner 需要實(shí)現(xiàn)同樣的next_action接口。核心邏輯是把工具 schema 一起傳給模型然后解析返回的 tool_calls# 文件路徑planners/llm.py from __future__ import annotations import json from typing import Any, Dict, List from agent.schema import TOOL_SCHEMA # 說(shuō)明以下為調(diào)用思路示例SDK 版本與方法名請(qǐng)以官方文檔為準(zhǔn) class LLMPlanner: def __init__(self, client, model: str, system_prompt: str ): self.client client self.model model self.messages: List[Dict[str, Any]] [] self.system_prompt system_prompt or ( 你是一個(gè)計(jì)算材料學(xué)助手。你只能通過(guò)提供的工具操作結(jié)構(gòu) 不要憑空給出數(shù)值結(jié)果。每次只調(diào)用一個(gè)工具。 ) def next_action(self, task: str, state: Dict[str, Any]) - Dict[str, Any]: if not self.messages: self.messages.append({role: system, content: self.system_prompt}) self.messages.append( { role: user, content: f任務(wù){(diào)task}\n當(dāng)前狀態(tài){json.dumps(state, ensure_asciiFalse)}, } ) response self.client.chat.completions.create( modelself.model, messagesself.messages, toolsTOOL_SCHEMA, tool_choiceauto, ) message response.choices[0].message self.messages.append(message.model_dump() if hasattr(message, model_dump) else message) if not getattr(message, tool_calls, None): return {name: finish, arguments: {summary: message.content}} call message.tool_calls[0] try: arguments json.loads(call.function.arguments or {}) except json.JSONDecodeError: arguments {} return {name: call.function.name, arguments: arguments} def observe(self, result: Dict[str, Any]) - None: 把工具結(jié)果回填到消息歷史供下一輪決策使用。 self.messages.append( {role: tool, content: json.dumps(result, ensure_asciiFalse)} )這里要提醒一句不同版本 SDK 的工具調(diào)用回填格式不完全一樣tool消息通常需要帶tool_call_id。實(shí)際接入時(shí)請(qǐng)對(duì)照官方文檔調(diào)整不要直接照抄。這也是本文故意把 Planner 抽成接口的原因——換個(gè)模型或者換個(gè) SDK只需要改這一個(gè)文件。4.6 加入校驗(yàn)層前面說(shuō)的校驗(yàn)層現(xiàn)在補(bǔ)上。它的作用是攔截那些看起來(lái)能跑但結(jié)果沒(méi)意義的情況。# 文件路徑agent/validators.py from __future__ import annotations import math from typing import Any, Dict from ase import Atoms def check_structure(atoms: Atoms, min_distance: float 0.5) - Dict[str, Any]: 檢查結(jié)構(gòu)的基本合理性返回校驗(yàn)結(jié)論。 issues [] if len(atoms) 0: issues.append(結(jié)構(gòu)中沒(méi)有原子) cell_lengths atoms.cell.lengths() if any(x 0 for x in cell_lengths): issues.append(f晶胞長(zhǎng)度異常: {cell_lengths}) distances atoms.get_all_distances(micTrue) for i in range(len(atoms)): for j in range(i 1, len(atoms)): if distances[i][j] min_distance: issues.append( f原子 {i} 與 {j} 距離 {distances[i][j]:.3f} ? 過(guò)近疑似建模錯(cuò)誤 ) return {ok: not issues, issues: issues} def check_energy(energy: float) - Dict[str, Any]: 檢查能量是否為有限值。 if energy is None: return {ok: False, issues: [能量為空]} if not math.isfinite(energy): return {ok: False, issues: [f能量不是有限值: {energy}]} return {ok: True, issues: []}get_all_distances(micTrue)里的mic表示使用最小鏡像約定對(duì)周期性體系這是必要的否則會(huì)誤判跨邊界的原子距離。這個(gè)檢查在擴(kuò)胞、切表面之后特別有用能抓出很多建模錯(cuò)誤。把校驗(yàn)接進(jìn)優(yōu)化流程可以在optimize工具里返回值加一個(gè)validation字段也可以在循環(huán)層統(tǒng)一做。實(shí)踐上更推薦在工具內(nèi)部做因?yàn)楣ぞ咧雷约旱恼Z(yǔ)義。5. 從演示走向生產(chǎn)擴(kuò)展方向5.1 接入第一性原理計(jì)算與機(jī)器學(xué)習(xí)勢(shì)演示用的是 EMT速度極快但沒(méi)有精度。真實(shí)場(chǎng)景里通常要換成第一性原理計(jì)算器或機(jī)器學(xué)習(xí)勢(shì)。ASE 的好處是接口統(tǒng)一只要計(jì)算器實(shí)現(xiàn)了get_potential_energy和get_forces上層代碼基本不用改。下面是一個(gè)示意寫(xiě)法展示如何把計(jì)算器做成可配置的# 文件路徑agent/calculators.py from __future__ import annotations from ase.calculators.emt import EMT def make_calculator(name: str emt, **kwargs): 根據(jù)名稱返回計(jì)算器實(shí)例。真實(shí)項(xiàng)目里在這里分支到 VASP、CP2K 或機(jī)器學(xué)習(xí)勢(shì)。 name (name or emt).lower() if name emt: return EMT() # 其他計(jì)算器請(qǐng)按實(shí)際安裝情況補(bǔ)充例如 # if name mace: # from mace.calculators import mace_mp # return mace_mp(modelkwargs.get(model, medium)) raise ValueError(f不支持的計(jì)算器: {name})這里的關(guān)鍵設(shè)計(jì)是把計(jì)算器選擇也變成一個(gè)參數(shù)讓 Agent 可以在成本和質(zhì)量之間做權(quán)衡。比如粗篩階段用機(jī)器學(xué)習(xí)勢(shì)最后精修用第一性原理。這種分階段策略在真實(shí)項(xiàng)目里非常常見(jiàn)因?yàn)樗馨延?jì)算成本降下來(lái)一大截。需要提醒的是真正的第一性原理計(jì)算動(dòng)輒幾十分鐘到幾小時(shí)Agent 的循環(huán)必須支持異步——不能讓整個(gè)進(jìn)程阻塞等待。實(shí)踐做法是把任務(wù)提交到作業(yè)調(diào)度系統(tǒng)工具返回一個(gè)作業(yè) ID然后另設(shè)一個(gè)查詢工具輪詢狀態(tài)。這樣 Agent 的循環(huán)節(jié)奏和計(jì)算任務(wù)的生命周期就解耦了。5.2 批量任務(wù)與結(jié)果匯總單個(gè)結(jié)構(gòu)的優(yōu)化只是起點(diǎn)。真實(shí)場(chǎng)景往往是幾十上百個(gè)結(jié)構(gòu)這時(shí)候 Agent 的角色就變成了調(diào)度員決定先跑哪些、哪些失敗需要重試、哪些結(jié)果異常需要人工復(fù)核。批量場(chǎng)景下最重要的工程點(diǎn)是冪等性和緩存。每個(gè)結(jié)構(gòu)用內(nèi)容哈希做 key算過(guò)的直接讀緩存不要重復(fù)算。這一步能省掉大量算力也能讓整個(gè)流程可以斷點(diǎn)續(xù)跑。結(jié)果匯總建議輸出結(jié)構(gòu)化格式JSON 或 CSV字段固定不要用自然語(yǔ)言描述結(jié)果。自然語(yǔ)言適合給模型讀不適合給人做后續(xù)分析。5.3 讓 Agent 輸出可復(fù)現(xiàn)的記錄一個(gè)容易被忽略的要求Agent 的每一次運(yùn)行都應(yīng)該產(chǎn)出一份可復(fù)現(xiàn)的記錄包括任務(wù)描述、模型版本、工具調(diào)用序列、每個(gè)工具的輸入輸出、最終結(jié)果。這份記錄的價(jià)值在于當(dāng)結(jié)果出現(xiàn)爭(zhēng)議時(shí)你可以一層層回溯到底是哪一步出了問(wèn)題。實(shí)踐上可以把前面循環(huán)里的trace直接序列化成 JSON 落盤(pán)文件名帶上時(shí)間戳。如果接了真實(shí)模型建議把模型的原始響應(yīng)也存下來(lái)方便排查是模型的問(wèn)題還是解析的問(wèn)題。6. 常見(jiàn)問(wèn)題與排查清單6.1 高頻問(wèn)題對(duì)照表問(wèn)題現(xiàn)象常見(jiàn)原因解決思路報(bào)錯(cuò)說(shuō)某元素沒(méi)有對(duì)應(yīng)的 EMT 參數(shù)EMT 計(jì)算器只支持部分元素?fù)Q用支持該元素的計(jì)算器或在工具層做元素白名單校驗(yàn)并提前返回明確錯(cuò)誤優(yōu)化跑完converged為 False初始結(jié)構(gòu)離平衡位置太遠(yuǎn)、步數(shù)不夠、判據(jù)過(guò)嚴(yán)先放寬 fmax 到 0.1 粗優(yōu)化再收緊到 0.02 精優(yōu)化或調(diào)整初始晶格常數(shù)能量出現(xiàn)nan或極大正值原子重疊、晶胞退化、計(jì)算器參數(shù)缺失用check_structure檢查最小原子間距確認(rèn)晶胞長(zhǎng)度為正模型反復(fù)調(diào)用同一個(gè)工具工具返回值沒(méi)有提供新信息模型無(wú)法判斷進(jìn)展檢查工具返回是否包含關(guān)鍵數(shù)值在主循環(huán)加重復(fù)動(dòng)作檢測(cè)并返回提示工具調(diào)用報(bào)參數(shù)不匹配模型傳了多余參數(shù)或類型不對(duì)在循環(huán)里捕獲TypeError把錯(cuò)誤信息回填給模型同時(shí)精簡(jiǎn) schema 的 required 字段優(yōu)化后晶格常數(shù)幾乎沒(méi)變用了固定晶胞的自由度設(shè)置只優(yōu)化了原子位置明確是否需要優(yōu)化晶胞ASE 中 BFGS 默認(rèn)會(huì)優(yōu)化所有自由度但需確認(rèn)Atoms是否帶正確的 pbc結(jié)果每次跑都不完全一樣初始結(jié)構(gòu)不同、優(yōu)化器隨機(jī)性、并行歸約順序固定初始結(jié)構(gòu)來(lái)源、固定優(yōu)化器參數(shù)、記錄完整輸入保存文件時(shí)報(bào)路徑錯(cuò)誤文件名包含路徑分隔符或非法字符在工具層做文件名白名單校驗(yàn)只允許字母數(shù)字下劃線和點(diǎn)6.2 建議的排查順序遇到 Agent 跑飛的情況建議按這個(gè)順序查先看 trace 里最后一個(gè)成功的工具調(diào)用是什么確認(rèn)狀態(tài)是否合法再看模型給出的參數(shù)是否在合理范圍然后單獨(dú)把那個(gè)工具函數(shù)拎出來(lái)脫離 Agent 手動(dòng)調(diào)用一次確認(rèn)計(jì)算本身沒(méi)問(wèn)題最后才懷疑模型。這個(gè)順序能幫你快速區(qū)分計(jì)算問(wèn)題和調(diào)度問(wèn)題避免在錯(cuò)誤的方向上浪費(fèi)時(shí)間。一個(gè)很實(shí)用的技巧是準(zhǔn)備一組固定的回歸用例幾個(gè)典型結(jié)構(gòu)、幾組典型參數(shù)每次改動(dòng) Agent 邏輯后跑一遍確認(rèn)結(jié)果沒(méi)變。Agent 系統(tǒng)的不確定性很強(qiáng)沒(méi)有回歸測(cè)試的話改一行代碼可能帶來(lái)完全意想不到的行為變化。7. 最佳實(shí)踐與工程建議7.1 工具粒度的把握工具粒度是設(shè)計(jì) Agent 時(shí)最需要反復(fù)調(diào)整的地方。太粗模型沒(méi)有調(diào)度空間Agent 退化成一個(gè)固定腳本太細(xì)模型要在瑣碎操作上消耗大量 token 和步數(shù)。一個(gè)經(jīng)驗(yàn)法則是一個(gè)工具對(duì)應(yīng)一個(gè)物理上有意義的操作。構(gòu)建結(jié)構(gòu)、優(yōu)化結(jié)構(gòu)、計(jì)算單點(diǎn)能、保存結(jié)構(gòu)這些都是有明確物理含義的原子操作。而把第 3 個(gè)原子的 x 坐標(biāo)加 0.1這種就不適合做成工具因?yàn)樗粚?duì)應(yīng)任何有意義的研究動(dòng)作。另一個(gè)法則是如果一個(gè)操作幾乎總是跟著另一個(gè)操作出現(xiàn)考慮把它們合并。比如優(yōu)化并返回能量就比優(yōu)化和讀能量?jī)蓚€(gè)工具更實(shí)用因?yàn)榉珠_(kāi)調(diào)用只會(huì)增加步數(shù)。7.2 安全邊界與資源控制涉及真實(shí)計(jì)算資源的場(chǎng)景安全邊界必須提前設(shè)計(jì)。至少要有這幾層文件寫(xiě)入限制在指定目錄內(nèi)計(jì)算任務(wù)有超時(shí)和資源上限單次會(huì)話的總計(jì)算量有配額危險(xiǎn)操作比如刪除文件、提交大規(guī)模作業(yè)需要顯式確認(rèn)。不要指望模型自己遵守這些規(guī)則。模型的輸出是不可信的輸入所有約束必須在代碼層強(qiáng)制實(shí)施。這和 Web 開(kāi)發(fā)里永遠(yuǎn)不要信任前端傳參是同一個(gè)道理。7.3 可復(fù)現(xiàn)性與版本記錄計(jì)算科學(xué)最講究可復(fù)現(xiàn)。引入 Agent 之后可復(fù)現(xiàn)性面臨新的挑戰(zhàn)同一個(gè)任務(wù)模型可能給出不同的操作序列。應(yīng)對(duì)辦法有兩個(gè)方向一是把所有輸入任務(wù)描述、模型版本、溫度參數(shù)、工具 schema 版本都記錄下來(lái)二是關(guān)鍵流程提供固化能力也就是把一次成功的 Agent 運(yùn)行固化成腳本后續(xù)直接跑腳本。第二個(gè)方向在實(shí)際項(xiàng)目中價(jià)值很高。Agent 負(fù)責(zé)探索一旦找到可行路徑就固化成確定性流程既保留了靈活性又保證了穩(wěn)定性。7.4 日志與可觀測(cè)性建議給每次會(huì)話分配一個(gè)唯一 ID所有日志帶上這個(gè) ID。日志內(nèi)容至少包括每步的動(dòng)作名、參數(shù)、返回結(jié)果摘要、耗時(shí)。有了這些出問(wèn)題時(shí)可以像查分布式系統(tǒng)調(diào)用鏈一樣回溯。另外建議對(duì)工具調(diào)用做耗時(shí)統(tǒng)計(jì)。如果某個(gè)工具平均耗時(shí)特別長(zhǎng)說(shuō)明它可能被調(diào)用得過(guò)于頻繁或者內(nèi)部有優(yōu)化空間。這類數(shù)據(jù)驅(qū)動(dòng)的優(yōu)化比憑感覺(jué)調(diào)整有效得多。7.5 成本控制如果接的是商用大模型 APItoken 成本需要關(guān)注。控制手段主要有三個(gè)精簡(jiǎn) schema只保留必要工具和參數(shù)、精簡(jiǎn)狀態(tài)摘要不要傳完整結(jié)構(gòu)、限制歷史長(zhǎng)度只保留最近若干輪對(duì)話。一個(gè)容易忽略的點(diǎn)是工具返回值的長(zhǎng)度。如果工具返回了完整的坐標(biāo)數(shù)組或者幾千行的輸出文件token 會(huì)瞬間爆掉。所有工具返回值都應(yīng)該做摘要化處理只保留決策需要的數(shù)值。8. 學(xué)習(xí)路線與后續(xù)方向如果想把這條路走下去建議分三個(gè)階段推進(jìn)。第一階段是把本文的演示跑通并且改造它。換幾個(gè)不同的元素和晶體結(jié)構(gòu)故意傳入錯(cuò)誤參數(shù)看系統(tǒng)怎么反應(yīng)故意讓優(yōu)化不收斂看 Agent 能否自行調(diào)整。這個(gè)階段的目的是建立對(duì)整個(gè)鏈路的直覺(jué)。第二階段是接入真實(shí)計(jì)算。選一個(gè)你熟悉的小體系用你平時(shí)用的計(jì)算軟件跑一遍然后把同樣的流程用 Agent 封裝。這個(gè)階段會(huì)暴露大量工程細(xì)節(jié)問(wèn)題作業(yè)提交、狀態(tài)輪詢、輸出解析、錯(cuò)誤恢復(fù)。把這些問(wèn)題解決掉系統(tǒng)才算真正可用。第三階段是做對(duì)比評(píng)估。用同一批任務(wù)分別用人工流程和 Agent 流程跑對(duì)比耗時(shí)、成本、結(jié)果一致性。只有在數(shù)據(jù)上站得住腳才值得推廣。需要提前提醒的風(fēng)險(xiǎn)有幾個(gè)。一是不要把 Agent 的輸出當(dāng)成最終結(jié)論所有數(shù)值結(jié)果都必須經(jīng)過(guò)獨(dú)立校驗(yàn)二是不要在未經(jīng)驗(yàn)證的情況下讓它操作生產(chǎn)計(jì)算資源三是注意數(shù)據(jù)的合規(guī)性涉及未公開(kāi)材料的計(jì)算數(shù)據(jù)不要隨意傳給外部服務(wù)。最后想說(shuō)Agent 在計(jì)算材料學(xué)里的定位短期內(nèi)更像是熟練的科研助理而不是獨(dú)立研究者。它能把重復(fù)勞動(dòng)接過(guò)去能幫你把流程標(biāo)準(zhǔn)化能減少低級(jí)錯(cuò)誤但科學(xué)判斷的部分仍然需要人來(lái)把關(guān)。把這個(gè)定位想清楚落地的時(shí)候就不會(huì)有太多不切實(shí)際的期待也更容易做出真正有用的東西。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲少妇综合在线播放| 超碰美女97| 精品国产一区二区三区四区在线看| 美熟女逼导航AV操逼| 操一区| yw尤物av无码点击进入麻豆| 色五月AV在线| 欧洲一区二区三区免费| 欧美日韩高潮喷水91| 三级精品三级在线观看| 撸无码不卡免费视频| 九九玖玖精品| 五月天色五月| 十八禁av无码免费网站APP| 素人伊尹大香蕉免费下载视频| 国产欧美日韩女同性恋ww喷水精品| 亚洲?V无码专区在线电影| 亚洲欧洲日产国产综合网| 色综合网1| 青青在线视频日韩欧美| 精品久久久一本一道| 三级片大波波| 小少妇| 国产一区二区精品久久99| 97爱综合| 欧美日韩久久精品爱爱| 色噜噜人妻av中文字幕| 青青草原香蕉日本Ap| 欧美内射少妇| 麻豆福利视频导航| 午夜福利久久久噜久噜久久综合 | 一区超碰一区| 蜜乳av一区二区三区四区不卡| 日本熟妇熟色97一本在线观看| 色婷婷五月综合激情中文字幕| 天天草夜夜草高潮片| 中文 人妻 制服| 久久精品一区一起草| 国产精品情侣啪啪| 内射白嫩美女| 国产欧美一区二区| 久久9亚洲| 无码91| 久久天堂婷婷网| 成人性爱电影网| 欧美特大黄一级片片免费| 91国产操逼视频| 日韩三级伊人| 亚洲国产欧美一区二区潘金莲| 大香蕉欧美| 密乳视频在线| 丰满熟女一区二区三区在线播放| 97精品视频| 丝袜足交视频| 锕锕好爽 死我在线观看| 操逼无毒无码免费视频| 中文字幕乱码在线| 欧美成人免费在线观看| 亚洲春色欧美激情自拍| 一,爱啪啪,在线免费视频| 久久超碰国产一区二区三区| 粉嫩av久久一区二区三区| 少妇厨房愉情理伦片bd在线观看| 激情抓乳插进去啪啪啪日韩| 午夜120视频在线观看| 高清成年美女黄网站免费大全 | 性爱1区| 999在线电影香蕉| 一区二区三区 丝袜 高跟 美腿| 九九热超碰| 色色五月婷婷| 啊啊啊不要好爽日韩无码一区| 婷婷亚洲综合| 久久精品人妻一区二区| 欲香欲色| 日韩欧美tv一区二区在线观看| 变态乱伦伪娘灌肠一区二区| 欧美性生活综合| 久操黄色视频| 亚洲欧美日韩国产丝袜自拍中文| 后入人妻无码| 亚洲AV秘无码一区..| 一区操逼日比视频| 国产欧美伊人| 欧美色图片色哟哟| 激情熟女12P| 亚一综合久久久久久久久久| 天天看综合网| 精品无码产区一区二| 不卡在线观看视频| 久久久久久久亚洲Av无码| 国产精品成人无码av| 粉嫩av在线一区二区| 91视频国品一二三区| 伊人玖玖网| 1024精品在线| se吧提供国产乱老熟视频胖女人| 天天色播亚洲综合网站| 日本福利社| 78精品| 日B操| 99色视频| 久久夜精品一区二区三区| 韩日欧亚a级| 日韩无码操逼片| 日韩无码专区| 97在线无精品| 在线αⅴ| 精品久久視頻在线| 精品国产Av无码久久久伦古装| 免费人成毛片乱码| 亚洲精品一区中文字幕乱码| 上床啊啊啊| 密乳AV免费观看| 91视频国品一二三区| 亚洲大胆人体av| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 萌白酱自拍视频| 五月天激情网站| 91超碰碰在线| 2018天天干在线视频| 久青草影院| 久久久涩| 性做久久久久久免费观看软件| 久久鲁夜| 日本人人操人人操| 亚洲加勒比色图| 日韩色欲久久一二三四区| 四季AV综合网址| 大鸡巴久久| 亚州AV无码国产精品| 超碰1997| 亚洲AV成人无码久久精品播放| 校园春色综合色| 岛国黄色短视频| 老熟女综合网| 9 1超碰九色| 97硬碰| www99热| 8050午夜少妇无码| 亚洲啪AⅤ永久无码| 欧美加勒比| 久久亚洲色图中文字幕| 久久久久久91香蕉国产| 精品久久在线区一区| 五月丁香综合激情| 欧洲色色| 亚洲AV色图一区| 激情五月综合| 桃色五月天| 十八禁视频网站| 最新中文字幕在线亚洲| 日韩中文字幕国产| 岛国视频免费在线观看| 精品人体无圣光凹凸| 中日韩熟女| 女人被添高潮免费视频| 伊人AAA| 久久久成人国产精品无码| 午夜a成v人电影| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 日本成人A片网站| 玖玖资源视频一区二区三区| 蜜臀va69| TS人妖另类精品视频系列| 国产精品久久久啊| 久久久久九九九| 国产精品视频精品一二| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 日本αv| 影音先锋视频在线| 91狠狠综合久久| 国产少妇与亚洲av| 亚洲男人天堂2013| av中亚| 一区操逼日比视频| 天天淫人人妻日日色| 亚洲色图日韩精品| 人人爱操| 色综合99999| 综合网天天| 男人高清无码一区二区| 亚州成人a∨| 久久成人网站| 精品偷拍13p欧美dodk视频| 色爱国产| 日本不卡中文| 免费看久久久性性| 久久久不卡区一区二区三区久久久| 电影69乱码96| 亚洲高清欧美总合| 91日韩在线| 国产精品久久久久久久久久二区三区| av黄图片在线观看| 后入人妻一区| 97超碰超| 久久久96精品| 国产辣妈在线视频福利| 蜜臀AV成人精品蜜臀AV久久| 天天综合色图| 日本免费中文一区二区三区四区| 日韩 欧美 国产 麻豆| 国产精品蜜臀久久久久无码AV| 999在线电影香蕉| 欧美后入| 欧日韩在线观看| 欧美性爱第一区| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 欧美性爱伊人| 大香蕉狠狠爱| 亚洲91网。| 日本操色导航| 日韩精品资源| 麻豆婷婷成人一二三| 久久久久ab| 欧美综合网在线| 中文字日本乱码| 久久青娱乐| 在线日韩视频| 日韩激情无码影院| 久久女同性恋一二区| 四虎国产精品永久地址入口| 素人伊尹大香蕉免费下载视频| 97av在线视频| av天堂精品久久| 日本亚欧爱爱| 男女91| 强奸乱亚洲| 天天肏天天干| 亚洲自拍另类丝袜综合| 久9精品| 97久久超碰| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 91在线视频免费中出| 深夜国产一区二区三区在线看| 青青草在线视频美女| 91九九九逼| 婷婷99狠狠躁天天躁| 国产强奸乱伦欧美| 夜色综合| 97这里有精品| 欧美性色欧美| 久久久涩| 日本道人妻久久久在线不卡色视频| 噜噜噜亚洲精品| 玖玖资源综合在线视频| 欧美大波激情xxxx| 欧美大干日韩| 青青操在线亚洲视频观看欧美在线 | 中文字幕精品一区二| 暖暖精品二区三区观看| 亚洲天堂7777| 一级特级aaaa毛片免费观看| 五月婷婷丁香| 大香蕉宅男伊人| 乱伦av国产| 亚洲天天操| 青青青草伊人精品| 精品人妻一区二区三区四区石在线| 日本三级韩国三级美三级91| 性久久| 吉川爱美亚洲二区在线| 免费网色网站| 久久少妇| 色噜噜人妻丝袜a∨先锋影| 亚洲色图日韩精品| 熟女自慰久久久| 97精品视频在线播放| 3PAV乱伦视频| 久久曰曰| 歐美一級亂黃99在綫精品| 久久久久久久久女黄| 国产欧美日韩精品中文| 精人妻一区二区三区| 亚洲好看强奸乱伦| 人妻天堂综合网| 亚州色图片在线色| 蜜臀AV秘一区翔田千里| 九九香蕉网| 日本天天干天天搞一区| #NAME?| 亚洲黄色视频在线观看视频| 国产极品美女高潮无套在线观看| 久久一二三四五六七八九区区区| 夜色97| 久久国产逼| 久久久五月天| 5252色欧美在线男人的天堂| 人人艹亚洲| 色九月综合| 亚洲综合九九| 99热在线观看| 蜜臀久久久99久久久久 | 亚洲男人天堂网站| 亚洲成a人片在线观看中文!!!| 日韩性色b| 人妻熟妇一区二区三区| 簧片免费看视频| 国产自产91区13区| 在线二区不卡| AV和黑人在线播放| 91青视频| 国产乱子伦久久精品综合一区二区三| 国产精品夜夜夜| 999久久久久久久久| 国产亚洲人妻综合日韩 久久| 伊人五月天青青草婷婷| 一区不卡在线观看av| 美女诱惑1区2区| 91模特在线观看| 黄色片,com| 高清不卡国产| 九九综合九九综合| JULIA一区二区三区在线播放| 97久久精品国产| 亚洲欧美一区二区网址| 四虎国产成人精品免费一女五男| 99视频这有这里有精品| 91处女视频在线观看| 不卡中文字幕aⅴ在线| 操操操操操操| 天堂俺去俺来也www久久婷婷| 欧洲乱码视频| 欧美性爱1080p| 人人摸人人舔一区二区| 欧美久久人人网| 超碰是碰在线观看| 色色色999| 超碰97丝袜| 亚洲、日韩、综合、另类| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 亚洲凸凹超碰成人| 91精品综合久久久久久五月丁香| 神马久久久久久| 97丝袜亚洲在线播放| 国产精品亚洲美女久久久久| 综合夜夜| 亚州色图欧美| 色婷婷狠狠| 婷婷av在线中文字幕| 九九九九97| 人妻啊啊人妻啊| 夜夜操美女| 国产97/欧美| 亚洲欧美爆| 亚洲欧洲国产综合av| 亚洲成人贴图| 91爱啪| 激情欧美日韩女同久久| 中文字幕啊啊啊在线观看视频| 亚洲精品国产无码高清| 一本色道综合久久欧美日韩精品| 亚洲色图综合| 五月天人妻综合| 欧美综合色站| 欧美在线官网| 五月婷婷五月天| 深夜国产一区二区三区在线看| 欧美人妻少妇| 91亚洲综合在线| 久久九九精品一区二区| 久草久日| 大乔未久88一区| 99.色网| 深爱五月婷婷| 亚洲成av人片色午夜乱码| 免费看黄视频亚洲网站| 日韩激情电影中文字幕| 久久超碰网| 97这里有精品| 久久久久久久9| 欧美黑人168页欧美黑人167| 啊嗯嗯啊好大好爽| 欧美玖玖爱免费玖玖| 日本午夜福利视频| 成 人 影视 一区 二区 三区 四区| 亚洲天堂 视频你懂的| 国产99精品一区二区三区免费| 人人看黄色视频| 91亚洲欧美| 青青草中文字幕| 日夜伊人网| 亚洲男人的天堂va亚洲男人社| 久久老熟女| 99999亚洲另类| 91成人亚洲色图| 蜜桃视频啊啊啊啊| 久久久成人免费av电影| 五十路成人在线视频二区三区| 亚洲自拍一区夜夜操 | 玖玖久久久| 97亚洲中文| 91天堂网| 久久亚州精品成人Av无| 岛国激情视频在线观看| 大香蕉亚洲中文| 国产SV一线| 青青草在线成人视频| 精品久久久av无码免费| 亚洲清纯综合| 亚洲啪啪视频免费| 日本视频一区二区三区| 亚洲天堂男人在线| 男人的天堂日韩| 永久免费观看的毛片的网站| 亚洲综合九九| 欧美97av| 女人午夜视频777| oumeisetupian| 国产专区路线| 日韩9区| 亚洲自拍一区夜夜操| 婷婷中文字幕| av天堂5| 日韩成人性爱AV| 波多野结衣被操50分钟免费视频 | 久热婷婷| 欧美人人AAA| 激情小说成人日本无码一| 370p日韩欧美亚洲精品| 欧美日韩在线小说| 97视频在线播放| 国产91 丝袜在线播放 | 99丝袜福利在线播放| 黄色区免费观看中文字幕| 四虎永久在线精品免费网址| 国产成久久综合片| 九月丁香| 亚洲国产97在线精品一区| 中文字幕乱偷人妻久久艾草网| 9久久9综合| 欧美日日夜夜| 大香蕉宅男伊人| 日韩ab网| 性九九九九九九| 97超碰这里只有精品| 狠狠躁日日躁夜夜躁A| 日夜尻逼网| 人妻丝袜日本| 日本成人A片免费看| 日亚韩精品视频二区三| 爱爱动态120秒| 神马久久久久久久久久| 啊啊啊 在线| 综合网亚洲| 久久riav中文精品| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 免费97视频| 亚州欧美在线| 琪琪精品免费一区二区三区| 26uuu国产| 91九久| 四虎在线观看网站| 亚洲成a人v欧美综合天堂下载| 国产肏逼网站| 丁香五月自拍| 10000部十八禁看电影| 日本一久是| 久久9久| 欧美综合区| 亚州综合图片| 超碰精品日韩欧美国产| www五月| 国产日产欧产美韩系列麻豆免费| 色吧5亚洲| 一,爱啪啪,在线免费视频| 婷婷五月天福利| 嗯嗯啊中文字幕| 亚洲九九视频在线观看| 久热一区二区| 久久大香蕉手机高清| 亚洲97资源| 伊人久操| 小电影欧美91| 久久九九网| 蜜臀va69| 性爱1区| 女沟厕偷窥piss小便| 国产日本久久免费精品| 五月天亚洲网| 成人性爱电影网| 亚洲丝袜二区在线| 婷婷伊人| 精品无码一区二区三区色欲| 国产精品对白内射| 大学生口爆吞精| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 国内毛片无码一级毛片| 久草看看看| 亚洲天堂男人在线| 精品成人无码| 老鸭窝在线视频播放| 日产狠狠干| 五月天我淫我色av| 天天操天天日青青草超碰av| 丁香五月色| 黄片www视频免费| 精品无码人妻一区二区免费蜜桃| 最新国产亚洲精品精品国产亚洲综合| 欧美亚洲系列| 欧美色一二三| 黑操B| 台湾成人无码AV| 亚洲精品蜜桃久久久| 人人色人人射人人妻| 美国aaaaa一级黄片| 花花AV导航| 东北女人被操| 亚洲日韩精品在线播放| 秋霞成人做爱| 精品无码久久久久久久杏吧| 亚洲熟女少妇免费视频| 久久一二三级一一一| 成人福利视频网| av网站免费线看| 亚洲动态色图| 91久久婷婷| 东京热AV男人的天堂| 久久大线蕉一区| 欧美不卡在线美女| 色色激情| 天天爽天天| 色99视频| 丁香五月婷婷啪啪| 日韩AV熟女乱伦| av在线免费一区二区| AⅤ片水多多| 久久产精品一区二区三区电影| 日本亚欧爱爱| 亚洲精品熟妇1区2区3区。| 亚洲综合69| 天天摸夜夜操视频| 高清肉丝中文无码| 91欧美亚洲| 色欧美色交综合| 91美女在线| 精品国产一区探花在线观看| 久久亚洲国产成人| 天天谢天天干| 女同性恋久久| www鬼畜国产男人的天堂| 精品久久在线区一区| 欧美人妻二区三区| 9久精品视频在线观看| 加勒比少妇AV婷婷六月天超碰超碰| 韩国国产欧美情侣视频在线| 乱色老一区二区三区的观看方式| 夜夜夜爽www精品视频| 1区2区3区视频| 国产一区二区三区免费视频在性观看| 欧美日韩一区二区三区四区蜜桃| 日本在线激情一区二区三区| 五月综合久久| 久久同城AV| 97狠狠| 三级色综合| 嗯嗯啊在线视频| 婷婷香网站| 高清无码人妻久久久一区二区三区aⅴ| 日韩一区二区精彩视频| 日本精品一区二区中文字幕| 久九干| 亚洲第一视频 欧美风情 日韩| 超碰人妻久久| 亚洲欧美日韩综合在线尤物 | 丁香五月激情婷婷| 亚州欧美总和| 日逼视频日本| 怡春苑东京热| 久久久四区| 亚洲一区二区精品福利| 夜夜国产一区| 日韩高清黄片| 97国产精品国| 五月丁香六月综合缴清无码| 天天添天天干电影| 亚洲精品人体| 91色综| 丰满人妻一区二区三区| 超碰久久性爱| 91香蕉国产尤物视频| 91精品久久久久久77777| 97超碰中文字幕| 天天操夜夜嗨| 丁香7月婷婷| 97香蕉碰碰人妻国产欧美| 综合情欲网| 性色av婷婷久久一区二区点复制| 人妻超碰青青草98| 丁香色五月 97干| 亚洲小说视频| 欧美国产视频| 黄片免费看黄片免费看| 日韩大香蕉AV影片| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| www.色吧5.com| 久久国产999| 婷婷六月天| 性色AV蜜色av色欲av| 欧美在线大香蕉| 精品国产久热在线观看| av中亚| 日韩一级二级三级免费看完整版国语版| 久久一区二区高清免费| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 青青草久草| 成人天天看站长推荐| 一级性爱aaaa| 26uuu最新| 东北女人性交| 欧美在线 亚洲| 少妇高潮99p| 国产中文字幕曰本毛片| 国产日本一区二区三区蜜臀在线观看| 亚av顶级裸体一区二区三区四区五区 | 欧美成人亚洲精品| 乱精品一区字幕二区| 久久综合资源一区二区| 好色综合| 性色A∨91| 免费男人的天堂| 国产一| 午夜无码熟妇丰满人妻| 97亚洲欧美日韩| 嗯~啊~快点 死我视频| 97色色色| 超碰97起碰| 色色色网站| 五月婷婷基地| 色色婷婷五月天| 日韩女模中文造逼| 久久高清欧美国产| 国产女生在线| 美日韩成人| 九九色精品| 综合一区中亚洲国产成人综合精品| 激情抓乳插进去啪啪啪日韩| 日韩99精品视频综合区| 视频在线观看免费一区二区三区| 亚洲国产精品9999在线观看| 91成人高清在线观看| 手机看片日韩人妻| 国产操操日韩三级黄| 欧美久久人人网| 国产精品无码论坛| 丁香五月婷婷啪啪| 色综合一区二区三巨| 东北黄色电影| 亚洲熟女乱色一区二区三区久久久 | 91色综| 国产视频小说| 欧美色图亚洲激情| 中国zzijzzijzzwww精品| 99久久精品无码一区二区| 国产AV高清AV无码| 五月婷婷激情综合| 日本久久综合| 亚洲色人阁| 久久久精品中文字幕爱豆| 色狠狠 - 百度| 狠狠综合| 日本久久999| 久久久96| 欧美黄色片AAAAA| 一区二区三区蜜桃成人撸久久东京热 | 久久久网一区| 中文字幕在线免费观看2| Blackedraw视频一区二区| 91oumei| 91麻豆一二三区| 97免费在线视频| 大香网伊人久久综合网eew| 尤物视频偷拍免费| WWW啪啪的com| 日本在线不卡123| 乱码人妻一区二区三区| 2017大香蕉国产精品久久| 99最新日韩偷拍视频| 中文乱码字幕观看| 东北女人的毛片| 激情视屏国产乱伦强奸| 国产精品一区二区三区在线| 日本美女性生活久久久久久久| 欧美日韩啪啪电影| 91狠狠狠| 婷婷激情一区二区三区俺也去| 亚洲国产尤物yw在线观看| 欧美97av| 欧美综合在线91| 色色综合网站| 蜜乳成人AV| 欧美丝袜亚洲| 97爱b| 激情五月综合网| 素人一区二区三区日韩| 97美日韩视频| 免费成人在线熟妇网| 亚洲精品视频二区| 欧美一级黄色18片免费看| 精品午夜福利导航| 桑老女人九区| 亚洲美女 晚间男人天堂 | 五十路六十路素人熟女| 精品人妻久久久久一区二区三区| 久草资源欧美在线视频| 五月丁香色综合| 久久精品店| 欧美伊人久久综合网| 国产精品久久泡妞网站| 欧美 综合 亚洲| 欧美九九99久久精品| 天天插天天操| 亚洲欧美在线观看2021| 天天狠操| 欧美日韩国产成人高清| 久久久夜夜夜| 色九久| 久草毛片| 欧美人妻另类在线| 天天操人人操骚逼网站| 97视频620| 日韩天堂av电影在线观看| 久久XX| 日韩女模中文造逼| 国产区性爱在线视频秋霞豆| av一区二区三区四区| 国产毛片片精品天天看视频| 91精品91久久久中77777| 欧美综合在线第一页| 美女丝袜激情小说| 亚洲91网站| 青娱乐手机日韩在线视频| 少妇与黑人高潮在线| 久久久久久久久久久人妻| 亚洲精品男人的天堂| 天天躁日日躁AAAXX| www.国产高潮精品| 人妻乱仑一区二区三区| 国岛片视频| 天天天天天天天天天天干美女| 又粗又长又爽在线观看| 婷婷av在线中文字幕| 91久久免费视频互動交流| 在线日韩精品一区二区三区| 校园春色综合网| 午夜性生活av免费在线看| 插入逼91| 国产又黄又爽| 日本天天干天天日一区| 蜜桃臀一区二区aV| 亚洲人妻久久久| 久久久月天| 亚洲欲色| 亚洲一区中文精品| 免费的黄片有限公司| 亚洲天堂AV在线播放| 久草国产在线视频| 蜜乳AV色欲AVAV无码| 超碰免费人人| 96久久科窝| 99re8免费高清在线| 日欧毛片久久| 色噜噜人妻av中文字幕| 东京太热男人的天堂久久久| 91激情| 9丨亚洲一区二区在线| 国产91乱伦| 中文字幕在线免费观看视频| 久久久一区二区三区四曲免费听| 91肏屄网| 91九九九吃| 欧美成人精品一区| 精品视频在线观看精品| 久久久久亚洲AV无码专区少妇| 91c色| 日本三级中国三级99人妇网站| 韩国轻伦国内自拍一区| ai欧美亚洲小说| 18精品一二区| 亚洲男人综合| 亚洲欧美日韩综合在线尤物 | 欧美操逼录像国产黄色国产| 大学生美女口爆| 成人午夜小视频手机在线看| 久久久久免费少妇| 精国久久一区二区三区98| 精品日日人妻| 免费观看国产不卡av| 丁香五月天啪啪| 磁力99AV| 97久久国产| 超碰在线香蕉| 久久本道| 亚洲九九视频| 国产一区二区三区久久久精品| 91久久久久久久| 中文幕97| 91免费看一区二区三区| 亚洲日韩青青草色月| 一卡二卡三卡| 国产一区二区精品久久99| 欧美三级不卡| 欧色网址| 欧美性爱伊人| 久草草一二三四区久久| 日本欧美中文字幕| 91婷婷| 久久r精品| 377p欧洲日本亚洲大胆| 台湾佬中文娱乐自偷自拍| 91综合无码| 被体育老师抱着c到高潮| 久久中文色图| 毛片久久| 97日本超碰综合| 亚洲成成熟女人综合一区二区| 中国国产精品一区视频| 嗯啊不要啊啊在线观看视频| 亚洲 欧美综合| 91在线无码精品秘 软件| 97超碰免费人人性爱| 91视频精品| 精品久久久av| 另类天堂| 精品久久在线区一区| 亚洲 欧美 色图| 91欧美| 麻豆av一区二区| 大香蕉综合| 99在线精品观看视频中文| 91爆操视频| 在线观看 99热| 日本免费专区| 欧美日韩亚洲电影| 亚乱色| 青青草好吊| 国产一区二区三区影片| 精品免费成人久久| 九九久久精品| 97欧美综合| 日本一区二区电影网站| 亚洲自拍偷拍视频在线| 丝袜喷水在线| 成 人片 黄色大片| 在线观看 99热| 操比国产| 一二三区精品视频| 淮穴色AV| 色欲久久久久综合网| 精品十三区| 国产精品久久久久久无码红治院| 少妇精品久久久| 亚洲情色中文字幕一区| 人妻激情视频| 久久久精品国产亚洲伊人| 男人的午夜天堂| 亚洲色图20p| 中文字幕一区二区在线日韩精品| 日韩久草| 天天干少妇| 国产无码精品成人| 免费超碰97久久| 五月激情视频| 日韩兔费看黄片| 日韩噜噜69| 人妻人人操| 一起草三级AV电影在线观看 | 亚洲精品乱码线路中文字幕| 色五月激情AV在线| 五月天丁香| 嫩草美女久久| 亚洲第二页| 91老熟女逼| 综合操逼| 曰韩中文人妻视频| 久操视频免费观看| 人人乐大香蕉| 日韩久久.一级黄色片| 97鸡把在线视频| 东京热av男人的天堂| www.色99| 免费福利视频中文字幕| 97超碰精品图片| 大香蕉啪啪啪啪在线| 操逼日韩无码 | 超碰 av 女人天堂| 柠檬AV导航| ,成人免费啪啪视频| 天天影视综合色| 亚洲中文字幕日产无码久久| 狠狠操狠狠爱| 国产精品激情久久久久久久| 国产传媒日韩| 国产人人干| 国产精品色哟哟| 97操碰| 亚洲欧洲精品视频发布| 日韩欧美性吧婷婷乱伦大香蕉 | 色欲天天综合网| 乱伦一区二区三区‘| 欧美78P| 国产欧洲精品亚洲午夜拍精品| 蜜臀av中字字幕网站| 欧美日韩91| 日韩丰满熟妇| 天天日天天搞天天干| 91老司机在线| 国语精品av| 亚洲好色人妻| 精品美女久久一二三| 久久熟妇五十路一区| 欧美午夜精品久久久久久超碰| 5278欧美一区二区三区| 在线免费观看日韩一区| 男女啪啪啪18禁网站| 99夜夜操| 人人操人人操人妻人| 日韩人妻精品| 久久97超碰香蕉| 91精品婷婷国产综合久久竹菊| 人人澡人人爽人人精品| 99re9在线| 丁香六月综合激情| 无码国产精品午夜不卡(| 国产午夜无码片在线观看影视| 久久黄色视频一区二区三区| 一道α片欧美| 91在线精品一区二区三区| 亚洲一区二区在线观看91| 午夜精品久久99蜜桃的功能章节| 日韩精品午夜操呦呦不卡影院| 国产女人操逼视频| 久久精品欧美一区二区三区不卡| 一区二区三区美女超清| 国产家庭乱伦表演| 一级人妻性爱视频| 一级AV性爱| 91香蕉视频在线观看免费| 成人自拍三级在线观看| 自拍偷拍草一草| 日本人妻中文字幕精品| 91丨九色丨国产丨人妻在线| 欧美A片中文字幕| 秋霞成人一级在线观看| 爽极品影院| 人人插人人摸人人| 91free福利| 九九AV| 亚洲91av| 久久久久亚洲精品| 日本黄页视频在线观看| 久久久天美| 亚洲色婷婷综合久久久久中文| 亚洲午夜精品久久久中文影院| JuliaAnnXXX888| 99热在线观看| 人人摸.人人色| 首页中文字幕中文字幕免费| 日本人妻A片成人免费看片| 人妻少妇视频在线播放| 夜夜爽妓女| 91AV天美在线视频| 色约约一区=区三区| 欧美天天综合| 欧美一区二区三区入口| 国产av美女被艹的乱叫| 中文字幕在线观看丝袜| 欧美少妇第一页| 精人妻无码一区二区三区伊人直播| 九99久久| 日本熟妇浓毛hdsex| 久久国产热视频97电影| 九九在线精品| 麻豆福利视频导航| 精品成人久久久人人亚洲| 精品人妻一区二区三区四区不卡在| 日本韩国国产精品一区| 26uuu国产免费观看| 欧美不卡在线美女| 超碰97久久国| 在线97视频| 国产熟女完整版中字| 国产精品色| 欧美青青视频| 啊啊啊啊操死我| 思思热久久成人| 3571色综合一区二区二区| 日本东京热大香蕉a片| 97色香蕉| 婷婷午夜成人色中色| 青草青青久久久久久国产| 丝袜美女诱惑 91 视频| 97综合国产| 日本欧美亚洲高清在线看| 天天摸天天插天天日| 国产外初女出血视频| 美女天天干| 91丨九色丨国产打屁股| 91爱做| 水多多映视AV| 丁香五月天啪啪| 青青欧美| 国产91亚洲精品一区二区三区| 日韩成人大片一区二区| 国产成人主播| 国产真实子伦对白| 五月天偷拍| 久久精品99| 精品国产无码中文| 九九热九九热| 欧美一区二区| 亚洲欧美另类激情小说| 97最新在线播放视频| 97超碰巨乳| 26UUU欧美日本| 色色色色色色色色色色色色色色综合 | 囯产精品强| 人人干黄色| 啊嗯好大视频在线观看| 99中文字幕| 九月色婷婷| 亚洲九九视频| 日本理论在线| 操淫穴亚洲五月丁香| wwwxxx日本爽| 嫩草伊人久久精品| 亚洲熟妇一,二,三期| 日韩在线76| 日韩91网站| 色播五月丁香| 欧美性夜| 91久久久久免| 欧美天天综合网| 婷婷日韩一区二区三区中文字幕在线| 五月天久久人妻| 色综合久久888| 蜜臀AV一区二区三区| AV九九| 色图综合| 好淫网一二三视区| 九九九九热| 欧洲Au麻豆| 99亚洲国产精品色一区二区三区| 亚洲中文字幕有码视频一区二区三区| 亚洲色图综合| 台湾佬中文娱乐自偷自拍| 亚洲AV麻豆Aⅴ无码电影一 | 嗯啊视频免费在线观看| 亚州熟妇精品| 丰满高潮18xxxx| 精品免费成人久久| 九九无码| 国产高清自拍视频| 美女裸体麻豆天美蜜桃91| 亚洲操操操| www欧美性爱| 亚洲熟女乱色| 国产日逼视频| 色老久久| AA丁香综合激情| 中文一区二区三区影院| 亚洲日韩青青草色月| 97人妻免费中文字幕| 97国产精品在线观看| 欧美亚洲日韩人妻在线观看| 久久精品| 亚洲精品1区| 97啪啪| 色波多| 97se综合| 98一区二区精品| 一级@啪啪视频| 亚洲激情深爱文学小说网站| 五月丁香六月激情综合| 亚洲无992tv| 91人妻久久久久久久久久久久久| 欧美在线干| 92性色国产午夜福利在线661| Aa东京男人的天堂| 嗯嗯啊中文字幕| 亚洲国产婷婷在线播放| 99re欧美| 婷婷15月天青娱乐| 五月天婷婷影院| 久久五月天婷婷丁香中文字幕| 日韩在线观看AV| 天堂麻豆天美| 五月丁香激情啪啪| 亚洲精品一区二区精品| 99热婷婷一区二区三| 三级网站超变态精品| 婷婷丁香久久| 二男一女成人A片| 亚洲情欲| 亚洲极品| 久插不卡| 人人色97| 日韩中文字幕在线视频观看| 2021国产成人精品久久| 丝袜视频网国产90| 日韩av色图综合| 欧美激情综合色综合啪啪五月| av天堂精品久久| 亚洲影院成人| 精品日日人妻| 啊啊啊啊啊好舒服视频| 欧美激情 日韩精品| 欧美色五月| 操逼网免费无码视频| 欧美黄色大片在线观看| 啊啊啊好想要| 婷婷丁香人妻 | 97精品在线| 亚洲成人一二三区| 亚洲色色色| 日韩人妻无码专区| 岛国视频免费在线观看| 亚洲乱色熟女一区| 大香蕉伊人网| 亚洲 日本 不卡| 精品久操| 二级毛片| 操逼999| 久久男人网| 大香蕉 222| 97色冈| 欧美综合站| 97在线视频观看| 曰韩av中文字幕专区| 啪一啪免费视频| 国产精品制服丝袜清纯唯美| 国产a片操逼| 国产又黄又爽又刺激久久久久久| 麻豆精品一区二区三区四区免费观看| 欧美色图另类图片| 99热这里只有精品1| 日本加勒比无码专区一二三| 久草在| 欧美亚洲成人在线一区二区三区| 2019天天操天天爽天天拍| 后入人妻一区| 欧美熟妇乱码在线一区| 97干com| 国产自产91区13区| AV老汉| 91丝袜激情在线| 在线观看视频91| 91无码人妻| 亚洲综人网| 清纯唯美综合| 九九AV| 51久久夜色精品国产麻豆| 免费观看国产小粉嫩喷水精品午| heyZO天然素人无码AⅤ专区| 一级@啪啪视频| 视频二区熟女人妻| 一区二区三区精品黑丝白丝酒店对鸡 | 97天堂| 国产精品老熟女一区二区| 人妻天天爽夜夜爽爽|