From a858b02c1aa5629aac09c3c94d463100c97a2f21 Mon Sep 17 00:00:00 2001 From: styxhuang Date: Mon, 26 Jan 2026 15:26:28 +0800 Subject: [PATCH 01/10] add tools-json --- agents-tool.json | 1769 +++++++++++++++++++ scripts/generate_agents_tool_json.py | 265 +++ scripts/improve_description_translations.py | 91 + scripts/translate_all_descriptions.py | 152 ++ scripts/translate_all_descriptions_final.py | 196 ++ scripts/translate_summary_cn.py | 126 ++ scripts/update_all_description_cn.py | 153 ++ scripts/update_all_description_cn_final.py | 148 ++ scripts/update_description_cn.py | 261 +++ scripts/update_description_cn_complete.py | 152 ++ scripts/update_summary_cn.py | 70 + 11 files changed, 3383 insertions(+) create mode 100644 agents-tool.json create mode 100644 scripts/generate_agents_tool_json.py create mode 100644 scripts/improve_description_translations.py create mode 100644 scripts/translate_all_descriptions.py create mode 100644 scripts/translate_all_descriptions_final.py create mode 100644 scripts/translate_summary_cn.py create mode 100644 scripts/update_all_description_cn.py create mode 100644 scripts/update_all_description_cn_final.py create mode 100644 scripts/update_description_cn.py create mode 100644 scripts/update_description_cn_complete.py create mode 100644 scripts/update_summary_cn.py diff --git a/agents-tool.json b/agents-tool.json new file mode 100644 index 00000000..80767eb0 --- /dev/null +++ b/agents-tool.json @@ -0,0 +1,1769 @@ +{ + "tools": [ + { + "tool_id": "001-ABACUSVA-001", + "name": "abacus_vacancy_formation_energy", + "description": "What it does: Calculate formation energy of non-charged vacancy in metal atoms using DFT.\nWhen to use: When you need vacancy formation energy for metal structures.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters like functional, spin polarization, DFT+U, magnetic moments.\nOutputs: Vacancy formation energy.\nCannot do / Limits: Only non-charged vacancy of metal atoms; requires supercell for calculation.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", + "description_cn": "功能: 计算 形成能 金属原子中非带电空位的 使用 DFT.\n何时使用: 当您需要 空位形成能 用于 金属结构.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数 如 泛函, 自旋极化, DFT+U, 磁矩.\n输出: 空位形成能.\n无法做到/限制: 仅 非带电空位 metal的 原子; 需要 超胞 进行计算.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "VACANCY_FORMATION_ENERGY" + ], + "alternative_tools": [ + "apex_calculate_vacancy" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSPH-002", + "name": "abacus_phonon_dispersion", + "description": "What it does: Calculate phonon dispersion curve using DFT.\nWhen to use: When you need phonon properties and thermal corrections for a structure.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional supercell, high-symmetry points, k-path.\nOutputs: Plot of phonon dispersion band structure and thermal corrections.\nCannot do / Limits: Requires DFT; may need supercell for accuracy.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", + "description_cn": "功能: 计算 声子色散 curve 使用 DFT.\n何时使用: 当您需要 声子性质 和 热修正 用于结构.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; 可选 超胞, 高对称点, k 路径.\n输出: Plot 声子色散的 能带结构 和 热修正.\n无法做到/限制: 需要 DFT; 可能需要 超胞 以提高精度.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "PHONON" + ], + "alternative_tools": [ + "apex_calculate_phonon", + "calculate_phonon" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSCA-003", + "name": "abacus_cal_band", + "description": "What it does: Calculate electronic band structure using DFT.\nWhen to use: When you need band structure and band gap for a material.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional high-symmetry points, k-path.\nOutputs: Plot of band structure and band gap.\nCannot do / Limits: DFT-based; supports PYATB or ABACUS nscf.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", + "description_cn": "功能: 计算 电子能带结构 使用 DFT.\n何时使用: 当您需要 能带结构 和 带隙 用于材料.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; 可选 高对称点, k 路径.\n输出: Plot 能带结构的 和 带隙.\n无法做到/限制: 基于 DFT; 支持 PYATB 或 ABACUS nscf.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "BAND" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSCA-004", + "name": "abacus_calculation_scf", + "description": "What it does: Perform SCF calculation to compute energy using DFT.\nWhen to use: When you need ground state energy for a structure.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\nOutputs: Energy.\nCannot do / Limits: Basic SCF; no relaxation or other properties.\nCost / Notes: DFT calculation cost.", + "description_cn": "功能: 执行 SCF 计算 到 compute energy 使用 DFT.\n何时使用: 当您需要 基态能量 用于结构.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数.\n输出: Energy.\n无法做到/限制: Basic SCF; no 弛豫 或 other properties.\n成本/备注: DFT 计算成本.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "SCF" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSDO-005", + "name": "abacus_dos_run", + "description": "What it does: Calculate DOS and PDOS using DFT.\nWhen to use: When you need density of states for electronic structure analysis.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; PDOS mode ('species', 'species+shell', 'species+orbital').\nOutputs: Plots for DOS and PDOS.\nCannot do / Limits: DFT-based; requires relaxation support.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", + "description_cn": "功能: 计算 DOS 和 PDOS 使用 DFT.\n何时使用: 当您需要 态密度 用于 electronic structure analysis.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; PDOS mode ('species', 'species+shell', 'species+或bital').\n输出: Plots 用于 DOS 和 PDOS.\n无法做到/限制: 基于 DFT; 需要 弛豫 supp或t.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "DENSITY_OF_STATES" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSBA-006", + "name": "abacus_badercharge_run", + "description": "What it does: Calculate Bader charge using DFT.\nWhen to use: When you need atomic charge analysis.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\nOutputs: Bader charge for each atom.\nCannot do / Limits: DFT-based; requires charge density calculation.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", + "description_cn": "功能: 计算 Bader 电荷 使用 DFT.\n何时使用: 当您需要 原子ic charge analysis.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数.\n输出: Bader 电荷 用于 each 原子.\n无法做到/限制: 基于 DFT; 需要 charge density calculation.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "BADER_CHARGE_ANALYSIS" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSDO-007", + "name": "abacus_do_relax", + "description": "What it does: Perform geometry optimization (relaxation) using DFT.\nWhen to use: When you need optimized structure.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; relaxation settings (cell, steps, method, axes).\nOutputs: Relaxed structure file.\nCannot do / Limits: DFT-based relaxation.\nCost / Notes: DFT calculation cost.", + "description_cn": "功能: 执行 geometry 优化 (弛豫) 使用 DFT.\n何时使用: 当您需要 optimized structure.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; 弛豫 settings (cell, steps, method, axes).\n输出: Relaxed structure file.\n无法做到/限制: 基于 DFT 弛豫.\n成本/备注: DFT 计算成本.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "OPTIMIZE_STRUCTURE" + ], + "alternative_tools": [ + "apex_optimize_structure", + "optimize_structure" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSCA-008", + "name": "abacus_cal_work_function", + "description": "What it does: Calculate work function of slabs and 2D materials using DFT.\nWhen to use: When you need work function for surface materials.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; vacuum direction, dipole correction.\nOutputs: Plot of electrostatic potential and work function.\nCannot do / Limits: For slabs and 2D materials; polar slabs have two work functions.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", + "description_cn": "功能: 计算 功函数 slabs的 和 2D materials 使用 DFT.\n何时使用: 当您需要 功函数 用于 surface materials.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; vacuum direction, dipole 修正.\n输出: Plot electrostatic的 potential 和 功函数.\n无法做到/限制: 用于 slabs 和 2D materials; polar slabs have two 功函数s.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "WORK_FUNCTION" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSRU-009", + "name": "abacus_run_md", + "description": "What it does: Perform ab-initio molecular dynamics using DFT.\nWhen to use: When you need MD simulation with DFT accuracy.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; ensemble, steps, timestep, temperature.\nOutputs: ASE trajectory file.\nCannot do / Limits: DFT-based MD; expensive for long simulations.\nCost / Notes: High DFT cost; supports relaxation before calculation.", + "description_cn": "功能: 执行 ab-initio 分子动力学 使用 DFT.\n何时使用: 当您需要 MD simulation 使用 DFT accuracy.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; ensemble, steps, timestep, temperature.\n输出: ASE trajec到ry file.\n无法做到/限制: 基于 DFT MD; expensive 用于 long simulations.\n成本/备注: 高 DFT cost; 支持 弛豫 计算前.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "MOLECULAR_DYNAMICS" + ], + "alternative_tools": [ + "run_molecular_dynamics" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSCA-010", + "name": "abacus_cal_elf", + "description": "What it does: Calculate electron localization function using DFT.\nWhen to use: When you need ELF for bonding analysis.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\nOutputs: Cube file of ELF.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", + "description_cn": "功能: 计算 电子局域化函数 使用 DFT.\n何时使用: 当您需要 ELF 用于 bonding analysis.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数.\n输出: Cube file ELF的.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "Electron_Localization_Function" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSEO-011", + "name": "abacus_eos", + "description": "What it does: Calculate equation of state using DFT.\nWhen to use: When you need EOS curve and bulk properties.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\nOutputs: Plot of fitted EOS and fitting parameters.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", + "description_cn": "功能: 计算 状态方程 使用 DFT.\n何时使用: 当您需要 EOS curve 和 bulk properties.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数.\n输出: Plot fitted的 EOS 和 fitting parameters.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "EOS" + ], + "alternative_tools": [ + "apex_calculate_eos" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "001-ABACUSCA-012", + "name": "abacus_cal_elastic", + "description": "What it does: Calculate elastic properties using DFT.\nWhen to use: When you need elastic constants and moduli.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\nOutputs: Elastic tensor (Voigt notation), bulk/shear/Young’s modulus, Poisson ratio.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", + "description_cn": "功能: 计算 弹性性质 使用 DFT.\n何时使用: 当您需要 弹性常数 和 moduli.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数.\n输出: Elastic tens或 (Voigt notation), bulk/shear/Young’s modulus, Poisson ratio.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "belonging_agent": "ABACUS_calculation_agent", + "scenes": [ + "ABACUS", + "ELASTIC_CONSTANT" + ], + "alternative_tools": [ + "apex_calculate_elastic", + "calculate_elastic_constants" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "002-APEXCALC-001", + "name": "apex_calculate_vacancy", + "description": "What it does: Evaluate vacancy formation energies by relaxing supercells with one atom removed.\nWhen to use: When you need vacancy formation energies for materials.\nPrerequisites / Inputs: Structure file.\nOutputs: Vacancy formation energies.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", + "description_cn": "功能: 评估 vacancy 用于mation energies 通过 relaxing 超胞s 使用 one 原子 removed.\n何时使用: 当您需要 vacancy 用于mation energies 用于 materials.\n前提条件/输入: 结构文件.\n输出: Vacancy 用于mation energies.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "belonging_agent": "apex_agent", + "scenes": [ + "APEX", + "VACANCY_FORMATION_ENERGY" + ], + "alternative_tools": [ + "abacus_vacancy_formation_energy" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "002-APEXCALC-002", + "name": "apex_calculate_interstitial", + "description": "What it does: Insert interstitial atoms into a host lattice to compute formation energies across candidate sites.\nWhen to use: When you need interstitial formation energies.\nPrerequisites / Inputs: Host lattice structure and interstitial atoms.\nOutputs: Formation energies for candidate sites.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", + "description_cn": "功能: Insert interstitial 原子 in到 a host lattice 到 compute 用于mation energies across c和idate sites.\n何时使用: 当您需要 interstitial 用于mation energies.\n前提条件/输入: Host lattice structure 和 interstitial 原子.\n输出: 用于mation energies 用于 c和idate sites.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "belonging_agent": "apex_agent", + "scenes": [ + "APEX", + "INTERSTITIAL_FORMATION_ENERGY" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "002-APEXCALC-003", + "name": "apex_calculate_elastic", + "description": "What it does: Apply small strains to the lattice to extract elastic constants and derived moduli.\nWhen to use: When you need elastic constants and moduli.\nPrerequisites / Inputs: Structure file.\nOutputs: Elastic constants and derived moduli.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", + "description_cn": "功能: Apply small strains 到 the lattice 到 extract 弹性常数 和 derived moduli.\n何时使用: 当您需要 弹性常数 和 moduli.\n前提条件/输入: 结构文件.\n输出: 弹性常数 和 derived moduli.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "belonging_agent": "apex_agent", + "scenes": [ + "APEX", + "ELASTIC_CONSTANT" + ], + "alternative_tools": [ + "abacus_cal_elastic", + "calculate_elastic_constants" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "002-APEXCALC-004", + "name": "apex_calculate_surface", + "description": "What it does: Execute a workflow of surface energy calculation.\nWhen to use: When you need surface energy.\nPrerequisites / Inputs: Structure file.\nOutputs: Surface energy.\nCannot do / Limits: Cannot build slab structures; DFT-based.\nCost / Notes: DFT calculation cost.", + "description_cn": "功能: 执行 a w或kflow surface的 energy calculation.\n何时使用: 当您需要 surface energy.\n前提条件/输入: 结构文件.\n输出: Surface energy.\n无法做到/限制: Cannot build slab structures; 基于 DFT.\n成本/备注: DFT 计算成本.", + "belonging_agent": "apex_agent", + "scenes": [ + "APEX", + "SURFACE_ENERGY" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "002-APEXCALC-005", + "name": "apex_calculate_eos", + "description": "What it does: Scan volumes around equilibrium, relax internal coordinates, and build an equation-of-state energy–volume curve.\nWhen to use: When you need EOS curve.\nPrerequisites / Inputs: Structure file.\nOutputs: EOS energy-volume curve.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", + "description_cn": "功能: Scan volumes around equilibrium, relax internal co或dinates, 和 build an equation-of-state energy–volume curve.\n何时使用: 当您需要 EOS curve.\n前提条件/输入: 结构文件.\n输出: EOS energy-volume curve.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "belonging_agent": "apex_agent", + "scenes": [ + "APEX", + "EOS" + ], + "alternative_tools": [ + "abacus_eos" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "002-APEXCALC-006", + "name": "apex_calculate_phonon", + "description": "What it does: Perform supercell finite-displacement calculations, relax configurations, and assemble phonon spectra.\nWhen to use: When you need phonon spectra.\nPrerequisites / Inputs: Structure file.\nOutputs: Phonon spectra.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", + "description_cn": "功能: 执行 超胞 finite-displacement calculations, relax configurations, 和 assemble phonon spectra.\n何时使用: 当您需要 phonon spectra.\n前提条件/输入: 结构文件.\n输出: Phonon spectra.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "belonging_agent": "apex_agent", + "scenes": [ + "APEX", + "PHONON" + ], + "alternative_tools": [ + "abacus_phonon_dispersion", + "calculate_phonon" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "002-APEXCALC-007", + "name": "apex_calculate_gamma", + "description": "What it does: Construct and relax sliding slabs to map generalized stacking-fault energies along specified slip paths.\nWhen to use: When you need stacking-fault energies.\nPrerequisites / Inputs: Structure file and specified slip paths.\nOutputs: Generalized stacking-fault energies.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", + "description_cn": "功能: Construct 和 relax sliding slabs 到 map generalized stacking-fault energies along specified slip paths.\n何时使用: 当您需要 stacking-fault energies.\n前提条件/输入: 结构文件 和 specified slip paths.\n输出: Generalized stacking-fault energies.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "belonging_agent": "apex_agent", + "scenes": [ + "APEX", + "STACKING_FAULT_ENERGY" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "005-RUNGA-001", + "name": "run_ga", + "description": "What it does: Perform composition optimization targeting specific properties using genetic algorithm.\nWhen to use: When you need to optimize compositions for properties.\nPrerequisites / Inputs: Proxy model file prepared.\nOutputs: Optimized compositions.\nCannot do / Limits: Cannot build doping structures; requires proxy model.\nCost / Notes: Medium.", + "description_cn": "功能: 执行 composition 优化 targeting specific properties using genetic alg或ithm.\n何时使用: 当您需要 到 optimize compositions 用于 properties.\n前提条件/输入: Proxy model file prepared.\n输出: 优化d compositions.\n无法做到/限制: Cannot build doping structures; 需要 proxy model.\n成本/备注: 中.", + "belonging_agent": "compdart_agent", + "scenes": [ + "COMPOSITION_OPTIMIZATION" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "007-BUILDCON-001", + "name": "build_convex_hull", + "description": "What it does: Build convex hull diagrams.\nWhen to use: Assess thermodynamic stability.\nPrerequisites / Inputs: Material structures.\nOutputs: Convex hull, stable phases.\nCannot do / Limits: General materials only.\nCost / Notes: High (DPA calculations).", + "description_cn": "功能: 构建 convex hull diagrams.\n何时使用: Assess thermodynamic stability.\n前提条件/输入: Material structures.\n输出: Convex hull, stable phases.\n无法做到/限制: General materials 仅.\n成本/备注: 高 (DPA calculations).", + "belonging_agent": "convexhull_agent", + "scenes": [ + "CONVEXHULL" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "008-FETCHSTR-001", + "name": "fetch_structures_with_filter", + "description": "What it does: Send OPTIMADE filter string to providers for structure search.\nWhen to use: For flexible composition/formula queries without space group or band gap constraints.\nPrerequisites / Inputs: OPTIMADE filter string.\nOutputs: Matching structures.\nCannot do / Limits: Full OPTIMADE filter language; parallel queries.\nCost / Notes: Medium.", + "description_cn": "功能: Send OPTIMADE filter string 到 providers 用于 structure search.\n何时使用: 用于 flexible composition/用于mula queries 使用out space group 或 带隙 constraints.\n前提条件/输入: OPTIMADE filter string.\n输出: Matching structures.\n无法做到/限制: Full OPTIMADE filter language; parallel queries.\n成本/备注: 中.", + "belonging_agent": "optimade_agent", + "scenes": [ + "DATABASE_SEARCH" + ], + "alternative_tools": [ + "fetch_bohrium_crystals", + "fetch_openlam_structures", + "web-search" + ], + "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", + "summary_prompt_cn": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", + "self_check": true, + "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_filter MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_filter MCP tool:\n\nfetch_structures_with_filter(\n filter: str,\n as_format: 'cif'|'json' = 'cif',\n n_results: int = 2,\n providers: list[str] = [...]\n )\n - Sends ONE raw OPTIMADE filter string to all chosen providers at once.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `filter` from the user's query.\n- `filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Raw filter: alexandria, cmr, cod, mcloud, mcloudarchive, mp, mpdd, mpds, nmd, odbx, omdb, oqmd, tcod, twodmatpedia\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Retrieve SrTiO3 crystal structures\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"SrTiO3\"\n\n2) User: Find 3 structures of ZrO from mpds, cmr, alexandria, omdb, odbx\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"ZrO\"\n as_format: \"cif\"\n providers: [\"mpds\", \"cmr\", \"alexandria\", \"omdb\", \"odbx\"]\n n_results: 3\n\n3) User: Find A2B3C4 materials, exclude Fe/F/Cl/H, must contain Al or Mg or Na, want full metadata\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_anonymous=\"A2B3C4\" AND NOT (elements HAS ANY \"Fe\",\"F\",\"Cl\",\"H\") AND (elements HAS ANY \"Al\",\"Mg\",\"Na\")\n as_format: \"json\"\n\n4) User: Find two-dimensional MoS2\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"MoS2\" AND nperiodic_dimensions=2\n as_format: \"cif\"\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n" + }, + { + "tool_id": "008-FETCHSTR-002", + "name": "fetch_structures_with_spg", + "description": "What it does: Search structures by space group number with optional filters.\nWhen to use: When user specifies space group number or prototype structure.\nPrerequisites / Inputs: Space group number and OPTIMADE filter string.\nOutputs: Structures with matching space group.\nCannot do / Limits: Provider-specific space-group filters.\nCost / Notes: Medium.", + "description_cn": "功能: 搜索 structures 通过 space group number 使用 可选 filters.\n何时使用: When user specifies space group number 或 pro到type structure.\n前提条件/输入: Space group number 和 OPTIMADE filter string.\n输出: Structures 使用 matching space group.\n无法做到/限制: Provider-specific space-group filters.\n成本/备注: 中.", + "belonging_agent": "optimade_agent", + "scenes": [ + "DATABASE_SEARCH" + ], + "alternative_tools": [ + "fetch_bohrium_crystals", + "fetch_structures_with_filter", + "web-search" + ], + "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", + "summary_prompt_cn": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", + "self_check": true, + "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_spg MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_spg MCP tool:\n\nfetch_structures_with_spg(\n base_filter: str,\n spg_number: int,\n as_format: 'cif'|'json' = 'cif',\n n_results: int = 3,\n providers: list[str] = [...]\n )\n - Adds provider-specific *space-group* clauses (e.g., _tcod_sg, _oqmd_spacegroup, _alexandria_space_group) and queries providers in parallel.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `base_filter` from the user's query.\n- `base_filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Only when the user's requirement is purely \"filter by space group\" (no composition / element / other constraints at all) may `base_filter` be left empty.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Space group (SPG): alexandria, cod, mpdd, nmd, odbx, oqmd, tcod\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Find one gamma-phase TiAl alloy\n → Tool: fetch_structures_with_spg\n base_filter: elements HAS ALL \"Ti\",\"Al\" AND nelements = 2\n spg_number: 123\n as_format: \"cif\"\n n_results: 1\n\n2) User: Find periclase (MgO rock salt)\n → Tool: fetch_structures_with_spg\n base_filter: chemical_formula_reduced=\"MgO\"\n spg_number: 225\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n" + }, + { + "tool_id": "008-FETCHSTR-003", + "name": "fetch_structures_with_bandgap", + "description": "What it does: Search structures by band-gap range with optional filters.\nWhen to use: When user specifies band-gap range.\nPrerequisites / Inputs: Band-gap range and OPTIMADE filter string.\nOutputs: Structures with band gap in range.\nCannot do / Limits: Provider-specific band-gap filters.\nCost / Notes: Medium.", + "description_cn": "功能: 搜索 structures 通过 b和-gap range 使用 可选 filters.\n何时使用: When user specifies b和-gap range.\n前提条件/输入: B和-gap range 和 OPTIMADE filter string.\n输出: Structures 使用 带隙 in range.\n无法做到/限制: Provider-specific b和-gap filters.\n成本/备注: 中.", + "belonging_agent": "optimade_agent", + "scenes": [ + "DATABASE_SEARCH" + ], + "alternative_tools": [ + "fetch_bohrium_crystals", + "fetch_structures_with_filter", + "web-search" + ], + "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", + "summary_prompt_cn": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", + "self_check": true, + "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_bandgap MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_bandgap MCP tool:\n\nfetch_structures_with_bandgap(\n base_filter: str,\n min_bg: float | None = None,\n max_bg: float | None = None,\n as_format: 'cif'|'json' = 'json',\n n_results: int = 2,\n providers: list[str] = [...]\n )\n - Adds provider-specific *band-gap* clauses (e.g., _oqmd_band_gap, _gnome_bandgap, _mcloudarchive_band_gap) and queries providers in parallel.\n - For band-gap related tasks, default output format is 'json' to include complete metadata.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `base_filter` from the user's query.\n- `base_filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Only when the user's requirement is purely \"filter by band-gap range\" (no composition / element / other constraints at all) may `base_filter` be left empty.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Band gap (BG): alexandria, odbx, oqmd, mcloudarchive, twodmatpedia\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Retrieve 4 Al-containing materials with band gap 1.0–2.0 eV\n → Tool: fetch_structures_with_bandgap\n base_filter: elements HAS \"Al\"\n min_bg: 1.0\n max_bg: 2.0\n as_format: \"json\"\n n_results: 4\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n" + }, + { + "tool_id": "008-FETCHBOH-004", + "name": "fetch_bohrium_crystals", + "description": "What it does: Retrieve crystal structures from Bohrium Public database.\nWhen to use: For formula, elements, space group, atom count, formation energy, band gap queries.\nPrerequisites / Inputs: Filters like formula, elements, etc.\nOutputs: Structures in CIF or JSON.\nCannot do / Limits: No logical expressions; faster than OPTIMADE.\nCost / Notes: Low.", + "description_cn": "功能: 检索 crystal structures 从 Bohrium Public database.\n何时使用: 用于 用于mula, elements, space group, 原子 count, 形成能, 带隙 queries.\n前提条件/输入: Filters 如 用于mula, elements, etc.\n输出: Structures in CIF 或 JSON.\n无法做到/限制: No logical expressions; faster than OPTIMADE.\n成本/备注: 低.", + "belonging_agent": "bohriumpublic_agent", + "scenes": [ + "DATABASE_SEARCH" + ], + "alternative_tools": [ + "fetch_structures_with_filter", + "web-search", + "fetch_openlam_structures" + ], + "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**)\n (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**)\n (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**)\n (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"BohriumPublic\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", + "summary_prompt_cn": "\n## 响应格式\n响应必须始终包括:\n1. ✅ 简要说明应用的筛选条件\n2. 📊 检索到的结构的 Markdown 表格\n - 列(固定顺序):\n (1) 化学式 (`formula`)\n (2) 元素(从 `formula` 推导)\n (3) 原子数(如果 `crystal_ext.number_of_atoms` 可用;否则 **未提供**)\n (4) 空间群(如果 `crystal_ext.symbol` 可用且可以映射到编号;否则 **未提供**)\n (5) 能量/形成能(如果 `crystal_ext.predicted_formation_energy` 可用;否则 **未提供**)\n (6) 带隙(如果 `crystal_ext.band_gap` 可用;否则 **未提供**)\n (7) 下载链接(CIF/JSON,基于 `output_formats`)\n (8) 来源数据库 → 始终为 `\"BohriumPublic\"`\n (9) ID (`id`)\n - 缺失值必须填写为 **未提供**\n - 行数**必须完全等于** `n_found`\n3. 📦 工具返回的 `output_dir` 路径(用于下载/归档)\n\n如果 `n_found = 0`,请明确说明未找到匹配项,重复应用的筛选条件,并建议放宽条件。**不要**生成空表格。\n", + "self_check": true, + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"CoH12(BrO3)2\"`)\n- **Elements**: list of required elements (e.g., `[\"Co\",\"O\"]`)\n- **Match mode** (applies to both `formula` and `elements`):\n - `0` = contains (e.g., formula `\"Co\"` matches `\"CoO\"`, `\"CoH12(BrO3)2\"`; elements `[\"Co\"]` matches materials containing Co + anything else)\n - `1` = exact-only match (formula must match exactly; elements list must match **exactly and only** those elements)\n- **Space group**: use the space group number (e.g., `14` for P2₁/c)\n- **Atom count range**: filter by number of atoms in the unit cell, e.g. `[\"10\",\"100\"]`\n- **Predicted formation energy**: range filter in eV, e.g. `[\"-2\",\"0\"]`\n- **Band gap**: eV range [lo, hi] (omitted bound defaults to 0/100), e.g. [\"0\",\"3\"], [\"1\",\"100\"]\n- **Result limit**: maximum number of results (`n_results`)\n- **Output formats**:\n - `\"cif\"` → crystallographic structure files\n - `\"json\"` → complete metadata\n\n## HOW TO CHOOSE PARAMETERS\n- If user specifies a **formula** → set `formula` and choose `match_mode`:\n - `0` if the user means \"contains fragment\"\n - `1` if the user means \"exact formula\"\n- If user specifies **elements** → set `elements` and choose `match_mode`:\n - `0` if the user means \"must include these elements\"\n - `1` if the user means \"must have exactly these elements and nothing else\"\n- If user specifies a **space group number** → set `spacegroup_number`\n- If user specifies an **atom count range** → set `atom_count_range`\n- If user specifies **formation energy or band gap ranges** → set the corresponding ranges\n- If the user requests **metadata only** → use `output_formats=['json']`\n- If the user requests **downloadable crystal files** → use `output_formats=['cif']`\n\n## PARAMETER EXAMPLES\n1) 用户:检索 SrTiO₃ 的晶体结构,并以JSON格式返回\n → Tool: fetch_bohrium_crystals\n formula: \"SrTiO3\"\n match_mode: 1\n output_formats: [\"json\"]\n\n2) 用户:在Materials Project中检索并返回3个带隙大于2 eV的氧化物结构\n → Tool: fetch_bohrium_crystals\n elements: [\"O\"]\n match_mode: 0\n band_gap_range: [\"2\",\"100\"]\n n_results: 3\n\n3) 用户:找出空间群编号 14,原子数 50–100 的晶体\n → Tool: fetch_bohrium_crystals\n spacegroup_number: 14\n atom_count_range: [\"50\",\"100\"]\n\n4) 用户:检索 FeNi 合金的结构\n → Tool: fetch_bohrium_crystals\n elements: [\"Fe\",\"Ni\"] # 合金只含有Fe和Ni元素,不能含有其他元素\n match_mode: 1 # 合金需要精确匹配\n\n5) 用户:找所有化学式中包含 SiO3 的材料\n → Tool: fetch_bohrium_crystals\n formula: \"SiO3\"\n match_mode: 0\n" + }, + { + "tool_id": "008-FETCHOPE-005", + "name": "fetch_openlam_structures", + "description": "What it does: Retrieve crystal structures from OpenLAM database.\nWhen to use: When querying OpenLAM-specific materials or time-based filters.\nPrerequisites / Inputs: Formula, energy range, submission time filters.\nOutputs: Structures in CIF or JSON.\nCannot do / Limits: No space group, band gap, elements list, or logical filters.\nCost / Notes: Medium.", + "description_cn": "功能: 检索 crystal structures 从 OpenLAM database.\n何时使用: When querying OpenLAM-specific materials 或 time-based filters.\n前提条件/输入: 用于mula, energy range, submission time filters.\n输出: Structures in CIF 或 JSON.\n无法做到/限制: No space group, 带隙, elements list, 或 logical filters.\n成本/备注: 中.", + "belonging_agent": "openlam_agent", + "scenes": [ + "DATABASE_SEARCH" + ], + "alternative_tools": [ + "fetch_structures_with_filter", + "web-search", + "fetch_openlam_structures" + ], + "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count → **Not Provided** (OpenLAM does not provide this field)\n (4) Space group → **Not Provided** (OpenLAM does not provide this field)\n (5) Energy / Formation energy (`energy` if available; else **Not Provided**)\n (6) Band gap → **Not Provided** (OpenLAM does not provide this field)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"OpenLAM\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", + "summary_prompt_cn": "\n## 响应格式\n响应必须始终包括:\n1. ✅ 简要说明应用的筛选条件\n2. 📊 检索到的结构的 Markdown 表格\n - 列(固定顺序):\n (1) 化学式 (`formula`)\n (2) 元素(从 `formula` 推导)\n (3) 原子数 → **未提供**(OpenLAM 不提供此字段)\n (4) 空间群 → **未提供**(OpenLAM 不提供此字段)\n (5) 能量/形成能(如果 `energy` 可用;否则 **未提供**)\n (6) 带隙 → **未提供**(OpenLAM 不提供此字段)\n (7) 下载链接(CIF/JSON,基于 `output_formats`)\n (8) 来源数据库 → 始终为 `\"OpenLAM\"`\n (9) ID (`id`)\n - 缺失值必须填写为 **未提供**\n - 行数**必须完全等于** `n_found`\n3. 📦 工具返回的 `output_dir` 路径(用于下载/归档)\n\n如果 `n_found = 0`,请明确说明未找到匹配项,重复应用的筛选条件,并建议放宽条件。**不要**生成空表格。\n", + "self_check": true, + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"Fe2O3\"`)\n- **Energy**: filter results with `min_energy` and/or `max_energy` in eV\n- **Submission time**: ISO UTC date-time filters (`min_submission_time`, `max_submission_time`)\n- **Result limit**: maximum number of structures to return (`n_results`)\n- **Output formats**:\n - `\"cif\"` → for visualization-ready crystal structures\n - `\"json\"` → for complete metadata\n\n## HOW TO CHOOSE PARAMETERS\n- If the user specifies a **formula** → set `formula`\n- If the user specifies an **energy range** → set `min_energy` / `max_energy`\n- If the user specifies a **time filter** → set `min_submission_time` / `max_submission_time`\n- If the user requests **downloadable structure files** → use `output_formats=['cif']`\n- If the user requests **all metadata** → use `output_formats=['json']`\n\n## PARAMETER EXAMPLES\n1) 用户:查找 Fe2O3 的 5 个晶体结构,导出为 CIF\n → Tool: fetch_openlam_structures\n formula: \"Fe2O3\"\n n_results: 5\n output_formats: [\"cif\"]\n\n2) 用户:查找能量在 -10 到 20 eV 之间,2024 年后上传的材料\n → Tool: fetch_openlam_structures\n min_energy: -10.0\n max_energy: 20.0\n min_submission_time: \"2024-01-01T00:00:00Z\"\n\n3) 用户:我要最新上传的 3 个材料,包含所有元数据\n → Tool: fetch_openlam_structures\n n_results: 3\n output_formats: [\"json\"]\n" + }, + { + "tool_id": "008-FETCHMOF-006", + "name": "fetch_mofs_sql", + "description": "What it does: Execute SQL queries against the MOF database.\nWhen to use: For complex MOF queries with multi-table joins and statistical analysis.\nPrerequisites / Inputs: SQL query string.\nOutputs: Query results.\nCannot do / Limits: MOF-specific; supports advanced SQL.\nCost / Notes: Medium.", + "description_cn": "功能: 执行 SQL queries against the MOF database.\n何时使用: 用于 complex MOF queries 使用 multi-table joins 和 statistical analysis.\n前提条件/输入: SQL query string.\n输出: 查询 results.\n无法做到/限制: MOF-specific; 支持 advanced SQL.\n成本/备注: 中.", + "belonging_agent": "mofdb_agent", + "scenes": [ + "DATABASE_SEARCH" + ], + "alternative_tools": [ + "web-search" + ], + "summary_prompt": "\n## RESPONSE FORMAT\n1. Brief explanation of the SQL query used\n2. Markdown table of retrieved MOFs with relevant columns\n3. Output directory path for download/archive\n4. Key findings from results (if applicable)\n", + "summary_prompt_cn": "## 响应格式\n1. 简要说明使用的 SQL 查询\n2. 检索到的 MOF 的 Markdown 表格,包含相关列\n3. 用于下载/归档的输出目录路径\n4. 结果中的关键发现(如适用)\n", + "self_check": true, + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## DATABASE SCHEMA\nMain tables:\n• mofs: id, name, database, cif_path, n_atom, lcd, pld, url, hashkey, mofid, mofkey, pxrd, void_fraction, surface_area_m2g, surface_area_m2cm3, pore_size_distribution, batch_number\n• elements: id, mof_id, element_symbol, n_atom\n• adsorbates: id, name, formula, inchikey, inchicode\n• isotherms: id, mof_id, doi, date, simin, doi_url, category, digitizer, temperature, batch_number, isotherm_url, pressure_units, adsorption_units, composition_type, molecule_forcefield, adsorbent_forcefield\n• isotherm_data: id, isotherm_id, pressure, total_adsorption\n• isotherm_species_data: id, isotherm_data_id, adsorbate_id, adsorption, composition\n• mof_adsorbates: mof_id, adsorbate_id\n• heats: id, mof_id, doi, date, simin, doi_url, category, adsorbent, digitizer, adsorbates, temperature, batch_number, isotherm_url, pressure_units, adsorption_units, composition_type, molecule_forcefield, adsorbent_forcefield\n• heat_data: id, heat_id, pressure, total_adsorption\n• heat_species_data: id, heat_data_id, adsorbate_id, adsorption, composition\n\n## NOTES\n- SQL queries are executed directly on the database\n- n_results controls both SQL LIMIT and returned structures\n- Use CTEs (WITH clauses) for complex logic\n- Window functions are powerful for ranking and statistical analysis\n\n## SQL EXAMPLES\n\n1) 简单查询:查找名为 tobmof-27 的MOF\n → Tool: fetch_mofs_sql\n sql: \"SELECT * FROM mofs WHERE name = 'tobmof-27'\"\n\n2) 范围查询:从Tobacco数据库查找比表面积在500-1000 m²/g之间的MOF\n → Tool: fetch_mofs_sql\n sql: \"SELECT * FROM mofs WHERE database = 'Tobacco' AND surface_area_m2g BETWEEN 500 AND 1000 ORDER BY surface_area_m2g DESC\"\n\n3) 复合条件:从CoREMOF 2019数据库查找原子数小于50,比表面积大于1000 m²/g,且含有O元素和C元素的MOF\n → Tool: fetch_mofs_sql\n sql: '''\n SELECT DISTINCT m.name, m.database, m.n_atom, m.surface_area_m2g\n FROM mofs m\n JOIN elements e1 ON m.id = e1.mof_id\n JOIN elements e2 ON m.id = e2.mof_id\n WHERE m.database = 'CoREMOF 2019'\n AND m.n_atom < 50\n AND m.surface_area_m2g > 1000\n AND e1.element_symbol = 'O'\n AND e2.element_symbol = 'C'\n ORDER BY m.surface_area_m2g DESC\n '''\n\n4) 统计查询:统计各数据库的MOF数量\n → Tool: fetch_mofs_sql\n sql: \"SELECT database, COUNT(*) as count FROM mofs GROUP BY database ORDER BY count DESC\"\n\n5) 复杂分析:查找同时有CO2和H2吸附数据的MOF,按吸附选择性排序。吸附选择性=CO2平均吸附量/H2平均吸附量,用于衡量MOF对CO2相对于H2的优先吸附能力,数值越大表示CO2选择性越强\n → Tool: fetch_mofs_sql\n sql: '''\n WITH co2_adsorption AS (\n SELECT m.id, m.name, m.database, AVG(isd.adsorption) as co2_avg\n FROM mofs m\n JOIN isotherms i ON m.id = i.mof_id\n JOIN isotherm_data id ON i.id = id.isotherm_id\n JOIN isotherm_species_data isd ON id.id = isd.isotherm_data_id\n JOIN adsorbates a ON isd.adsorbate_id = a.id\n WHERE a.name = 'CarbonDioxide'\n GROUP BY m.id, m.name, m.database\n ),\n h2_adsorption AS (\n SELECT m.id, AVG(isd.adsorption) as h2_avg\n FROM mofs m\n JOIN isotherms i ON m.id = i.mof_id\n JOIN isotherm_data id ON i.id = id.isotherm_id\n JOIN isotherm_species_data isd ON id.id = isd.isotherm_data_id\n JOIN adsorbates a ON isd.adsorbate_id = a.id\n WHERE a.name = 'Hydrogen'\n GROUP BY m.id\n )\n SELECT\n c.name, c.database, c.co2_avg, h.h2_avg,\n (c.co2_avg / h.h2_avg) as selectivity_ratio\n FROM co2_adsorption c\n JOIN h2_adsorption h ON c.id = h.id\n WHERE h.h2_avg > 0\n ORDER BY selectivity_ratio DESC\n '''\n" + }, + { + "tool_id": "010-RUNDOETA-001", + "name": "run_doe_task", + "description": "What it does: Run a Design of Experiments (DoE) task using supported algorithms.\nWhen to use: When you need experimental design.\nPrerequisites / Inputs: Algorithm choice (Extreme Vertices, Simplex Centroid, etc.).\nOutputs: DoE results.\nCannot do / Limits: Limited to supported algorithms.\nCost / Notes: Medium.", + "description_cn": "功能: 运行 a Design Experiments的 (DoE) task using supp或ted alg或ithms.\n何时使用: 当您需要 experimental design.\n前提条件/输入: Alg或ithm choice (Extreme Vertices, Simplex Centroid, etc.).\n输出: DoE results.\n无法做到/限制: 仅限于 supp或ted alg或ithms.\n成本/备注: 中.", + "belonging_agent": "doe_agent", + "scenes": [ + "DOE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "011-OPTIMIZE-001", + "name": "optimize_structure", + "description": "What it does: Perform geometry optimization of a crystal or molecular structure using ML potential.\nWhen to use: When you need fast optimized structure without DFT.\nPrerequisites / Inputs: Structure file (CIF/POSCAR/ABACUS STRU/LAMMPS data); compatible ML potential.\nOutputs: Optimized structure file.\nCannot do / Limits: ML-based; accuracy depends on potential domain.\nCost / Notes: Low relative to DFT.", + "description_cn": "功能: 执行 geometry 优化 a的 crystal 或 molecular structure 使用机器学习势.\n何时使用: 当您需要 fast optimized structure 使用out DFT.\n前提条件/输入: 结构文件 (CIF/POSCAR/ABACUS STRU/LAMMPS data); compatible 机器学习势.\n输出: 优化d structure file.\n无法做到/限制: 基于机器学习; accuracy depends on potential domain.\n成本/备注: 低 relative 到 DFT.", + "belonging_agent": "dpa_calculator_agent", + "scenes": [ + "DPA", + "OPTIMIZE_STRUCTURE" + ], + "alternative_tools": [ + "apex_optimize_structure", + "abacus_do_relax" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n" + }, + { + "tool_id": "011-RUNMOLEC-002", + "name": "run_molecular_dynamics", + "description": "What it does: Run molecular dynamics simulations using ML potential.\nWhen to use: When you need fast MD without DFT.\nPrerequisites / Inputs: Structure file; ML potential; ensemble settings.\nOutputs: MD trajectories and thermodynamics.\nCannot do / Limits: NVE/NVT/NPT only; no classical force fields or DFT.\nCost / Notes: Medium; scales with system size and steps.", + "description_cn": "功能: 运行 分子动力学 simulations 使用机器学习势.\n何时使用: 当您需要 fast MD 使用out DFT.\n前提条件/输入: 结构文件; 机器学习势; ensemble settings.\n输出: MD trajec到ries 和 thermodynamics.\n无法做到/限制: NVE/NVT/NPT 仅; no classical 用于ce fields 或 DFT.\n成本/备注: 中; scales 使用 system size 和 steps.", + "belonging_agent": "dpa_calculator_agent", + "scenes": [ + "DPA", + "MOLECULAR_DYNAMICS" + ], + "alternative_tools": [ + "abacus_run_md" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n" + }, + { + "tool_id": "011-CALCULAT-003", + "name": "calculate_phonon", + "description": "What it does: Compute phonon properties using ML potential.\nWhen to use: When you need phonon dispersion and thermal properties.\nPrerequisites / Inputs: Optimized structure; ML potential.\nOutputs: Phonon dispersion, DOS, thermal properties.\nCannot do / Limits: Requires finite-displacement supercells.\nCost / Notes: High; scales with supercell size.", + "description_cn": "功能: Compute 声子性质 使用机器学习势.\n何时使用: 当您需要 声子色散 和 thermal properties.\n前提条件/输入: 优化d structure; 机器学习势.\n输出: 声子色散, DOS, thermal properties.\n无法做到/限制: 需要 finite-displacement 超胞s.\n成本/备注: 高; scales 使用 超胞 size.", + "belonging_agent": "dpa_calculator_agent", + "scenes": [ + "DPA", + "PHONON" + ], + "alternative_tools": [ + "abacus_phonon_dispersion", + "apex_calculate_phonon" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n" + }, + { + "tool_id": "011-CALCULAT-004", + "name": "calculate_elastic_constants", + "description": "What it does: Compute elastic constants (Cij) and derived mechanical properties using a machine-learning interatomic potential.\nWhen to use: You have a relaxed structure and want fast elastic properties without running DFT.\nPrerequisites / Inputs: A structure file (e.g., CIF / POSCAR / ABACUS STRU / LAMMPS data) and a compatible ML potential available to the backend; recommended to relax the structure first.\nOutputs: Elastic tensor (Cij), bulk/shear/Young’s modulus, Poisson ratio (units reported in the result payload).\nCannot do / Limits: Not a DFT calculation; accuracy depends on the ML potential domain; may be unreliable for structures far from training distribution.\nCost / Notes: Medium; scales with system size and deformation settings.", + "description_cn": "功能: Compute 弹性常数 (Cij) 和 derived mechanical properties using a machine-learning inter原子ic potential.\n何时使用: You have a relaxed structure 和 want fast 弹性性质 使用out running DFT.\n前提条件/输入: A structure file (e.g., CIF / POSCAR / ABACUS STRU / LAMMPS data) 和 a compatible 机器学习势 available 到 the backend; recommended 到 relax the structure first.\n输出: Elastic tens或 (Cij), bulk/shear/Young’s modulus, Poisson ratio (units rep或ted in the result payload).\n无法做到/限制: Not a DFT calculation; accuracy depends on the 机器学习势 domain; may be unreliable 用于 structures far 从 training distribution.\n成本/备注: 中; scales 使用 system size 和 de用于mation settings.", + "belonging_agent": "dpa_calculator_agent", + "scenes": [ + "DPA", + "ELASTIC_CONSTANT" + ], + "alternative_tools": [ + "abacus_cal_elastic", + "apex_calculate_elastic" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n" + }, + { + "tool_id": "011-RUNNEB-005", + "name": "run_neb", + "description": "What it does: Run a Nudged Elastic Band (NEB) calculation with a machine-learning potential to estimate minimum energy path and barrier.\nWhen to use: You have initial/final states (and optionally an initial guess path) and need a fast barrier estimate.\nPrerequisites / Inputs: Initial and final structure files; optional intermediate images or image count; a compatible ML potential available to the backend.\nOutputs: Optimized NEB path, energies along images, estimated barrier and reaction coordinate.\nCannot do / Limits: Not DFT-quality by default; may fail if images are too distorted or if the potential is not valid for the chemistry.\nCost / Notes: High relative to single relax; cost scales with number of images and system size.", + "description_cn": "功能: 运行 a 推弹性能带 (NEB) calculation 使用 a machine-learning potential 到 estimate minimum energy path 和 barrier.\n何时使用: You have initial/final states (和 可选ly an initial guess path) 和 need a fast barrier estimate.\n前提条件/输入: Initial 和 final structure files; 可选 intermediate images 或 image count; a compatible 机器学习势 available 到 the backend.\n输出: 优化d NEB path, energies along images, estimated barrier 和 reaction co或dinate.\n无法做到/限制: Not DFT-quality 通过 default; may fail if images are 到o dis到rted 或 if the potential is not valid 用于 the chemistry.\n成本/备注: 高 relative 到 single relax; cost scales 使用 number images的 和 system size.", + "belonging_agent": "dpa_calculator_agent", + "scenes": [ + "DPA", + "Nudged_Elastic_Band" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n" + }, + { + "tool_id": "011-FINETUNE-006", + "name": "finetune_dpa_model", + "description": "What it does: Fine-tune DPA pretrained models using DFT-labeled data.\nWhen to use: When you need to adapt DPA potential to specific systems.\nPrerequisites / Inputs: DFT-labeled data (energies, forces, stresses).\nOutputs: Fine-tuned DPA model.\nCannot do / Limits: Cannot run calculations with the model.\nCost / Notes: High.", + "description_cn": "功能: Fine-tune DPA pretrained models 使用 DFT-labeled data.\n何时使用: 当您需要 到 adapt DPA potential 到 specific systems.\n前提条件/输入: DFT-labeled data (energies, 用于ces, stresses).\n输出: Fine-tuned DPA model.\n无法做到/限制: Cannot run calculations 使用 the model.\n成本/备注: 高.", + "belonging_agent": "finetune_dpa_agent", + "scenes": [ + "DPA" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "Do NOT omit parameters that have default values. If the user does not provide a value, you MUST use the default value defined in the input parameters and include that field in the tool call. Only parameters without defaults are truly required and must be filled from user input." + }, + { + "tool_id": "015-GETELECT-001", + "name": "get_electron_microscope_recognize", + "description": "What it does: Analyze electron microscope images for particles and morphology.\nWhen to use: When you have TEM/SEM images to analyze.\nPrerequisites / Inputs: Electron microscope images(.tif, .tiff, .png, .jpeg, .jpg).\nOutputs: Detected particles, morphology, geometric properties.\nCannot do / Limits: Only support .tif, .tiff, .png, .jpeg, .jpg format files.\nCost / Notes: Medium.", + "description_cn": "功能: 分析 electron microscope images 用于 particles 和 m或phology.\n何时使用: When you have TEM/SEM images 到 analyze.\n前提条件/输入: Electron microscope images(.tif, .tiff, .png, .jpeg, .jpg).\n输出: Detected particles, m或phology, geometric properties.\n无法做到/限制: 仅 supp或t .tif, .tiff, .png, .jpeg, .jpg 用于mat files.\n成本/备注: 中.", + "belonging_agent": "electron_microscope_agent", + "scenes": [ + "Electron_Microscope" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "016-HEAPARAM-001", + "name": "HEA_params_calculator", + "description": "What it does: Calculate HEA parameters like VEC, delta, Hmix, Smix, Lambda from composition.\nWhen to use: When you need HEA thermodynamic parameters.\nPrerequisites / Inputs: HEA chemical formula.\nOutputs: VEC, delta, Hmix, Smix, Lambda.\nCannot do / Limits: Specific to HEA.\nCost / Notes: Low.", + "description_cn": "功能: 计算 HEA parameters 如 VEC, delta, Hmix, Smix, Lambda 从 composition.\n何时使用: 当您需要 HEA thermodynamic parameters.\n前提条件/输入: HEA chemical 用于mula.\n输出: VEC, delta, Hmix, Smix, Lambda.\n无法做到/限制: 特定于 HEA.\n成本/备注: 低.", + "belonging_agent": "HEA_assistant_agent", + "scenes": [ + "HIGH_ENTROPY_ALLOY" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "016-HEAPREDI-002", + "name": "HEA_predictor", + "description": "What it does: Predict if HEA composition forms solid-solution and its crystal structure.\nWhen to use: When you need phase prediction for HEA.\nPrerequisites / Inputs: HEA composition.\nOutputs: Solid-solution formation and crystal structure.\nCannot do / Limits: Uses pre-trained ML model.\nCost / Notes: Low.", + "description_cn": "功能: 预测 if HEA composition 用于ms solid-solution 和 its crystal structure.\n何时使用: 当您需要 phase prediction 用于 HEA.\n前提条件/输入: HEA composition.\n输出: Solid-solution 用于mation 和 crystal structure.\n无法做到/限制: Uses pre-trained ML model.\n成本/备注: 低.", + "belonging_agent": "HEA_assistant_agent", + "scenes": [ + "HIGH_ENTROPY_ALLOY" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "016-HEACOMPS-003", + "name": "HEA_comps_generator", + "description": "What it does: Generate HEA compositions by adjusting molar ratios of one element.\nWhen to use: For HEA composition design and optimization.\nPrerequisites / Inputs: Initial HEA composition.\nOutputs: Series of modified compositions.\nCannot do / Limits: Adjusts one element at a time.\nCost / Notes: Low.", + "description_cn": "功能: 生成 HEA compositions 通过 adjusting molar ratios one的 element.\n何时使用: 用于 HEA composition design 和 优化.\n前提条件/输入: Initial HEA composition.\n输出: Series modified的 compositions.\n无法做到/限制: Adjusts one element at a time.\n成本/备注: 低.", + "belonging_agent": "HEA_assistant_agent", + "scenes": [ + "HIGH_ENTROPY_ALLOY" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "016-HEADATAE-004", + "name": "HEA_data_extract", + "description": "What it does: Extract HEA data from PDF literature.\nWhen to use: When you need HEA data from papers.\nPrerequisites / Inputs: PDF literature.\nOutputs: Compositions, processing, microstructures, properties.\nCannot do / Limits: PDF format only.\nCost / Notes: Low.", + "description_cn": "功能: 提取 HEA data 从 PDF literature.\n何时使用: 当您需要 HEA data 从 papers.\n前提条件/输入: PDF literature.\n输出: Compositions, processing, microstructures, properties.\n无法做到/限制: PDF 用于mat 仅.\n成本/备注: 低.", + "belonging_agent": "HEA_assistant_agent", + "scenes": [ + "HIGH_ENTROPY_ALLOY" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "016-HEAPAPER-005", + "name": "HEA_paper_search", + "description": "What it does: Search and download HEA papers from arXiv.\nWhen to use: When you need HEA literature.\nPrerequisites / Inputs: Title, author, or keywords.\nOutputs: Search results and downloaded papers.\nCannot do / Limits: arXiv only.\nCost / Notes: Medium.", + "description_cn": "功能: 搜索 和 download HEA papers 从 arXiv.\n何时使用: 当您需要 HEA literature.\n前提条件/输入: Title, auth或, 或 keyw或ds.\n输出: 搜索 results 和 downloaded papers.\n无法做到/限制: arXiv 仅.\n成本/备注: 中.", + "belonging_agent": "HEA_assistant_agent", + "scenes": [ + "HIGH_ENTROPY_ALLOY" + ], + "alternative_tools": [ + "query_heakb_literature", + "search-papers-enhanced", + "web-search" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "016-HEABIPHA-006", + "name": "HEA_bi_phase_Calc", + "description": "What it does: Calculate formation energies and phase diagrams for binary pairs in HEA.\nWhen to use: When you need binary phase info for HEA.\nPrerequisites / Inputs: HEA chemical system.\nOutputs: Formation energies and convex hulls.\nCannot do / Limits: Binary pairs only.\nCost / Notes: Medium.", + "description_cn": "功能: 计算 用于mation energies 和 phase diagrams 用于 binary pairs in HEA.\n何时使用: 当您需要 binary phase info 用于 HEA.\n前提条件/输入: HEA chemical system.\n输出: 用于mation energies 和 convex hulls.\n无法做到/限制: Binary pairs 仅.\n成本/备注: 中.", + "belonging_agent": "HEA_assistant_agent", + "scenes": [ + "HIGH_ENTROPY_ALLOY" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "016-GENERATE-007", + "name": "generate_binary_phase_diagram", + "description": "What it does: Generate a binary phase diagram for a specified A–B system based on available thermodynamic/energy data in the backend workflow.\nWhen to use: You want a quick overview of stable/competing phases across composition for a binary alloy/compound system.\nPrerequisites / Inputs: Element pair (A, B) and optional temperature/pressure range; requires accessible formation-energy/thermo dataset or computation route configured in the backend.\nOutputs: Phase diagram data (stable phases, tie-lines, composition ranges) and a plot-ready representation.\nCannot do / Limits: If no dataset/computation route is available, the tool will return an error; results depend on data coverage and model assumptions.\nCost / Notes: Medium; faster with cached datasets.", + "description_cn": "功能: 生成 a binary phase diagram 用于 a specified A–B system based on available thermodynamic/energy data in the backend w或kflow.\n何时使用: You want a quick overview stable的/competing phases across composition 用于 a binary alloy/compound system.\n前提条件/输入: Element pair (A, B) 和 可选 temperature/pressure range; 需要 accessible 用于mation-energy/thermo dataset 或 computation route configured in the backend.\n输出: Phase diagram data (stable phases, tie-lines, composition ranges) 和 a plot-ready representation.\n无法做到/限制: If no dataset/computation route is available, the 到ol will return an err或; results depend on data coverage 和 model assumptions.\n成本/备注: 中; faster 使用 cached datasets.", + "belonging_agent": "hea_calculator_agent", + "scenes": [ + "HIGH_ENTROPY_ALLOY" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "016-QUERYHEA-008", + "name": "query_heakb_literature", + "description": "What it does: Query literature knowledge base for HEA(High-entropy alloys) research with natural language.\nWhen to use: When you need in-depth literature analysis on HEA topics.\nPrerequisites / Inputs: Natural language questions about HEA.\nOutputs: Literature summaries from vector similarity search.\nCannot do / Limits: Topics limited to HEA.\nCost / Notes: Medium.", + "description_cn": "功能: 查询 literature knowledge base 用于 HEA(高-entropy alloys) research 使用 natural language.\n何时使用: 当您需要 in-depth literature analysis on HEA 到pics.\n前提条件/输入: Natural language questions about HEA.\n输出: Literature summaries 从 vec到r similarity search.\n无法做到/限制: 到pics 仅限于 HEA.\n成本/备注: 中.", + "belonging_agent": "HEAkb_agent", + "scenes": [ + "HIGH_ENTROPY_ALLOY" + ], + "alternative_tools": [ + "HEA_paper_search", + "search-papers-enhanced", + "web-search" + ], + "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries (List[str])\n - Each summary is a text string containing the summary of one literature paper\n - These summaries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, space groups, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries with detailed explanations\n - Include specific quantitative data, experimental conditions, and results\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable\n - Address contradictions or gaps in current understanding\n\n3. **Summary of Key Findings**: Synthesize the most important insights\n\n4. **References**: List all cited sources [1], [2], [3], etc.\n", + "summary_prompt_cn": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要列表(List[str])\n - 每个摘要是包含一篇文献论文摘要的文本字符串\n - 这些摘要是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n- 如果用户的问题是开放式的,提供全面分析,包括:\n 1. 机制洞察(反应路径、驱动力、结构-性能关系)\n 2. 定量或半定量结果(材料名称、数值数据、性能指标、空间群等)\n 3. 当前研究中的不一致、局限性或空白\n- 除非必要,不要过度强调技术细节(仪器设置或计算软件和参数设置)\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明(例如,“第一个”、“最好的”、“最受欢迎的”)\n- 在数字和单位之间添加空格(例如,10 cm,5 kg)\n- 对物理量使用斜体(例如,*E*、*T*、*k*)\n- 对向量使用粗体(例如,**F**、**E**)和化合物/材料的序列代码名称(例如,化合物 **1**)\n- 在首次使用时定义缩写,并在整个文本中一致使用\n- 使用 [1]、[2]、[3] 格式在整个文本中引用来源(数字指摘要顺序)\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战、分析的论文数量\n\n2. **主要内容**:组织成具有子章节的逻辑章节(##、###)。对于每个章节:\n - 整合来自多个摘要的发现,并提供详细解释\n - 包括具体的定量数据、实验条件和结果\n - 深入解释机制和过程(事物**如何**工作,而不仅仅是**什么**发生)\n - 比较不同研究的发现,突出一致性和分歧\n - 在适用时使用表格比较不同研究的数据\n - 解决当前理解中的矛盾或空白\n\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + "self_check": false, + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n**Parameters:**\n- question (str, required): Natural language query about HEA(High-entropy alloys) research topics\n- top_k (int, optional): Number of chunks to retrieve (5-15 recommended, default: 5)\n\n**Examples:**\n1) 查询高熵合金中的相变机制:\n → Tool: query_heakb_literature\n question: '高熵合金中的相变诱导塑性(TRIP)机制是什么?这种机制如何影响合金的力学性能?'\n top_k: 5\n\n2) 查询FCC到HCP相变的条件:\n → Tool: query_heakb_literature\n question: '高熵合金中的FCC到HCP相变的条件和影响因素是什么?'\n top_k: 8\n\n3) 查询低温下的力学性能:\n → Tool: query_heakb_literature\n question: '高熵合金在低温下的力学性能如何?影响低温性能的主要因素有哪些?'\n top_k: 10\n\n4) 查询腐蚀行为和防护机制:\n → Tool: query_heakb_literature\n question: '高熵合金的腐蚀行为和防护机制是什么?不同元素对腐蚀性能的影响如何?'\n top_k: 5\n\n5) 查询微观结构特征:\n → Tool: query_heakb_literature\n question: '高熵合金的微观结构特征是什么?如何通过热处理调控微观结构?'\n top_k: 6\n\n6) 查询制备方法:\n → Tool: query_heakb_literature\n question: '高熵合金的主要制备方法有哪些?不同制备方法对合金性能的影响如何?'\n top_k: 7\n" + }, + { + "tool_id": "019-EXTRACTM-001", + "name": "extract_material_data_from_pdf", + "description": "What it does: Read and extract material data and methodologies from PDF documents.\nWhen to use: When you need to extract info from PDF literature.\nPrerequisites / Inputs: PDF file.\nOutputs: Extracted material info and methodologies.\nCannot do / Limits: Cannot retrieve from internet; local PDFs only.\nCost / Notes: Low.", + "description_cn": "功能: Read 和 extract material data 和 methodologies 从 PDF documents.\n何时使用: 当您需要 到 extract info 从 PDF literature.\n前提条件/输入: PDF file.\n输出: 提取ed material info 和 methodologies.\n无法做到/限制: Cannot retrieve 从 internet; local PDFs 仅.\n成本/备注: 低.", + "belonging_agent": "document_parser_agent", + "scenes": [ + "LITERATURE", + "UNIVERSAL" + ], + "alternative_tools": [ + "file_parse", + "extract_material_data_from_webpage" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null, + "bypass_confirmation": true + }, + { + "tool_id": "019-SEARCH-P-002", + "name": "search-papers-enhanced", + "description": "What it does: Search scientific papers.\nWhen to use: Find research on topics.\nPrerequisites / Inputs: Topic keywords.\nOutputs: Literature summary, abstract information of relevant papers, web link of the papers\nCannot do / Limits: Literature search only. No thesis files (.pdf,.doc, etc.) will be downloaded.\nCost / Notes: Low.", + "description_cn": "功能: 搜索 scientific papers.\n何时使用: Find research on 到pics.\n前提条件/输入: 到pic keyw或ds.\n输出: Literature summary, abstract in用于mation relevant的 papers, web link the的 papers\n无法做到/限制: Literature search 仅. No thesis files (.pdf,.doc, etc.) will be downloaded.\n成本/备注: 低.", + "belonging_agent": "science_navigator_agent", + "scenes": [ + "LITERATURE" + ], + "alternative_tools": [ + "web-search" + ], + "summary_prompt": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools returns a list of papers with metadata. You need to scan through the papers and organize them with as broad coverage as possible.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening;\n- Expression: Clear, layered, without introducing irrelevant content, try not to use analogies or overly complex concepts, but rather explain from first principles;\n- Output should avoid hollow summaries; each claim must be explicitly supported by facts, numerical data, or methodological details extracted from the papers;\n- Include comparisons, contradictions, or confirmations between studies whenever relevant to give analytical depth.\n- If the user's question is open-ended, provide a thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships);\n 2. Quantitative or semi-quantitative results whenever available (including material names, numerical data, performance metrics, space groups, etc.);\n 3. Any inconsistencies, limitations, or gaps in the current research.\n 4. Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary.\n- When the user requests querying or searching, you should consider the relevance and irrelevance between the search results and user needs, using positive and negative thinking to ensure the search results are highly relevant to user needs. You should also analyze the relevance and irrelevance when answering.\n- If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n\nThe overall abstract should be brief with less than 3 sentences, including and only including:\n1) Professional definition of the key concepts involved.\n2) Key breakthroughs in recent years.\n3) Main challenges that remain unsolved.\n\nFor joints between each section or subsection, avoid using bullets or numbering.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on spefic topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", + "summary_prompt_cn": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 知识使用限制:\n- 所有事实信息(数据、结论、定义、实验结果等)必须来自工具调用结果;\n- 您可以使用自己的知识来组织、解释和推理这些事实,但不能凭空添加信息。\n- 引用时,尽量直接使用原始表达。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头,例如“当然,我将...”、“好的,我将...”或“我现在将分析...”。相反,直接输出实质性内容。\n- 避免没有论文证据的声明,例如第一个、最好的、最受欢迎的等。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n\n# 内部大纲协议(大纲不得显示):\n- 在开始时,内部构建一个详细的分层大纲,至少包含 3 个主要章节和多个子章节。除非明确要求,否则不得向用户显示此大纲。\n- 大纲应大致从简要解释所涉及的关键术语、基于摘要声明的主要研究空白开始。\n- 您必须使用此内部大纲来指导一个长、全面和完全结构化的最终输出。\n", + "self_check": false, + "args_setting": "\n If not specified, apply start_time=2020-01-01, end_time=2026-01-26, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise.\n\n Must be aware of these prior knowledge:\n - \n### KNOWLEDGE RETRIEVAL STRATEGY: SYNONYM EXPANSION\nYou are equipped with a \"Material Synonym Registry\". When a user asks about a specific material, check if it falls under any known naming conflicts or aliases.\n\n**Registry Rules:**\n- If user mentions ZIF-8or MAF-4or Zn(MeIm)2, use preferred name 'MAF-4'. **Explicitly output this warning** at appropriate place: \"Important: Althogh the structure commonly known as 'ZIF-8' was first reported by **Xiao-Ming Chen's (陈小明) group** ([maf4]), and renamed as MAF-4.\"\n- If user mentions DPA-1or DPA-2or DPA-3, use preferred name 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)'. **Explicitly output this warning** at appropriate place: \"Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).\"\n\n\n**Instructions:**\n1. **Identify**: Check if the user's query contains any keywords from the registry.\n2. **Expand**: If a match is found, you MUST use the explicitly defined `search_query` logic (e.g., OR logic) to ensure no literature is missed.\n - *Example:* If the user asks for \"ZIF-8\", do NOT just search \"ZIF-8\". Search \"('ZIF-8' OR 'MAF-4')\" to capture all priority papers.\n3. **Merge**: Treat results from different aliases as the same entity.\n\n ", + "bypass_confirmation": true + }, + { + "tool_id": "020-ORCHESTR-001", + "name": "orchestrate_input", + "description": "What it does: Generate input scripts for simulation engines (Currently supports: LAMMPS).\nWhen to use: Create input from description.\nPrerequisites / Inputs: engine_type=\"lammps\", natural language task.\nOutputs: Input script content.\nCannot do / Limits: Script generation only.\nCost / Notes: Low.", + "description_cn": "功能: 生成 input scripts 用于 simulation engines (Currently 支持: LAMMPS).\n何时使用: 创建 input 从 description.\n前提条件/输入: engine_type=\"lammps\", natural language task.\n输出: Input script content.\n无法做到/限制: Script generation 仅.\n成本/备注: 低.", + "belonging_agent": "LAMMPS_agent", + "scenes": [ + "MOLECULAR_DYNAMICS", + "LAMMPS" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "020-CONVERTS-002", + "name": "convert_structural_format", + "description": "What it does: Convert structure to target format (Currently supports: lammps/lmp).\nWhen to use: Prepare structures for simulation.\nPrerequisites / Inputs: Structure file URL, target_format=\"lammps/lmp\".\nOutputs: Converted structure file.\nCannot do / Limits: Format conversion only.\nCost / Notes: Low.", + "description_cn": "功能: Convert structure 到 target 用于mat (Currently 支持: lammps/lmp).\n何时使用: Prepare structures 用于 simulation.\n前提条件/输入: 结构文件 URL, target_用于mat=\"lammps/lmp\".\n输出: Converted structure file.\n无法做到/限制: 用于mat conversion 仅.\n成本/备注: 低.", + "belonging_agent": "LAMMPS_agent", + "scenes": [ + "MOLECULAR_DYNAMICS", + "LAMMPS" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "020-RUNLAMMP-003", + "name": "run_lammps", + "description": "What it does: Run LAMMPS simulations.\nWhen to use: Perform MD or minimization.\nPrerequisites / Inputs: LAMMPS data file.\nOutputs: Simulation results.\nCannot do / Limits: Requires LAMMPS format.\nCost / Notes: High (simulation time).", + "description_cn": "功能: 运行 LAMMPS simulations.\n何时使用: 执行 MD 或 minimization.\n前提条件/输入: LAMMPS data file.\n输出: Simulation results.\n无法做到/限制: 需要 LAMMPS 用于mat.\n成本/备注: 高 (simulation time).", + "belonging_agent": "LAMMPS_agent", + "scenes": [ + "MOLECULAR_DYNAMICS", + "LAMMPS" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "021-NMRSEARC-001", + "name": "NMR_search_tool", + "description": "What it does: Search a molecular database by NMR spectroscopic features to retrieve candidate structures.\nWhen to use: You have NMR peak/shift patterns and want likely matching molecules.\nPrerequisites / Inputs: NMR features (e.g., shifts, multiplicities, coupling, nucleus type) in the tool-accepted schema; optional tolerance settings.\nOutputs: Ranked candidate molecules/structures with match scores and key evidence fields.\nCannot do / Limits: Not a definitive identification; results depend on database coverage and feature quality.\nCost / Notes: Medium; tighter tolerances increase runtime and reduce recall.", + "description_cn": "功能: 搜索 a molecular database 通过 NMR spectroscopic features 到 retrieve c和idate structures.\n何时使用: You have NMR peak/shift patterns 和 want likely matching molecules.\n前提条件/输入: NMR features (e.g., shifts, multiplicities, coupling, nucleus type) in the 到ol-accepted schema; 可选 到lerance settings.\n输出: Ranked c和idate molecules/structures 使用 match sc或es 和 key evidence fields.\n无法做到/限制: Not a definitive identification; results depend on database coverage 和 feature quality.\n成本/备注: 中; tighter 到lerances increase runtime 和 reduce recall.", + "belonging_agent": "nmr_agent", + "scenes": [ + "NMR" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "021-NMRPREDI-002", + "name": "NMR_predict_tool", + "description": "What it does: Predict NMR spectroscopic properties for molecular structures.\nWhen to use: When you need simulated NMR chemical shifts.\nPrerequisites / Inputs: SMILES strings.\nOutputs: Predicted NMR shifts and similarity scores.\nCannot do / Limits: 1H and 13C only.\nCost / Notes: Medium.", + "description_cn": "功能: 预测 NMR spectroscopic properties 用于 molecular structures.\n何时使用: 当您需要 simulated NMR chemical shifts.\n前提条件/输入: SMILES strings.\n输出: 预测ed NMR shifts 和 similarity sc或es.\n无法做到/限制: 1H 和 13C 仅.\n成本/备注: 中.", + "belonging_agent": "nmr_agent", + "scenes": [ + "NMR" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "021-NMRREVER-003", + "name": "NMR_reverse_predict_tool", + "description": "What it does: Generate candidate molecular structures from NMR spectroscopic data.\nWhen to use: When you have NMR data and need structure candidates.\nPrerequisites / Inputs: NMR spectroscopic data.\nOutputs: Candidate molecular structures.\nCannot do / Limits: Based on NMR features.\nCost / Notes: Medium.", + "description_cn": "功能: 生成 c和idate molecular structures 从 NMR spectroscopic data.\n何时使用: When you have NMR data 和 need structure c和idates.\n前提条件/输入: NMR spectroscopic data.\n输出: C和idate molecular structures.\n无法做到/限制: Based on NMR features.\n成本/备注: 中.", + "belonging_agent": "nmr_agent", + "scenes": [ + "NMR" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "023-APEXOPTI-001", + "name": "apex_optimize_structure", + "description": "What it does: Perform geometry optimization of a crystal, relaxing atomic positions and optionally the unit cell.\nWhen to use: When you need optimized crystal structure, especially for alloy systems.\nPrerequisites / Inputs: Structure file.\nOutputs: Optimized structure.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", + "description_cn": "功能: 执行 geometry 优化 a的 crystal, relaxing 原子ic positions 和 可选ly the unit cell.\n何时使用: 当您需要 optimized crystal structure, especially 用于 alloy systems.\n前提条件/输入: 结构文件.\n输出: 优化d structure.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "belonging_agent": "apex_agent", + "scenes": [ + "OPTIMIZE_STRUCTURE", + "APEX" + ], + "alternative_tools": [ + "abacus_do_relax", + "optimize_structure" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "024-GETDATAB-001", + "name": "get_database_info", + "description": "What it does: Fetch complete schema and descriptive information for the perovskite solar cell database.\nWhen to use: Before querying the perovskite database.\nPrerequisites / Inputs: None.\nOutputs: Database schema and descriptions.\nCannot do / Limits: Specific to perovskite database.\nCost / Notes: Low.", + "description_cn": "功能: 获取 complete schema 和 descriptive in用于mation 用于 the perovskite solar cell database.\n何时使用: Be用于e querying the perovskite database.\n前提条件/输入: None.\n输出: Database schema 和 descriptions.\n无法做到/限制: 特定于 perovskite database.\n成本/备注: 低.", + "belonging_agent": "perovskite_research_agent", + "scenes": [ + "PEROVSKITE_RESEARCH" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "024-SQLDATAB-002", + "name": "sql_database_mcp", + "description": "What it does: Execute SQL queries against the perovskite solar cell database and return first k rows.\nWhen to use: When querying perovskite database after getting schema.\nPrerequisites / Inputs: SQL query; call get_database_info first.\nOutputs: First k rows of query results.\nCannot do / Limits: Limited to first k rows.\nCost / Notes: Medium.", + "description_cn": "功能: 执行 SQL queries against the perovskite solar cell database 和 return first k rows.\n何时使用: When querying perovskite database after getting schema.\n前提条件/输入: SQL query; call get_database_info first.\n输出: First k rows query的 results.\n无法做到/限制: 仅限于 first k rows.\n成本/备注: 中.", + "belonging_agent": "perovskite_research_agent", + "scenes": [ + "PEROVSKITE_RESEARCH" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "024-UNIMOLPR-003", + "name": "Unimol_Predict_Perovskite_Additive", + "description": "What it does: Predict the additive effect on perovskite PCE with a list of additive molecules.\nWhen to use: When you need PCE change prediction for additives.\nPrerequisites / Inputs: List of additive molecules.\nOutputs: Predicted PCE changes.\nCannot do / Limits: Specific to perovskite additives.\nCost / Notes: Medium.", + "description_cn": "功能: 预测 the additive effect on perovskite PCE 使用 a list additive的 molecules.\n何时使用: 当您需要 PCE change prediction 用于 additives.\n前提条件/输入: List additive的 molecules.\n输出: 预测ed PCE changes.\n无法做到/限制: 特定于 perovskite additives.\n成本/备注: 中.", + "belonging_agent": "perovskite_research_agent", + "scenes": [ + "PEROVSKITE_RESEARCH" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "026-PHYSICAL-001", + "name": "physical_adsorption_echart_data", + "description": "What it does: Analyze physical adsorption instrument reports.\nWhen to use: When you have gas adsorption data.\nPrerequisites / Inputs: Instrument reports.\nOutputs: Analyzed data.\nCannot do / Limits: Specific to physical adsorption.\nCost / Notes: Low.", + "description_cn": "功能: 分析 physical ads或ption instrument rep或ts.\n何时使用: When you have gas ads或ption data.\n前提条件/输入: Instrument rep或ts.\n输出: 分析d data.\n无法做到/限制: 特定于 physical ads或ption.\n成本/备注: 低.", + "belonging_agent": "physical_adsorption_agent", + "scenes": [ + "PHYSICAL_ADSORPTION" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "027-RUNPILOT-001", + "name": "run_piloteye", + "description": "What it does: Perform property calculations for lithium-ion battery electrolytes using MD and DFT.\nWhen to use: When you need electrolyte property calculations.\nPrerequisites / Inputs: Params JSON with formulation.\nOutputs: Target properties from modeling pipeline.\nCannot do / Limits: Built-in molecule library; complete workflow.\nCost / Notes: High.", + "description_cn": "功能: 执行 property calculations 用于 lithium-ion battery electrolytes using MD 和 DFT.\n何时使用: 当您需要 electrolyte property calculations.\n前提条件/输入: Params JSON 使用 用于mulation.\n输出: Target properties 从 modeling pipeline.\n无法做到/限制: Built-in molecule library; complete w或kflow.\n成本/备注: 高.", + "belonging_agent": "piloteye_electro_agent", + "scenes": [ + "PILOTEYE_ELECTRO" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "028-GETTARGE-001", + "name": "get_target_info", + "description": "What it does: Get target information from configuration settings for Uni-ELF inference system.\nWhen to use: When you need configuration info for Uni-ELF.\nPrerequisites / Inputs: None.\nOutputs: Comprehensive configuration information and available target model mappings.\nCannot do / Limits: Specific to Uni-ELF system.\nCost / Notes: Low.", + "description_cn": "功能: Get target in用于mation 从 configuration settings 用于 Uni-ELF inference system.\n何时使用: 当您需要 configuration info 用于 Uni-ELF.\n前提条件/输入: None.\n输出: Comprehensive configuration in用于mation 和 available target model mappings.\n无法做到/限制: 特定于 Uni-ELF system.\n成本/备注: 低.", + "belonging_agent": "unielf_agent", + "scenes": [ + "POLYMER" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "028-UNIELFIN-002", + "name": "unielf_inference", + "description": "What it does: Run Uni-ELF inference for formulation inputs to predict properties.\nWhen to use: When you need property prediction for formulations.\nPrerequisites / Inputs: Components and ratios for formulations.\nOutputs: Predicted properties.\nCannot do / Limits: Supports mixtures and pseudo-formulations.\nCost / Notes: Medium.", + "description_cn": "功能: 运行 Uni-ELF inference 用于 用于mulation inputs 到 predict properties.\n何时使用: 当您需要 property prediction 用于 用于mulations.\n前提条件/输入: Components 和 ratios 用于 用于mulations.\n输出: 预测ed properties.\n无法做到/限制: 支持 mixtures 和 pseudo-用于mulations.\n成本/备注: 中.", + "belonging_agent": "unielf_agent", + "scenes": [ + "POLYMER" + ], + "alternative_tools": [], + "summary_prompt": "Summarize the Uni-ELF inference results based on the output:\n1. Report the url to the full results CSV file (`result_csv`).\n2. List the top 10 formulations from `top_10_results_dict`. For each, display the `formulation_id`, the composition (combine `smiles_i` and `ratio_i`), and the predicted property value (key ending in `_pred`).\n3. Highlight the best performing formulation.\n", + "summary_prompt_cn": "根据输出结果总结 Uni-ELF 推理结果:\n1. 报告完整结果 CSV 文件的 URL (`result_csv`)。\n2. 列出 `top_10_results_dict` 中的前 10 个配方。对于每个配方,显示 `formulation_id`、组成(结合 `smiles_i` 和 `ratio_i`)以及预测的属性值(以 `_pred` 结尾的键)。\n3. 突出显示表现最好的配方。\n", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "028-QUERYPOL-003", + "name": "query_polymerkb_literature", + "description": "What it does: Query literature knowledge base for polymer research with natural language.\nWhen to use: When you need in-depth literature analysis on polymer topics.\nPrerequisites / Inputs: Natural language questions about polymer.\nOutputs: Literature summaries from vector similarity search.\nCannot do / Limits: Topics limited to polymers.\nCost / Notes: Medium.", + "description_cn": "功能: 查询 literature knowledge base 用于 polymer research 使用 natural language.\n何时使用: 当您需要 in-depth literature analysis on polymer 到pics.\n前提条件/输入: Natural language questions about polymer.\n输出: Literature summaries 从 vec到r similarity search.\n无法做到/限制: 到pics 仅限于 polymers.\n成本/备注: 中.", + "belonging_agent": "POLYMERkb_agent", + "scenes": [ + "POLYMER" + ], + "alternative_tools": [ + "search-papers-enhanced", + "web-search" + ], + "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries and database entries (List[str])\n - Each item can be either:\n - A detailed literature summary (for papers with fulltext): Contains comprehensive analysis of the paper\n - A database entry (for papers without fulltext): Contains DOI and database properties (e.g., polymer_type, tensile_strength, flexural_strength, etc.)\n - These summaries and entries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries and database entries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n**IMPORTANT**: The summaries list may contain two types of entries:\n1. **Detailed literature summaries** (from papers with fulltext): These contain comprehensive analysis\n2. **Database entries** (from papers without fulltext): These contain DOI and database properties (e.g., polymer_type, tensile_strength, flexural_strength, glass_transition_temperature, etc.)\n\n**YOU MUST**:\n- Include BOTH types of entries in your synthesis\n- For database entries, extract and cite the quantitative data (properties, values, DOI)\n- Integrate database property data into your analysis (e.g., compare property ranges, identify trends)\n- Cite database entries using their DOI: [n] (DOI: xxx)\n- Do NOT ignore database entries - they provide valuable quantitative data even without full text\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *T_g*, *E*, *T*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed (including both detailed summaries and database entries)\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries AND database entries with detailed explanations\n - Include specific quantitative data from both detailed summaries and database entries\n - **For database entries**: Extract and cite property data (e.g., \"epoxy resins show tensile_strength values ranging from 1.2 to 1130 MPa [n] (DOI: 10.xxx), with most values between 20-60 MPa [m] (DOI: 10.yyy)\")\n - **Use database entries for statistical analysis**: Group by polymer_type, calculate property ranges, identify trends, create property distributions\n - **Example integration**: \"While detailed studies [1] show that SPAEK/PLA membranes achieve 0.129 S/cm proton conductivity, database entries reveal that epoxy resins typically exhibit tensile_strength in the range of 20-60 MPa [2-10] (DOIs: 10.xxx, 10.yyy, ...), suggesting different property profiles for different polymer classes\"\n - Use database entries to provide statistical overviews, property ranges, and material comparisons\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable (include data from database entries)\n - Address contradictions or gaps in current understanding\n - **CRITICAL**: Database entries provide valuable quantitative data - always cite them with their DOI, even if they lack full text context\n\n3. **Property Data Summary** (if database entries are present):\n - Create a dedicated section summarizing quantitative data from database entries\n - Group entries by polymer_type or property type\n - Present property ranges, typical values, and distributions\n - Use tables to organize property data from multiple database entries\n - Cite each database entry: [n] (DOI: xxx)\n\n4. **Summary of Key Findings**: Synthesize the most important insights from both detailed summaries and database entries\n\n5. **References**: List all cited sources [1], [2], [3], etc.\n - For detailed summaries: Include title, authors, journal if available\n - For database entries: Format as [n] DOI: xxx (database entry - property data only)\n - **CRITICAL**: Do NOT omit database entries from references - they are valid data sources and must be cited\n", + "summary_prompt_cn": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要和数据库条目列表(List[str])\n - 每个项目可以是:\n - 详细的文献摘要(对于有全文的论文):包含论文的全面分析\n - 数据库条目(对于没有全文的论文):包含 DOI 和数据库属性(例如,polymer_type、tensile_strength、flexural_strength 等)\n - 这些摘要和条目是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要和数据库条目。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n**重要**:摘要列表可能包含两种类型的条目:\n1. **详细的文献摘要**:包含论文的全面分析,包括方法、结果、讨论等\n2. **数据库条目**:包含 DOI 和数据库属性(例如,polymer_type、tensile_strength、flexural_strength 等)\n\n您应该将这两种类型的条目整合到报告中,使用文献摘要提供深入分析,使用数据库条目提供定量数据。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要和数据库条目的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + "self_check": false, + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_polymerkb_literature(query_description)\n\n=== KNOWLEDGE BASE COVERAGE ===\nThe knowledge base contains:\n• Structured database with polymer properties and paper metadata\n• Multiple tables including:\n - Polymer properties: polymer names, types, compositions, properties, DOI\n - Paper metadata: titles, abstracts, authors, publication dates, journal info, DOI\n - Paper full text: complete paper text and supplementary information\n - Monomer information: monomer abbreviations, full names, SMILES, notes\n• Topics covering:\n - Polymer types and compositions\n - Material properties (glass transition temperature, mechanical properties, etc.)\n - Monomer structures and synthesis\n - Processing methods and conditions\n - Structure-property relationships\n - Applications and performance\n\n**Examples:**\n1) 查询特定类型的聚合物:\n → Tool: query_polymerkb_literature\n query_description: '查找玻璃化转变温度低于400°C的聚酰亚胺相关论文'\n\n2) 查询特定单体:\n → Tool: query_polymerkb_literature\n query_description: '查找包含PMDA单体的聚合物相关论文'\n\n3) 查询特定属性的聚合物:\n → Tool: query_polymerkb_literature\n query_description: '查找发表在一区期刊上的聚酰亚胺论文'\n" + }, + { + "tool_id": "029-TRAJANAL-001", + "name": "traj_analysis_diffusion", + "description": "What it does: Analyze diffusion from trajectories.\nWhen to use: Calculate MSD, diffusion coeffs.\nPrerequisites / Inputs: MD trajectory file.\nOutputs: MSD, D, conductivity.\nCannot do / Limits: Post-MD analysis only.\nCost / Notes: Medium.", + "description_cn": "功能: 分析 diffusion 从 trajec到ries.\n何时使用: 计算 MSD, diffusion coeffs.\n前提条件/输入: MD trajec到ry file.\n输出: MSD, D, conductivity.\n无法做到/限制: Post-MD analysis 仅.\n成本/备注: 中.", + "belonging_agent": "traj_analysis_agent", + "scenes": [ + "POST_MD_ANALYSIS" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "029-TRAJANAL-002", + "name": "traj_analysis_rdf", + "description": "What it does: Compute RDF from trajectories.\nWhen to use: Analyze atomic distributions.\nPrerequisites / Inputs: MD trajectory.\nOutputs: Radial distribution function.\nCannot do / Limits: Post-MD analysis only.\nCost / Notes: Medium.", + "description_cn": "功能: Compute RDF 从 trajec到ries.\n何时使用: 分析 原子ic distributions.\n前提条件/输入: MD trajec到ry.\n输出: Radial distribution function.\n无法做到/限制: Post-MD analysis 仅.\n成本/备注: 中.", + "belonging_agent": "traj_analysis_agent", + "scenes": [ + "POST_MD_ANALYSIS" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "029-TRAJANAL-003", + "name": "traj_analysis_solvation", + "description": "What it does: Analyze solvation structures.\nWhen to use: Study solvent-solute interactions.\nPrerequisites / Inputs: MD trajectory.\nOutputs: Solvation shells, properties.\nCannot do / Limits: Post-MD analysis only.\nCost / Notes: Medium.", + "description_cn": "功能: 分析 solvation structures.\n何时使用: Study solvent-solute interactions.\n前提条件/输入: MD trajec到ry.\n输出: Solvation shells, properties.\n无法做到/限制: Post-MD analysis 仅.\n成本/备注: 中.", + "belonging_agent": "traj_analysis_agent", + "scenes": [ + "POST_MD_ANALYSIS" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "029-TRAJANAL-004", + "name": "traj_analysis_bond", + "description": "What it does: Analyze bond length evolution.\nWhen to use: Monitor bond dynamics.\nPrerequisites / Inputs: MD trajectory.\nOutputs: Bond length time series.\nCannot do / Limits: Post-MD analysis only.\nCost / Notes: Medium.", + "description_cn": "功能: 分析 bond length evolution.\n何时使用: Moni到r bond dynamics.\n前提条件/输入: MD trajec到ry.\n输出: Bond length time series.\n无法做到/限制: Post-MD analysis 仅.\n成本/备注: 中.", + "belonging_agent": "traj_analysis_agent", + "scenes": [ + "POST_MD_ANALYSIS" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "029-TRAJANAL-005", + "name": "traj_analysis_react", + "description": "What it does: Analyze reaction networks.\nWhen to use: Study chemical reactions.\nPrerequisites / Inputs: MD trajectory.\nOutputs: Reaction species, networks.\nCannot do / Limits: Post-MD analysis only.\nCost / Notes: Medium.", + "description_cn": "功能: 分析 reaction netw或ks.\n何时使用: Study chemical reactions.\n前提条件/输入: MD trajec到ry.\n输出: Reaction species, netw或ks.\n无法做到/限制: Post-MD analysis 仅.\n成本/备注: 中.", + "belonging_agent": "traj_analysis_agent", + "scenes": [ + "POST_MD_ANALYSIS" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "030-CALCULAT-001", + "name": "calculate_reaction_profile", + "description": "What it does: Calculate reaction profile.\nWhen to use: For organic reaction analysis.\nPrerequisites / Inputs: Reaction inputs.\nOutputs: Reaction profile.\nCannot do / Limits: Specific to reactions.\nCost / Notes: Medium.", + "description_cn": "功能: 计算 reaction profile.\n何时使用: 用于 或ganic reaction analysis.\n前提条件/输入: Reaction inputs.\n输出: Reaction profile.\n无法做到/限制: 特定于 reactions.\n成本/备注: 中.", + "belonging_agent": "organic_reaction_agent", + "scenes": [ + "REACTION" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "033-QUERYSTE-001", + "name": "query_steelkb_literature", + "description": "What it does: Query literature knowledge base for Stainless Steel research.\nWhen to use: When you need in-depth literature analysis on Stainless Steel topics.\nPrerequisites / Inputs: Natural language questions about Stainless Steel.\nOutputs: Literature summaries from vector search.\nCannot do / Limits: Topics limited to Stainless Steel.\nCost / Notes: Medium.", + "description_cn": "功能: 查询 literature knowledge base 用于 Stainless Steel research.\n何时使用: 当您需要 in-depth literature analysis on Stainless Steel 到pics.\n前提条件/输入: Natural language questions about Stainless Steel.\n输出: Literature summaries 从 vec到r search.\n无法做到/限制: 到pics 仅限于 Stainless Steel.\n成本/备注: 中.", + "belonging_agent": "STEELkb_agent", + "scenes": [ + "STEEL" + ], + "alternative_tools": [ + "search-papers-enhanced", + "web-search" + ], + "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries (List[str])\n - Each summary is a text string containing the summary of one literature paper\n - These summaries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries with detailed explanations\n - Include specific quantitative data, experimental conditions, and results\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable\n - Address contradictions or gaps in current understanding\n\n3. **Summary of Key Findings**: Synthesize the most important insights\n\n4. **References**: List all cited sources [1], [2], [3], etc.\n", + "summary_prompt_cn": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要列表(List[str])\n - 每个摘要是包含一篇文献论文摘要的文本字符串\n - 这些摘要是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + "self_check": false, + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_steelkb_literature(question, top_k)\n\n**Parameters:**\n- question (str, required): Natural language query about Stainless Steel research topics\n- top_k (int, optional): Number of chunks to retrieve (5-15 recommended, default: 5)\n\n**Examples:**\n1) 查询不锈钢的腐蚀机制:\n → Tool: query_steelkb_literature\n question: '不锈钢的腐蚀行为和防护机制是什么?不同元素对腐蚀性能的影响如何?'\n top_k: 5\n\n2) 查询力学性能:\n → Tool: query_steelkb_literature\n question: '不锈钢的力学性能如何?影响力学性能的主要因素有哪些?'\n top_k: 8\n\n3) 查询微观结构:\n → Tool: query_steelkb_literature\n question: '不锈钢的微观结构特征是什么?如何通过热处理调控微观结构?'\n top_k: 10\n\n4) 查询制备方法:\n → Tool: query_steelkb_literature\n question: '不锈钢的主要制备方法有哪些?不同制备方法对合金性能的影响如何?'\n top_k: 5\n" + }, + { + "tool_id": "033-PREDICTT-002", + "name": "predict_tensile_strength", + "description": "What it does: Predict ultimate tensile strength for stainless steel using neural network.\nWhen to use: When you need UTS prediction based on composition.\nPrerequisites / Inputs: List of chemical formulas.\nOutputs: List of predicted UTS values in MPa.\nCannot do / Limits: Stainless steel only; no files returned.\nCost / Notes: Low.", + "description_cn": "功能: 预测 ultimate tensile strength 用于 stainless steel using neural netw或k.\n何时使用: 当您需要 UTS prediction based on composition.\n前提条件/输入: List chemical的 用于mulas.\n输出: List predicted的 UTS values in MPa.\n无法做到/限制: Stainless steel 仅; no files returned.\n成本/备注: 低.", + "belonging_agent": "STEEL_PREDICT_agent", + "scenes": [ + "STEEL" + ], + "alternative_tools": [ + "search-papers-enhanced", + "web-search" + ], + "summary_prompt": "\n## RESPONSE FORMAT\n\n**Returns:**\n- List of float values: List of predicted tensile strength values in MPa\n- The order matches the input formula list\n- Example: [650.25, 680.50, 695.30] for three formulas\n- For single formula: Returns a list with one value, e.g., [650.25]\n\n**Presentation Guidelines:**\n- Present results clearly to the user:\n - For single formula: \"预测结果: 650.25 MPa\"\n - For batch: Create a table or list showing formula → prediction mapping\n- If the user asks for interpretation, explain what the predicted value(s) mean in context\n- For batch results, analyze trends (e.g., \"As Cr content increases from 16% to 22%, predicted strength increases from 620.30 to 710.15 MPa\")\n- Compare with typical stainless steel tensile strength ranges if relevant (e.g., 300-800 MPa for common grades)\n- When presenting batch results, organize them in a clear format (table, list, or trend analysis)\n- Match each prediction value with its corresponding formula from the input list\n", + "summary_prompt_cn": "## 响应格式\n\n**返回:**\n- 浮点值列表:预测的抗拉强度值列表(单位:MPa)\n- 顺序与输入化学式列表匹配\n- 示例:三个化学式为 [650.25, 680.50, 695.30]\n", + "self_check": false, + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** predict_tensile_strength(formula)\n\n**Parameters:**\n- formula (list[str], required): List of chemical formula strings\n - **IMPORTANT**: Always provide a list, even for a single formula\n - Format: ElementSymbol followed by numeric value\n - Example (single): [\"Fe70Cr20Ni10\"] means Fe=70%, Cr=20%, Ni=10%\n - Example (single): [\"C0.1Si0.5Mn1.0Cr18.0Ni8.0\"] means C=0.1%, Si=0.5%, Mn=1.0%, Cr=18.0%, Ni=8.0%\n - Example (batch): [\"Fe70Cr20Ni10\", \"Fe68Cr22Ni10\", \"Fe66Cr24Ni10\"] for multiple predictions\n\n**Allowed Elements:**\nB, C, N, O, Al, Si, P, S, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Nb, Mo, W\n\n**Examples:**\n1) Predict tensile strength for a single formula (use list with one element):\n → Tool: predict_tensile_strength\n formula: [\"Fe70Cr20Ni10\"]\n Returns: [650.25] (list with one value)\n\n2) Predict tensile strength with specific composition:\n → Tool: predict_tensile_strength\n formula: [\"C0.1Si0.5Mn1.0Cr18.0Ni8.0\"]\n Returns: [680.50] (list with one value)\n\n3) Batch prediction for multiple formulas (more efficient):\n → Tool: predict_tensile_strength\n formula: [\"Fe70Cr20Ni10\", \"Fe68Cr22Ni10\", \"Fe66Cr24Ni10\", \"Fe64Cr26Ni10\"]\n Returns: [650.25, 680.50, 695.30, 710.15]\n This is especially useful when analyzing the effect of element variation on strength.\n\n4) Systematic composition variation analysis:\n → Tool: predict_tensile_strength\n formula: [\"Fe66Cr16Ni12Mo2.5\", \"Fe64Cr18Ni12Mo2.5\", \"Fe62Cr20Ni12Mo2.5\", \"Fe60Cr22Ni12Mo2.5\"]\n Returns: [620.30, 650.25, 680.50, 710.15]\n Use this to analyze how changing Cr content affects tensile strength.\n\n**Usage Guidelines:**\n- **CRITICAL**: Always provide formula as a list, even for a single formula: [\"Fe70Cr20Ni10\"] not \"Fe70Cr20Ni10\"\n- Always provide the chemical formula in the correct format\n- Ensure all elements in the formula are from the allowed set\n- The tool will automatically handle element ordering and normalization\n- If prediction fails, check the formula format and element names\n- The model uses standardized input features, so the tool handles data preprocessing automatically\n- **For systematic analysis**: Use batch prediction when analyzing element variation effects (e.g., changing Cr from 16% to 22%)\n- **Batch prediction is more efficient**: When predicting multiple formulas, include all in one list\n" + }, + { + "tool_id": "034-GENERATE-001", + "name": "generate_calypso_structures", + "description": "What it does: Perform global structure search with CALYPSO to generate candidate crystal structures.\nWhen to use: When you need to explore polymorphs for a composition.\nPrerequisites / Inputs: Valid element inputs; CALYPSO environment.\nOutputs: Multiple POSCAR files.\nCannot do / Limits: Requires relaxation downstream.\nCost / Notes: Medium.", + "description_cn": "功能: 执行 global structure search 使用 CALYPSO 到 generate c和idate crystal structures.\n何时使用: 当您需要 到 expl或e polym或phs 用于 a composition.\n前提条件/输入: Valid element inputs; CALYPSO environment.\n输出: Multiple POSCAR files.\n无法做到/限制: 需要 弛豫 downstream.\n成本/备注: 中.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": true, + "args_setting": "Parameter guidance: n_tot=10–30 gives reasonable diversity without excessive cost. Elements must be from the supported list (H–Bi, Ac–Pu). Output is a set of POSCAR files; downstream relaxation is strongly recommended." + }, + { + "tool_id": "034-GENERATE-002", + "name": "generate_crystalformer_structures", + "description": "What it does: Generate crystal structures based on conditional attributes and space groups.\nWhen to use: When you need structures with specific properties.\nPrerequisites / Inputs: Target properties (bandgap, moduli, Tc, sound); space groups.\nOutputs: Generated structures.\nCannot do / Limits: Limited to supported properties; requires space group.\nCost / Notes: High; uses generative model.", + "description_cn": "功能: 生成 crystal structures based on conditional attributes 和 space groups.\n何时使用: 当您需要 structures 使用 specific properties.\n前提条件/输入: Target properties (b和gap, moduli, Tc, sound); space groups.\n输出: 生成d structures.\n无法做到/限制: 仅限于 supp或ted properties; 需要 space group.\n成本/备注: 高; uses generative model.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE", + "CONDITIONAL_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": true, + "args_setting": "Parameter guidance: Supported properties: bandgap (eV), shear_modulus, bulk_modulus (both log₁₀ GPa), superconducting ambient_pressure/high_pressure (K), sound (m/s). For target_type=\"minimize\", use small target (e.g., 0.1) and low alpha (0.01); for \"equal\", \"greater\", \"less\", use alpha=1.0. mc_steps=500 balances convergence and speed; increase to 2000 for high-accuracy targets. sample_num=20–100 recommended; distribute across space groups if random_spacegroup_num>0. Critical: Space group must be explicitly specified by the user — no defaults or auto-inference." + }, + { + "tool_id": "034-MAKESUPE-003", + "name": "make_supercell_structure", + "description": "What it does: Create supercell expansion from structure file.\nWhen to use: When you need larger unit cell for simulations.\nPrerequisites / Inputs: Structure file.\nOutputs: Supercell structure.\nCannot do / Limits: Expansion only; no reduction.\nCost / Notes: Low.", + "description_cn": "功能: 创建 超胞 expansion 从 structure file.\n何时使用: 当您需要 larger unit cell 用于 simulations.\n前提条件/输入: 结构文件.\n输出: 超胞 structure.\n无法做到/限制: Expansion 仅; no reduction.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": true, + "args_setting": "Parameter guidance: Primarily follow user's instrucution. If not specified, firstly get structure information to understand the raw lattice. An ideal supercell for computation is isotropic. For example, the raw lattice is (4 A, 10 A, 12 A, 90 deg, 90 deg, 90 deg), the supercell should be 5 × 2 × 2. 30-50 angstrom is often appropriate for simulations. Avoid overly large cells unless needed for long-range interactions.", + "bypass_confirmation": true + }, + { + "tool_id": "034-BUILDBUL-004", + "name": "build_bulk_structure_by_template", + "description": "What it does: Build bulk structures for simple packing types and compounds.\nWhen to use: For standard crystal structures like sc, fcc, bcc, hcp, rocksalt, etc.\nPrerequisites / Inputs: Element symbols or formulas; lattice constants.\nOutputs: Crystal structure file.\nCannot do / Limits: Limited to simple structures; no complex crystals.\nCost / Notes: Low.", + "description_cn": "功能: 构建 bulk structures 用于 simple packing types 和 compounds.\n何时使用: 用于 st和ard crystal structures 如 sc, fcc, bcc, hcp, rocksalt, etc.\n前提条件/输入: Element symbols 或 用于mulas; lattice constants.\n输出: Crystal structure file.\n无法做到/限制: 仅限于 simple structures; no complex crystals.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [ + "fetch_bohrium_crystals", + "fetch_structures_with_filter", + "build_bulk_structure_by_wyckoff" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": true, + "args_setting": "Parameter guidance: Lattice constant requirements due to symmetry constraints: sc/fcc/bcc/diamond/rocksalt/cesiumchloride/zincblende/fluorite → only a; hcp/wurtzite → a and c; orthorhombic/monoclinic → a, b, c. Set conventional=True by default unless primitive cell is explicitly required. For elements, use element symbols; for compounds, use chemical formula (e.g., \"NaCl\"). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "bypass_confirmation": true + }, + { + "tool_id": "034-BUILDSUR-005", + "name": "build_surface_slab", + "description": "What it does: Build surface slab structures from bulk structure.\nWhen to use: When you need surface models for calculations.\nPrerequisites / Inputs: Bulk structure file; Miller indices.\nOutputs: Slab structure file.\nCannot do / Limits: Requires bulk input; vacuum added.\nCost / Notes: Low.", + "description_cn": "功能: 构建 surface slab structures 从 bulk structure.\n何时使用: 当您需要 surface models 进行计算s.\n前提条件/输入: Bulk structure file; Miller indices.\n输出: Slab structure file.\n无法做到/限制: 需要 bulk input; vacuum added.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": true, + "args_setting": "Parameter guidance: Prefer slab_size_mode=\"layers\" with slab_size_value=4–6 for stability; or \"thickness\" with ≥12 Å for electronic convergence. Use vacuum=15–20 Å to minimize spurious interactions. For polar surfaces or systems with strong dipoles, increase vacuum to ensure the electrostatic potential flattens in the vacuum region. Enable repair=True for covalent materials (e.g., drug-like molecule crystals, oragnic-inorganic hybrids, MOFs); Set false for regular sphrical-like inorganic crystals. Gets slow if set True. Default termination=\"auto\" usually selects the most stoichiometric termination. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "bypass_confirmation": true + }, + { + "tool_id": "034-BUILDSUR-006", + "name": "build_surface_adsorbate", + "description": "What it does: Build surface-adsorbate structures by placing molecules on slabs.\nWhen to use: For adsorption studies.\nPrerequisites / Inputs: Surface slab and adsorbate structure files.\nOutputs: Combined structure file.\nCannot do / Limits: Single adsorbate placement.\nCost / Notes: Low.", + "description_cn": "功能: 构建 surface-ads或bate structures 通过 placing molecules on slabs.\n何时使用: 用于 ads或ption studies.\n前提条件/输入: Surface slab 和 ads或bate structure files.\n输出: Combined structure file.\n无法做到/限制: Single ads或bate placement.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": true, + "args_setting": "Parameter guidance: height=2.0 Å is typical for physisorption; reduce to 1.5–1.8 Å for chemisorption (e.g., CO on Pt). For high-symmetry sites, use string keywords (\"ontop\", \"fcc\", \"hcp\"); for custom placement, supply [x, y] fractional coordinates. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "bypass_confirmation": true + }, + { + "tool_id": "034-BUILDSUR-007", + "name": "build_surface_interface", + "description": "What it does: Build heterointerface by stacking two slab structures.\nWhen to use: For interface studies.\nPrerequisites / Inputs: Two slab structure files.\nOutputs: Interface structure file.\nCannot do / Limits: Basic strain checking.\nCost / Notes: Low.", + "description_cn": "功能: 构建 heterointerface 通过 stacking two slab structures.\n何时使用: 用于 interface studies.\n前提条件/输入: Two slab structure files.\n输出: Interface structure file.\n无法做到/限制: Basic strain checking.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "Parameter guidance: Keep max_strain=0.05 (5%) for physical relevance; relax only if intentional strain engineering is intended. Try combinding make_supercell and get_structural_info to obtain the appropriate size of the two slabs. interface_distance=2.5 Å is safe for van der Waals gaps; reduce to 1.8–2.0 Å for covalent bonding (e.g., heterostructures with orbital overlap). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "bypass_confirmation": true + }, + { + "tool_id": "034-ADDCELLF-008", + "name": "add_cell_for_molecules", + "description": "What it does: Add periodic cell to molecular structures for calculations.\nWhen to use: For isolated molecule calculations requiring periodicity.\nPrerequisites / Inputs: Molecular structure file.\nOutputs: Structure with periodic cell.\nCannot do / Limits: For gas-phase molecules.\nCost / Notes: Low.", + "description_cn": "功能: Add periodic cell 到 molecular structures 进行计算s.\n何时使用: 用于 isolated molecule calculations requiring periodicity.\n前提条件/输入: Molecular structure file.\n输出: Structure 使用 periodic cell.\n无法做到/限制: 用于 gas-phase molecules.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "Parameter guidance: For non-periodic system aiming to run calculations with periodic boundary conditions required (e.g., DFT calculations with ABACUS), use add_cell_for_molecules to put the system in a large cell. Default cell [10, 10, 10] Å and vacuum = 5 Å are suitable for most gas-phase molecules; increase to ≥15 Å and ≥8 Å vacuum for polar or diffuse systems (e.g., anions, excited states). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "bypass_confirmation": true + }, + { + "tool_id": "034-BUILDBUL-009", + "name": "build_bulk_structure_by_wyckoff", + "description": "What it does: Build crystal structures by specifying space group and Wyckoff positions.\nWhen to use: For custom crystal structures.\nPrerequisites / Inputs: Space group; Wyckoff positions with coordinates.\nOutputs: Crystal structure file.\nCannot do / Limits: Requires symmetry knowledge.\nCost / Notes: Low.", + "description_cn": "功能: 构建 crystal structures 通过 specifying space group 和 Wyckoff positions.\n何时使用: 用于 cus到m crystal structures.\n前提条件/输入: Space group; Wyckoff positions 使用 co或dinates.\n输出: Crystal structure file.\n无法做到/限制: 需要 symmetry knowledge.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [ + "fetch_bohrium_crystals", + "fetch_structures_with_filter", + "build_bulk_structure_by_template" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "Parameter guidance: Space Group: Integer (e.g., 225) or Symbol (e.g., \"Fm-3m\"). Wyckoff Consistency: The provided coordinates must mathematically belong to the specific Wyckoff position (e.g., if using position 4a at (0,0,0), do not input (0.5, 0.5, 0) just because it's in the same unit cell; only input the canonical generator). Lattice: Angles in degrees, lengths in Å. Fractional Coordinates: Must be in [0, 1). Strictly Use the Asymmetric Unit: You must provide only the generating coordinates for each Wyckoff orbit. Do NOT Pre-calculate Symmetry: The function will automatically apply all space group operators to your input. If you manually input coordinates that are already symmetry-equivalent (e.g., providing both (x, y, z) and (-x, -y, -z) in a centrosymmetric structure), the function will generate them again, causing catastrophic atom overlapping. Redundancy Rule: Before adding a coordinate, check if it can be generated from an existing input coordinate via any operator in the Space Group. If yes, discard it. One Wyckoff letter = One coordinate triplet input. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "bypass_confirmation": true + }, + { + "tool_id": "034-BUILDMOL-010", + "name": "build_molecule_structures_from_smiles", + "description": "What it does: Build 3D molecular structures from SMILES strings.\nWhen to use: When you have SMILES and need 3D coordinates.\nPrerequisites / Inputs: SMILES string.\nOutputs: Molecular structure file.\nCannot do / Limits: Single conformer generation.\nCost / Notes: Low.", + "description_cn": "功能: 构建 3D molecular structures 从 SMILES strings.\n何时使用: When you have SMILES 和 need 3D co或dinates.\n前提条件/输入: SMILES string.\n输出: Molecular structure file.\n无法做到/限制: Single con用于mer generation.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "\nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "bypass_confirmation": true + }, + { + "tool_id": "034-MAKEDOPE-011", + "name": "make_doped_structure", + "description": "What it does: Generate doped crystal structures by substituting atoms.\nWhen to use: For doping studies.\nPrerequisites / Inputs: Host structure; dopant species and concentrations.\nOutputs: Doped structure file.\nCannot do / Limits: Random substitution; recommend supercells.\nCost / Notes: Low.", + "description_cn": "功能: 生成 doped crystal structures 通过 substituting 原子.\n何时使用: 用于 doping studies.\n前提条件/输入: Host structure; dopant species 和 concentrations.\n输出: Doped structure file.\n无法做到/限制: R和om substitution; recommend 超胞s.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "Parameter guidance: Fractions are applied per-site; actual doping % may differ slightly in small cells — recommend ≥2×2×2 supercells for <10% doping. Covalent ions (ammonium, formamidinium, etc.) are supported via built-in library; specify by name (e.g., \"ammonium\"). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "bypass_confirmation": true + }, + { + "tool_id": "034-MAKEDEFE-012", + "name": "make_defect_structure", + "description": "What it does: Create a defect structure by removing specific molecular clusters based on spatial relationships.\nWhen to use: For creating vacancy defects in molecular crystals by removing specific molecular units based on spatial clustering.\nPrerequisites / Inputs: Input molecular crystal structure file; optionally target species to remove and starting molecule index.\nOutputs: Defective structure file.\nCannot do / Limits: Specifically designed for molecular crystals where entire molecules need to be removed as clusters rather than individual atoms.\nCost / Notes: Low.", + "description_cn": "功能: 创建 a defect structure 通过 removing specific molecular clusters based on spatial relationships.\n何时使用: 用于 creating vacancy defects in molecular crystals 通过 removing specific molecular units based on spatial clustering.\n前提条件/输入: Input molecular crystal structure file; 可选ly target species 到 remove 和 starting molecule index.\n输出: Defective structure file.\n无法做到/限制: Specifically designed 用于 molecular crystals where entire molecules need 到 be removed as clusters rather than individual 原子.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "Parameter guidance: structure_path is the input molecular crystal structure file (e.g., CIF); target_spec is an optional dictionary mapping species IDs to counts to remove (e.g., {\"C6H14N2_1\": 1, \"H4N_1\": 1}), if None uses the simplest unit in crystal; seed_index is the index of molecule to start removing from, if None picks randomly from rarest species; method is the method to use for selecting molecules to remove; return_removed_cluster: controls whether returns removed clusters; output_file is the path to save the generated defective structure file.", + "bypass_confirmation": true + }, + { + "tool_id": "034-MAKEAMOR-013", + "name": "make_amorphous_structure", + "description": "What it does: Generate amorphous molecular structures in periodic boxes.\nWhen to use: For amorphous material simulations.\nPrerequisites / Inputs: Molecule structure; box size/density/count.\nOutputs: Amorphous structure file.\nCannot do / Limits: Avoids overlaps; for further relaxation.\nCost / Notes: Medium.", + "description_cn": "功能: 生成 am或phous molecular structures in periodic boxes.\n何时使用: 用于 am或phous material simulations.\n前提条件/输入: Molecule structure; box size/density/count.\n输出: Am或phous structure file.\n无法做到/限制: Avoids overlaps; 用于 further 弛豫.\n成本/备注: 中.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": true, + "args_setting": "Parameter guidance: Input Constraint: Specify exactly two of: box_size, density, molecule_numbers. The third is derived. Density Regimes (CRITICAL): Solids/Liquids: Target ~0.9–1.2 g/cm³ (e.g., water ~1.0, polymers ~1.1). Gases/Vapors: Target orders of magnitude lower (e.g., ~0.001–0.002 g/cm³ for STP gases). Warning: Do not apply default liquid densities to gas inputs. If simulating a specific pressure, pre-calculate the required number of molecules N for the given Box Volume V (using Ideal Gas Law), then fix box_size and molecule_numbers. Composition: Use composition for multi-component mixtures; otherwise equal molar ratios are assumed. Packing Geometry: Box Size: For gases, ensure the box is large enough (usually >15 Å) to minimize unphysical periodic self-interactions, even if the density is low. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "bypass_confirmation": true + }, + { + "tool_id": "034-GENERATE-014", + "name": "generate_ordered_replicas", + "description": "What it does: Process disordered CIF files to generate ordered replica structures.\nWhen to use: When you have a disordered structure and need to resolve disorder to create ordered structures.\nPrerequisites / Inputs: Disordered CIF file path; optional number of structures to generate, method for generation.\nOutputs: List of paths to the generated ordered structure files.\nCannot do / Limits: Only processes disordered structures to ordered ones; requires valid CIF input.\nCost / Notes: Medium.", + "description_cn": "功能: Process dis或dered CIF files 到 generate 或dered replica structures.\n何时使用: When you have a dis或dered structure 和 need 到 resolve dis或der 到 create 或dered structures.\n前提条件/输入: Dis或dered CIF file path; 可选 number structures的 到 generate, method 用于 generation.\n输出: List paths的 到 the generated 或dered structure files.\n无法做到/限制: 仅 processes dis或dered structures 到 或dered ones; 需要 valid CIF input.\n成本/备注: 中.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE", + "STRUCTURE_SANITIZE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "Parameter guidance: structure_path: Required. Input disordered structure file (CIF format). generate_count: Optional. Number of ordered structures to generate (default: 1). method: Optional. Method for generation (\"optimal\" for single best structure, \"random\" for ensemble of structures) (default: \"random\"). output_file: Optional. Directory to save output files; defaults to subdirectory of input file location.", + "bypass_confirmation": true + }, + { + "tool_id": "034-REMOVESO-015", + "name": "remove_solvents", + "description": "What it does: Remove specified solvent molecules from a molecular crystal structure.\nWhen to use: When desolvating molecular crystals to obtain solvent-free or partially desolvated structures for analysis or simulation.\nPrerequisites / Inputs: CIF structure file containing identifiable solvent molecules; target solvent names or formulas.\nOutputs: Path to the desolvated structure file.\nCannot do / Limits: Only removes whole solvent molecules that can be identified by composition; does not modify framework atoms or resolve disorder.\nPrior step: It is recommended to call get_structure_info first to inspect molecular components and confirm solvent identities.\nCost / Notes: Low. Recommended to inspect molecular components first.", + "description_cn": "功能: Remove specified solvent molecules 从 a molecular crystal structure.\n何时使用: When desolvating molecular crystals 到 obtain solvent-free 或 partially desolvated structures 用于 analysis 或 simulation.\n前提条件/输入: CIF structure file containing identifiable solvent molecules; target solvent names 或 用于mulas.\n输出: Path 到 the desolvated structure file.\n无法做到/限制: 仅 removes whole solvent molecules that can be identified 通过 composition; does not modify framew或k 原子 或 resolve dis或der.\nPri或 step: It is recommended 到 call get_structure_info first 到 inspect molecular components 和 confirm solvent identities.\n成本/备注: 低. Recommended 到 inspect molecular components first.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_GENERATE", + "STRUCTURE_SANITIZE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "Parameter guidance: structure_path: Required. Input CIF file containing solvent molecules. output_file: Required. Path to save the desolvated structure. targets: Required. List of solvent names or chemical formulas to remove (e.g., \"H2O\", \"DMF\"). ", + "bypass_confirmation": true + }, + { + "tool_id": "035-ADDHYDRO-001", + "name": "add_hydrogens", + "description": "What it does: Add hydrogen atoms to a structure.\nWhen to use: Complete structures by adding missing hydrogens.\nPrerequisites / Inputs: Structure file path; optional bonding or hydrogen-adding rules.\nOutputs: Structure file with hydrogens added.\nCannot do / Limits: No optimization, refinement, or reactions.\nCost / Notes: Low.", + "description_cn": "功能: Add hydrogen 原子 到 a structure.\n何时使用: Complete structures 通过 adding missing hydrogens.\n前提条件/输入: 结构文件 path; 可选 bonding 或 hydrogen-adding rules.\n输出: 结构文件 使用 hydrogens added.\n无法做到/限制: No 优化, refinement, 或 reactions.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "STRUCTURE_SANITIZE", + "STRUCTURE_GENERATE" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": true, + "args_setting": "- target_elements: Optional. Limit hydrogen addition to specific elements.\n- optimize_torsion: Optional. If True, adjust torsion angles to optimize geometry; default is False.\n- rules: Optional. **Critical** for special cases (e.g., N in ammonium must remain target_coordination=4 and geometry of tetrahedron). If not provided, default chemical environment rules are used. For precise control, provide rules to override defaults.\n- bond_lengths: Optional. Override default bond lengths for specific atom pairs. If None, defaults are used.\nIMPORTANT: Even though rules are optional, certain functional groups require explicit rules for correctness. ", + "bypass_confirmation": true + }, + { + "tool_id": "036-RUNSUPER-001", + "name": "run_superconductor_optimization", + "description": "What it does: Optimize superconducting structures.\nWhen to use: Relax superconductor geometries.\nPrerequisites / Inputs: Structure file (CIF/POSCAR).\nOutputs: Optimized structure.\nCannot do / Limits: Only geometry optimization.\nCost / Notes: High (DPA calculations).", + "description_cn": "功能: 优化 superconducting structures.\n何时使用: Relax superconduc到r geometries.\n前提条件/输入: 结构文件 (CIF/POSCAR).\n输出: 优化d structure.\n无法做到/限制: 仅 geometry 优化.\n成本/备注: 高 (DPA calculations).", + "belonging_agent": "superconductor_agent", + "scenes": [ + "SUPERCONDUCTOR" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "036-CALCULAT-002", + "name": "calculate_superconductor_enthalpy", + "description": "What it does: Calculate enthalpy and stability.\nWhen to use: Screen superconductor stability.\nPrerequisites / Inputs: Structure candidates.\nOutputs: Enthalpy, convex hull, stable phases.\nCannot do / Limits: Superconductor-specific only.\nCost / Notes: High (DPA calculations).", + "description_cn": "功能: 计算 enthalpy 和 stability.\n何时使用: 筛选 superconduc到r stability.\n前提条件/输入: Structure c和idates.\n输出: Enthalpy, convex hull, stable phases.\n无法做到/限制: Superconduc到r-specific 仅.\n成本/备注: 高 (DPA calculations).", + "belonging_agent": "superconductor_agent", + "scenes": [ + "SUPERCONDUCTOR" + ], + "alternative_tools": [ + "predict_superconductor_Tc" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "036-PREDICTS-003", + "name": "predict_superconductor_Tc", + "description": "What it does: Predict superconducting Tc.\nWhen to use: Estimate critical temperature.\nPrerequisites / Inputs: Material structure.\nOutputs: Tc prediction.\nCannot do / Limits: DPA model only.\nCost / Notes: High (ML predictions).", + "description_cn": "功能: 预测 superconducting Tc.\n何时使用: Estimate critical temperature.\n前提条件/输入: Material structure.\n输出: Tc prediction.\n无法做到/限制: DPA model 仅.\n成本/备注: 高 (ML predictions).", + "belonging_agent": "superconductor_agent", + "scenes": [ + "SUPERCONDUCTOR" + ], + "alternative_tools": [ + "calculate_superconductor_enthalpy" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "036-SCREENSU-004", + "name": "screen_superconductor", + "description": "What it does: Screen multiple superconductors.\nWhen to use: Compare Tc and stability.\nPrerequisites / Inputs: List of candidates.\nOutputs: Ranked Tc and stability.\nCannot do / Limits: Multiple candidates only.\nCost / Notes: High (batch DPA).", + "description_cn": "功能: 筛选 multiple superconduc到rs.\n何时使用: Compare Tc 和 stability.\n前提条件/输入: List c和idates的.\n输出: Ranked Tc 和 stability.\n无法做到/限制: Multiple c和idates 仅.\n成本/备注: 高 (batch DPA).", + "belonging_agent": "superconductor_agent", + "scenes": [ + "SUPERCONDUCTOR" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "038-QUERYSSE-001", + "name": "query_ssekb_literature", + "description": "What it does: Query literature knowledge base for SSE(Solid-state electrolyte) research with natural language.\nWhen to use: When you need in-depth literature analysis on Solid-state electrolyte topics.\nPrerequisites / Inputs: Natural language questions about Solid-state electrolyte.\nOutputs: Literature summaries from vector similarity search.\nCannot do / Limits: Topics limited to Solid-state electrolyte.\nCost / Notes: Medium.", + "description_cn": "功能: 查询 literature knowledge base 用于 SSE(Solid-state electrolyte) research 使用 natural language.\n何时使用: 当您需要 in-depth literature analysis on Solid-state electrolyte 到pics.\n前提条件/输入: Natural language questions about Solid-state electrolyte.\n输出: Literature summaries 从 vec到r similarity search.\n无法做到/限制: 到pics 仅限于 Solid-state electrolyte.\n成本/备注: 中.", + "belonging_agent": "SSEkb_agent", + "scenes": [ + "Solid_State_Electrolyte" + ], + "alternative_tools": [ + "search-papers-enhanced", + "web-search" + ], + "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries and database entries (List[str])\n - Each item can be either:\n - A detailed literature summary (for papers with fulltext): Contains comprehensive analysis of the paper\n - A database entry (for papers without fulltext): Contains DOI and database properties (e.g., material properties, experimental data, etc.)\n - These summaries and entries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries and database entries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n**IMPORTANT**: The summaries list may contain two types of entries:\n1. **Detailed literature summaries** (from papers with fulltext): These contain comprehensive analysis\n2. **Database entries** (from papers without fulltext): These contain DOI and database properties (e.g., material properties, experimental data, etc.)\n\n**YOU MUST**:\n- Include BOTH types of entries in your synthesis\n- For database entries, extract and cite the quantitative data (properties, values, DOI)\n- Integrate database property data into your analysis (e.g., compare property ranges, identify trends)\n- Cite database entries using their DOI: [n] (DOI: xxx)\n- Do NOT ignore database entries - they provide valuable quantitative data even without full text\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, space groups, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed (including both detailed summaries and database entries)\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries AND database entries with detailed explanations\n - Include specific quantitative data from both detailed summaries and database entries\n - **For database entries**: Extract and cite property data (e.g., material properties, experimental values, DOI)\n - **Use database entries for statistical analysis**: Group by material type or property type, calculate property ranges, identify trends, create property distributions\n - Use database entries to provide statistical overviews, property ranges, and material comparisons\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable (include data from database entries)\n - Address contradictions or gaps in current understanding\n - **CRITICAL**: Database entries provide valuable quantitative data - always cite them with their DOI, even if they lack full text context\n\n3. **Property Data Summary** (if database entries are present):\n - Create a dedicated section summarizing quantitative data from database entries\n - Group entries by material type or property type\n - Present property ranges, typical values, and distributions\n - Use tables to organize property data from multiple database entries\n - Cite each database entry: [n] (DOI: xxx)\n\n4. **Summary of Key Findings**: Synthesize the most important insights from both detailed summaries and database entries\n\n5. **References**: List all cited sources [1], [2], [3], etc.\n - For detailed summaries: Include title, authors, journal if available\n - For database entries: Format as [n] DOI: xxx (database entry - property data only)\n - **CRITICAL**: Do NOT omit database entries from references - they are valid data sources and must be cited\n", + "summary_prompt_cn": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要和数据库条目列表(List[str])\n - 每个项目可以是:\n - 详细的文献摘要(对于有全文的论文):包含论文的全面分析\n - 数据库条目(对于没有全文的论文):包含 DOI 和数据库属性(例如,材料属性、实验数据等)\n - 这些摘要和条目是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要和数据库条目。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n**重要**:摘要列表可能包含两种类型的条目:\n1. **详细的文献摘要**:包含论文的全面分析,包括方法、结果、讨论等\n2. **数据库条目**:包含 DOI 和数据库属性(例如,材料属性、实验数据等)\n\n您应该将这两种类型的条目整合到报告中,使用文献摘要提供深入分析,使用数据库条目提供定量数据。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要和数据库条目的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + "self_check": false, + "args_setting": "## PARAMETER CONSTRUCTION GUIDE\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_ssekb_literature(query_description)\n\n**Parameters:**\n- query_description (str, required): Natural language query about SSE(Solid-state electrolyte) research topics\n\n**Examples:**\n1) 查询特定材料属性:\n → Tool: query_ssekb_literature\n query_description: '查找具有特定性能的固态电解质材料相关论文'\n\n2) 查询特定材料类型:\n → Tool: query_ssekb_literature\n query_description: '查找特定材料类型的固态电解质相关论文'\n" + }, + { + "tool_id": "039-PREDICTT-001", + "name": "predict_thermoelectric_properties", + "description": "What it does: Predict thermoelectric properties.\nWhen to use: Estimate band gap, Seebeck, etc.\nPrerequisites / Inputs: Material structure.\nOutputs: Band gap, Seebeck, power factor, moduli.\nCannot do / Limits: No thermal conductivity.\nCost / Notes: High (DPA predictions).", + "description_cn": "功能: 预测 thermoelectric properties.\n何时使用: Estimate 带隙, Seebeck, etc.\n前提条件/输入: Material structure.\n输出: 带隙, Seebeck, power fac到r, moduli.\n无法做到/限制: No thermal conductivity.\n成本/备注: 高 (DPA predictions).", + "belonging_agent": "thermoelectric_agent", + "scenes": [ + "THERMOELECTRIC" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "039-RUNPRESS-002", + "name": "run_pressure_optimization", + "description": "What it does: Optimize under pressure.\nWhen to use: Relax thermoelectric structures.\nPrerequisites / Inputs: Structure, pressure.\nOutputs: Optimized structure.\nCannot do / Limits: Thermoelectric-specific.\nCost / Notes: High (DPA calculations).", + "description_cn": "功能: 优化 under pressure.\n何时使用: Relax thermoelectric structures.\n前提条件/输入: Structure, pressure.\n输出: 优化d structure.\n无法做到/限制: Thermoelectric-specific.\n成本/备注: 高 (DPA calculations).", + "belonging_agent": "thermoelectric_agent", + "scenes": [ + "THERMOELECTRIC" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "039-CALCULAT-003", + "name": "calculate_thermoele_enthalp", + "description": "What it does: Calculate enthalpy under pressure.\nWhen to use: Screen thermoelectric stability.\nPrerequisites / Inputs: Candidates, pressure.\nOutputs: Enthalpy, convex hull.\nCannot do / Limits: Thermoelectric-specific.\nCost / Notes: High (DPA calculations).", + "description_cn": "功能: 计算 enthalpy under pressure.\n何时使用: 筛选 thermoelectric stability.\n前提条件/输入: C和idates, pressure.\n输出: Enthalpy, convex hull.\n无法做到/限制: Thermoelectric-specific.\n成本/备注: 高 (DPA calculations).", + "belonging_agent": "thermoelectric_agent", + "scenes": [ + "THERMOELECTRIC" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "039-SCREENTH-004", + "name": "screen_thermoelectric_candidate", + "description": "What it does: Screen thermoelectric candidates.\nWhen to use: Identify promising materials.\nPrerequisites / Inputs: Multiple structures.\nOutputs: Ranked thermoelectric properties.\nCannot do / Limits: Requires multiple inputs.\nCost / Notes: High (batch DPA).", + "description_cn": "功能: 筛选 thermoelectric c和idates.\n何时使用: 识别 promising materials.\n前提条件/输入: Multiple structures.\n输出: Ranked thermoelectric properties.\n无法做到/限制: 需要 multiple inputs.\n成本/备注: 高 (batch DPA).", + "belonging_agent": "thermoelectric_agent", + "scenes": [ + "THERMOELECTRIC" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "040-TPDPARSE-001", + "name": "tpd_parse_and_get_mol", + "description": "What it does: Parse a single TPD file and extract recognized molecule weights (m/z or labels).\nWhen to use: When you need to know which molecule weights are present in a TPD file.\nPrerequisites / Inputs: Local file path, file name, data type (Signal vs. Temp/Time).\nOutputs: List of molecule weights (m/z or \"*\").\nCannot do / Limits: Only parses local files; remote URLs must be downloaded first.\nCost / Notes: Fast; supports three data types.", + "description_cn": "功能: 解析 a single TPD file 和 extract recognized molecule weights (m/z 或 labels).\n何时使用: 当您需要 到 know which molecule weights are present in a TPD file.\n前提条件/输入: Local file path, file name, data type (Signal vs. Temp/Time).\n输出: List molecule的 weights (m/z 或 \"*\").\n无法做到/限制: 仅 parses local files; remote URLs must be downloaded first.\n成本/备注: Fast; 支持 three data types.", + "belonging_agent": "tpd_agent", + "scenes": [ + "TPD" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "040-TPDGETCH-002", + "name": "tpd_get_chart", + "description": "What it does: Generate ECharts visualization config for selected molecule weights in a TPD file.\nWhen to use: When you want to plot curves for selected m/z channels from a TPD file.\nPrerequisites / Inputs: Local file path, file name, selected_weights (list of m/z), data type, line width.\nOutputs: Path to saved ECharts option JSON file.\nCannot do / Limits: Only local files; selected_weights must match available m/z.\nCost / Notes: Fast; supports three data types.", + "description_cn": "功能: 生成 ECharts visualization config 用于 selected molecule weights in a TPD file.\n何时使用: When you want 到 plot curves 用于 selected m/z channels 从 a TPD file.\n前提条件/输入: Local file path, file name, selected_weights (list m的/z), data type, line width.\n输出: Path 到 saved ECharts option JSON file.\n无法做到/限制: 仅 local files; selected_weights must match available m/z.\n成本/备注: Fast; 支持 three data types.", + "belonging_agent": "tpd_agent", + "scenes": [ + "TPD" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "040-TPDGETCA-003", + "name": "tpd_get_cal", + "description": "What it does: Perform TPD analysis (peak finding, curve fitting, integration, derivative) for a single molecule weight (m/z) signal from one file.\nWhen to use: When you need detailed peak analysis, area calculation, or derivative for a specific m/z channel or total signal.\nPrerequisites / Inputs: Local file path; target molecule weight (m/z as string like \"18\", \"44\", or \"*\" for total signal); analysis operations (peak finding, fitting, integration range, derivative settings).\nOutputs: ECharts visualization config, integration area (if calculated), error list for failed operations.\nCannot do / Limits: Processes one m/z at a time; call multiple times for multiple molecules; requires local files.\nCost / Notes: Medium; each operation is independent; default to total signal (*) if m/z not specified.", + "description_cn": "功能: 执行 TPD analysis (peak finding, curve fitting, integration, derivative) 用于 a single molecule weight (m/z) signal 从 one file.\n何时使用: 当您需要 detailed peak analysis, area calculation, 或 derivative 用于 a specific m/z channel 或 到tal signal.\n前提条件/输入: Local file path; target molecule weight (m/z as string like \"18\", \"44\", 或 \"*\" 用于 到tal signal); analysis operations (peak finding, fitting, integration range, derivative settings).\n输出: ECharts visualization config, integration area (if calculated), err或 list 用于 failed operations.\n无法做到/限制: Processes one m/z at a time; call multiple times 用于 multiple molecules; 需要 local files.\n成本/备注: 中; each operation is independent; default 到 到tal signal (*) if m/z not specified.", + "belonging_agent": "tpd_agent", + "scenes": [ + "TPD" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "040-TPDPEAKI-004", + "name": "tpd_peak_integrate", + "description": "What it does: For a single TPD file and m/z, detect peaks and integrate each peak within a local window; visualize raw curve, peak markers, and baseline segments.\nWhen to use: Quickly estimate peak areas for one channel.\nPrerequisites / Inputs: Local file path, file name, mol_weight (m/z or \"*\"), data type, baseline_mode, window_halfwidth, line width.\nOutputs: Path to ECharts option JSON, peaks list, integrations per peak, llm_context summary.\nCannot do / Limits: Only local files; window-based integration may overlap for dense peaks.\nCost / Notes: Fast; supports horizontal/trend baseline.", + "description_cn": "功能: 用于 a single TPD file 和 m/z, detect peaks 和 integrate each peak 使用in a local window; visualize raw curve, peak markers, 和 baseline segments.\n何时使用: Quickly estimate peak areas 用于 one channel.\n前提条件/输入: Local file path, file name, mol_weight (m/z 或 \"*\"), data type, baseline_mode, window_halfwidth, line width.\n输出: Path 到 ECharts option JSON, peaks list, integrations per peak, llm_context summary.\n无法做到/限制: 仅 local files; window-based integration may overlap 用于 dense peaks.\n成本/备注: Fast; 支持 h或izontal/trend baseline.", + "belonging_agent": "tpd_agent", + "scenes": [ + "TPD" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "041-GETSTRUC-001", + "name": "get_structure_info", + "description": "What it does: Extract structural information from **files**.\nWhen to use: Analyze crystal/molecular structures **files**.\nPrerequisites / Inputs: Structure file path.\nOutputs: Formula, space group, lattice, atoms.\nCannot do / Limits: No modifications; read-only.\nCost / Notes: Low.", + "description_cn": "功能: 提取 structural in用于mation 从 **files**.\n何时使用: 分析 crystal/molecular structures **files**.\n前提条件/输入: 结构文件 path.\n输出: 用于mula, space group, lattice, 原子.\n无法做到/限制: No modifications; read-仅.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "UNIVERSAL" + ], + "alternative_tools": [ + "file_parse" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "", + "bypass_confirmation": true + }, + { + "tool_id": "041-GETMOLEC-002", + "name": "get_molecule_info", + "description": "What it does: Extract molecular structure information from **files**.\nWhen to use: Analyze molecular structures **files**.\nPrerequisites / Inputs: Molecule file path.\nOutputs: Formula, atoms, bonds, properties.\nCannot do / Limits: No modifications; read-only.\nCost / Notes: Low.", + "description_cn": "功能: 提取 molecular structure in用于mation 从 **files**.\n何时使用: 分析 molecular structures **files**.\n前提条件/输入: Molecule file path.\n输出: 用于mula, 原子, bonds, properties.\n无法做到/限制: No modifications; read-仅.\n成本/备注: 低.", + "belonging_agent": "structure_generate_agent", + "scenes": [ + "UNIVERSAL" + ], + "alternative_tools": [ + "file_parse" + ], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": "", + "bypass_confirmation": true + }, + { + "tool_id": "041-WEB-SEAR-003", + "name": "web-search", + "description": "What it does: Perform web searches for what, why, how questions.\nWhen to use: For concise factual or explanatory lookups.\nPrerequisites / Inputs: Search query.\nOutputs: URL, title, snippet.\nCannot do / Limits: No command-type queries; follow up with extract_info_from_webpage.\nCost / Notes: Low.", + "description_cn": "功能: 执行 web searches 用于 what, why, how questions.\n何时使用: 用于 concise factual 或 explana到ry lookups.\n前提条件/输入: 搜索 query.\n输出: URL, title, snippet.\n无法做到/限制: No comm和-type queries; follow up 使用 extract_info_从_webpage.\n成本/备注: 低.", + "belonging_agent": "science_navigator_agent", + "scenes": [ + "UNIVERSAL" + ], + "alternative_tools": [], + "summary_prompt": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n# WEB SEARCH REQUIREMENTS:\n\nWhen summarizing snippets from the 'web-search' tool:\n1. Evaluate the relevance of each search result by examining the title and URL in relation to the user's query intent\n2. Skip URLs with irrelevant titles to optimize performance and reduce unnecessary processing time\n3. Ensure that only URLs that likely contain valuable information related to the user's query are processed\n4. Only pass relevant URLs to the 'extract_info_from_webpage' tool for detailed content extraction\n5. Provide short and concise answers focused on addressing the user's specific query\n\n## HANDLING “WHAT” QUESTIONS (DEFINITIONAL & FACTUAL):\n- Aim for **precise, direct, fact-based** answers grounded strictly in the retrieved snippets.\n- Extract simple definitions, key features, or key facts explicitly mentioned in the snippets.\n- When multiple snippets provide overlapping or partially consistent definitions, merge them into a **single, clear, plain-language explanation**.\n- Avoid unnecessary technical depth; prioritize clarity and factual correctness over complexity.\n- When snippets contain different perspectives, list them briefly and indicate the variation rather than forcing a single viewpoint.\n- Avoid any inference beyond what search snippets directly support.\n\nThe ending should be a concise and clear one-sentence statement. NEVER ASK THE USER FOR NEXT STEPS.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", + "summary_prompt_cn": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头。\n- 避免没有证据的声明。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n", + "self_check": false, + "args_setting": null, + "bypass_confirmation": true + }, + { + "tool_id": "041-EXTRACTI-004", + "name": "extract_info_from_webpage", + "description": "What it does: Extract key information from a webpage URL.\nWhen to use: When you need scientific facts, data, or findings from a webpage.\nPrerequisites / Inputs: Webpage URL.\nOutputs: Extracted information in text form.\nCannot do / Limits: Only return text and do not support generating files in any format.\nCost / Notes: Low.", + "description_cn": "功能: 提取 key in用于mation 从 a webpage URL.\n何时使用: 当您需要 scientific facts, data, 或 findings 从 a webpage.\n前提条件/输入: Webpage URL.\n输出: 提取ed in用于mation in text 用于m.\n无法做到/限制: 仅 return text 和 do not supp或t generating files in any 用于mat.\n成本/备注: 低.", + "belonging_agent": "science_navigator_agent", + "scenes": [ + "UNIVERSAL" + ], + "alternative_tools": [], + "summary_prompt": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# WEBPAGE PARSING REQUIREMENTS:\nThe tool returns a whole content from a webpage.\n\n## EXPRESSION STYLE:\n- Tone: Analytical, rigorous, structured, and concise.\n- Expression: Clear and well-organized. Every factual assertion must trace back to retrieved webpage content.\n- Avoid irrelevant narrative or assumption-based reasoning; prioritize what is explicitly stated in the webpages.\n- For conceptual or mechanism-type questions (complex “what”/“why”/“how” questions), synthesize explanations only from the retrieved information; if the webpages contain fragmented or partial information, provide a structured reconstruction explicitly marked as inference.\n- For unclear or conflicting webpage content, explicitly compare the differences and indicate uncertainty rather than merging them.\n- When appropriate, include minimal, high-value contextualization (e.g., definitions, conceptual framing) only when supported or partially supported by webpage data.\n\n## HANDLING COMPLEX EXPLANATION-TYPE QUESTIONS (e.g., mechanisms, principles, causality):\n1. Identify all concept-relevant content across webpages and extract precise statements.\n2. Integrate them into a layered explanation:\n - Level 1: Definitions or fundamental concepts as supported by webpages.\n - Level 2: Mechanistic or causal relationships explicitly mentioned.\n - Level 3: Synthesized reasoning that logically connects webpage content (clearly labeled as \"based on integration of retrieved info\").\n3. Avoid overgeneralization; do not infer domain knowledge beyond what webpages support.\n4. Cite each supporting sentence or phrase from the webpages with a numbered link, **strictly follow this format**: [n]; This is **WRONG**: [n].\n5. If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n### Example template for mechanism-oriented answer:\n```\nAccording to webpage [n], \"[quoted phrase]\" [n].\nAnother source indicates that \"[quoted phrase]\" [m].\nIntegrating these, the mechanism can be structured into: (1) ..., (2) ..., (3) ... (derived solely from the above retrieved content).\n```\n\n## HANDLING COMPLEX “HOW-TO” / PROCEDURAL / TUTORIAL-TYPE QUESTIONS:\n1. Extract all actionable steps, instructions, or procedural guidelines from the webpages.\n2. Reconstruct them into a coherent, step-by-step procedure with explicit citation markers for each step.\n3. When webpages provide code samples, configuration blocks, commands, or scripts, reproduce them **verbatim** inside fenced code blocks.\n - Explain the purpose of each step setup;\n - Explain the meaning of variables in codes or scripts;\n - Give examples of input scripts snippets or commands if possible.\n4. If multiple webpages provide overlapping or conflicting instructions, compare them explicitly and indicate which set of steps is more complete or reliable.\n5. If webpages contain insufficient procedural detail, state so clearly and provide only the steps supported by retrieved text; do not fabricate intermediate steps.\n\n### Step-by-step procedure\n1. Step description derived from \"[snippet]\" [n]\n2. Another step derived from \"[snippet]\" [m]\n3. (Optional) Show verbatim code example wrapped in a code block\n\n## CITATION RULES:\n- Every factual statement or step must map to at least one source link reference.\n- Use the following citation format: [n]\n- If a statement is synthesized from multiple snippets, list multiple links.\n\n## SUGGESTING NEXT ACTIONS / RELATED QUERY DIRECTIONS:\nProvide a short follow-up section (≤3 sentences) suggesting:\n- Clarifying questions the user may ask to obtain more complete or actionable information.\n- Additional aspects the user could explore, referencing the retrieved topics.\n- Optional: Suggest performing a new focused research paper\n\nAll suggestions must be grounded in actual webpage content; do not propose irrelevant or generic follow-up topics.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", + "summary_prompt_cn": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头。\n- 避免没有证据的声明。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n", + "self_check": false, + "args_setting": null, + "bypass_confirmation": true + }, + { + "tool_id": "041-FILEPARS-005", + "name": "file_parse", + "description": "What it does: Parse various file contents to extract key information.\nWhen to use: When you need to extract information from a file but there is no dedicated information extraction tool available.\nPrerequisites / Inputs: File (TXT, PDF, Word, Excel, PNG, JPG, etc.).\nOutputs: Extracted information in text form.\nCannot do / Limits: Only return text and do not support generating files in any format.\nCost / Notes: Low.", + "description_cn": "功能: 解析 various file contents 到 extract key in用于mation.\n何时使用: 当您需要 到 extract in用于mation 从 a file but there is no dedicated in用于mation extraction 到ol available.\n前提条件/输入: File (TXT, PDF, W或d, Excel, PNG, JPG, etc.).\n输出: 提取ed in用于mation in text 用于m.\n无法做到/限制: 仅 return text 和 do not supp或t generating files in any 用于mat.\n成本/备注: 低.", + "belonging_agent": "file_parse_agent", + "scenes": [ + "UNIVERSAL" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null, + "bypass_confirmation": true + }, + { + "tool_id": "043-VISUALIZ-001", + "name": "visualize_data_from_file", + "description": "What it does: Create plots from data files.\nWhen to use: Visualize CSV/Excel/JSON data.\nPrerequisites / Inputs: Data file URL.\nOutputs: Plots.\nCannot do / Limits: Data files only.\nCost / Notes: Low.", + "description_cn": "功能: 创建 plots 从 data files.\n何时使用: 可视化 CSV/Excel/JSON data.\n前提条件/输入: Data file URL.\n输出: Plots.\n无法做到/限制: Data files 仅.\n成本/备注: 低.", + "belonging_agent": "visualizer_agent", + "scenes": [ + "VISUALIZE_DATA", + "UNIVERSAL" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null, + "bypass_confirmation": true + }, + { + "tool_id": "043-VISUALIZ-002", + "name": "visualize_data_from_prompt", + "description": "What it does: Create plots from prompts.\nWhen to use: Quick visualize data embedded in prompt.\nOutputs: Plots.\nCannot do / Limits: Plot requests with valid data only.\nCost / Notes: Low.", + "description_cn": "功能: 创建 plots 从 prompts.\n何时使用: Quick visualize data embedded in prompt.\n输出: Plots.\n无法做到/限制: Plot requests 使用 valid data 仅.\n成本/备注: 低.", + "belonging_agent": "visualizer_agent", + "scenes": [ + "VISUALIZE_DATA", + "UNIVERSAL" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null, + "bypass_confirmation": true + }, + { + "tool_id": "045-XRDPARSE-001", + "name": "xrd_parse_file", + "description": "What it does: Parse and preprocess raw XRD data files.\nWhen to use: When you have XRD data to analyze.\nPrerequisites / Inputs: XRD files (.xrdml, .xy, .asc, .txt).\nOutputs: Processed data and visualization configs.\nCannot do / Limits: Not support .raw and .mdi format files.\nCost / Notes: Low.", + "description_cn": "功能: 解析 和 preprocess raw XRD data files.\n何时使用: When you have XRD data 到 analyze.\n前提条件/输入: XRD files (.xrdml, .xy, .asc, .txt).\n输出: Processed data 和 visualization configs.\n无法做到/限制: Not supp或t .raw 和 .mdi 用于mat files.\n成本/备注: 低.", + "belonging_agent": "xrd_agent", + "scenes": [ + "XRD" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "045-XRDPHASE-002", + "name": "xrd_phase_identification", + "description": "What it does: Identify crystalline phases in XRD pattern.\nWhen to use: When you have processed XRD data.\nPrerequisites / Inputs: Processed CSV file; optional composition filters.\nOutputs: Top matching phases and comparison chart.\nCannot do / Limits: Requires processed data.\nCost / Notes: Medium.", + "description_cn": "功能: 识别 crystalline phases in XRD pattern.\n何时使用: When you have processed XRD data.\n前提条件/输入: Processed CSV file; 可选 composition filters.\n输出: 到p matching phases 和 comparison chart.\n无法做到/限制: 需要 processed data.\n成本/备注: 中.", + "belonging_agent": "xrd_agent", + "scenes": [ + "XRD" + ], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null + }, + { + "tool_id": "000-LLMTOOL-001", + "name": "llm_tool", + "description": "What it does: Use LLM for general tasks.\nWhen to use: For LLM-based assistance.\nPrerequisites / Inputs: Query or task.\nOutputs: LLM response.\nCannot do / Limits: General purpose.\nCost / Notes: Low.", + "description_cn": "功能: Use LLM 用于 general tasks.\n何时使用: 用于 LLM-based assistance.\n前提条件/输入: 查询 或 task.\n输出: LLM response.\n无法做到/限制: General purpose.\n成本/备注: 低.", + "belonging_agent": "llm_tool_agent", + "scenes": [], + "alternative_tools": [], + "summary_prompt": "", + "summary_prompt_cn": "", + "self_check": false, + "args_setting": null, + "bypass_confirmation": true + } + ], + "total_count": 107 +} \ No newline at end of file diff --git a/scripts/generate_agents_tool_json.py b/scripts/generate_agents_tool_json.py new file mode 100644 index 00000000..8f28440c --- /dev/null +++ b/scripts/generate_agents_tool_json.py @@ -0,0 +1,265 @@ +#!/usr/bin/env python3 +""" +Generate agents-tool.json from tools.py +""" +import json +import sys +from collections import defaultdict +from pathlib import Path + +# Add project root to path +project_root = Path(__file__).parent.parent +sys.path.insert(0, str(project_root)) + +from agents.matmaster_agent.sub_agents.tools import ALL_TOOLS +from agents.matmaster_agent.flow_agents.scene_agent.model import SceneEnum + +try: + import litellm + from agents.matmaster_agent.llm_config import LLMConfig + HAS_TRANSLATION = True +except ImportError: + HAS_TRANSLATION = False + print("Warning: Translation libraries not available. summary_cn will be empty.", file=sys.stderr) + + +# Create SceneEnum to numeric ID mapping (starting from 001) +def create_scene_id_mapping(): + """Create a mapping from SceneEnum to numeric ID (001, 002, ...).""" + scene_id_map = {} + scene_id_counter = 1 + + # Get all unique scenes from ALL_TOOLS + all_scenes = set() + for tool_config in ALL_TOOLS.values(): + scenes = tool_config.get("scene", []) + for scene in scenes: + if isinstance(scene, SceneEnum): + all_scenes.add(scene) + + # Sort scenes by name for consistent ordering + sorted_scenes = sorted(all_scenes, key=lambda x: x.name) + + # Create mapping + for scene in sorted_scenes: + scene_id_map[scene] = f"{scene_id_counter:03d}" + scene_id_counter += 1 + + # Handle empty scene case + scene_id_map[None] = "000" + + return scene_id_map + + +SCENE_ID_MAP = create_scene_id_mapping() + + +def get_scene_name(scene_enum): + """Convert SceneEnum to string name.""" + if isinstance(scene_enum, SceneEnum): + return scene_enum.name + return str(scene_enum) + + +def get_scene_id(scene_enum): + """Get numeric ID for a scene.""" + if isinstance(scene_enum, SceneEnum): + return SCENE_ID_MAP.get(scene_enum, "000") + return "000" + + +def translate_to_chinese(text: str, tool_name: str = "") -> str: + """ + Translate English text to Chinese using LLM. + + Args: + text: English text to translate + tool_name: Tool name for logging + + Returns: + Chinese translation + """ + if not text: + return "" + + if not HAS_TRANSLATION: + return "" + + try: + llm_config = LLMConfig() + model = llm_config.gpt_5_nano.model + + prompt = f"""Translate the following English text to Chinese (Simplified). +Keep the technical terms, code blocks, markdown formatting, and structure exactly as they are. +Preserve all special characters, emojis, and formatting. +Only return the translation, no explanations, no additional markdown code blocks. + +Text to translate: +{text} + +Chinese translation:""" + + response = litellm.completion( + model=model, + messages=[{'role': 'user', 'content': prompt}], + temperature=0.3, + ) + + translation = response.choices[0].message.content.strip() + + # Remove markdown code blocks if present (but keep the content) + if translation.startswith('```'): + # Extract content from code blocks + parts = translation.split('```') + if len(parts) >= 3: + translation = parts[1].strip() if len(parts[1].strip()) > 0 else parts[2].strip() + else: + translation = parts[-1].strip() + + if tool_name: + print(f" ✓ Translated summary for {tool_name}", file=sys.stderr) + + return translation + except Exception as e: + if tool_name: + print(f" ✗ Translation failed for {tool_name}: {e}", file=sys.stderr) + return "" + + +def generate_tool_id(tool_name: str, primary_scene, scene_index: int) -> str: + """ + Generate unique tool_id in format: {SCENE_ID}-{TOOL_PREFIX}-{INDEX:03d} + + Args: + tool_name: Tool name + primary_scene: Primary scene (SceneEnum or None) + scene_index: Index within the scene (starting from 1) + + Returns: + Unique tool_id string + """ + # Get scene ID + scene_id = get_scene_id(primary_scene) + + # Get tool prefix (first 8 chars, remove underscores, uppercase) + tool_prefix = tool_name.replace("_", "")[:8].upper() + + # Format: 001-TOOLPREFIX-001 + return f"{scene_id}-{tool_prefix}-{scene_index:03d}" + + +def process_tool(tool_name: str, tool_config: dict, scene_index: int, primary_scene) -> dict: + """ + Process a single tool configuration into JSON format. + + Args: + tool_name: Tool name (key in ALL_TOOLS) + tool_config: Tool configuration dictionary + scene_index: Index within the scene (starting from 1) + primary_scene: Primary scene for this tool + + Returns: + Dictionary with tool information in JSON format + """ + # Extract scenes and convert to string list + scenes = tool_config.get("scene", []) + scene_names = [get_scene_name(s) for s in scenes] + + # Generate tool_id + tool_id = generate_tool_id(tool_name, primary_scene, scene_index) + + # Get summary_prompt and translate it + summary_prompt = tool_config.get("summary_prompt", "") + summary_cn = translate_to_chinese(summary_prompt, tool_name) if summary_prompt else "" + + # Build result dictionary + result = { + "tool_id": tool_id, + "name": tool_name, + "description": tool_config.get("description", ""), + "description_cn": "", # Placeholder for Chinese description + "belonging_agent": tool_config.get("belonging_agent", ""), + "scenes": scene_names, + "alternative_tools": tool_config.get("alternative", []), + "summary_prompt": summary_prompt, + "summary_cn": summary_cn, + "self_check": tool_config.get("self_check", False), + "args_setting": tool_config.get("args_setting", None), + } + + # Add optional fields if they exist + if "bypass_confirmation" in tool_config: + result["bypass_confirmation"] = tool_config["bypass_confirmation"] + + # Remove None values for cleaner JSON (but keep empty strings for summary fields) + result = { + k: v for k, v in result.items() + if v is not None or k in ["args_setting", "summary_prompt", "summary_cn"] + } + + return result + + +def main(): + """Main function to generate agents-tool.json.""" + # Group tools by primary scene (first scene in the list) + tools_by_scene = defaultdict(list) + + for tool_name, tool_config in ALL_TOOLS.items(): + scenes = tool_config.get("scene", []) + primary_scene = scenes[0] if scenes else None + tools_by_scene[primary_scene].append((tool_name, tool_config)) + + # Process tools grouped by scene + tools_list = [] + + # Sort scenes for consistent ordering (None goes last) + def scene_sort_key(scene): + if scene is None: + return ("ZZZ", "") + if isinstance(scene, SceneEnum): + return ("AAA", scene.name) + return ("ZZZ", str(scene)) + + sorted_scenes = sorted(tools_by_scene.keys(), key=scene_sort_key) + + total_tools = sum(len(tools_by_scene[s]) for s in sorted_scenes) + processed = 0 + + for primary_scene in sorted_scenes: + scene_tools = tools_by_scene[primary_scene] + scene_name = get_scene_name(primary_scene) if primary_scene else "UNIVERSAL" + + print(f"Processing scene: {scene_name} ({len(scene_tools)} tools)", file=sys.stderr) + + # Process each tool in this scene, resetting index for each scene + for scene_index, (tool_name, tool_config) in enumerate(scene_tools, start=1): + try: + tool_json = process_tool(tool_name, tool_config, scene_index, primary_scene) + tools_list.append(tool_json) + processed += 1 + if processed % 10 == 0: + print(f" Progress: {processed}/{total_tools} tools", file=sys.stderr) + except Exception as e: + print(f"Error processing tool {tool_name}: {e}", file=sys.stderr) + continue + + # Create output dictionary + output = { + "tools": tools_list, + "total_count": len(tools_list), + } + + # Write to JSON file + output_file = project_root / "agents-tool.json" + with open(output_file, "w", encoding="utf-8") as f: + json.dump(output, f, indent=2, ensure_ascii=False) + + print(f"Successfully generated {output_file}") + print(f"Total tools: {len(tools_list)}") + print(f"Scene ID mapping: {len(SCENE_ID_MAP)} scenes") + + +if __name__ == "__main__": + main() + diff --git a/scripts/improve_description_translations.py b/scripts/improve_description_translations.py new file mode 100644 index 00000000..d58015ab --- /dev/null +++ b/scripts/improve_description_translations.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +""" +Improve description_cn translations with better phrase-level translations +""" +import json +import re +from pathlib import Path + +project_root = Path(__file__).parent.parent + +def improve_translation(description_cn: str) -> str: + """ + Improve the translation by fixing common issues from word-by-word translation. + """ + if not description_cn: + return "" + + # Fix common translation issues + fixes = { + # Fix "a到ms" -> "原子" + r"a到ms": "原子", + r"a到m": "原子", + # Fix "c或rections" -> "修正" + r"c或rections": "修正", + r"c或rection": "修正", + # Fix "of" in context + r"of non-charged vacancy in metal 原子": "金属原子中非带电空位的", + r"of (\w+)": r"\1的", + # Fix "like" -> "如" + r"like (\w+)": r"如 \1", + # Fix "for" -> "用于" (but not when it's part of "for a structure") + r" 用于 a structure": " 用于结构", + r" 用于 a material": " 用于材料", + r" 用于 calculation": " 进行计算", + r" 用于 accuracy": " 以提高精度", + # Fix "Plot of" -> "图" + r"Plot of ": "", + # Fix common phrases + r"non-charged vacancy": "非带电空位", + r"metal 原子": "金属原子", + r"metal structures": "金属结构", + r"phonon properties": "声子性质", + r"thermal 修正": "热修正", + r"electronic 能带结构": "电子能带结构", + # Remove extra spaces + r" +": " ", + r"^ ": "", + r" $": "", + } + + result = description_cn + for pattern, replacement in fixes.items(): + result = re.sub(pattern, replacement, result) + + # Clean up multiple spaces + result = re.sub(r' {2,}', ' ', result) + + return result + + +def main(): + json_file = project_root / "agents-tool.json" + + print(f"Reading {json_file}...") + with open(json_file, "r", encoding="utf-8") as f: + data = json.load(f) + + print("Improving translations...") + updated = 0 + + for tool in data["tools"]: + name = tool.get("name", "") + description_cn = tool.get("description_cn", "").strip() + + if description_cn: + improved = improve_translation(description_cn) + if improved != description_cn: + tool["description_cn"] = improved + updated += 1 + + print(f"\nSaving improved JSON...") + with open(json_file, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + print(f"✓ Improved {updated} translations") + print(f"✓ Updated {json_file}") + + +if __name__ == "__main__": + main() + diff --git a/scripts/translate_all_descriptions.py b/scripts/translate_all_descriptions.py new file mode 100644 index 00000000..9795f63a --- /dev/null +++ b/scripts/translate_all_descriptions.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 +""" +Translate all descriptions in agents-tool.json to Chinese +""" +import json +from pathlib import Path + +project_root = Path(__file__).parent.parent + +def translate_description_section(description: str) -> str: + """ + Translate a description to Chinese, preserving the structured format. + """ + if not description: + return "" + + # Section header translations + headers = { + "What it does:": "功能:", + "When to use:": "何时使用:", + "Prerequisites / Inputs:": "前提条件/输入:", + "Outputs:": "输出:", + "Cannot do / Limits:": "无法做到/限制:", + "Cost / Notes:": "成本/备注:", + } + + lines = description.split('\n') + result = [] + + for line in lines: + stripped = line.strip() + if not stripped: + result.append("") + continue + + # Check for section headers + found_header = False + for eng, cn in headers.items(): + if stripped.startswith(eng): + content = stripped[len(eng):].strip() + if content: + result.append(f"{cn} {translate_text(content)}") + else: + result.append(cn) + found_header = True + break + + if not found_header: + result.append(translate_text(stripped)) + + return "\n".join(result) + + +def translate_text(text: str) -> str: + """ + Translate English text to Chinese. + This handles common technical terms and phrases in materials science. + """ + # Common technical translations + # Note: This is a simplified version. For production, use a proper translation service. + + # I'll provide direct translations for common phrases + # Since we have 107 tools, I'll create a comprehensive translation mapping + + # This function will be called for each piece of text + # For now, return a placeholder that we'll fill with actual translations + + # Common phrase patterns + translations = { + "Calculate": "计算", + "Perform": "执行", + "Run": "运行", + "Generate": "生成", + "Build": "构建", + "Create": "创建", + "Extract": "提取", + "Analyze": "分析", + "Predict": "预测", + "Optimize": "优化", + "Search": "搜索", + "Query": "查询", + "Retrieve": "检索", + "Fetch": "获取", + "Execute": "执行", + "using DFT": "使用 DFT", + "using ML potential": "使用机器学习势", + "Structure file": "结构文件", + "in cif/VASP POSCAR/ABACUS STRU format": "以 cif/VASP POSCAR/ABACUS STRU 格式", + "DFT parameters": "DFT 参数", + "formation energy": "形成能", + "vacancy formation energy": "空位形成能", + "phonon dispersion": "声子色散", + "band structure": "能带结构", + "band gap": "带隙", + "density of states": "态密度", + "When you need": "当您需要", + "supports": "支持", + "before calculation": "计算前", + "DFT calculation cost": "DFT 计算成本", + "Low": "低", + "Medium": "中", + "High": "高", + "requires": "需要", + "may need": "可能需要", + "optional": "可选", + "only": "仅", + "specific to": "特定于", + "limited to": "仅限于", + } + + # Simple replacement (basic translation) + result = text + for eng, cn in sorted(translations.items(), key=lambda x: -len(x[0])): + result = result.replace(eng, cn) + + return result + + +def main(): + json_file = project_root / "agents-tool.json" + + print(f"Reading {json_file}...") + with open(json_file, "r", encoding="utf-8") as f: + data = json.load(f) + + print("Translating all descriptions...") + updated = 0 + + for tool in data["tools"]: + name = tool.get("name", "") + desc = tool.get("description", "").strip() + desc_cn = tool.get("description_cn", "").strip() + + if desc and not desc_cn: + translated = translate_description_section(desc) + tool["description_cn"] = translated + updated += 1 + + if updated % 20 == 0: + print(f" Progress: {updated} tools translated...") + + print(f"\nSaving updated JSON...") + with open(json_file, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + print(f"✓ Updated {updated} descriptions") + print(f"✓ Saved to {json_file}") + + +if __name__ == "__main__": + main() + diff --git a/scripts/translate_all_descriptions_final.py b/scripts/translate_all_descriptions_final.py new file mode 100644 index 00000000..da54bdbd --- /dev/null +++ b/scripts/translate_all_descriptions_final.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python3 +""" +Translate all descriptions in agents-tool.json to Chinese and update description_cn +""" +import json +import re +from pathlib import Path + +project_root = Path(__file__).parent.parent + +def translate_description(description: str) -> str: + """ + Translate description to Chinese, preserving the structured format. + """ + if not description: + return "" + + # Section header translations + section_map = { + "What it does:": "功能:", + "When to use:": "何时使用:", + "Prerequisites / Inputs:": "前提条件/输入:", + "Outputs:": "输出:", + "Cannot do / Limits:": "无法做到/限制:", + "Cost / Notes:": "成本/备注:", + } + + lines = description.split('\n') + translated_lines = [] + + for line in lines: + stripped = line.strip() + if not stripped: + translated_lines.append("") + continue + + # Check for section headers + translated = False + for eng_header, cn_header in section_map.items(): + if stripped.startswith(eng_header): + content = stripped[len(eng_header):].strip() + if content: + translated_content = translate_content(content) + translated_lines.append(f"{cn_header} {translated_content}") + else: + translated_lines.append(cn_header) + translated = True + break + + if not translated: + translated_lines.append(translate_content(stripped)) + + return "\n".join(translated_lines) + + +def translate_content(text: str) -> str: + """ + Translate content text to Chinese. + Handles common technical terms and phrases in materials science. + """ + # Comprehensive translation mapping + translations = { + # Actions + "Calculate": "计算", + "Perform": "执行", + "Run": "运行", + "Generate": "生成", + "Build": "构建", + "Create": "创建", + "Extract": "提取", + "Analyze": "分析", + "Predict": "预测", + "Optimize": "优化", + "Search": "搜索", + "Query": "查询", + "Retrieve": "检索", + "Fetch": "获取", + "Execute": "执行", + "Evaluate": "评估", + "Screen": "筛选", + "Identify": "识别", + "Parse": "解析", + "Visualize": "可视化", + + # Technical terms + "using DFT": "使用 DFT", + "using ML potential": "使用机器学习势", + "Structure file": "结构文件", + "in cif/VASP POSCAR/ABACUS STRU format": "以 cif/VASP POSCAR/ABACUS STRU 格式", + "DFT parameters": "DFT 参数", + "formation energy": "形成能", + "vacancy formation energy": "空位形成能", + "phonon dispersion": "声子色散", + "band structure": "能带结构", + "band gap": "带隙", + "density of states": "态密度", + "DOS": "DOS", + "PDOS": "PDOS", + "SCF calculation": "SCF 计算", + "ground state energy": "基态能量", + "relaxation": "弛豫", + "optimization": "优化", + "molecular dynamics": "分子动力学", + "MD": "MD", + "elastic constants": "弹性常数", + "elastic properties": "弹性性质", + "EOS": "EOS", + "equation of state": "状态方程", + "work function": "功函数", + "Bader charge": "Bader 电荷", + "electron localization function": "电子局域化函数", + "ELF": "ELF", + "NEB": "NEB", + "nudged elastic band": "推弹性能带", + "supercell": "超胞", + "high-symmetry points": "高对称点", + "k-path": "k 路径", + "functional": "泛函", + "spin polarization": "自旋极化", + "DFT+U": "DFT+U", + "magnetic moments": "磁矩", + "ML potential": "机器学习势", + "machine learning potential": "机器学习势", + "ML-based": "基于机器学习", + "DFT-based": "基于 DFT", + + # Common phrases + "When you need": "当您需要", + "supports": "支持", + "before calculation": "计算前", + "DFT calculation cost": "DFT 计算成本", + "Low": "低", + "Medium": "中", + "High": "高", + "requires": "需要", + "may need": "可能需要", + "optional": "可选", + "only": "仅", + "specific to": "特定于", + "limited to": "仅限于", + "for": "用于", + "from": "从", + "to": "到", + "with": "使用", + "by": "通过", + "and": "和", + "or": "或", + } + + # Apply translations (longest first to avoid partial matches) + result = text + for eng, cn in sorted(translations.items(), key=lambda x: -len(x[0])): + # Case-insensitive replacement for most terms + if eng.lower() == eng: # Lowercase terms + pattern = re.compile(re.escape(eng), re.IGNORECASE) + result = pattern.sub(cn, result) + else: # Preserve case for acronyms and specific terms + result = result.replace(eng, cn) + + return result + + +def main(): + json_file = project_root / "agents-tool.json" + + print(f"Reading {json_file}...") + with open(json_file, "r", encoding="utf-8") as f: + data = json.load(f) + + print("Translating all descriptions to Chinese...") + updated = 0 + + for tool in data["tools"]: + name = tool.get("name", "") + description = tool.get("description", "").strip() + description_cn = tool.get("description_cn", "").strip() + + if description and not description_cn: + translated = translate_description(description) + tool["description_cn"] = translated + updated += 1 + + if updated % 20 == 0: + print(f" Progress: {updated} tools translated...") + + print(f"\nSaving updated JSON...") + with open(json_file, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + print(f"✓ Successfully updated {updated} descriptions") + print(f"✓ Updated {json_file}") + + +if __name__ == "__main__": + main() + diff --git a/scripts/translate_summary_cn.py b/scripts/translate_summary_cn.py new file mode 100644 index 00000000..ef7cda45 --- /dev/null +++ b/scripts/translate_summary_cn.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 +""" +Translate summary_prompt to Chinese and update agents-tool.json +""" +import json +import sys +from pathlib import Path + +# Add project root to path +project_root = Path(__file__).parent.parent +sys.path.insert(0, str(project_root)) + +try: + import litellm + from agents.matmaster_agent.llm_config import LLMConfig + HAS_TRANSLATION = True +except ImportError: + HAS_TRANSLATION = False + print("Error: Translation libraries not available.", file=sys.stderr) + sys.exit(1) + + +def translate_to_chinese(text: str, tool_name: str = "") -> str: + """ + Translate English text to Chinese using LLM. + + Args: + text: English text to translate + tool_name: Tool name for logging + + Returns: + Chinese translation + """ + if not text: + return "" + + try: + llm_config = LLMConfig() + model = llm_config.gpt_5_nano.model + + prompt = f"""Translate the following English text to Chinese (Simplified). +Keep the technical terms, code blocks, markdown formatting, and structure exactly as they are. +Preserve all special characters, emojis, and formatting. +Only return the translation, no explanations, no additional markdown code blocks. + +Text to translate: +{text} + +Chinese translation:""" + + response = litellm.completion( + model=model, + messages=[{'role': 'user', 'content': prompt}], + temperature=0.3, + ) + + translation = response.choices[0].message.content.strip() + + # Remove markdown code blocks if present (but keep the content) + if translation.startswith('```'): + # Extract content from code blocks + parts = translation.split('```') + if len(parts) >= 3: + translation = parts[1].strip() if len(parts[1].strip()) > 0 else parts[2].strip() + else: + translation = parts[-1].strip() + + if tool_name: + print(f" ✓ Translated summary for {tool_name}", file=sys.stderr) + + return translation + except Exception as e: + if tool_name: + print(f" ✗ Translation failed for {tool_name}: {e}", file=sys.stderr) + return "" + + +def main(): + """Main function to translate and update JSON.""" + json_file = project_root / "agents-tool.json" + + # Read JSON file + print(f"Reading {json_file}...", file=sys.stderr) + with open(json_file, "r", encoding="utf-8") as f: + data = json.load(f) + + tools = data.get("tools", []) + total_tools = len(tools) + tools_to_translate = [t for t in tools if t.get("summary_prompt", "").strip()] + + print(f"Found {len(tools_to_translate)} tools with summary_prompt to translate", file=sys.stderr) + + # Translate each tool's summary_prompt + translated_count = 0 + for idx, tool in enumerate(tools, 1): + tool_name = tool.get("name", "") + summary_prompt = tool.get("summary_prompt", "").strip() + + if summary_prompt: + # Check if already translated + summary_cn = tool.get("summary_cn", "").strip() + if summary_cn: + print(f" ⊙ Skipping {tool_name} (already translated)", file=sys.stderr) + continue + + print(f"[{idx}/{total_tools}] Translating {tool_name}...", file=sys.stderr) + translated = translate_to_chinese(summary_prompt, tool_name) + + if translated: + tool["summary_cn"] = translated + translated_count += 1 + else: + print(f" ⚠ Warning: Translation returned empty for {tool_name}", file=sys.stderr) + + # Save updated JSON + print(f"\nSaving updated JSON...", file=sys.stderr) + with open(json_file, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + print(f"✓ Successfully translated {translated_count} summaries", file=sys.stderr) + print(f"✓ Updated {json_file}", file=sys.stderr) + + +if __name__ == "__main__": + main() + diff --git a/scripts/update_all_description_cn.py b/scripts/update_all_description_cn.py new file mode 100644 index 00000000..c130620e --- /dev/null +++ b/scripts/update_all_description_cn.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +""" +Update description_cn in agents-tool.json by translating all descriptions +""" +import json +from pathlib import Path + +project_root = Path(__file__).parent.parent + +def translate_description(description: str) -> str: + """ + Translate description from English to Chinese. + Preserves the structure with section headers. + """ + if not description: + return "" + + # Section header translations + section_translations = { + "What it does:": "功能:", + "When to use:": "何时使用:", + "Prerequisites / Inputs:": "前提条件/输入:", + "Outputs:": "输出:", + "Cannot do / Limits:": "无法做到/限制:", + "Cost / Notes:": "成本/备注:", + } + + lines = description.split('\n') + translated_lines = [] + + for line in lines: + line_stripped = line.strip() + + # Check for section headers + translated = False + for eng_header, cn_header in section_translations.items(): + if line_stripped.startswith(eng_header): + # Translate header and content + content = line_stripped[len(eng_header):].strip() + if content: + translated_content = translate_content_text(content) + translated_lines.append(f"{cn_header} {translated_content}") + else: + translated_lines.append(cn_header) + translated = True + break + + if not translated: + if line_stripped: + translated_lines.append(translate_content_text(line_stripped)) + else: + translated_lines.append("") + + return "\n".join(translated_lines) + + +def translate_content_text(text: str) -> str: + """ + Translate content text to Chinese. + This handles common technical terms and phrases. + """ + # This is a simplified translation - in practice you'd use a proper translation service + # For now, I'll provide direct translations for all descriptions + + # Common technical term mappings + term_replacements = { + "Calculate": "计算", + "Perform": "执行", + "Run": "运行", + "Generate": "生成", + "Build": "构建", + "Create": "创建", + "Extract": "提取", + "Analyze": "分析", + "Predict": "预测", + "Optimize": "优化", + "Search": "搜索", + "Query": "查询", + "Retrieve": "检索", + "Fetch": "获取", + "Execute": "执行", + "using DFT": "使用 DFT", + "using ML potential": "使用机器学习势", + "Structure file": "结构文件", + "in cif/VASP POSCAR/ABACUS STRU format": "以 cif/VASP POSCAR/ABACUS STRU 格式", + "DFT parameters": "DFT 参数", + "formation energy": "形成能", + "vacancy formation energy": "空位形成能", + "phonon dispersion": "声子色散", + "band structure": "能带结构", + "band gap": "带隙", + "density of states": "态密度", + "When you need": "当您需要", + "supports": "支持", + "before calculation": "计算前", + "DFT calculation cost": "DFT 计算成本", + "Low": "低", + "Medium": "中", + "High": "高", + "requires": "需要", + "may need": "可能需要", + "optional": "可选", + "only": "仅", + "specific to": "特定于", + "limited to": "仅限于", + } + + # Simple replacement (this is basic - full translation would be better) + result = text + for eng, cn in sorted(term_replacements.items(), key=lambda x: -len(x[0])): + result = result.replace(eng, cn) + + return result + + +def main(): + json_file = project_root / "agents-tool.json" + + # Read JSON + print(f"Reading {json_file}...") + with open(json_file, "r", encoding="utf-8") as f: + data = json.load(f) + + # Translate all descriptions + print("Translating descriptions...") + updated_count = 0 + + for tool in data["tools"]: + name = tool.get("name", "") + description = tool.get("description", "").strip() + description_cn = tool.get("description_cn", "").strip() + + if description and not description_cn: + # Use the translation function + translated = translate_description(description) + tool["description_cn"] = translated + updated_count += 1 + + if updated_count % 20 == 0: + print(f" Progress: {updated_count} tools translated...") + + # Save updated JSON + print(f"\nSaving updated JSON...") + with open(json_file, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + print(f"✓ Successfully updated {updated_count} descriptions") + print(f"✓ Updated {json_file}") + + +if __name__ == "__main__": + main() + diff --git a/scripts/update_all_description_cn_final.py b/scripts/update_all_description_cn_final.py new file mode 100644 index 00000000..edb33ffb --- /dev/null +++ b/scripts/update_all_description_cn_final.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 +""" +Update all description_cn in agents-tool.json with Chinese translations +""" +import json +from pathlib import Path + +project_root = Path(__file__).parent.parent + +def translate_description(description: str) -> str: + """ + Translate description to Chinese, preserving structure. + """ + if not description: + return "" + + # Section headers + headers = { + "What it does:": "功能:", + "When to use:": "何时使用:", + "Prerequisites / Inputs:": "前提条件/输入:", + "Outputs:": "输出:", + "Cannot do / Limits:": "无法做到/限制:", + "Cost / Notes:": "成本/备注:", + } + + lines = description.split('\n') + result = [] + + for line in lines: + stripped = line.strip() + if not stripped: + result.append("") + continue + + # Check for headers + found = False + for eng, cn in headers.items(): + if stripped.startswith(eng): + content = stripped[len(eng):].strip() + if content: + # Translate the content + translated_content = translate_content_phrase(content) + result.append(f"{cn} {translated_content}") + else: + result.append(cn) + found = True + break + + if not found: + result.append(translate_content_phrase(stripped)) + + return "\n".join(result) + + +def translate_content_phrase(text: str) -> str: + """ + Translate content phrases to Chinese. + This handles common technical terms in materials science. + """ + # Comprehensive translation mapping for common phrases + # This is a simplified version - for production use proper translation service + + # Common technical terms + translations = { + "Calculate": "计算", + "Perform": "执行", + "Run": "运行", + "Generate": "生成", + "Build": "构建", + "Create": "创建", + "Extract": "提取", + "Analyze": "分析", + "Predict": "预测", + "Optimize": "优化", + "Search": "搜索", + "Query": "查询", + "Retrieve": "检索", + "Fetch": "获取", + "Execute": "执行", + "using DFT": "使用 DFT", + "using ML potential": "使用机器学习势", + "Structure file": "结构文件", + "in cif/VASP POSCAR/ABACUS STRU format": "以 cif/VASP POSCAR/ABACUS STRU 格式", + "DFT parameters": "DFT 参数", + "formation energy": "形成能", + "vacancy formation energy": "空位形成能", + "phonon dispersion": "声子色散", + "band structure": "能带结构", + "band gap": "带隙", + "density of states": "态密度", + "When you need": "当您需要", + "supports": "支持", + "before calculation": "计算前", + "DFT calculation cost": "DFT 计算成本", + "Low": "低", + "Medium": "中", + "High": "高", + "requires": "需要", + "may need": "可能需要", + "optional": "可选", + "only": "仅", + "specific to": "特定于", + "limited to": "仅限于", + } + + # Simple replacement + result = text + for eng, cn in sorted(translations.items(), key=lambda x: -len(x[0])): + result = result.replace(eng, cn) + + return result + + +def main(): + json_file = project_root / "agents-tool.json" + + print(f"Reading {json_file}...") + with open(json_file, "r", encoding="utf-8") as f: + data = json.load(f) + + print("Translating all descriptions to Chinese...") + updated = 0 + + for tool in data["tools"]: + name = tool.get("name", "") + desc = tool.get("description", "").strip() + desc_cn = tool.get("description_cn", "").strip() + + if desc and not desc_cn: + translated = translate_description(desc) + tool["description_cn"] = translated + updated += 1 + + if updated % 20 == 0: + print(f" Progress: {updated} tools translated...") + + print(f"\nSaving updated JSON...") + with open(json_file, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + print(f"✓ Successfully updated {updated} descriptions") + print(f"✓ Updated {json_file}") + + +if __name__ == "__main__": + main() + diff --git a/scripts/update_description_cn.py b/scripts/update_description_cn.py new file mode 100644 index 00000000..a34a6aee --- /dev/null +++ b/scripts/update_description_cn.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 +""" +Update description_cn in agents-tool.json by translating description +""" +import json +import re +from pathlib import Path + +project_root = Path(__file__).parent.parent + +def translate_description(description: str) -> str: + """ + Translate description to Chinese, preserving structure. + """ + if not description: + return "" + + # Common section headers + section_map = { + "What it does:": "功能:", + "When to use:": "何时使用:", + "Prerequisites / Inputs:": "前提条件/输入:", + "Outputs:": "输出:", + "Cannot do / Limits:": "无法做到/限制:", + "Cost / Notes:": "成本/备注:", + } + + # Split by lines + lines = description.split('\n') + translated_lines = [] + + current_section = None + for line in lines: + line_stripped = line.strip() + + # Check if this is a section header + is_header = False + for eng_header, cn_header in section_map.items(): + if line_stripped.startswith(eng_header): + translated_lines.append(cn_header) + # Get content after header + content = line_stripped.replace(eng_header, "").strip() + if content: + translated_lines.append(f" {translate_content(content)}") + is_header = True + current_section = eng_header + break + + if not is_header: + if line_stripped: + # Regular content line + translated_lines.append(translate_content(line)) + else: + # Empty line + translated_lines.append("") + + return "\n".join(translated_lines) + + +def translate_content(text: str) -> str: + """ + Translate content text to Chinese. + This function will translate common technical terms and phrases. + """ + # Common technical term translations + term_map = { + "Structure file": "结构文件", + "DFT": "DFT", + "DFT parameters": "DFT 参数", + "cif/VASP POSCAR/ABACUS STRU format": "cif/VASP POSCAR/ABACUS STRU 格式", + "formation energy": "形成能", + "vacancy formation energy": "空位形成能", + "phonon dispersion": "声子色散", + "band structure": "能带结构", + "band gap": "带隙", + "density of states": "态密度", + "DOS": "DOS", + "PDOS": "PDOS", + "SCF calculation": "SCF 计算", + "ground state energy": "基态能量", + "relaxation": "弛豫", + "optimization": "优化", + "molecular dynamics": "分子动力学", + "MD": "MD", + "elastic constants": "弹性常数", + "elastic properties": "弹性性质", + "EOS": "EOS", + "equation of state": "状态方程", + "work function": "功函数", + "Bader charge": "Bader 电荷", + "electron localization function": "电子局域化函数", + "ELF": "ELF", + "NEB": "NEB", + "nudged elastic band": "推弹性能带", + "supercell": "超胞", + "high-symmetry points": "高对称点", + "k-path": "k 路径", + "functional": "泛函", + "spin polarization": "自旋极化", + "DFT+U": "DFT+U", + "magnetic moments": "磁矩", + "ML potential": "机器学习势", + "machine learning potential": "机器学习势", + "ML-based": "基于机器学习", + "DPA": "DPA", + "LAMMPS": "LAMMPS", + "APEX": "APEX", + "ABACUS": "ABACUS", + } + + # Simple word-by-word translation (this is a simplified version) + # In practice, you'd want more sophisticated translation + translated = text + + # Replace common terms + for eng_term, cn_term in term_map.items(): + # Case-insensitive replacement + pattern = re.compile(re.escape(eng_term), re.IGNORECASE) + translated = pattern.sub(cn_term, translated) + + # For now, return a placeholder that indicates translation is needed + # We'll implement full translation below + return translated + + +def main(): + json_file = project_root / "agents-tool.json" + + # Read JSON + print(f"Reading {json_file}...") + with open(json_file, "r", encoding="utf-8") as f: + data = json.load(f) + + # Since we have 107 tools, we'll translate them all + # For efficiency, I'll create translations for all tools + print("Translating all descriptions...") + + updated_count = 0 + for tool in data["tools"]: + name = tool.get("name", "") + description = tool.get("description", "").strip() + description_cn = tool.get("description_cn", "").strip() + + if description and not description_cn: + # Translate the description + translated = translate_description_full(description) + tool["description_cn"] = translated + updated_count += 1 + if updated_count % 10 == 0: + print(f" Progress: {updated_count} tools translated...") + + # Save updated JSON + print(f"\nSaving updated JSON...") + with open(json_file, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + print(f"✓ Successfully updated {updated_count} descriptions") + print(f"✓ Updated {json_file}") + + +def translate_description_full(description: str) -> str: + """ + Full translation of description. + This will translate the entire description to Chinese. + """ + # This is a comprehensive translation function + # We'll translate section by section + + result = [] + lines = description.split('\n') + + for line in lines: + line = line.strip() + if not line: + result.append("") + continue + + # Translate section headers + if line.startswith("What it does:"): + content = line.replace("What it does:", "").strip() + result.append("功能:" + (f" {translate_sentence(content)}" if content else "")) + elif line.startswith("When to use:"): + content = line.replace("When to use:", "").strip() + result.append("何时使用:" + (f" {translate_sentence(content)}" if content else "")) + elif line.startswith("Prerequisites / Inputs:"): + content = line.replace("Prerequisites / Inputs:", "").strip() + result.append("前提条件/输入:" + (f" {translate_sentence(content)}" if content else "")) + elif line.startswith("Outputs:"): + content = line.replace("Outputs:", "").strip() + result.append("输出:" + (f" {translate_sentence(content)}" if content else "")) + elif line.startswith("Cannot do / Limits:"): + content = line.replace("Cannot do / Limits:", "").strip() + result.append("无法做到/限制:" + (f" {translate_sentence(content)}" if content else "")) + elif line.startswith("Cost / Notes:"): + content = line.replace("Cost / Notes:", "").strip() + result.append("成本/备注:" + (f" {translate_sentence(content)}" if content else "")) + else: + result.append(translate_sentence(line)) + + return "\n".join(result) + + +def translate_sentence(sentence: str) -> str: + """ + Translate a sentence to Chinese. + This is a placeholder - actual translation would use LLM or translation API. + """ + # For now, return the sentence as-is with a note that translation is needed + # In production, this would call a translation service + + # Common phrase translations + translations = { + "Calculate": "计算", + "Perform": "执行", + "Run": "运行", + "Generate": "生成", + "Build": "构建", + "Create": "创建", + "Extract": "提取", + "Analyze": "分析", + "Predict": "预测", + "Optimize": "优化", + "Search": "搜索", + "Query": "查询", + "Retrieve": "检索", + "Fetch": "获取", + "using": "使用", + "for": "用于", + "When you need": "当您需要", + "Structure file": "结构文件", + "in": "以", + "format": "格式", + "DFT": "DFT", + "parameters": "参数", + "supports": "支持", + "before": "之前", + "calculation": "计算", + "cost": "成本", + "Low": "低", + "Medium": "中", + "High": "高", + "requires": "需要", + "may need": "可能需要", + "optional": "可选", + "only": "仅", + "not": "不", + "no": "无", + "specific to": "特定于", + "limited to": "仅限于", + } + + # Simple word replacement (this is basic - full translation would be better) + translated = sentence + for eng, cn in sorted(translations.items(), key=lambda x: -len(x[0])): + translated = translated.replace(eng, cn) + + return translated + + +if __name__ == "__main__": + main() diff --git a/scripts/update_description_cn_complete.py b/scripts/update_description_cn_complete.py new file mode 100644 index 00000000..42eddb45 --- /dev/null +++ b/scripts/update_description_cn_complete.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 +""" +Update description_cn in agents-tool.json with complete Chinese translations +""" +import json +from pathlib import Path + +project_root = Path(__file__).parent.parent + +# Complete translations for all tools +# Format: "tool_name": "translated_description" +DESCRIPTION_TRANSLATIONS = { + "abacus_vacancy_formation_energy": "功能:使用 DFT 计算金属原子中非带电空位的形成能。\n何时使用:当您需要金属结构的空位形成能时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数,如泛函、自旋极化、DFT+U、磁矩。\n输出:空位形成能。\n无法做到/限制:仅适用于金属原子的非带电空位;计算需要超胞。\n成本/备注:DFT 计算成本;支持计算前弛豫。", + + "abacus_phonon_dispersion": "功能:使用 DFT 计算声子色散曲线。\n何时使用:当您需要结构的声子性质和热修正时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;可选超胞、高对称点、k 路径。\n输出:声子色散能带结构和热修正图。\n无法做到/限制:需要 DFT;可能需要超胞以提高精度。\n成本/备注:DFT 计算成本;支持计算前弛豫。", + + "abacus_cal_band": "功能:使用 DFT 计算电子能带结构。\n何时使用:当您需要材料的能带结构和带隙时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;可选高对称点、k 路径。\n输出:能带结构和带隙图。\n无法做到/限制:基于 DFT;支持 PYATB 或 ABACUS nscf。\n成本/备注:DFT 计算成本;支持计算前弛豫。", + + "abacus_calculation_scf": "功能:执行 SCF 计算以使用 DFT 计算能量。\n何时使用:当您需要结构的基态能量时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数。\n输出:能量。\n无法做到/限制:基本 SCF;无弛豫或其他性质。\n成本/备注:DFT 计算成本。", + + "abacus_dos_run": "功能:使用 DFT 计算 DOS 和 PDOS。\n何时使用:当您需要电子结构分析的态密度时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;PDOS 模式('species'、'species+shell'、'species+orbital')。\n输出:DOS 和 PDOS 图。\n无法做到/限制:基于 DFT;需要弛豫支持。\n成本/备注:DFT 计算成本;支持计算前弛豫。", + + "abacus_badercharge_run": "功能:使用 DFT 计算 Bader 电荷。\n何时使用:当您需要原子电荷分析时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数。\n输出:每个原子的 Bader 电荷。\n无法做到/限制:基于 DFT;需要电荷密度计算。\n成本/备注:DFT 计算成本;支持计算前弛豫。", + + "abacus_do_relax": "功能:使用 DFT 执行几何优化(弛豫)。\n何时使用:当您需要优化结构时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;弛豫设置(晶胞、步数、方法、轴)。\n输出:弛豫后的结构文件。\n无法做到/限制:基于 DFT 的弛豫。\n成本/备注:DFT 计算成本。", + + "abacus_cal_work_function": "功能:使用 DFT 计算表面和二维材料的功函数。\n何时使用:当您需要表面材料的功函数时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;真空方向、偶极修正。\n输出:静电势和功函数图。\n无法做到/限制:适用于表面和二维材料;极性表面有两个功函数。\n成本/备注:DFT 计算成本;支持计算前弛豫。", + + "abacus_run_md": "功能:使用 DFT 执行从头算分子动力学。\n何时使用:当您需要具有 DFT 精度的 MD 模拟时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;系综、步数、时间步长、温度。\n输出:ASE 轨迹文件。\n无法做到/限制:基于 DFT 的 MD;长时间模拟成本高。\n成本/备注:高 DFT 成本;支持计算前弛豫。", + + "abacus_cal_elf": "功能:使用 DFT 计算电子局域化函数。\n何时使用:当您需要键合分析的 ELF 时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数。\n输出:ELF 的立方文件。\n无法做到/限制:基于 DFT。\n成本/备注:DFT 计算成本;支持计算前弛豫。", + + "abacus_eos": "功能:使用 DFT 计算状态方程。\n何时使用:当您需要 EOS 曲线和体积性质时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数。\n输出:拟合的 EOS 图和拟合参数。\n无法做到/限制:基于 DFT。\n成本/备注:DFT 计算成本;支持计算前弛豫。", + + "abacus_cal_elastic": "功能:使用 DFT 计算弹性性质。\n何时使用:当您需要弹性常数和模量时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数。\n输出:弹性张量(Voigt 符号)、体积/剪切/杨氏模量、泊松比。\n无法做到/限制:基于 DFT。\n成本/备注:DFT 计算成本;支持计算前弛豫。", +} + +def main(): + json_file = project_root / "agents-tool.json" + + print(f"Reading {json_file}...") + with open(json_file, "r", encoding="utf-8") as f: + data = json.load(f) + + print("Updating description_cn...") + updated = 0 + + for tool in data["tools"]: + name = tool.get("name", "") + if name in DESCRIPTION_TRANSLATIONS: + tool["description_cn"] = DESCRIPTION_TRANSLATIONS[name] + updated += 1 + print(f" ✓ Updated {name}") + + # For tools not in the dictionary, use a generic translation function + # This handles the remaining tools + remaining = 0 + for tool in data["tools"]: + name = tool.get("name", "") + desc = tool.get("description", "").strip() + desc_cn = tool.get("description_cn", "").strip() + + if desc and not desc_cn and name not in DESCRIPTION_TRANSLATIONS: + # Use generic translation + translated = translate_description_generic(desc) + tool["description_cn"] = translated + remaining += 1 + if remaining % 20 == 0: + print(f" Progress: {remaining} remaining tools translated...") + + print(f"\nSaving updated JSON...") + with open(json_file, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + print(f"✓ Successfully updated {updated} predefined translations") + print(f"✓ Successfully updated {remaining} generic translations") + print(f"✓ Updated {json_file}") + + +def translate_description_generic(description: str) -> str: + """ + Generic translation function for descriptions not in the dictionary. + """ + if not description: + return "" + + headers = { + "What it does:": "功能:", + "When to use:": "何时使用:", + "Prerequisites / Inputs:": "前提条件/输入:", + "Outputs:": "输出:", + "Cannot do / Limits:": "无法做到/限制:", + "Cost / Notes:": "成本/备注:", + } + + lines = description.split('\n') + result = [] + + for line in lines: + stripped = line.strip() + if not stripped: + result.append("") + continue + + found = False + for eng, cn in headers.items(): + if stripped.startswith(eng): + content = stripped[len(eng):].strip() + if content: + # For generic translation, we'll keep the English content + # but translate common terms + translated_content = translate_common_terms(content) + result.append(f"{cn} {translated_content}") + else: + result.append(cn) + found = True + break + + if not found: + result.append(translate_common_terms(stripped)) + + return "\n".join(result) + + +def translate_common_terms(text: str) -> str: + """ + Translate common technical terms. + """ + # Common term translations + terms = { + "using DFT": "使用 DFT", + "using ML potential": "使用机器学习势", + "Structure file": "结构文件", + "DFT parameters": "DFT 参数", + "Low": "低", + "Medium": "中", + "High": "高", + "requires": "需要", + "supports": "支持", + "optional": "可选", + } + + result = text + for eng, cn in sorted(terms.items(), key=lambda x: -len(x[0])): + result = result.replace(eng, cn) + + return result + + +if __name__ == "__main__": + main() + diff --git a/scripts/update_summary_cn.py b/scripts/update_summary_cn.py new file mode 100644 index 00000000..d20215a6 --- /dev/null +++ b/scripts/update_summary_cn.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +""" +Update summary_cn in agents-tool.json by translating summary_prompt +""" +import json +from pathlib import Path + +project_root = Path(__file__).parent.parent + +# Translations - I'll provide these directly +translations = { + "unielf_inference": "根据输出结果总结 Uni-ELF 推理结果:\n1. 报告完整结果 CSV 文件的 URL (`result_csv`)。\n2. 列出 `top_10_results_dict` 中的前 10 个配方。对于每个配方,显示 `formulation_id`、组成(结合 `smiles_i` 和 `ratio_i`)以及预测的属性值(以 `_pred` 结尾的键)。\n3. 突出显示表现最好的配方。\n", + + "fetch_bohrium_crystals": "\n## 响应格式\n响应必须始终包括:\n1. ✅ 简要说明应用的筛选条件\n2. 📊 检索到的结构的 Markdown 表格\n - 列(固定顺序):\n (1) 化学式 (`formula`)\n (2) 元素(从 `formula` 推导)\n (3) 原子数(如果 `crystal_ext.number_of_atoms` 可用;否则 **未提供**)\n (4) 空间群(如果 `crystal_ext.symbol` 可用且可以映射到编号;否则 **未提供**)\n (5) 能量/形成能(如果 `crystal_ext.predicted_formation_energy` 可用;否则 **未提供**)\n (6) 带隙(如果 `crystal_ext.band_gap` 可用;否则 **未提供**)\n (7) 下载链接(CIF/JSON,基于 `output_formats`)\n (8) 来源数据库 → 始终为 `\"BohriumPublic\"`\n (9) ID (`id`)\n - 缺失值必须填写为 **未提供**\n - 行数**必须完全等于** `n_found`\n3. 📦 工具返回的 `output_dir` 路径(用于下载/归档)\n\n如果 `n_found = 0`,请明确说明未找到匹配项,重复应用的筛选条件,并建议放宽条件。**不要**生成空表格。\n", + + "fetch_mofs_sql": "## 响应格式\n1. 简要说明使用的 SQL 查询\n2. 检索到的 MOF 的 Markdown 表格,包含相关列\n3. 用于下载/归档的输出目录路径\n4. 结果中的关键发现(如适用)\n", + + "fetch_openlam_structures": "\n## 响应格式\n响应必须始终包括:\n1. ✅ 简要说明应用的筛选条件\n2. 📊 检索到的结构的 Markdown 表格\n - 列(固定顺序):\n (1) 化学式 (`formula`)\n (2) 元素(从 `formula` 推导)\n (3) 原子数 → **未提供**(OpenLAM 不提供此字段)\n (4) 空间群 → **未提供**(OpenLAM 不提供此字段)\n (5) 能量/形成能(如果 `energy` 可用;否则 **未提供**)\n (6) 带隙 → **未提供**(OpenLAM 不提供此字段)\n (7) 下载链接(CIF/JSON,基于 `output_formats`)\n (8) 来源数据库 → 始终为 `\"OpenLAM\"`\n (9) ID (`id`)\n - 缺失值必须填写为 **未提供**\n - 行数**必须完全等于** `n_found`\n3. 📦 工具返回的 `output_dir` 路径(用于下载/归档)\n\n如果 `n_found = 0`,请明确说明未找到匹配项,重复应用的筛选条件,并建议放宽条件。**不要**生成空表格。\n", + + "fetch_structures_with_filter": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", + + "fetch_structures_with_spg": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", + + "fetch_structures_with_bandgap": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", + + "predict_tensile_strength": "## 响应格式\n\n**返回:**\n- 浮点值列表:预测的抗拉强度值列表(单位:MPa)\n- 顺序与输入化学式列表匹配\n- 示例:三个化学式为 [650.25, 680.50, 695.30]\n", + + "query_heakb_literature": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要列表(List[str])\n - 每个摘要是包含一篇文献论文摘要的文本字符串\n - 这些摘要是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n- 如果用户的问题是开放式的,提供全面分析,包括:\n 1. 机制洞察(反应路径、驱动力、结构-性能关系)\n 2. 定量或半定量结果(材料名称、数值数据、性能指标、空间群等)\n 3. 当前研究中的不一致、局限性或空白\n- 除非必要,不要过度强调技术细节(仪器设置或计算软件和参数设置)\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明(例如,“第一个”、“最好的”、“最受欢迎的”)\n- 在数字和单位之间添加空格(例如,10 cm,5 kg)\n- 对物理量使用斜体(例如,*E*、*T*、*k*)\n- 对向量使用粗体(例如,**F**、**E**)和化合物/材料的序列代码名称(例如,化合物 **1**)\n- 在首次使用时定义缩写,并在整个文本中一致使用\n- 使用 [1]、[2]、[3] 格式在整个文本中引用来源(数字指摘要顺序)\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战、分析的论文数量\n\n2. **主要内容**:组织成具有子章节的逻辑章节(##、###)。对于每个章节:\n - 整合来自多个摘要的发现,并提供详细解释\n - 包括具体的定量数据、实验条件和结果\n - 深入解释机制和过程(事物**如何**工作,而不仅仅是**什么**发生)\n - 比较不同研究的发现,突出一致性和分歧\n - 在适用时使用表格比较不同研究的数据\n - 解决当前理解中的矛盾或空白\n\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + + "query_polymerkb_literature": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要和数据库条目列表(List[str])\n - 每个项目可以是:\n - 详细的文献摘要(对于有全文的论文):包含论文的全面分析\n - 数据库条目(对于没有全文的论文):包含 DOI 和数据库属性(例如,polymer_type、tensile_strength、flexural_strength 等)\n - 这些摘要和条目是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要和数据库条目。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n**重要**:摘要列表可能包含两种类型的条目:\n1. **详细的文献摘要**:包含论文的全面分析,包括方法、结果、讨论等\n2. **数据库条目**:包含 DOI 和数据库属性(例如,polymer_type、tensile_strength、flexural_strength 等)\n\n您应该将这两种类型的条目整合到报告中,使用文献摘要提供深入分析,使用数据库条目提供定量数据。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要和数据库条目的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + + "query_steelkb_literature": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要列表(List[str])\n - 每个摘要是包含一篇文献论文摘要的文本字符串\n - 这些摘要是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + + "query_ssekb_literature": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要和数据库条目列表(List[str])\n - 每个项目可以是:\n - 详细的文献摘要(对于有全文的论文):包含论文的全面分析\n - 数据库条目(对于没有全文的论文):包含 DOI 和数据库属性(例如,材料属性、实验数据等)\n - 这些摘要和条目是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要和数据库条目。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n**重要**:摘要列表可能包含两种类型的条目:\n1. **详细的文献摘要**:包含论文的全面分析,包括方法、结果、讨论等\n2. **数据库条目**:包含 DOI 和数据库属性(例如,材料属性、实验数据等)\n\n您应该将这两种类型的条目整合到报告中,使用文献摘要提供深入分析,使用数据库条目提供定量数据。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要和数据库条目的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + + "search-papers-enhanced": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 知识使用限制:\n- 所有事实信息(数据、结论、定义、实验结果等)必须来自工具调用结果;\n- 您可以使用自己的知识来组织、解释和推理这些事实,但不能凭空添加信息。\n- 引用时,尽量直接使用原始表达。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头,例如“当然,我将...”、“好的,我将...”或“我现在将分析...”。相反,直接输出实质性内容。\n- 避免没有论文证据的声明,例如第一个、最好的、最受欢迎的等。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n\n# 内部大纲协议(大纲不得显示):\n- 在开始时,内部构建一个详细的分层大纲,至少包含 3 个主要章节和多个子章节。除非明确要求,否则不得向用户显示此大纲。\n- 大纲应大致从简要解释所涉及的关键术语、基于摘要声明的主要研究空白开始。\n- 您必须使用此内部大纲来指导一个长、全面和完全结构化的最终输出。\n", + + "web-search": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头。\n- 避免没有证据的声明。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n", + + "extract_info_from_webpage": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头。\n- 避免没有证据的声明。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n", +} + +def main(): + json_file = project_root / "agents-tool.json" + + # Read JSON + print(f"Reading {json_file}...") + with open(json_file, "r", encoding="utf-8") as f: + data = json.load(f) + + # Update summary_cn for each tool + updated_count = 0 + for tool in data["tools"]: + name = tool.get("name", "") + if name in translations: + tool["summary_cn"] = translations[name] + updated_count += 1 + print(f" ✓ Updated {name}") + + # Save updated JSON + print(f"\nSaving updated JSON...") + with open(json_file, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + print(f"✓ Successfully updated {updated_count} summaries") + print(f"✓ Updated {json_file}") + +if __name__ == "__main__": + main() + From 19169a60b71103485b9b370e28560c270bed9f80 Mon Sep 17 00:00:00 2001 From: styxhuang Date: Thu, 29 Jan 2026 01:24:50 +0800 Subject: [PATCH 02/10] update agents-tool --- agents-tool.json | 2842 +++++++++++-- .../matmaster_agent/sub_agents/tools_opt.py | 3616 +++++++++++++++++ scripts/generate_agents_tool_json.py | 397 +- scripts/get_agent_urls.py | 269 ++ scripts/improve_description_translations.py | 91 - scripts/translate_all_descriptions.py | 152 - scripts/translate_all_descriptions_final.py | 196 - scripts/translate_summary_cn.py | 126 - scripts/update_all_description_cn.py | 153 - scripts/update_all_description_cn_final.py | 148 - scripts/update_description_cn.py | 261 -- scripts/update_description_cn_complete.py | 152 - scripts/update_summary_cn.py | 70 - 13 files changed, 6650 insertions(+), 1823 deletions(-) create mode 100644 agents/matmaster_agent/sub_agents/tools_opt.py create mode 100644 scripts/get_agent_urls.py delete mode 100644 scripts/improve_description_translations.py delete mode 100644 scripts/translate_all_descriptions.py delete mode 100644 scripts/translate_all_descriptions_final.py delete mode 100644 scripts/translate_summary_cn.py delete mode 100644 scripts/update_all_description_cn.py delete mode 100644 scripts/update_all_description_cn_final.py delete mode 100644 scripts/update_description_cn.py delete mode 100644 scripts/update_description_cn_complete.py delete mode 100644 scripts/update_summary_cn.py diff --git a/agents-tool.json b/agents-tool.json index 80767eb0..fef483d3 100644 --- a/agents-tool.json +++ b/agents-tool.json @@ -3,8 +3,22 @@ { "tool_id": "001-ABACUSVA-001", "name": "abacus_vacancy_formation_energy", - "description": "What it does: Calculate formation energy of non-charged vacancy in metal atoms using DFT.\nWhen to use: When you need vacancy formation energy for metal structures.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters like functional, spin polarization, DFT+U, magnetic moments.\nOutputs: Vacancy formation energy.\nCannot do / Limits: Only non-charged vacancy of metal atoms; requires supercell for calculation.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", - "description_cn": "功能: 计算 形成能 金属原子中非带电空位的 使用 DFT.\n何时使用: 当您需要 空位形成能 用于 金属结构.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数 如 泛函, 自旋极化, DFT+U, 磁矩.\n输出: 空位形成能.\n无法做到/限制: 仅 非带电空位 metal的 原子; 需要 超胞 进行计算.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "description": { + "What it does": "Calculate formation energy of non-charged vacancy in metal atoms using DFT.", + "When to use": "When you need vacancy formation energy for metal structures.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters like functional, spin polarization, DFT+U, magnetic moments.", + "Output": "Vacancy formation energy.", + "Notes": "Only non-charged vacancy of metal atoms; requires supercell for calculation.", + "Costs": "DFT calculation cost; supports relaxation before calculation." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)计算金属原子中非带电空位的形成能。", + "使用场景": "当需要计算金属结构的空位形成能时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:如泛函、自旋极化、DFT+U、磁矩等。", + "输出": "空位形成能。", + "注意事项": "仅支持金属原子的非带电空位;计算需使用超胞。", + "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -14,15 +28,34 @@ "apex_calculate_vacancy" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSPH-002", "name": "abacus_phonon_dispersion", - "description": "What it does: Calculate phonon dispersion curve using DFT.\nWhen to use: When you need phonon properties and thermal corrections for a structure.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional supercell, high-symmetry points, k-path.\nOutputs: Plot of phonon dispersion band structure and thermal corrections.\nCannot do / Limits: Requires DFT; may need supercell for accuracy.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", - "description_cn": "功能: 计算 声子色散 curve 使用 DFT.\n何时使用: 当您需要 声子性质 和 热修正 用于结构.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; 可选 超胞, 高对称点, k 路径.\n输出: Plot 声子色散的 能带结构 和 热修正.\n无法做到/限制: 需要 DFT; 可能需要 超胞 以提高精度.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "description": { + "What it does": "Calculate phonon dispersion curve using DFT.", + "When to use": "When you need phonon properties and thermal corrections for a structure.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional supercell, high-symmetry points, k-path.", + "Output": "Plot of phonon dispersion band structure and thermal corrections.", + "Notes": "Requires DFT; may need supercell for accuracy.", + "Costs": "DFT calculation cost; supports relaxation before calculation." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)计算声子色散曲线。", + "使用场景": "当需要结构的声子性质和热修正时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:可选超胞、高对称点、k 路径。", + "输出": "声子色散能带结构图和热修正。", + "注意事项": "需要 DFT 计算;可能需要超胞以提高精度。", + "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -33,15 +66,34 @@ "calculate_phonon" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSCA-003", "name": "abacus_cal_band", - "description": "What it does: Calculate electronic band structure using DFT.\nWhen to use: When you need band structure and band gap for a material.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional high-symmetry points, k-path.\nOutputs: Plot of band structure and band gap.\nCannot do / Limits: DFT-based; supports PYATB or ABACUS nscf.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", - "description_cn": "功能: 计算 电子能带结构 使用 DFT.\n何时使用: 当您需要 能带结构 和 带隙 用于材料.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; 可选 高对称点, k 路径.\n输出: Plot 能带结构的 和 带隙.\n无法做到/限制: 基于 DFT; 支持 PYATB 或 ABACUS nscf.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "description": { + "What it does": "Calculate electronic band structure using DFT.", + "When to use": "When you need band structure and band gap for a material.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional high-symmetry points, k-path.", + "Output": "Plot of band structure and band gap.", + "Notes": "DFT-based; supports PYATB or ABACUS nscf.", + "Costs": "DFT calculation cost; supports relaxation before calculation." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)计算电子能带结构。", + "使用场景": "当需要材料的能带结构和带隙时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:可选高对称点、k 路径。", + "输出": "能带结构图和带隙。", + "注意事项": "基于 DFT;支持 PYATB 或 ABACUS nscf。", + "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -49,15 +101,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSCA-004", "name": "abacus_calculation_scf", - "description": "What it does: Perform SCF calculation to compute energy using DFT.\nWhen to use: When you need ground state energy for a structure.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\nOutputs: Energy.\nCannot do / Limits: Basic SCF; no relaxation or other properties.\nCost / Notes: DFT calculation cost.", - "description_cn": "功能: 执行 SCF 计算 到 compute energy 使用 DFT.\n何时使用: 当您需要 基态能量 用于结构.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数.\n输出: Energy.\n无法做到/限制: Basic SCF; no 弛豫 或 other properties.\n成本/备注: DFT 计算成本.", + "description": { + "What it does": "Perform SCF calculation to compute energy using DFT.", + "When to use": "When you need ground state energy for a structure.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.", + "Output": "Energy.", + "Notes": "Basic SCF; no relaxation or other properties.", + "Costs": "DFT calculation cost." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)执行自洽场(SCF)计算以计算能量。", + "使用场景": "当需要结构的基态能量时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数。", + "输出": "能量。", + "注意事项": "基础 SCF 计算;不包含弛豫或其他性质。", + "成本": "涉及 DFT 计算成本。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -65,15 +136,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSDO-005", "name": "abacus_dos_run", - "description": "What it does: Calculate DOS and PDOS using DFT.\nWhen to use: When you need density of states for electronic structure analysis.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; PDOS mode ('species', 'species+shell', 'species+orbital').\nOutputs: Plots for DOS and PDOS.\nCannot do / Limits: DFT-based; requires relaxation support.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", - "description_cn": "功能: 计算 DOS 和 PDOS 使用 DFT.\n何时使用: 当您需要 态密度 用于 electronic structure analysis.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; PDOS mode ('species', 'species+shell', 'species+或bital').\n输出: Plots 用于 DOS 和 PDOS.\n无法做到/限制: 基于 DFT; 需要 弛豫 supp或t.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "description": { + "What it does": "Calculate DOS and PDOS using DFT.", + "When to use": "When you need density of states for electronic structure analysis.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; PDOS mode ('species', 'species+shell', 'species+orbital').", + "Output": "Plots for DOS and PDOS.", + "Notes": "DFT-based; requires relaxation support.", + "Costs": "DFT calculation cost; supports relaxation before calculation." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)计算态密度(DOS)和投影态密度(PDOS)。", + "使用场景": "当需要态密度进行电子结构分析时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT参数,PDOS 模式(\"species\"、\"species+shell\"、\"species+orbital\")。", + "输出": "DOS 和 PDOS 图。", + "注意事项": "基于 DFT;需要弛豫支持。", + "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -81,15 +171,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSBA-006", "name": "abacus_badercharge_run", - "description": "What it does: Calculate Bader charge using DFT.\nWhen to use: When you need atomic charge analysis.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\nOutputs: Bader charge for each atom.\nCannot do / Limits: DFT-based; requires charge density calculation.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", - "description_cn": "功能: 计算 Bader 电荷 使用 DFT.\n何时使用: 当您需要 原子ic charge analysis.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数.\n输出: Bader 电荷 用于 each 原子.\n无法做到/限制: 基于 DFT; 需要 charge density calculation.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "description": { + "What it does": "Calculate Bader charge using DFT.", + "When to use": "When you need atomic charge analysis.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.", + "Output": "Bader charge for each atom.", + "Notes": "DFT-based; requires charge density calculation.", + "Costs": "DFT calculation cost; supports relaxation before calculation." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)计算 Bader 电荷。", + "使用场景": "当需要进行原子电荷分析时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数。", + "输出": "每个原子的 Bader 电荷。", + "注意事项": "基于 DFT;需要电荷密度计算。", + "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -97,15 +206,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSDO-007", "name": "abacus_do_relax", - "description": "What it does: Perform geometry optimization (relaxation) using DFT.\nWhen to use: When you need optimized structure.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; relaxation settings (cell, steps, method, axes).\nOutputs: Relaxed structure file.\nCannot do / Limits: DFT-based relaxation.\nCost / Notes: DFT calculation cost.", - "description_cn": "功能: 执行 geometry 优化 (弛豫) 使用 DFT.\n何时使用: 当您需要 optimized structure.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; 弛豫 settings (cell, steps, method, axes).\n输出: Relaxed structure file.\n无法做到/限制: 基于 DFT 弛豫.\n成本/备注: DFT 计算成本.", + "description": { + "What it does": "Perform geometry optimization (relaxation) using DFT.", + "When to use": "When you need optimized structure.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; relaxation settings (cell, steps, method, axes).", + "Output": "Relaxed structure file.", + "Notes": "DFT-based relaxation.", + "Costs": "DFT calculation cost." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)执行几何优化(弛豫)。", + "使用场景": "当需要优化结构时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数;弛豫设置(晶胞、步数、方法、轴)。", + "输出": "弛豫后的结构文件。", + "注意事项": "基于 DFT 的弛豫。", + "成本": "涉及 DFT 计算成本。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -116,15 +244,34 @@ "optimize_structure" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSCA-008", "name": "abacus_cal_work_function", - "description": "What it does: Calculate work function of slabs and 2D materials using DFT.\nWhen to use: When you need work function for surface materials.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; vacuum direction, dipole correction.\nOutputs: Plot of electrostatic potential and work function.\nCannot do / Limits: For slabs and 2D materials; polar slabs have two work functions.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", - "description_cn": "功能: 计算 功函数 slabs的 和 2D materials 使用 DFT.\n何时使用: 当您需要 功函数 用于 surface materials.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; vacuum direction, dipole 修正.\n输出: Plot electrostatic的 potential 和 功函数.\n无法做到/限制: 用于 slabs 和 2D materials; polar slabs have two 功函数s.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "description": { + "What it does": "Calculate work function of slabs and 2D materials using DFT.", + "When to use": "When you need work function for surface materials.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; vacuum direction, dipole correction.", + "Output": "Plot of electrostatic potential and work function.", + "Notes": "For slabs and 2D materials; polar slabs have two work functions.", + "Costs": "DFT calculation cost; supports relaxation before calculation." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)计算表面和二维材料的功函数。", + "使用场景": "当需要表面材料的功函数时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数;真空方向、偶极修正。", + "输出": "静电势和功函数图。", + "注意事项": "适用于表面和二维材料;极性表面有两个功函数。", + "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -132,15 +279,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSRU-009", "name": "abacus_run_md", - "description": "What it does: Perform ab-initio molecular dynamics using DFT.\nWhen to use: When you need MD simulation with DFT accuracy.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; ensemble, steps, timestep, temperature.\nOutputs: ASE trajectory file.\nCannot do / Limits: DFT-based MD; expensive for long simulations.\nCost / Notes: High DFT cost; supports relaxation before calculation.", - "description_cn": "功能: 执行 ab-initio 分子动力学 使用 DFT.\n何时使用: 当您需要 MD simulation 使用 DFT accuracy.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数; ensemble, steps, timestep, temperature.\n输出: ASE trajec到ry file.\n无法做到/限制: 基于 DFT MD; expensive 用于 long simulations.\n成本/备注: 高 DFT cost; 支持 弛豫 计算前.", + "description": { + "What it does": "Perform ab-initio molecular dynamics using DFT.", + "When to use": "When you need MD simulation with DFT accuracy.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; ensemble, steps, timestep, temperature.", + "Output": "ASE trajectory file.", + "Notes": "DFT-based MD; expensive for long simulations.", + "Costs": "High DFT cost; supports relaxation before calculation." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)执行从头算分子动力学。", + "使用场景": "当需要具有 DFT 精度的分子动力学模拟时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数;系综、步数、时间步长、温度。", + "输出": "ASE 轨迹文件。", + "注意事项": "基于 DFT 的分子动力学;长时间模拟成本高。", + "成本": "高 DFT 计算成本;支持在计算前进行结构弛豫。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -150,15 +316,34 @@ "run_molecular_dynamics" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSCA-010", "name": "abacus_cal_elf", - "description": "What it does: Calculate electron localization function using DFT.\nWhen to use: When you need ELF for bonding analysis.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\nOutputs: Cube file of ELF.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", - "description_cn": "功能: 计算 电子局域化函数 使用 DFT.\n何时使用: 当您需要 ELF 用于 bonding analysis.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数.\n输出: Cube file ELF的.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "description": { + "What it does": "Calculate electron localization function using DFT.", + "When to use": "When you need ELF for bonding analysis.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.", + "Output": "Cube file of ELF.", + "Notes": "DFT-based.", + "Costs": "DFT calculation cost; supports relaxation before calculation." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)计算电子局域化函数(ELF)。", + "使用场景": "当需要 ELF 进行键合分析时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数。", + "输出": "ELF 的 Cube 文件。", + "注意事项": "基于 DFT。", + "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -166,15 +351,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSEO-011", "name": "abacus_eos", - "description": "What it does: Calculate equation of state using DFT.\nWhen to use: When you need EOS curve and bulk properties.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\nOutputs: Plot of fitted EOS and fitting parameters.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", - "description_cn": "功能: 计算 状态方程 使用 DFT.\n何时使用: 当您需要 EOS curve 和 bulk properties.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数.\n输出: Plot fitted的 EOS 和 fitting parameters.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "description": { + "What it does": "Calculate equation of state using DFT.", + "When to use": "When you need EOS curve and bulk properties.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.", + "Output": "Plot of fitted EOS and fitting parameters.", + "Notes": "DFT-based.", + "Costs": "DFT calculation cost; supports relaxation before calculation." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)计算状态方程。", + "使用场景": "当需要状态方程曲线和体相性质时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数。", + "输出": "拟合的状态方程图和拟合参数。", + "注意事项": "基于 DFT。", + "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -184,15 +388,34 @@ "apex_calculate_eos" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "001-ABACUSCA-012", "name": "abacus_cal_elastic", - "description": "What it does: Calculate elastic properties using DFT.\nWhen to use: When you need elastic constants and moduli.\nPrerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\nOutputs: Elastic tensor (Voigt notation), bulk/shear/Young’s modulus, Poisson ratio.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost; supports relaxation before calculation.", - "description_cn": "功能: 计算 弹性性质 使用 DFT.\n何时使用: 当您需要 弹性常数 和 moduli.\n前提条件/输入: 结构文件 以 cif/VASP POSCAR/ABACUS STRU 格式; DFT 参数.\n输出: Elastic tens或 (Voigt notation), bulk/shear/Young’s modulus, Poisson ratio.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本; 支持 弛豫 计算前.", + "description": { + "What it does": "Calculate elastic properties using DFT.", + "When to use": "When you need elastic constants and moduli.", + "Input": "Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.", + "Output": "Elastic tensor (Voigt notation), bulk/shear/Young's modulus, Poisson ratio.", + "Notes": "DFT-based.", + "Costs": "DFT calculation cost; supports relaxation before calculation." + }, + "description_cn": { + "工具简介": "使用密度泛函理论(DFT)计算弹性性质。", + "使用场景": "当需要弹性常数和模量时使用。", + "输入": "结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件; 计算参数:DFT 参数。", + "输出": "弹性张量(Voigt 记号)、体积/剪切/杨氏模量、泊松比。", + "注意事项": "基于 DFT。", + "成本": "涉及 DFT 计算成本;支持在计算前进行结构弛豫。" + }, "belonging_agent": "ABACUS_calculation_agent", "scenes": [ "ABACUS", @@ -203,15 +426,34 @@ "calculate_elastic_constants" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://toyl1410396.bohrium.tech:50004/sse", + "uat": "http://toyl1410396.bohrium.tech:50004/sse", + "prod": "http://toyl1410396.bohrium.tech:50001/sse" + } }, { "tool_id": "002-APEXCALC-001", "name": "apex_calculate_vacancy", - "description": "What it does: Evaluate vacancy formation energies by relaxing supercells with one atom removed.\nWhen to use: When you need vacancy formation energies for materials.\nPrerequisites / Inputs: Structure file.\nOutputs: Vacancy formation energies.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", - "description_cn": "功能: 评估 vacancy 用于mation energies 通过 relaxing 超胞s 使用 one 原子 removed.\n何时使用: 当您需要 vacancy 用于mation energies 用于 materials.\n前提条件/输入: 结构文件.\n输出: Vacancy 用于mation energies.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "description": { + "What it does": "Evaluate vacancy formation energies by relaxing supercells after creating vacancies internally (removes one atom from a pristine supercell).", + "When to use": "When you need vacancy formation energies for a material starting from a pristine crystal.", + "Input": "Pristine (defect-free) structure file of the bulk crystal (unit cell or supercell). Do NOT provide a structure that already contains vacancies/defects (missing atoms, partial occupancies, disordered sites), because the tool assumes a complete bulk lattice and will construct vacancies itself; defected inputs may cause errors or invalid energies.", + "Output": "Vacancy formation energies.", + "Notes": "DFT-based.; does not accept pre-defected structures.", + "Costs": "DFT calculation cost." + }, + "description_cn": { + "工具简介": "通过在内部创建空位后弛豫超胞(从完整超胞中移除一个原子)来评估空位形成能。", + "使用场景": "当需要从完整晶体开始计算材料的空位形成能时使用。", + "输入": "结构文件:完整(无缺陷)的体相晶体结构文件(原胞或超胞)。", + "输出": "空位形成能。", + "注意事项": "基于 DFT;不要提供已包含空位/缺陷的结构(缺失原子、部分占位、无序位点),该工具假设完整的体相晶格并会自行构建空位;提供已有缺陷的结构可能导致错误或无效的能量。", + "成本": "涉及 DFT 计算成本。" + }, "belonging_agent": "apex_agent", "scenes": [ "APEX", @@ -221,15 +463,34 @@ "abacus_vacancy_formation_energy" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://rtvq1394775.bohrium.tech:50001/mcp", + "uat": "http://rtvq1394775.bohrium.tech:50001/mcp", + "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac" + } }, { "tool_id": "002-APEXCALC-002", "name": "apex_calculate_interstitial", - "description": "What it does: Insert interstitial atoms into a host lattice to compute formation energies across candidate sites.\nWhen to use: When you need interstitial formation energies.\nPrerequisites / Inputs: Host lattice structure and interstitial atoms.\nOutputs: Formation energies for candidate sites.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", - "description_cn": "功能: Insert interstitial 原子 in到 a host lattice 到 compute 用于mation energies across c和idate sites.\n何时使用: 当您需要 interstitial 用于mation energies.\n前提条件/输入: Host lattice structure 和 interstitial 原子.\n输出: 用于mation energies 用于 c和idate sites.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "description": { + "What it does": "Insert interstitial atoms into a host lattice to compute formation energies across candidate sites (generated internally).", + "When to use": "When you need interstitial formation energies starting from a defect-free bulk crystal.", + "Input": "Pristine (defect-free) host lattice structure and interstitial atoms. The host structure must be a complete bulk lattice (no vacancies/antisites/substitutions, no missing atoms, no partial occupancies/disordered sites). Do NOT provide a structure that already contains defects or extra atoms; the tool assumes a pristine lattice and will place interstitials itself—defected inputs may cause errors or invalid energies. The host structure must be a complete bulk lattice (no vacancies/antisites/substitutions, no missing atoms, no partial occupancies/disordered sites). Do NOT provide a structure that already contains defects or extra atoms; the tool assumes a pristine lattice and will place interstitials itself—defected inputs may cause errors or invalid energies.", + "Output": "Interstitial formation energies for candidate sites.", + "Notes": "DFT-based. Not intended for pre-defected host structures.", + "Costs": "DFT calculation cost." + }, + "description_cn": { + "工具简介": "将间隙原子插入宿主晶格,计算候选位点(内部生成)的形成能。", + "使用场景": "当需要从无缺陷的体相晶体开始计算间隙形成能时使用。", + "输入": "结构文件:完整(无缺陷)的宿主晶格结构和间隙原子。 宿主结构必须是完整的体相晶格(无空位/反位/替代、无缺失原子、无部分占位/无序位点)。", + "输出": "候选位点的间隙形成能。", + "注意事项": "基于 DFT。不要提供已包含缺陷或额外原子的结构;该工具假设完整的晶格并会自行放置间隙原子——提供已有缺陷的结构可能导致错误或无效的能量。", + "成本": "涉及 DFT 计算成本。" + }, "belonging_agent": "apex_agent", "scenes": [ "APEX", @@ -237,15 +498,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://rtvq1394775.bohrium.tech:50001/mcp", + "uat": "http://rtvq1394775.bohrium.tech:50001/mcp", + "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac" + } }, { "tool_id": "002-APEXCALC-003", "name": "apex_calculate_elastic", - "description": "What it does: Apply small strains to the lattice to extract elastic constants and derived moduli.\nWhen to use: When you need elastic constants and moduli.\nPrerequisites / Inputs: Structure file.\nOutputs: Elastic constants and derived moduli.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", - "description_cn": "功能: Apply small strains 到 the lattice 到 extract 弹性常数 和 derived moduli.\n何时使用: 当您需要 弹性常数 和 moduli.\n前提条件/输入: 结构文件.\n输出: 弹性常数 和 derived moduli.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "description": { + "What it does": "Apply small strains to the lattice to extract elastic constants and derived moduli.", + "When to use": "When you need elastic constants and moduli.", + "Input": "Structure file.", + "Output": "Elastic constants and derived moduli.", + "Notes": "DFT-based.", + "Costs": "DFT calculation cost." + }, + "description_cn": { + "工具简介": "对晶格施加小应变以提取弹性常数和衍生模量。", + "使用场景": "当需要弹性常数和模量时使用。", + "输入": "结构文件。", + "输出": "弹性常数和衍生模量。", + "注意事项": "基于 DFT。", + "成本": "涉及 DFT 计算成本。" + }, "belonging_agent": "apex_agent", "scenes": [ "APEX", @@ -256,15 +536,34 @@ "calculate_elastic_constants" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://rtvq1394775.bohrium.tech:50001/mcp", + "uat": "http://rtvq1394775.bohrium.tech:50001/mcp", + "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac" + } }, { "tool_id": "002-APEXCALC-004", "name": "apex_calculate_surface", - "description": "What it does: Execute a workflow of surface energy calculation.\nWhen to use: When you need surface energy.\nPrerequisites / Inputs: Structure file.\nOutputs: Surface energy.\nCannot do / Limits: Cannot build slab structures; DFT-based.\nCost / Notes: DFT calculation cost.", - "description_cn": "功能: 执行 a w或kflow surface的 energy calculation.\n何时使用: 当您需要 surface energy.\n前提条件/输入: 结构文件.\n输出: Surface energy.\n无法做到/限制: Cannot build slab structures; 基于 DFT.\n成本/备注: DFT 计算成本.", + "description": { + "What it does": "Execute a workflow of surface energy calculation using a pristine Bulk crystal as input.", + "When to use": "When you need surface energy starting from a Bulk structure.", + "Input": "Bulk structure file.", + "Output": "Surface energy.", + "Notes": "Do NOT provide an already-cut slab/surface structure as input. Slab inputs can cause errors or lead to invalid surface energies.; DFT-based.", + "Costs": "DFT calculation cost.ensure the input is a complete bulk lattice." + }, + "description_cn": { + "工具简介": "使用完整的体相晶体作为输入执行表面能计算工作流。", + "使用场景": "当需要从体相结构开始计算表面能时使用。", + "输入": "体相结构文件。", + "输出": "表面能。", + "注意事项": "不要提供已切割的板/表面结构作为输入。板状输入可能导致错误或无效的表面能。 基于 DFT。", + "成本": "涉及 DFT 计算成本。确保输入是完整的体相晶格。" + }, "belonging_agent": "apex_agent", "scenes": [ "APEX", @@ -272,15 +571,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://rtvq1394775.bohrium.tech:50001/mcp", + "uat": "http://rtvq1394775.bohrium.tech:50001/mcp", + "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac" + } }, { "tool_id": "002-APEXCALC-005", "name": "apex_calculate_eos", - "description": "What it does: Scan volumes around equilibrium, relax internal coordinates, and build an equation-of-state energy–volume curve.\nWhen to use: When you need EOS curve.\nPrerequisites / Inputs: Structure file.\nOutputs: EOS energy-volume curve.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", - "description_cn": "功能: Scan volumes around equilibrium, relax internal co或dinates, 和 build an equation-of-state energy–volume curve.\n何时使用: 当您需要 EOS curve.\n前提条件/输入: 结构文件.\n输出: EOS energy-volume curve.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "description": { + "What it does": "Scan volumes around equilibrium, relax internal coordinates, and build an equation-of-state energy–volume curve.", + "When to use": "When you need EOS curve.", + "Input": "Structure file.", + "Output": "EOS energy-volume curve.", + "Notes": "DFT-based.", + "Costs": "DFT calculation cost." + }, + "description_cn": { + "工具简介": "扫描平衡点附近的体积,弛豫内部坐标,构建状态方程的能量-体积曲线。", + "使用场景": "当需要状态方程曲线时使用。", + "输入": "结构文件。", + "输出": "状态方程能量-体积曲线。", + "注意事项": "基于 DFT。", + "成本": "涉及 DFT 计算成本。" + }, "belonging_agent": "apex_agent", "scenes": [ "APEX", @@ -290,15 +608,34 @@ "abacus_eos" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://rtvq1394775.bohrium.tech:50001/mcp", + "uat": "http://rtvq1394775.bohrium.tech:50001/mcp", + "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac" + } }, { "tool_id": "002-APEXCALC-006", "name": "apex_calculate_phonon", - "description": "What it does: Perform supercell finite-displacement calculations, relax configurations, and assemble phonon spectra.\nWhen to use: When you need phonon spectra.\nPrerequisites / Inputs: Structure file.\nOutputs: Phonon spectra.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", - "description_cn": "功能: 执行 超胞 finite-displacement calculations, relax configurations, 和 assemble phonon spectra.\n何时使用: 当您需要 phonon spectra.\n前提条件/输入: 结构文件.\n输出: Phonon spectra.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "description": { + "What it does": "Perform supercell finite-displacement calculations, relax configurations, and assemble phonon spectra.", + "When to use": "When you need phonon spectra.", + "Input": "Structure file.", + "Output": "Phonon spectra.", + "Notes": "DFT-based.", + "Costs": "DFT calculation cost." + }, + "description_cn": { + "工具简介": "执行超胞有限位移计算,弛豫构型,并组装声子谱。", + "使用场景": "当需要声子谱时使用。", + "输入": "结构文件。", + "输出": "声子谱。", + "注意事项": "基于 DFT。", + "成本": "涉及 DFT 计算成本。" + }, "belonging_agent": "apex_agent", "scenes": [ "APEX", @@ -309,15 +646,34 @@ "calculate_phonon" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://rtvq1394775.bohrium.tech:50001/mcp", + "uat": "http://rtvq1394775.bohrium.tech:50001/mcp", + "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac" + } }, { "tool_id": "002-APEXCALC-007", "name": "apex_calculate_gamma", - "description": "What it does: Construct and relax sliding slabs to map generalized stacking-fault energies along specified slip paths.\nWhen to use: When you need stacking-fault energies.\nPrerequisites / Inputs: Structure file and specified slip paths.\nOutputs: Generalized stacking-fault energies.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", - "description_cn": "功能: Construct 和 relax sliding slabs 到 map generalized stacking-fault energies along specified slip paths.\n何时使用: 当您需要 stacking-fault energies.\n前提条件/输入: 结构文件 和 specified slip paths.\n输出: Generalized stacking-fault energies.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "description": { + "What it does": "Construct and relax sliding slabs to map generalized stacking-fault energies along specified slip paths.", + "When to use": "When you need stacking-fault energies.", + "Input": "Structure file and specified slip paths.", + "Output": "Generalized stacking-fault energies.", + "Notes": "DFT-based.", + "Costs": "DFT calculation cost." + }, + "description_cn": { + "工具简介": "构建并弛豫滑动板,沿指定滑移路径映射广义堆垛层错能。", + "使用场景": "当需要堆垛层错能时使用。", + "输入": "结构文件和指定的滑移路径。", + "输出": "广义堆垛层错能。", + "注意事项": "基于 DFT。", + "成本": "涉及 DFT 计算成本。" + }, "belonging_agent": "apex_agent", "scenes": [ "APEX", @@ -325,45 +681,102 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null - }, - { - "tool_id": "005-RUNGA-001", - "name": "run_ga", - "description": "What it does: Perform composition optimization targeting specific properties using genetic algorithm.\nWhen to use: When you need to optimize compositions for properties.\nPrerequisites / Inputs: Proxy model file prepared.\nOutputs: Optimized compositions.\nCannot do / Limits: Cannot build doping structures; requires proxy model.\nCost / Notes: Medium.", - "description_cn": "功能: 执行 composition 优化 targeting specific properties using genetic alg或ithm.\n何时使用: 当您需要 到 optimize compositions 用于 properties.\n前提条件/输入: Proxy model file prepared.\n输出: 优化d compositions.\n无法做到/限制: Cannot build doping structures; 需要 proxy model.\n成本/备注: 中.", + "args_setting": null, + "server": { + "test": "http://rtvq1394775.bohrium.tech:50001/mcp", + "uat": "http://rtvq1394775.bohrium.tech:50001/mcp", + "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac" + } + }, + { + "tool_id": "005-RUNDARTG-001", + "name": "run_dart_ga", + "description": { + "What it does": "Perform compositional optimization for multi-component materials to target specific properties using genetic algorithm.", + "When to use": "Search optimized compositions for target properties.", + "Input": "Target properties, optional initial compositions or structure templates, constrains, and surrogate model.", + "Output": "Optimized compositions.", + "Notes": "Cannot build doping structures; requires surrogate model.", + "Costs": "High due to long iterations." + }, + "description_cn": { + "工具简介": "利用遗传算法对多组分材料进行成分优化,以匹配特定的目标性能。", + "使用场景": "搜索针对目标性质的优化成分。 组分优化", + "输入": "目标性质、可选的初始成分或结构模板、约束条件和代理模型。", + "输出": "优化后的成分。", + "注意事项": "无法构建掺杂结构;需要代理模型。", + "成本": "由于迭代时间长,成本高。" + }, "belonging_agent": "compdart_agent", "scenes": [ "COMPOSITION_OPTIMIZATION" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://pfmx1355864.bohrium.tech:50002/sse", + "uat": "http://pfmx1355864.bohrium.tech:50002/sse", + "prod": "https://dart-uuid1754393230.app-space.dplink.cc/sse?token=0480762b8539410c919723276c2c05fc" + } }, { "tool_id": "007-BUILDCON-001", "name": "build_convex_hull", - "description": "What it does: Build convex hull diagrams.\nWhen to use: Assess thermodynamic stability.\nPrerequisites / Inputs: Material structures.\nOutputs: Convex hull, stable phases.\nCannot do / Limits: General materials only.\nCost / Notes: High (DPA calculations).", - "description_cn": "功能: 构建 convex hull diagrams.\n何时使用: Assess thermodynamic stability.\n前提条件/输入: Material structures.\n输出: Convex hull, stable phases.\n无法做到/限制: General materials 仅.\n成本/备注: 高 (DPA calculations).", + "description": { + "What it does": "Build convex hull diagrams.", + "When to use": "Assess thermodynamic stability.", + "Input": "Material structures.", + "Output": "Convex hull, stable phases.", + "Notes": "General materials only.", + "Costs": "High (DPA calculations)." + }, + "description_cn": { + "工具简介": "构建凸包图。", + "使用场景": "评估材料的热力学稳定性。 凸包", + "输入": "材料结构。", + "输出": "凸包、稳定相。", + "注意事项": "仅适用于通用材料。", + "成本": "高(涉及 DPA 计算)。" + }, "belonging_agent": "convexhull_agent", "scenes": [ "CONVEXHULL" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@mllo1368252.bohrium.tech:50004/sse", + "uat": "http://root@mllo1368252.bohrium.tech:50004/sse", + "prod": "https://convexhull-uuid1764213120.appspace.bohrium.com/sse?token=1ea4a0b8cd1e497585680680eccdae8b" + } }, { "tool_id": "008-FETCHSTR-001", "name": "fetch_structures_with_filter", - "description": "What it does: Send OPTIMADE filter string to providers for structure search.\nWhen to use: For flexible composition/formula queries without space group or band gap constraints.\nPrerequisites / Inputs: OPTIMADE filter string.\nOutputs: Matching structures.\nCannot do / Limits: Full OPTIMADE filter language; parallel queries.\nCost / Notes: Medium.", - "description_cn": "功能: Send OPTIMADE filter string 到 providers 用于 structure search.\n何时使用: 用于 flexible composition/用于mula queries 使用out space group 或 带隙 constraints.\n前提条件/输入: OPTIMADE filter string.\n输出: Matching structures.\n无法做到/限制: Full OPTIMADE filter language; parallel queries.\n成本/备注: 中.", + "description": { + "What it does": "Send OPTIMADE filter string to providers for structure search.", + "When to use": "For flexible composition/formula queries without space group or band gap constraints.", + "Input": "OPTIMADE filter string.", + "Output": "Matching structures.", + "Notes": "Full OPTIMADE filter language; parallel queries.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "向OPTIMADE提供者发送过滤字符串进行结构搜索。", + "使用场景": "用于灵活的组成/化学式查询,无需空间群或带隙约束。 数据库搜索", + "输入": "OPTIMADE过滤字符串。", + "输出": "匹配的结构。", + "注意事项": "完整的OPTIMADE过滤语言;并行查询。", + "成本": "中等。" + }, "belonging_agent": "optimade_agent", "scenes": [ "DATABASE_SEARCH" @@ -374,15 +787,34 @@ "web-search" ], "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", - "summary_prompt_cn": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", + "summary_cn": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", "self_check": true, - "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_filter MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_filter MCP tool:\n\nfetch_structures_with_filter(\n filter: str,\n as_format: 'cif'|'json' = 'cif',\n n_results: int = 2,\n providers: list[str] = [...]\n )\n - Sends ONE raw OPTIMADE filter string to all chosen providers at once.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `filter` from the user's query.\n- `filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Raw filter: alexandria, cmr, cod, mcloud, mcloudarchive, mp, mpdd, mpds, nmd, odbx, omdb, oqmd, tcod, twodmatpedia\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Retrieve SrTiO3 crystal structures\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"SrTiO3\"\n\n2) User: Find 3 structures of ZrO from mpds, cmr, alexandria, omdb, odbx\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"ZrO\"\n as_format: \"cif\"\n providers: [\"mpds\", \"cmr\", \"alexandria\", \"omdb\", \"odbx\"]\n n_results: 3\n\n3) User: Find A2B3C4 materials, exclude Fe/F/Cl/H, must contain Al or Mg or Na, want full metadata\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_anonymous=\"A2B3C4\" AND NOT (elements HAS ANY \"Fe\",\"F\",\"Cl\",\"H\") AND (elements HAS ANY \"Al\",\"Mg\",\"Na\")\n as_format: \"json\"\n\n4) User: Find two-dimensional MoS2\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"MoS2\" AND nperiodic_dimensions=2\n as_format: \"cif\"\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n" + "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_filter MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_filter MCP tool:\n\nfetch_structures_with_filter(\n filter: str,\n as_format: 'cif'|'json' = 'cif',\n n_results: int = 2,\n providers: list[str] = [...]\n )\n - Sends ONE raw OPTIMADE filter string to all chosen providers at once.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `filter` from the user's query.\n- `filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Raw filter: alexandria, cmr, cod, mcloud, mcloudarchive, mp, mpdd, mpds, nmd, odbx, omdb, oqmd, tcod, twodmatpedia\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Retrieve SrTiO3 crystal structures\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"SrTiO3\"\n\n2) User: Find 3 structures of ZrO from mpds, cmr, alexandria, omdb, odbx\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"ZrO\"\n as_format: \"cif\"\n providers: [\"mpds\", \"cmr\", \"alexandria\", \"omdb\", \"odbx\"]\n n_results: 3\n\n3) User: Find A2B3C4 materials, exclude Fe/F/Cl/H, must contain Al or Mg or Na, want full metadata\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_anonymous=\"A2B3C4\" AND NOT (elements HAS ANY \"Fe\",\"F\",\"Cl\",\"H\") AND (elements HAS ANY \"Al\",\"Mg\",\"Na\")\n as_format: \"json\"\n\n4) User: Find two-dimensional MoS2\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"MoS2\" AND nperiodic_dimensions=2\n as_format: \"cif\"\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n", + "server": { + "test": "http://cmaz1395916.bohrium.tech:50004/sse", + "uat": "http://cmaz1395916.bohrium.tech:50004/sse", + "prod": "http://bowd1412840.bohrium.tech:50004/sse" + } }, { "tool_id": "008-FETCHSTR-002", "name": "fetch_structures_with_spg", - "description": "What it does: Search structures by space group number with optional filters.\nWhen to use: When user specifies space group number or prototype structure.\nPrerequisites / Inputs: Space group number and OPTIMADE filter string.\nOutputs: Structures with matching space group.\nCannot do / Limits: Provider-specific space-group filters.\nCost / Notes: Medium.", - "description_cn": "功能: 搜索 structures 通过 space group number 使用 可选 filters.\n何时使用: When user specifies space group number 或 pro到type structure.\n前提条件/输入: Space group number 和 OPTIMADE filter string.\n输出: Structures 使用 matching space group.\n无法做到/限制: Provider-specific space-group filters.\n成本/备注: 中.", + "description": { + "What it does": "Search structures by space group number with optional filters.", + "When to use": "When user specifies space group number or prototype structure.", + "Input": "Space group number and OPTIMADE filter string.", + "Output": "Structures with matching space group.", + "Notes": "Provider-specific space-group filters.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "通过空间群编号搜索结构,可附加可选过滤器。", + "使用场景": "当用户指定空间群编号或原型结构时。 数据库搜索", + "输入": "空间群编号和OPTIMADE过滤字符串。", + "输出": "匹配空间群的结构。", + "注意事项": "提供者特定的空间群过滤器。", + "成本": "中等。" + }, "belonging_agent": "optimade_agent", "scenes": [ "DATABASE_SEARCH" @@ -393,15 +825,34 @@ "web-search" ], "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", - "summary_prompt_cn": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", + "summary_cn": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", "self_check": true, - "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_spg MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_spg MCP tool:\n\nfetch_structures_with_spg(\n base_filter: str,\n spg_number: int,\n as_format: 'cif'|'json' = 'cif',\n n_results: int = 3,\n providers: list[str] = [...]\n )\n - Adds provider-specific *space-group* clauses (e.g., _tcod_sg, _oqmd_spacegroup, _alexandria_space_group) and queries providers in parallel.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `base_filter` from the user's query.\n- `base_filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Only when the user's requirement is purely \"filter by space group\" (no composition / element / other constraints at all) may `base_filter` be left empty.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Space group (SPG): alexandria, cod, mpdd, nmd, odbx, oqmd, tcod\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Find one gamma-phase TiAl alloy\n → Tool: fetch_structures_with_spg\n base_filter: elements HAS ALL \"Ti\",\"Al\" AND nelements = 2\n spg_number: 123\n as_format: \"cif\"\n n_results: 1\n\n2) User: Find periclase (MgO rock salt)\n → Tool: fetch_structures_with_spg\n base_filter: chemical_formula_reduced=\"MgO\"\n spg_number: 225\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n" + "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_spg MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_spg MCP tool:\n\nfetch_structures_with_spg(\n base_filter: str,\n spg_number: int,\n as_format: 'cif'|'json' = 'cif',\n n_results: int = 3,\n providers: list[str] = [...]\n )\n - Adds provider-specific *space-group* clauses (e.g., _tcod_sg, _oqmd_spacegroup, _alexandria_space_group) and queries providers in parallel.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `base_filter` from the user's query.\n- `base_filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Only when the user's requirement is purely \"filter by space group\" (no composition / element / other constraints at all) may `base_filter` be left empty.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Space group (SPG): alexandria, cod, mpdd, nmd, odbx, oqmd, tcod\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Find one gamma-phase TiAl alloy\n → Tool: fetch_structures_with_spg\n base_filter: elements HAS ALL \"Ti\",\"Al\" AND nelements = 2\n spg_number: 123\n as_format: \"cif\"\n n_results: 1\n\n2) User: Find periclase (MgO rock salt)\n → Tool: fetch_structures_with_spg\n base_filter: chemical_formula_reduced=\"MgO\"\n spg_number: 225\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n", + "server": { + "test": "http://cmaz1395916.bohrium.tech:50004/sse", + "uat": "http://cmaz1395916.bohrium.tech:50004/sse", + "prod": "http://bowd1412840.bohrium.tech:50004/sse" + } }, { "tool_id": "008-FETCHSTR-003", "name": "fetch_structures_with_bandgap", - "description": "What it does: Search structures by band-gap range with optional filters.\nWhen to use: When user specifies band-gap range.\nPrerequisites / Inputs: Band-gap range and OPTIMADE filter string.\nOutputs: Structures with band gap in range.\nCannot do / Limits: Provider-specific band-gap filters.\nCost / Notes: Medium.", - "description_cn": "功能: 搜索 structures 通过 b和-gap range 使用 可选 filters.\n何时使用: When user specifies b和-gap range.\n前提条件/输入: B和-gap range 和 OPTIMADE filter string.\n输出: Structures 使用 带隙 in range.\n无法做到/限制: Provider-specific b和-gap filters.\n成本/备注: 中.", + "description": { + "What it does": "Search structures by band-gap range with optional filters.", + "When to use": "When user specifies band-gap range.", + "Input": "Band-gap range and OPTIMADE filter string.", + "Output": "Structures with band gap in range.", + "Notes": "Provider-specific band-gap filters.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "通过带隙范围搜索结构,可附加可选过滤器。", + "使用场景": "当用户指定带隙范围时。 数据库搜索", + "输入": "带隙范围和OPTIMADE过滤字符串。", + "输出": "带隙在范围内的结构。", + "注意事项": "提供者特定的带隙过滤器。", + "成本": "中等。" + }, "belonging_agent": "optimade_agent", "scenes": [ "DATABASE_SEARCH" @@ -412,15 +863,34 @@ "web-search" ], "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", - "summary_prompt_cn": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", + "summary_cn": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", "self_check": true, - "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_bandgap MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_bandgap MCP tool:\n\nfetch_structures_with_bandgap(\n base_filter: str,\n min_bg: float | None = None,\n max_bg: float | None = None,\n as_format: 'cif'|'json' = 'json',\n n_results: int = 2,\n providers: list[str] = [...]\n )\n - Adds provider-specific *band-gap* clauses (e.g., _oqmd_band_gap, _gnome_bandgap, _mcloudarchive_band_gap) and queries providers in parallel.\n - For band-gap related tasks, default output format is 'json' to include complete metadata.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `base_filter` from the user's query.\n- `base_filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Only when the user's requirement is purely \"filter by band-gap range\" (no composition / element / other constraints at all) may `base_filter` be left empty.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Band gap (BG): alexandria, odbx, oqmd, mcloudarchive, twodmatpedia\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Retrieve 4 Al-containing materials with band gap 1.0–2.0 eV\n → Tool: fetch_structures_with_bandgap\n base_filter: elements HAS \"Al\"\n min_bg: 1.0\n max_bg: 2.0\n as_format: \"json\"\n n_results: 4\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n" + "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_bandgap MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_bandgap MCP tool:\n\nfetch_structures_with_bandgap(\n base_filter: str,\n min_bg: float | None = None,\n max_bg: float | None = None,\n as_format: 'cif'|'json' = 'json',\n n_results: int = 2,\n providers: list[str] = [...]\n )\n - Adds provider-specific *band-gap* clauses (e.g., _oqmd_band_gap, _gnome_bandgap, _mcloudarchive_band_gap) and queries providers in parallel.\n - For band-gap related tasks, default output format is 'json' to include complete metadata.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `base_filter` from the user's query.\n- `base_filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Only when the user's requirement is purely \"filter by band-gap range\" (no composition / element / other constraints at all) may `base_filter` be left empty.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Band gap (BG): alexandria, odbx, oqmd, mcloudarchive, twodmatpedia\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Retrieve 4 Al-containing materials with band gap 1.0–2.0 eV\n → Tool: fetch_structures_with_bandgap\n base_filter: elements HAS \"Al\"\n min_bg: 1.0\n max_bg: 2.0\n as_format: \"json\"\n n_results: 4\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n", + "server": { + "test": "http://cmaz1395916.bohrium.tech:50004/sse", + "uat": "http://cmaz1395916.bohrium.tech:50004/sse", + "prod": "http://bowd1412840.bohrium.tech:50004/sse" + } }, { "tool_id": "008-FETCHBOH-004", "name": "fetch_bohrium_crystals", - "description": "What it does: Retrieve crystal structures from Bohrium Public database.\nWhen to use: For formula, elements, space group, atom count, formation energy, band gap queries.\nPrerequisites / Inputs: Filters like formula, elements, etc.\nOutputs: Structures in CIF or JSON.\nCannot do / Limits: No logical expressions; faster than OPTIMADE.\nCost / Notes: Low.", - "description_cn": "功能: 检索 crystal structures 从 Bohrium Public database.\n何时使用: 用于 用于mula, elements, space group, 原子 count, 形成能, 带隙 queries.\n前提条件/输入: Filters 如 用于mula, elements, etc.\n输出: Structures in CIF 或 JSON.\n无法做到/限制: No logical expressions; faster than OPTIMADE.\n成本/备注: 低.", + "description": { + "What it does": "Retrieve crystal structures from Bohrium Public database.", + "When to use": "For formula, elements, space group, atom count, formation energy, band gap queries.", + "Input": "Filters like formula, elements, etc.", + "Output": "Structures in CIF or JSON.", + "Notes": "No logical expressions; faster than OPTIMADE.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从Bohrium Public数据库检索晶体结构。", + "使用场景": "用于化学式、元素、空间群、原子数、形成能、带隙查询。 数据库搜索", + "输入": "化学式、元素等过滤器。", + "输出": "CIF或JSON格式的结构。", + "注意事项": "不支持逻辑表达式;比OPTIMADE更快。", + "成本": "低。" + }, "belonging_agent": "bohriumpublic_agent", "scenes": [ "DATABASE_SEARCH" @@ -431,15 +901,34 @@ "fetch_openlam_structures" ], "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**)\n (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**)\n (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**)\n (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"BohriumPublic\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", - "summary_prompt_cn": "\n## 响应格式\n响应必须始终包括:\n1. ✅ 简要说明应用的筛选条件\n2. 📊 检索到的结构的 Markdown 表格\n - 列(固定顺序):\n (1) 化学式 (`formula`)\n (2) 元素(从 `formula` 推导)\n (3) 原子数(如果 `crystal_ext.number_of_atoms` 可用;否则 **未提供**)\n (4) 空间群(如果 `crystal_ext.symbol` 可用且可以映射到编号;否则 **未提供**)\n (5) 能量/形成能(如果 `crystal_ext.predicted_formation_energy` 可用;否则 **未提供**)\n (6) 带隙(如果 `crystal_ext.band_gap` 可用;否则 **未提供**)\n (7) 下载链接(CIF/JSON,基于 `output_formats`)\n (8) 来源数据库 → 始终为 `\"BohriumPublic\"`\n (9) ID (`id`)\n - 缺失值必须填写为 **未提供**\n - 行数**必须完全等于** `n_found`\n3. 📦 工具返回的 `output_dir` 路径(用于下载/归档)\n\n如果 `n_found = 0`,请明确说明未找到匹配项,重复应用的筛选条件,并建议放宽条件。**不要**生成空表格。\n", + "summary_cn": "\n## RESPONSE FORMAT\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**)\n (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**)\n (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**)\n (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"BohriumPublic\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", "self_check": true, - "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"CoH12(BrO3)2\"`)\n- **Elements**: list of required elements (e.g., `[\"Co\",\"O\"]`)\n- **Match mode** (applies to both `formula` and `elements`):\n - `0` = contains (e.g., formula `\"Co\"` matches `\"CoO\"`, `\"CoH12(BrO3)2\"`; elements `[\"Co\"]` matches materials containing Co + anything else)\n - `1` = exact-only match (formula must match exactly; elements list must match **exactly and only** those elements)\n- **Space group**: use the space group number (e.g., `14` for P2₁/c)\n- **Atom count range**: filter by number of atoms in the unit cell, e.g. `[\"10\",\"100\"]`\n- **Predicted formation energy**: range filter in eV, e.g. `[\"-2\",\"0\"]`\n- **Band gap**: eV range [lo, hi] (omitted bound defaults to 0/100), e.g. [\"0\",\"3\"], [\"1\",\"100\"]\n- **Result limit**: maximum number of results (`n_results`)\n- **Output formats**:\n - `\"cif\"` → crystallographic structure files\n - `\"json\"` → complete metadata\n\n## HOW TO CHOOSE PARAMETERS\n- If user specifies a **formula** → set `formula` and choose `match_mode`:\n - `0` if the user means \"contains fragment\"\n - `1` if the user means \"exact formula\"\n- If user specifies **elements** → set `elements` and choose `match_mode`:\n - `0` if the user means \"must include these elements\"\n - `1` if the user means \"must have exactly these elements and nothing else\"\n- If user specifies a **space group number** → set `spacegroup_number`\n- If user specifies an **atom count range** → set `atom_count_range`\n- If user specifies **formation energy or band gap ranges** → set the corresponding ranges\n- If the user requests **metadata only** → use `output_formats=['json']`\n- If the user requests **downloadable crystal files** → use `output_formats=['cif']`\n\n## PARAMETER EXAMPLES\n1) 用户:检索 SrTiO₃ 的晶体结构,并以JSON格式返回\n → Tool: fetch_bohrium_crystals\n formula: \"SrTiO3\"\n match_mode: 1\n output_formats: [\"json\"]\n\n2) 用户:在Materials Project中检索并返回3个带隙大于2 eV的氧化物结构\n → Tool: fetch_bohrium_crystals\n elements: [\"O\"]\n match_mode: 0\n band_gap_range: [\"2\",\"100\"]\n n_results: 3\n\n3) 用户:找出空间群编号 14,原子数 50–100 的晶体\n → Tool: fetch_bohrium_crystals\n spacegroup_number: 14\n atom_count_range: [\"50\",\"100\"]\n\n4) 用户:检索 FeNi 合金的结构\n → Tool: fetch_bohrium_crystals\n elements: [\"Fe\",\"Ni\"] # 合金只含有Fe和Ni元素,不能含有其他元素\n match_mode: 1 # 合金需要精确匹配\n\n5) 用户:找所有化学式中包含 SiO3 的材料\n → Tool: fetch_bohrium_crystals\n formula: \"SiO3\"\n match_mode: 0\n" + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"CoH12(BrO3)2\"`)\n- **Elements**: list of required elements (e.g., `[\"Co\",\"O\"]`)\n- **Match mode** (applies to both `formula` and `elements`):\n - `0` = contains (e.g., formula `\"Co\"` matches `\"CoO\"`, `\"CoH12(BrO3)2\"`; elements `[\"Co\"]` matches materials containing Co + anything else)\n - `1` = exact-only match (formula must match exactly; elements list must match **exactly and only** those elements)\n- **Space group**: use the space group number (e.g., `14` for P2₁/c)\n- **Atom count range**: filter by number of atoms in the unit cell, e.g. `[\"10\",\"100\"]`\n- **Predicted formation energy**: range filter in eV, e.g. `[\"-2\",\"0\"]`\n- **Band gap**: eV range [lo, hi] (omitted bound defaults to 0/100), e.g. [\"0\",\"3\"], [\"1\",\"100\"]\n- **Result limit**: maximum number of results (`n_results`)\n- **Output formats**:\n - `\"cif\"` → crystallographic structure files\n - `\"json\"` → complete metadata\n\n## HOW TO CHOOSE PARAMETERS\n- If user specifies a **formula** → set `formula` and choose `match_mode`:\n - `0` if the user means \"contains fragment\"\n - `1` if the user means \"exact formula\"\n- If user specifies **elements** → set `elements` and choose `match_mode`:\n - `0` if the user means \"must include these elements\"\n - `1` if the user means \"must have exactly these elements and nothing else\"\n- If user specifies a **space group number** → set `spacegroup_number`\n- If user specifies an **atom count range** → set `atom_count_range`\n- If user specifies **formation energy or band gap ranges** → set the corresponding ranges\n- If the user requests **metadata only** → use `output_formats=['json']`\n- If the user requests **downloadable crystal files** → use `output_formats=['cif']`\n\n## PARAMETER EXAMPLES\n1) 用户:检索 SrTiO₃ 的晶体结构,并以JSON格式返回\n → Tool: fetch_bohrium_crystals\n formula: \"SrTiO3\"\n match_mode: 1\n output_formats: [\"json\"]\n\n2) 用户:在Materials Project中检索并返回3个带隙大于2 eV的氧化物结构\n → Tool: fetch_bohrium_crystals\n elements: [\"O\"]\n match_mode: 0\n band_gap_range: [\"2\",\"100\"]\n n_results: 3\n\n3) 用户:找出空间群编号 14,原子数 50–100 的晶体\n → Tool: fetch_bohrium_crystals\n spacegroup_number: 14\n atom_count_range: [\"50\",\"100\"]\n\n4) 用户:检索 FeNi 合金的结构\n → Tool: fetch_bohrium_crystals\n elements: [\"Fe\",\"Ni\"] # 合金只含有Fe和Ni元素,不能含有其他元素\n match_mode: 1 # 合金需要精确匹配\n\n5) 用户:找所有化学式中包含 SiO3 的材料\n → Tool: fetch_bohrium_crystals\n formula: \"SiO3\"\n match_mode: 0\n", + "server": { + "test": "http://cmaz1395916.bohrium.tech:50001/sse", + "uat": "http://cmaz1395916.bohrium.tech:50001/sse", + "prod": "http://bowd1412840.bohrium.tech:50001/sse" + } }, { "tool_id": "008-FETCHOPE-005", "name": "fetch_openlam_structures", - "description": "What it does: Retrieve crystal structures from OpenLAM database.\nWhen to use: When querying OpenLAM-specific materials or time-based filters.\nPrerequisites / Inputs: Formula, energy range, submission time filters.\nOutputs: Structures in CIF or JSON.\nCannot do / Limits: No space group, band gap, elements list, or logical filters.\nCost / Notes: Medium.", - "description_cn": "功能: 检索 crystal structures 从 OpenLAM database.\n何时使用: When querying OpenLAM-specific materials 或 time-based filters.\n前提条件/输入: 用于mula, energy range, submission time filters.\n输出: Structures in CIF 或 JSON.\n无法做到/限制: No space group, 带隙, elements list, 或 logical filters.\n成本/备注: 中.", + "description": { + "What it does": "Retrieve crystal structures from OpenLAM database.", + "When to use": "When querying OpenLAM-specific materials or time-based filters.", + "Input": "Formula, energy range, submission time filters.", + "Output": "Structures in CIF or JSON.", + "Notes": "No space group, band gap, elements list, or logical filters.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "从OpenLAM数据库检索晶体结构。", + "使用场景": "当查询OpenLAM特定材料或基于时间的过滤器时。 数据库搜索", + "输入": "化学式、能量范围、提交时间过滤器。", + "输出": "CIF或JSON格式的结构。", + "注意事项": "不支持空间群、带隙、元素列表或逻辑过滤器。", + "成本": "中等。" + }, "belonging_agent": "openlam_agent", "scenes": [ "DATABASE_SEARCH" @@ -450,15 +939,34 @@ "fetch_openlam_structures" ], "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count → **Not Provided** (OpenLAM does not provide this field)\n (4) Space group → **Not Provided** (OpenLAM does not provide this field)\n (5) Energy / Formation energy (`energy` if available; else **Not Provided**)\n (6) Band gap → **Not Provided** (OpenLAM does not provide this field)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"OpenLAM\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", - "summary_prompt_cn": "\n## 响应格式\n响应必须始终包括:\n1. ✅ 简要说明应用的筛选条件\n2. 📊 检索到的结构的 Markdown 表格\n - 列(固定顺序):\n (1) 化学式 (`formula`)\n (2) 元素(从 `formula` 推导)\n (3) 原子数 → **未提供**(OpenLAM 不提供此字段)\n (4) 空间群 → **未提供**(OpenLAM 不提供此字段)\n (5) 能量/形成能(如果 `energy` 可用;否则 **未提供**)\n (6) 带隙 → **未提供**(OpenLAM 不提供此字段)\n (7) 下载链接(CIF/JSON,基于 `output_formats`)\n (8) 来源数据库 → 始终为 `\"OpenLAM\"`\n (9) ID (`id`)\n - 缺失值必须填写为 **未提供**\n - 行数**必须完全等于** `n_found`\n3. 📦 工具返回的 `output_dir` 路径(用于下载/归档)\n\n如果 `n_found = 0`,请明确说明未找到匹配项,重复应用的筛选条件,并建议放宽条件。**不要**生成空表格。\n", + "summary_cn": "\n## RESPONSE FORMAT\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count → **Not Provided** (OpenLAM does not provide this field)\n (4) Space group → **Not Provided** (OpenLAM does not provide this field)\n (5) Energy / Formation energy (`energy` if available; else **Not Provided**)\n (6) Band gap → **Not Provided** (OpenLAM does not provide this field)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"OpenLAM\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", "self_check": true, - "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"Fe2O3\"`)\n- **Energy**: filter results with `min_energy` and/or `max_energy` in eV\n- **Submission time**: ISO UTC date-time filters (`min_submission_time`, `max_submission_time`)\n- **Result limit**: maximum number of structures to return (`n_results`)\n- **Output formats**:\n - `\"cif\"` → for visualization-ready crystal structures\n - `\"json\"` → for complete metadata\n\n## HOW TO CHOOSE PARAMETERS\n- If the user specifies a **formula** → set `formula`\n- If the user specifies an **energy range** → set `min_energy` / `max_energy`\n- If the user specifies a **time filter** → set `min_submission_time` / `max_submission_time`\n- If the user requests **downloadable structure files** → use `output_formats=['cif']`\n- If the user requests **all metadata** → use `output_formats=['json']`\n\n## PARAMETER EXAMPLES\n1) 用户:查找 Fe2O3 的 5 个晶体结构,导出为 CIF\n → Tool: fetch_openlam_structures\n formula: \"Fe2O3\"\n n_results: 5\n output_formats: [\"cif\"]\n\n2) 用户:查找能量在 -10 到 20 eV 之间,2024 年后上传的材料\n → Tool: fetch_openlam_structures\n min_energy: -10.0\n max_energy: 20.0\n min_submission_time: \"2024-01-01T00:00:00Z\"\n\n3) 用户:我要最新上传的 3 个材料,包含所有元数据\n → Tool: fetch_openlam_structures\n n_results: 3\n output_formats: [\"json\"]\n" + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"Fe2O3\"`)\n- **Energy**: filter results with `min_energy` and/or `max_energy` in eV\n- **Submission time**: ISO UTC date-time filters (`min_submission_time`, `max_submission_time`)\n- **Result limit**: maximum number of structures to return (`n_results`)\n- **Output formats**:\n - `\"cif\"` → for visualization-ready crystal structures\n - `\"json\"` → for complete metadata\n\n## HOW TO CHOOSE PARAMETERS\n- If the user specifies a **formula** → set `formula`\n- If the user specifies an **energy range** → set `min_energy` / `max_energy`\n- If the user specifies a **time filter** → set `min_submission_time` / `max_submission_time`\n- If the user requests **downloadable structure files** → use `output_formats=['cif']`\n- If the user requests **all metadata** → use `output_formats=['json']`\n\n## PARAMETER EXAMPLES\n1) 用户:查找 Fe2O3 的 5 个晶体结构,导出为 CIF\n → Tool: fetch_openlam_structures\n formula: \"Fe2O3\"\n n_results: 5\n output_formats: [\"cif\"]\n\n2) 用户:查找能量在 -10 到 20 eV 之间,2024 年后上传的材料\n → Tool: fetch_openlam_structures\n min_energy: -10.0\n max_energy: 20.0\n min_submission_time: \"2024-01-01T00:00:00Z\"\n\n3) 用户:我要最新上传的 3 个材料,包含所有元数据\n → Tool: fetch_openlam_structures\n n_results: 3\n output_formats: [\"json\"]\n", + "server": { + "test": "http://cmaz1395916.bohrium.tech:50003/sse", + "uat": "http://cmaz1395916.bohrium.tech:50003/sse", + "prod": "http://bowd1412840.bohrium.tech:50003/sse" + } }, { "tool_id": "008-FETCHMOF-006", "name": "fetch_mofs_sql", - "description": "What it does: Execute SQL queries against the MOF database.\nWhen to use: For complex MOF queries with multi-table joins and statistical analysis.\nPrerequisites / Inputs: SQL query string.\nOutputs: Query results.\nCannot do / Limits: MOF-specific; supports advanced SQL.\nCost / Notes: Medium.", - "description_cn": "功能: 执行 SQL queries against the MOF database.\n何时使用: 用于 complex MOF queries 使用 multi-table joins 和 statistical analysis.\n前提条件/输入: SQL query string.\n输出: 查询 results.\n无法做到/限制: MOF-specific; 支持 advanced SQL.\n成本/备注: 中.", + "description": { + "What it does": "Execute SQL queries against the MOF database.", + "When to use": "For complex MOF queries with multi-table joins and statistical analysis.", + "Input": "SQL query string.", + "Output": "Query results.", + "Notes": "MOF-specific; supports advanced SQL.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "对MOF数据库执行SQL查询。", + "使用场景": "用于复杂的MOF查询,包括多表连接和统计分析。 数据库搜索", + "输入": "SQL查询字符串。", + "输出": "查询结果。", + "注意事项": "特定于MOF;支持高级SQL。", + "成本": "中等。" + }, "belonging_agent": "mofdb_agent", "scenes": [ "DATABASE_SEARCH" @@ -467,30 +975,68 @@ "web-search" ], "summary_prompt": "\n## RESPONSE FORMAT\n1. Brief explanation of the SQL query used\n2. Markdown table of retrieved MOFs with relevant columns\n3. Output directory path for download/archive\n4. Key findings from results (if applicable)\n", - "summary_prompt_cn": "## 响应格式\n1. 简要说明使用的 SQL 查询\n2. 检索到的 MOF 的 Markdown 表格,包含相关列\n3. 用于下载/归档的输出目录路径\n4. 结果中的关键发现(如适用)\n", + "summary_cn": "\n## RESPONSE FORMAT\n1. Brief explanation of the SQL query used\n2. Markdown table of retrieved MOFs with relevant columns\n3. Output directory path for download/archive\n4. Key findings from results (if applicable)\n", "self_check": true, - "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## DATABASE SCHEMA\nMain tables:\n• mofs: id, name, database, cif_path, n_atom, lcd, pld, url, hashkey, mofid, mofkey, pxrd, void_fraction, surface_area_m2g, surface_area_m2cm3, pore_size_distribution, batch_number\n• elements: id, mof_id, element_symbol, n_atom\n• adsorbates: id, name, formula, inchikey, inchicode\n• isotherms: id, mof_id, doi, date, simin, doi_url, category, digitizer, temperature, batch_number, isotherm_url, pressure_units, adsorption_units, composition_type, molecule_forcefield, adsorbent_forcefield\n• isotherm_data: id, isotherm_id, pressure, total_adsorption\n• isotherm_species_data: id, isotherm_data_id, adsorbate_id, adsorption, composition\n• mof_adsorbates: mof_id, adsorbate_id\n• heats: id, mof_id, doi, date, simin, doi_url, category, adsorbent, digitizer, adsorbates, temperature, batch_number, isotherm_url, pressure_units, adsorption_units, composition_type, molecule_forcefield, adsorbent_forcefield\n• heat_data: id, heat_id, pressure, total_adsorption\n• heat_species_data: id, heat_data_id, adsorbate_id, adsorption, composition\n\n## NOTES\n- SQL queries are executed directly on the database\n- n_results controls both SQL LIMIT and returned structures\n- Use CTEs (WITH clauses) for complex logic\n- Window functions are powerful for ranking and statistical analysis\n\n## SQL EXAMPLES\n\n1) 简单查询:查找名为 tobmof-27 的MOF\n → Tool: fetch_mofs_sql\n sql: \"SELECT * FROM mofs WHERE name = 'tobmof-27'\"\n\n2) 范围查询:从Tobacco数据库查找比表面积在500-1000 m²/g之间的MOF\n → Tool: fetch_mofs_sql\n sql: \"SELECT * FROM mofs WHERE database = 'Tobacco' AND surface_area_m2g BETWEEN 500 AND 1000 ORDER BY surface_area_m2g DESC\"\n\n3) 复合条件:从CoREMOF 2019数据库查找原子数小于50,比表面积大于1000 m²/g,且含有O元素和C元素的MOF\n → Tool: fetch_mofs_sql\n sql: '''\n SELECT DISTINCT m.name, m.database, m.n_atom, m.surface_area_m2g\n FROM mofs m\n JOIN elements e1 ON m.id = e1.mof_id\n JOIN elements e2 ON m.id = e2.mof_id\n WHERE m.database = 'CoREMOF 2019'\n AND m.n_atom < 50\n AND m.surface_area_m2g > 1000\n AND e1.element_symbol = 'O'\n AND e2.element_symbol = 'C'\n ORDER BY m.surface_area_m2g DESC\n '''\n\n4) 统计查询:统计各数据库的MOF数量\n → Tool: fetch_mofs_sql\n sql: \"SELECT database, COUNT(*) as count FROM mofs GROUP BY database ORDER BY count DESC\"\n\n5) 复杂分析:查找同时有CO2和H2吸附数据的MOF,按吸附选择性排序。吸附选择性=CO2平均吸附量/H2平均吸附量,用于衡量MOF对CO2相对于H2的优先吸附能力,数值越大表示CO2选择性越强\n → Tool: fetch_mofs_sql\n sql: '''\n WITH co2_adsorption AS (\n SELECT m.id, m.name, m.database, AVG(isd.adsorption) as co2_avg\n FROM mofs m\n JOIN isotherms i ON m.id = i.mof_id\n JOIN isotherm_data id ON i.id = id.isotherm_id\n JOIN isotherm_species_data isd ON id.id = isd.isotherm_data_id\n JOIN adsorbates a ON isd.adsorbate_id = a.id\n WHERE a.name = 'CarbonDioxide'\n GROUP BY m.id, m.name, m.database\n ),\n h2_adsorption AS (\n SELECT m.id, AVG(isd.adsorption) as h2_avg\n FROM mofs m\n JOIN isotherms i ON m.id = i.mof_id\n JOIN isotherm_data id ON i.id = id.isotherm_id\n JOIN isotherm_species_data isd ON id.id = isd.isotherm_data_id\n JOIN adsorbates a ON isd.adsorbate_id = a.id\n WHERE a.name = 'Hydrogen'\n GROUP BY m.id\n )\n SELECT\n c.name, c.database, c.co2_avg, h.h2_avg,\n (c.co2_avg / h.h2_avg) as selectivity_ratio\n FROM co2_adsorption c\n JOIN h2_adsorption h ON c.id = h.id\n WHERE h.h2_avg > 0\n ORDER BY selectivity_ratio DESC\n '''\n" + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## DATABASE SCHEMA\nMain tables:\n• mofs: id, name, database, cif_path, n_atom, lcd, pld, url, hashkey, mofid, mofkey, pxrd, void_fraction, surface_area_m2g, surface_area_m2cm3, pore_size_distribution, batch_number\n• elements: id, mof_id, element_symbol, n_atom\n• adsorbates: id, name, formula, inchikey, inchicode\n• isotherms: id, mof_id, doi, date, simin, doi_url, category, digitizer, temperature, batch_number, isotherm_url, pressure_units, adsorption_units, composition_type, molecule_forcefield, adsorbent_forcefield\n• isotherm_data: id, isotherm_id, pressure, total_adsorption\n• isotherm_species_data: id, isotherm_data_id, adsorbate_id, adsorption, composition\n• mof_adsorbates: mof_id, adsorbate_id\n• heats: id, mof_id, doi, date, simin, doi_url, category, adsorbent, digitizer, adsorbates, temperature, batch_number, isotherm_url, pressure_units, adsorption_units, composition_type, molecule_forcefield, adsorbent_forcefield\n• heat_data: id, heat_id, pressure, total_adsorption\n• heat_species_data: id, heat_data_id, adsorbate_id, adsorption, composition\n\n## NOTES\n- SQL queries are executed directly on the database\n- n_results controls both SQL LIMIT and returned structures\n- Use CTEs (WITH clauses) for complex logic\n- Window functions are powerful for ranking and statistical analysis\n\n## SQL EXAMPLES\n\n1) 简单查询:查找名为 tobmof-27 的MOF\n → Tool: fetch_mofs_sql\n sql: \"SELECT * FROM mofs WHERE name = 'tobmof-27'\"\n\n2) 范围查询:从Tobacco数据库查找比表面积在500-1000 m²/g之间的MOF\n → Tool: fetch_mofs_sql\n sql: \"SELECT * FROM mofs WHERE database = 'Tobacco' AND surface_area_m2g BETWEEN 500 AND 1000 ORDER BY surface_area_m2g DESC\"\n\n3) 复合条件:从CoREMOF 2019数据库查找原子数小于50,比表面积大于1000 m²/g,且含有O元素和C元素的MOF\n → Tool: fetch_mofs_sql\n sql: '''\n SELECT DISTINCT m.name, m.database, m.n_atom, m.surface_area_m2g\n FROM mofs m\n JOIN elements e1 ON m.id = e1.mof_id\n JOIN elements e2 ON m.id = e2.mof_id\n WHERE m.database = 'CoREMOF 2019'\n AND m.n_atom < 50\n AND m.surface_area_m2g > 1000\n AND e1.element_symbol = 'O'\n AND e2.element_symbol = 'C'\n ORDER BY m.surface_area_m2g DESC\n '''\n\n4) 统计查询:统计各数据库的MOF数量\n → Tool: fetch_mofs_sql\n sql: \"SELECT database, COUNT(*) as count FROM mofs GROUP BY database ORDER BY count DESC\"\n\n5) 复杂分析:查找同时有CO2和H2吸附数据的MOF,按吸附选择性排序。吸附选择性=CO2平均吸附量/H2平均吸附量,用于衡量MOF对CO2相对于H2的优先吸附能力,数值越大表示CO2选择性越强\n → Tool: fetch_mofs_sql\n sql: '''\n WITH co2_adsorption AS (\n SELECT m.id, m.name, m.database, AVG(isd.adsorption) as co2_avg\n FROM mofs m\n JOIN isotherms i ON m.id = i.mof_id\n JOIN isotherm_data id ON i.id = id.isotherm_id\n JOIN isotherm_species_data isd ON id.id = isd.isotherm_data_id\n JOIN adsorbates a ON isd.adsorbate_id = a.id\n WHERE a.name = 'CarbonDioxide'\n GROUP BY m.id, m.name, m.database\n ),\n h2_adsorption AS (\n SELECT m.id, AVG(isd.adsorption) as h2_avg\n FROM mofs m\n JOIN isotherms i ON m.id = i.mof_id\n JOIN isotherm_data id ON i.id = id.isotherm_id\n JOIN isotherm_species_data isd ON id.id = isd.isotherm_data_id\n JOIN adsorbates a ON isd.adsorbate_id = a.id\n WHERE a.name = 'Hydrogen'\n GROUP BY m.id\n )\n SELECT\n c.name, c.database, c.co2_avg, h.h2_avg,\n (c.co2_avg / h.h2_avg) as selectivity_ratio\n FROM co2_adsorption c\n JOIN h2_adsorption h ON c.id = h.id\n WHERE h.h2_avg > 0\n ORDER BY selectivity_ratio DESC\n '''\n", + "server": { + "test": "http://cmaz1395916.bohrium.tech:50002/sse", + "uat": "http://cmaz1395916.bohrium.tech:50002/sse", + "prod": "http://bowd1412840.bohrium.tech:50002/sse" + } }, { "tool_id": "010-RUNDOETA-001", "name": "run_doe_task", - "description": "What it does: Run a Design of Experiments (DoE) task using supported algorithms.\nWhen to use: When you need experimental design.\nPrerequisites / Inputs: Algorithm choice (Extreme Vertices, Simplex Centroid, etc.).\nOutputs: DoE results.\nCannot do / Limits: Limited to supported algorithms.\nCost / Notes: Medium.", - "description_cn": "功能: 运行 a Design Experiments的 (DoE) task using supp或ted alg或ithms.\n何时使用: 当您需要 experimental design.\n前提条件/输入: Alg或ithm choice (Extreme Vertices, Simplex Centroid, etc.).\n输出: DoE results.\n无法做到/限制: 仅限于 supp或ted alg或ithms.\n成本/备注: 中.", + "description": { + "What it does": "Run a Design of Experiments (DoE) task using supported algorithms.", + "When to use": "When you need experimental design.", + "Input": "Algorithm choice (Extreme Vertices, Simplex Centroid, etc.).", + "Output": "DoE results.", + "Notes": "Limited to supported algorithms.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "使用支持的算法运行实验设计(DoE)任务。", + "使用场景": "当需要实验设计时使用。", + "输入": "算法选择(极值顶点、单纯形重心等)。", + "输出": "DOE 结果。", + "注意事项": "仅限于支持的算法。", + "成本": "中等。" + }, "belonging_agent": "doe_agent", "scenes": [ "DOE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://gvjj1410767.bohrium.tech:50001/sse", + "uat": "http://gvjj1410767.bohrium.tech:50002/sse", + "prod": "http://gvjj1410767.bohrium.tech:50003/sse" + } }, { "tool_id": "011-OPTIMIZE-001", "name": "optimize_structure", - "description": "What it does: Perform geometry optimization of a crystal or molecular structure using ML potential.\nWhen to use: When you need fast optimized structure without DFT.\nPrerequisites / Inputs: Structure file (CIF/POSCAR/ABACUS STRU/LAMMPS data); compatible ML potential.\nOutputs: Optimized structure file.\nCannot do / Limits: ML-based; accuracy depends on potential domain.\nCost / Notes: Low relative to DFT.", - "description_cn": "功能: 执行 geometry 优化 a的 crystal 或 molecular structure 使用机器学习势.\n何时使用: 当您需要 fast optimized structure 使用out DFT.\n前提条件/输入: 结构文件 (CIF/POSCAR/ABACUS STRU/LAMMPS data); compatible 机器学习势.\n输出: 优化d structure file.\n无法做到/限制: 基于机器学习; accuracy depends on potential domain.\n成本/备注: 低 relative 到 DFT.", + "description": { + "What it does": "Perform geometry optimization of a crystal or molecular structure using ML potential.", + "When to use": "When you need fast optimized structure without DFT.", + "Input": "Structure file (CIF/POSCAR/ABACUS STRU/LAMMPS data); compatible ML potential.", + "Output": "Optimized structure file.", + "Notes": "ML-based; accuracy depends on potential domain.", + "Costs": "Low relative to DFT." + }, + "description_cn": { + "工具简介": "使用机器学习势对晶体或分子结构进行几何优化。", + "使用场景": "当你需要快速获得优化后的结构,且不想进行耗时的 DFT 计算时使用", + "输入": "结构文件(CIF/POSCAR/ABACUS STRU/LAMMPS 数据);兼容的机器学习势文件。", + "输出": "优化后的结构文件。", + "注意事项": "基于机器学习;精度取决于所使用的势函数适用范围", + "成本": "相对于 DFT 成本低。" + }, "belonging_agent": "dpa_calculator_agent", "scenes": [ "DPA", @@ -501,15 +1047,34 @@ "abacus_do_relax" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n" + "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50001/mcp", + "uat": "https://dpa-calculator-uat-2-uuid1767842102.appspace.uat.bohrium.com/mcp?token=7b67a2e7778d4eb3b2c255d2f975d585", + "prod": "https://dpa-uuid1750659890.appspace.bohrium.com/mcp?token=b2b94c52d10141e992514f9d17bcca23" + } }, { "tool_id": "011-RUNMOLEC-002", "name": "run_molecular_dynamics", - "description": "What it does: Run molecular dynamics simulations using ML potential.\nWhen to use: When you need fast MD without DFT.\nPrerequisites / Inputs: Structure file; ML potential; ensemble settings.\nOutputs: MD trajectories and thermodynamics.\nCannot do / Limits: NVE/NVT/NPT only; no classical force fields or DFT.\nCost / Notes: Medium; scales with system size and steps.", - "description_cn": "功能: 运行 分子动力学 simulations 使用机器学习势.\n何时使用: 当您需要 fast MD 使用out DFT.\n前提条件/输入: 结构文件; 机器学习势; ensemble settings.\n输出: MD trajec到ries 和 thermodynamics.\n无法做到/限制: NVE/NVT/NPT 仅; no classical 用于ce fields 或 DFT.\n成本/备注: 中; scales 使用 system size 和 steps.", + "description": { + "What it does": "Run molecular dynamics simulations using ML potential.", + "When to use": "When you need fast MD without DFT.", + "Input": "Structure file; ML potential; ensemble settings.", + "Output": "MD trajectories and thermodynamics.", + "Notes": "NVE/NVT/NPT only; no classical force fields or DFT.", + "Costs": "Medium; scales with system size and steps." + }, + "description_cn": { + "工具简介": "使用机器学习势运行分子动力学模拟。", + "使用场景": "当你需要比密度泛函理论(DFT)更快的速度,但又不满足于传统力场的精度时。", + "输入": "结构文件;机器学习势;系综设置。", + "输出": "分子动力学轨迹和热力学性质。", + "注意事项": "仅支持 NVE/NVT/NPT;不支持经典力场或 DFT。", + "成本": "中等;计算量随系统规模(原子数)和模拟步数增加。" + }, "belonging_agent": "dpa_calculator_agent", "scenes": [ "DPA", @@ -519,15 +1084,34 @@ "abacus_run_md" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n" + "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50001/mcp", + "uat": "https://dpa-calculator-uat-2-uuid1767842102.appspace.uat.bohrium.com/mcp?token=7b67a2e7778d4eb3b2c255d2f975d585", + "prod": "https://dpa-uuid1750659890.appspace.bohrium.com/mcp?token=b2b94c52d10141e992514f9d17bcca23" + } }, { "tool_id": "011-CALCULAT-003", "name": "calculate_phonon", - "description": "What it does: Compute phonon properties using ML potential.\nWhen to use: When you need phonon dispersion and thermal properties.\nPrerequisites / Inputs: Optimized structure; ML potential.\nOutputs: Phonon dispersion, DOS, thermal properties.\nCannot do / Limits: Requires finite-displacement supercells.\nCost / Notes: High; scales with supercell size.", - "description_cn": "功能: Compute 声子性质 使用机器学习势.\n何时使用: 当您需要 声子色散 和 thermal properties.\n前提条件/输入: 优化d structure; 机器学习势.\n输出: 声子色散, DOS, thermal properties.\n无法做到/限制: 需要 finite-displacement 超胞s.\n成本/备注: 高; scales 使用 超胞 size.", + "description": { + "What it does": "Compute phonon properties using ML potential.", + "When to use": "When you need phonon dispersion and thermal properties.", + "Input": "Optimized structure; ML potential.", + "Output": "Phonon dispersion, DOS, thermal properties.", + "Notes": "Requires finite-displacement supercells.", + "Costs": "High; scales with supercell size." + }, + "description_cn": { + "工具简介": "使用机器学习势计算声子性质。", + "使用场景": "当需要声子色散和热性质时使用。", + "输入": "优化后的结构;机器学习势。", + "输出": "声子色散、态密度、热性质。", + "注意事项": "需要有限位移超胞。", + "成本": "高;计算量随超胞规模的增大而显著增加。" + }, "belonging_agent": "dpa_calculator_agent", "scenes": [ "DPA", @@ -538,15 +1122,34 @@ "apex_calculate_phonon" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n" + "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50001/mcp", + "uat": "https://dpa-calculator-uat-2-uuid1767842102.appspace.uat.bohrium.com/mcp?token=7b67a2e7778d4eb3b2c255d2f975d585", + "prod": "https://dpa-uuid1750659890.appspace.bohrium.com/mcp?token=b2b94c52d10141e992514f9d17bcca23" + } }, { "tool_id": "011-CALCULAT-004", "name": "calculate_elastic_constants", - "description": "What it does: Compute elastic constants (Cij) and derived mechanical properties using a machine-learning interatomic potential.\nWhen to use: You have a relaxed structure and want fast elastic properties without running DFT.\nPrerequisites / Inputs: A structure file (e.g., CIF / POSCAR / ABACUS STRU / LAMMPS data) and a compatible ML potential available to the backend; recommended to relax the structure first.\nOutputs: Elastic tensor (Cij), bulk/shear/Young’s modulus, Poisson ratio (units reported in the result payload).\nCannot do / Limits: Not a DFT calculation; accuracy depends on the ML potential domain; may be unreliable for structures far from training distribution.\nCost / Notes: Medium; scales with system size and deformation settings.", - "description_cn": "功能: Compute 弹性常数 (Cij) 和 derived mechanical properties using a machine-learning inter原子ic potential.\n何时使用: You have a relaxed structure 和 want fast 弹性性质 使用out running DFT.\n前提条件/输入: A structure file (e.g., CIF / POSCAR / ABACUS STRU / LAMMPS data) 和 a compatible 机器学习势 available 到 the backend; recommended 到 relax the structure first.\n输出: Elastic tens或 (Cij), bulk/shear/Young’s modulus, Poisson ratio (units rep或ted in the result payload).\n无法做到/限制: Not a DFT calculation; accuracy depends on the 机器学习势 domain; may be unreliable 用于 structures far 从 training distribution.\n成本/备注: 中; scales 使用 system size 和 de用于mation settings.", + "description": { + "What it does": "Compute elastic constants (Cij) and derived mechanical properties using a machine-learning interatomic potential.", + "When to use": "You have a relaxed structure and want fast elastic properties without running DFT.", + "Input": "A structure file (e.g., CIF / POSCAR / ABACUS STRU / LAMMPS data) and a compatible ML potential available to the backend; recommended to relax the structure first.", + "Output": "Elastic tensor (Cij), bulk/shear/Young's modulus, Poisson ratio (units reported in the result payload).", + "Notes": "Not a DFT calculation; accuracy depends on the ML potential domain; may be unreliable for structures far from training distribution.", + "Costs": "Medium; scales with system size and deformation settings." + }, + "description_cn": { + "工具简介": "使用机器学习原子间势计算弹性常数(Cij)和衍生的力学性质。", + "使用场景": "当你已拥有优化好的结构(Relaxed Structure),并希望跳过 DFT 计算,快速获取弹性性质时。", + "输入": "结构文件(例如 CIF/POSCAR/ABACUS STRU/LAMMPS 数据)、兼容的机器学习势。", + "输出": "弹性张量(Cij)、体积/剪切/杨氏模量、泊松比。", + "注意事项": "非 DFT 计算;其精度高度依赖于机器学习势的拟合水平; 如果目标结构超出了机器学习势的训练集分布,结果可能不可靠。", + "成本": "中等;计算量随原子数规模和形变采样(Deformation settings)的复杂程度增加。" + }, "belonging_agent": "dpa_calculator_agent", "scenes": [ "DPA", @@ -557,15 +1160,34 @@ "apex_calculate_elastic" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n" + "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50001/mcp", + "uat": "https://dpa-calculator-uat-2-uuid1767842102.appspace.uat.bohrium.com/mcp?token=7b67a2e7778d4eb3b2c255d2f975d585", + "prod": "https://dpa-uuid1750659890.appspace.bohrium.com/mcp?token=b2b94c52d10141e992514f9d17bcca23" + } }, { "tool_id": "011-RUNNEB-005", "name": "run_neb", - "description": "What it does: Run a Nudged Elastic Band (NEB) calculation with a machine-learning potential to estimate minimum energy path and barrier.\nWhen to use: You have initial/final states (and optionally an initial guess path) and need a fast barrier estimate.\nPrerequisites / Inputs: Initial and final structure files; optional intermediate images or image count; a compatible ML potential available to the backend.\nOutputs: Optimized NEB path, energies along images, estimated barrier and reaction coordinate.\nCannot do / Limits: Not DFT-quality by default; may fail if images are too distorted or if the potential is not valid for the chemistry.\nCost / Notes: High relative to single relax; cost scales with number of images and system size.", - "description_cn": "功能: 运行 a 推弹性能带 (NEB) calculation 使用 a machine-learning potential 到 estimate minimum energy path 和 barrier.\n何时使用: You have initial/final states (和 可选ly an initial guess path) 和 need a fast barrier estimate.\n前提条件/输入: Initial 和 final structure files; 可选 intermediate images 或 image count; a compatible 机器学习势 available 到 the backend.\n输出: 优化d NEB path, energies along images, estimated barrier 和 reaction co或dinate.\n无法做到/限制: Not DFT-quality 通过 default; may fail if images are 到o dis到rted 或 if the potential is not valid 用于 the chemistry.\n成本/备注: 高 relative 到 single relax; cost scales 使用 number images的 和 system size.", + "description": { + "What it does": "Run a Nudged Elastic Band (NEB) calculation with a machine-learning potential to estimate minimum energy path and barrier.", + "When to use": "You have initial/final states (and optionally an initial guess path) and need a fast barrier estimate.", + "Input": "Initial and final structure files; optional intermediate images or image count; a compatible ML potential available to the backend.", + "Output": "Optimized NEB path, energies along images, estimated barrier and reaction coordinate.", + "Notes": "Not DFT-quality by default; may fail if images are too distorted or if the potential is not valid for the chemistry.", + "Costs": "High relative to single relax; cost scales with number of images and system size." + }, + "description_cn": { + "工具简介": "使用机器学习势运行微动弹性能带(NEB)计算以估计最小能量路径和能垒。", + "使用场景": "当你已知反应的初态和末态(以及可选的初始猜测路径),且需要快速估算反应能垒时。", + "输入": "初始和最终结构文件;可选的中间态构型或插值点数;兼容的机器学习势。", + "输出": "优化的 NEB 路径、沿图像的能量、估计的能垒和反应坐标。", + "注意事项": "默认精度不直接等同于 DFT 水准。如果中间映像畸变过大,或势函数无法准确描述该化学环境,计算可能会失败。", + "成本": "相对于单次弛豫成本高;计算量随映像数量和系统规模增加。" + }, "belonging_agent": "dpa_calculator_agent", "scenes": [ "DPA", @@ -573,105 +1195,238 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n" + "args_setting": "\nBuilt-in multi-task general-purpose pretrained models:\n 'DPA2.4-7M': \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/cd12300a-d3e6-4de9-9783-dd9899376cae/dpa-2.4-7M.pt\"\n DPA3.1-3M\": \"https://bohrium.oss-cn-zhangjiakou.aliyuncs.com/13756/27666/store/upload/18b8f35e-69f5-47de-92ef-af8ef2c13f54/DPA-3.1-3M.pt\"\n\n- For built-in pretrained models, both DPA2 and DPA3 are multi-task trained models, chose an appropriate model branch (or `head`) according to the material system. When specifying `head`, use the exact names below; do not use any other names unless users requires. Default is `Omat24`, covering broad range of inorganic materials; `OC22` is suitable for catalytic surfaces; `ODAC23` is suitable for air adsorption in metal-organic frameowrks (MOFs); `Alex2D` is suitable for 2D materials; `SPICE2` is suitable for drug-like molecules; `Organic_Reactions` is suitable for organic reactions; `solvated_protein_fragments` is suitable for protein fragments. `H2O_H2O_PD` is specialized in water diagram.\n- For custom models, follow the user-provided `head` directly.\n\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50001/mcp", + "uat": "https://dpa-calculator-uat-2-uuid1767842102.appspace.uat.bohrium.com/mcp?token=7b67a2e7778d4eb3b2c255d2f975d585", + "prod": "https://dpa-uuid1750659890.appspace.bohrium.com/mcp?token=b2b94c52d10141e992514f9d17bcca23" + } }, { "tool_id": "011-FINETUNE-006", "name": "finetune_dpa_model", - "description": "What it does: Fine-tune DPA pretrained models using DFT-labeled data.\nWhen to use: When you need to adapt DPA potential to specific systems.\nPrerequisites / Inputs: DFT-labeled data (energies, forces, stresses).\nOutputs: Fine-tuned DPA model.\nCannot do / Limits: Cannot run calculations with the model.\nCost / Notes: High.", - "description_cn": "功能: Fine-tune DPA pretrained models 使用 DFT-labeled data.\n何时使用: 当您需要 到 adapt DPA potential 到 specific systems.\n前提条件/输入: DFT-labeled data (energies, 用于ces, stresses).\n输出: Fine-tuned DPA model.\n无法做到/限制: Cannot run calculations 使用 the model.\n成本/备注: 高.", + "description": { + "What it does": "Fine-tune DPA pretrained models using DFT-labeled data.", + "When to use": "When you need to adapt DPA potential to specific systems.", + "Input": "DFT-labeled data (energies, forces, stresses).", + "Output": "Fine-tuned DPA model.", + "Notes": "Cannot run calculations with the model.", + "Costs": "High." + }, + "description_cn": { + "工具简介": "使用 DFT 标记的数据微调 DPA 预训练模型。", + "使用场景": "当需要将 DPA 势适应特定体系时使用。", + "输入": "DFT 标记的数据(能量、力、应力)。", + "输出": "微调后的 DPA 模型。", + "注意事项": "该功能仅负责“训练”,不能直接运行具体的模拟计算(如 MD 或 NEB)。", + "成本": "高。" + }, "belonging_agent": "finetune_dpa_agent", "scenes": [ "DPA" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": "Do NOT omit parameters that have default values. If the user does not provide a value, you MUST use the default value defined in the input parameters and include that field in the tool call. Only parameters without defaults are truly required and must be filled from user input." + "args_setting": "Do NOT omit parameters that have default values. If the user does not provide a value, you MUST use the default value defined in the input parameters and include that field in the tool call. Only parameters without defaults are truly required and must be filled from user input.", + "server": { + "test": "http://root@mllo1368252.bohrium.tech:50003/sse", + "uat": "http://root@mllo1368252.bohrium.tech:50003/sse", + "prod": "https://dpafinetune-uuid1761721868.appspace.bohrium.com/sse?token=336ee47a05e5407899fdeb50c9e806d0" + } }, { "tool_id": "015-GETELECT-001", "name": "get_electron_microscope_recognize", - "description": "What it does: Analyze electron microscope images for particles and morphology.\nWhen to use: When you have TEM/SEM images to analyze.\nPrerequisites / Inputs: Electron microscope images(.tif, .tiff, .png, .jpeg, .jpg).\nOutputs: Detected particles, morphology, geometric properties.\nCannot do / Limits: Only support .tif, .tiff, .png, .jpeg, .jpg format files.\nCost / Notes: Medium.", - "description_cn": "功能: 分析 electron microscope images 用于 particles 和 m或phology.\n何时使用: When you have TEM/SEM images 到 analyze.\n前提条件/输入: Electron microscope images(.tif, .tiff, .png, .jpeg, .jpg).\n输出: Detected particles, m或phology, geometric properties.\n无法做到/限制: 仅 supp或t .tif, .tiff, .png, .jpeg, .jpg 用于mat files.\n成本/备注: 中.", + "description": { + "What it does": "Analyze electron microscope images for particles and morphology.", + "When to use": "When you have TEM/SEM images to analyze.", + "Input": "Electron microscope images(.tif, .tiff, .png, .jpeg, .jpg).", + "Output": "Detected particles, morphology, geometric properties.", + "Notes": "Only support .tif, .tiff, .png, .jpeg, .jpg format files.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "分析电镜图像中的颗粒与形貌。", + "使用场景": "有待分析的 TEM/SEM 图像时使用。 电镜", + "输入": "电镜图像(.tif、.tiff、.png、.jpeg、.jpg)。", + "输出": "检测到的颗粒、形貌及几何性质。", + "注意事项": "仅支持 .tif、.tiff、.png、.jpeg、.jpg 格式。", + "成本": "中等。" + }, "belonging_agent": "electron_microscope_agent", "scenes": [ "Electron_Microscope" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@pkfz1410356.bohrium.tech:50002/sse", + "uat": "http://root@pkfz1410356.bohrium.tech:50002/sse", + "prod": "http://root@pkfz1410356.bohrium.tech:50002/sse" + } }, { "tool_id": "016-HEAPARAM-001", "name": "HEA_params_calculator", - "description": "What it does: Calculate HEA parameters like VEC, delta, Hmix, Smix, Lambda from composition.\nWhen to use: When you need HEA thermodynamic parameters.\nPrerequisites / Inputs: HEA chemical formula.\nOutputs: VEC, delta, Hmix, Smix, Lambda.\nCannot do / Limits: Specific to HEA.\nCost / Notes: Low.", - "description_cn": "功能: 计算 HEA parameters 如 VEC, delta, Hmix, Smix, Lambda 从 composition.\n何时使用: 当您需要 HEA thermodynamic parameters.\n前提条件/输入: HEA chemical 用于mula.\n输出: VEC, delta, Hmix, Smix, Lambda.\n无法做到/限制: 特定于 HEA.\n成本/备注: 低.", + "description": { + "What it does": "Calculate HEA parameters like VEC, delta, Hmix, Smix, Lambda from composition.", + "When to use": "When you need HEA thermodynamic parameters.", + "Input": "HEA chemical formula.", + "Output": "VEC, delta, Hmix, Smix, Lambda.", + "Notes": "Specific to HEA.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从成分计算高熵合金参数,如 VEC、delta、Hmix、Smix、Lambda。", + "使用场景": "当需要高熵合金热力学参数时使用。 高熵合金", + "输入": "高熵合金化学式。", + "输出": "VEC、delta、Hmix、Smix、Lambda。", + "注意事项": "特定于 HEA。", + "成本": "低。" + }, "belonging_agent": "HEA_assistant_agent", "scenes": [ "HIGH_ENTROPY_ALLOY" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://yqwl1369135.bohrium.tech:50001/sse", + "uat": "http://yqwl1369135.bohrium.tech:50001/sse", + "prod": "http://yqwl1369135.bohrium.tech:50001/sse" + } }, { "tool_id": "016-HEAPREDI-002", "name": "HEA_predictor", - "description": "What it does: Predict if HEA composition forms solid-solution and its crystal structure.\nWhen to use: When you need phase prediction for HEA.\nPrerequisites / Inputs: HEA composition.\nOutputs: Solid-solution formation and crystal structure.\nCannot do / Limits: Uses pre-trained ML model.\nCost / Notes: Low.", - "description_cn": "功能: 预测 if HEA composition 用于ms solid-solution 和 its crystal structure.\n何时使用: 当您需要 phase prediction 用于 HEA.\n前提条件/输入: HEA composition.\n输出: Solid-solution 用于mation 和 crystal structure.\n无法做到/限制: Uses pre-trained ML model.\n成本/备注: 低.", + "description": { + "What it does": "Predict if HEA composition forms solid-solution and its crystal structure.", + "When to use": "When you need phase prediction for HEA.", + "Input": "HEA composition.", + "Output": "Solid-solution formation and crystal structure.", + "Notes": "Uses pre-trained ML model.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "预测高熵合金成分是否形成固溶体及其晶体结构。", + "使用场景": "当需要高熵合金的相预测时使用。 高熵合金", + "输入": "高熵合金成分。", + "输出": "固溶体形成和晶体结构。", + "注意事项": "使用预训练的机器学习模型。", + "成本": "低。" + }, "belonging_agent": "HEA_assistant_agent", "scenes": [ "HIGH_ENTROPY_ALLOY" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://yqwl1369135.bohrium.tech:50001/sse", + "uat": "http://yqwl1369135.bohrium.tech:50001/sse", + "prod": "http://yqwl1369135.bohrium.tech:50001/sse" + } }, { "tool_id": "016-HEACOMPS-003", "name": "HEA_comps_generator", - "description": "What it does: Generate HEA compositions by adjusting molar ratios of one element.\nWhen to use: For HEA composition design and optimization.\nPrerequisites / Inputs: Initial HEA composition.\nOutputs: Series of modified compositions.\nCannot do / Limits: Adjusts one element at a time.\nCost / Notes: Low.", - "description_cn": "功能: 生成 HEA compositions 通过 adjusting molar ratios one的 element.\n何时使用: 用于 HEA composition design 和 优化.\n前提条件/输入: Initial HEA composition.\n输出: Series modified的 compositions.\n无法做到/限制: Adjusts one element at a time.\n成本/备注: 低.", + "description": { + "What it does": "Generate HEA compositions by adjusting molar ratios of one element.", + "When to use": "For HEA composition design and optimization.", + "Input": "Initial HEA composition.", + "Output": "Series of modified compositions.", + "Notes": "Adjusts one element at a time.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "通过调节单一元素的摩尔比来生成一系列高熵合金成分。", + "使用场景": "用于高熵合金成分设计和优化。 高熵合金", + "输入": "初始高熵合金成分。", + "输出": "一系列修改后的成分。", + "注意事项": "一次调整一个元素。", + "成本": "低。" + }, "belonging_agent": "HEA_assistant_agent", "scenes": [ "HIGH_ENTROPY_ALLOY" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://yqwl1369135.bohrium.tech:50001/sse", + "uat": "http://yqwl1369135.bohrium.tech:50001/sse", + "prod": "http://yqwl1369135.bohrium.tech:50001/sse" + } }, { "tool_id": "016-HEADATAE-004", "name": "HEA_data_extract", - "description": "What it does: Extract HEA data from PDF literature.\nWhen to use: When you need HEA data from papers.\nPrerequisites / Inputs: PDF literature.\nOutputs: Compositions, processing, microstructures, properties.\nCannot do / Limits: PDF format only.\nCost / Notes: Low.", - "description_cn": "功能: 提取 HEA data 从 PDF literature.\n何时使用: 当您需要 HEA data 从 papers.\n前提条件/输入: PDF literature.\n输出: Compositions, processing, microstructures, properties.\n无法做到/限制: PDF 用于mat 仅.\n成本/备注: 低.", + "description": { + "What it does": "Extract HEA data from PDF literature.", + "When to use": "When you need HEA data from papers.", + "Input": "PDF literature.", + "Output": "Compositions, processing, microstructures, properties.", + "Notes": "PDF format only.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从 PDF 文献中提取高熵合金数据。", + "使用场景": "当需要从论文中获取高熵合金数据时使用。 高熵合金", + "输入": "PDF 文献。", + "输出": "成分、合成、微观结构、性质。", + "注意事项": "仅支持 PDF 格式。", + "成本": "低。" + }, "belonging_agent": "HEA_assistant_agent", "scenes": [ "HIGH_ENTROPY_ALLOY" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://yqwl1369135.bohrium.tech:50001/sse", + "uat": "http://yqwl1369135.bohrium.tech:50001/sse", + "prod": "http://yqwl1369135.bohrium.tech:50001/sse" + } }, { "tool_id": "016-HEAPAPER-005", "name": "HEA_paper_search", - "description": "What it does: Search and download HEA papers from arXiv.\nWhen to use: When you need HEA literature.\nPrerequisites / Inputs: Title, author, or keywords.\nOutputs: Search results and downloaded papers.\nCannot do / Limits: arXiv only.\nCost / Notes: Medium.", - "description_cn": "功能: 搜索 和 download HEA papers 从 arXiv.\n何时使用: 当您需要 HEA literature.\n前提条件/输入: Title, auth或, 或 keyw或ds.\n输出: 搜索 results 和 downloaded papers.\n无法做到/限制: arXiv 仅.\n成本/备注: 中.", + "description": { + "What it does": "Search and download HEA papers from arXiv.", + "When to use": "When you need HEA literature.", + "Input": "Title, author, or keywords.", + "Output": "Search results and downloaded papers.", + "Notes": "arXiv only.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "从 arXiv 搜索并下载高熵合金论文。", + "使用场景": "当需要高熵合金文献时使用。 高熵合金", + "输入": "标题、作者或关键词。", + "输出": "搜索结果和下载的论文。", + "注意事项": "仅支持 arXiv。", + "成本": "中等。" + }, "belonging_agent": "HEA_assistant_agent", "scenes": [ "HIGH_ENTROPY_ALLOY" @@ -682,45 +1437,102 @@ "web-search" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://yqwl1369135.bohrium.tech:50001/sse", + "uat": "http://yqwl1369135.bohrium.tech:50001/sse", + "prod": "http://yqwl1369135.bohrium.tech:50001/sse" + } }, { "tool_id": "016-HEABIPHA-006", "name": "HEA_bi_phase_Calc", - "description": "What it does: Calculate formation energies and phase diagrams for binary pairs in HEA.\nWhen to use: When you need binary phase info for HEA.\nPrerequisites / Inputs: HEA chemical system.\nOutputs: Formation energies and convex hulls.\nCannot do / Limits: Binary pairs only.\nCost / Notes: Medium.", - "description_cn": "功能: 计算 用于mation energies 和 phase diagrams 用于 binary pairs in HEA.\n何时使用: 当您需要 binary phase info 用于 HEA.\n前提条件/输入: HEA chemical system.\n输出: 用于mation energies 和 convex hulls.\n无法做到/限制: Binary pairs 仅.\n成本/备注: 中.", + "description": { + "What it does": "Calculate formation energies and phase diagrams for binary pairs in HEA.", + "When to use": "When you need binary phase info for HEA.", + "Input": "HEA chemical system.", + "Output": "Formation energies and convex hulls.", + "Notes": "Binary pairs only.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "计算高熵合金 中二元对的形成能和相图。", + "使用场景": "当需要高熵合金的二元相信息时使用。 高熵合金", + "输入": "高熵合金化学体系。", + "输出": "形成能和凸包。", + "注意事项": "仅支持二元对。", + "成本": "中等。" + }, "belonging_agent": "HEA_assistant_agent", "scenes": [ "HIGH_ENTROPY_ALLOY" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://yqwl1369135.bohrium.tech:50001/sse", + "uat": "http://yqwl1369135.bohrium.tech:50001/sse", + "prod": "http://yqwl1369135.bohrium.tech:50001/sse" + } }, { "tool_id": "016-GENERATE-007", "name": "generate_binary_phase_diagram", - "description": "What it does: Generate a binary phase diagram for a specified A–B system based on available thermodynamic/energy data in the backend workflow.\nWhen to use: You want a quick overview of stable/competing phases across composition for a binary alloy/compound system.\nPrerequisites / Inputs: Element pair (A, B) and optional temperature/pressure range; requires accessible formation-energy/thermo dataset or computation route configured in the backend.\nOutputs: Phase diagram data (stable phases, tie-lines, composition ranges) and a plot-ready representation.\nCannot do / Limits: If no dataset/computation route is available, the tool will return an error; results depend on data coverage and model assumptions.\nCost / Notes: Medium; faster with cached datasets.", - "description_cn": "功能: 生成 a binary phase diagram 用于 a specified A–B system based on available thermodynamic/energy data in the backend w或kflow.\n何时使用: You want a quick overview stable的/competing phases across composition 用于 a binary alloy/compound system.\n前提条件/输入: Element pair (A, B) 和 可选 temperature/pressure range; 需要 accessible 用于mation-energy/thermo dataset 或 computation route configured in the backend.\n输出: Phase diagram data (stable phases, tie-lines, composition ranges) 和 a plot-ready representation.\n无法做到/限制: If no dataset/computation route is available, the 到ol will return an err或; results depend on data coverage 和 model assumptions.\n成本/备注: 中; faster 使用 cached datasets.", + "description": { + "What it does": "Generate a binary phase diagram for a specified A–B system based on available thermodynamic/energy data in the backend workflow.", + "When to use": "You want a quick overview of stable/competing phases across composition for a binary alloy/compound system.", + "Input": "Element pair (A, B) and optional temperature/pressure range; requires accessible formation-energy/thermo dataset or computation route configured in the backend.", + "Output": "Phase diagram data (stable phases, tie-lines, composition ranges) and a plot-ready representation.", + "Notes": "If no dataset/computation route is available, the tool will return an error; results depend on data coverage and model assumptions.", + "Costs": "Medium; faster with cached datasets." + }, + "description_cn": { + "工具简介": "基于后端工作流中可用的热力学/能量数据,为指定的 A–B 体系生成二元相图。", + "使用场景": "当你需要快速了解二元合金或化合物体系在不同成分下,有哪些稳定相(Stable phases)或竞争相(Competing phases)时。 高熵合金", + "输入": "元素对(A, B)和可选的温度/压力范围;可访问的形成能/热力学数据集或计算路径。", + "输出": "相图原始数据(稳定相、结线/共轭线 (Tie-lines)、成分范围)以及可直接绘图的展示结果。", + "注意事项": "如果没有可用的数据集/计算路径,工具将返回错误; 结果依赖于数据覆盖范围和模型假设。", + "成本": "中等;使用缓存数据集更快。" + }, "belonging_agent": "hea_calculator_agent", "scenes": [ "HIGH_ENTROPY_ALLOY" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@fewk1368842.bohrium.tech:50001/sse", + "uat": "http://root@fewk1368842.bohrium.tech:50001/sse", + "prod": "https://hea-calculator-uuid1754481039.app-space.dplink.cc/sse?token=37b90649f12c4b2e90db6bd9f2b3e9da" + } }, { "tool_id": "016-QUERYHEA-008", "name": "query_heakb_literature", - "description": "What it does: Query literature knowledge base for HEA(High-entropy alloys) research with natural language.\nWhen to use: When you need in-depth literature analysis on HEA topics.\nPrerequisites / Inputs: Natural language questions about HEA.\nOutputs: Literature summaries from vector similarity search.\nCannot do / Limits: Topics limited to HEA.\nCost / Notes: Medium.", - "description_cn": "功能: 查询 literature knowledge base 用于 HEA(高-entropy alloys) research 使用 natural language.\n何时使用: 当您需要 in-depth literature analysis on HEA 到pics.\n前提条件/输入: Natural language questions about HEA.\n输出: Literature summaries 从 vec到r similarity search.\n无法做到/限制: 到pics 仅限于 HEA.\n成本/备注: 中.", + "description": { + "What it does": "Query literature knowledge base for HEA(High-entropy alloys) research with natural language.", + "When to use": "When you need in-depth literature analysis on HEA topics.", + "Input": "Natural language questions about HEA.", + "Output": "Literature summaries from vector similarity search.", + "Notes": "Topics limited to HEA.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "使用自然语言查询高熵合金(HEA)研究的文献知识库。", + "使用场景": "当您需要对高熵合金相关主题进行深入的文献分析时。 高熵合金", + "输入": "关于高熵合金的自然语言问题。", + "输出": "通过向量相似性搜索返回的文献摘要。", + "注意事项": "主题仅限于高熵合金。", + "成本": "中等。" + }, "belonging_agent": "HEAkb_agent", "scenes": [ "HIGH_ENTROPY_ALLOY" @@ -731,15 +1543,34 @@ "web-search" ], "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries (List[str])\n - Each summary is a text string containing the summary of one literature paper\n - These summaries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, space groups, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries with detailed explanations\n - Include specific quantitative data, experimental conditions, and results\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable\n - Address contradictions or gaps in current understanding\n\n3. **Summary of Key Findings**: Synthesize the most important insights\n\n4. **References**: List all cited sources [1], [2], [3], etc.\n", - "summary_prompt_cn": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要列表(List[str])\n - 每个摘要是包含一篇文献论文摘要的文本字符串\n - 这些摘要是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n- 如果用户的问题是开放式的,提供全面分析,包括:\n 1. 机制洞察(反应路径、驱动力、结构-性能关系)\n 2. 定量或半定量结果(材料名称、数值数据、性能指标、空间群等)\n 3. 当前研究中的不一致、局限性或空白\n- 除非必要,不要过度强调技术细节(仪器设置或计算软件和参数设置)\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明(例如,“第一个”、“最好的”、“最受欢迎的”)\n- 在数字和单位之间添加空格(例如,10 cm,5 kg)\n- 对物理量使用斜体(例如,*E*、*T*、*k*)\n- 对向量使用粗体(例如,**F**、**E**)和化合物/材料的序列代码名称(例如,化合物 **1**)\n- 在首次使用时定义缩写,并在整个文本中一致使用\n- 使用 [1]、[2]、[3] 格式在整个文本中引用来源(数字指摘要顺序)\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战、分析的论文数量\n\n2. **主要内容**:组织成具有子章节的逻辑章节(##、###)。对于每个章节:\n - 整合来自多个摘要的发现,并提供详细解释\n - 包括具体的定量数据、实验条件和结果\n - 深入解释机制和过程(事物**如何**工作,而不仅仅是**什么**发生)\n - 比较不同研究的发现,突出一致性和分歧\n - 在适用时使用表格比较不同研究的数据\n - 解决当前理解中的矛盾或空白\n\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + "summary_cn": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries (List[str])\n - Each summary is a text string containing the summary of one literature paper\n - These summaries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, space groups, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries with detailed explanations\n - Include specific quantitative data, experimental conditions, and results\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable\n - Address contradictions or gaps in current understanding\n\n3. **Summary of Key Findings**: Synthesize the most important insights\n\n4. **References**: List all cited sources [1], [2], [3], etc.\n", "self_check": false, - "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n**Parameters:**\n- question (str, required): Natural language query about HEA(High-entropy alloys) research topics\n- top_k (int, optional): Number of chunks to retrieve (5-15 recommended, default: 5)\n\n**Examples:**\n1) 查询高熵合金中的相变机制:\n → Tool: query_heakb_literature\n question: '高熵合金中的相变诱导塑性(TRIP)机制是什么?这种机制如何影响合金的力学性能?'\n top_k: 5\n\n2) 查询FCC到HCP相变的条件:\n → Tool: query_heakb_literature\n question: '高熵合金中的FCC到HCP相变的条件和影响因素是什么?'\n top_k: 8\n\n3) 查询低温下的力学性能:\n → Tool: query_heakb_literature\n question: '高熵合金在低温下的力学性能如何?影响低温性能的主要因素有哪些?'\n top_k: 10\n\n4) 查询腐蚀行为和防护机制:\n → Tool: query_heakb_literature\n question: '高熵合金的腐蚀行为和防护机制是什么?不同元素对腐蚀性能的影响如何?'\n top_k: 5\n\n5) 查询微观结构特征:\n → Tool: query_heakb_literature\n question: '高熵合金的微观结构特征是什么?如何通过热处理调控微观结构?'\n top_k: 6\n\n6) 查询制备方法:\n → Tool: query_heakb_literature\n question: '高熵合金的主要制备方法有哪些?不同制备方法对合金性能的影响如何?'\n top_k: 7\n" + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n**Parameters:**\n- question (str, required): Natural language query about HEA(High-entropy alloys) research topics\n- top_k (int, optional): Number of chunks to retrieve (5-15 recommended, default: 5)\n\n**Examples:**\n1) 查询高熵合金中的相变机制:\n → Tool: query_heakb_literature\n question: '高熵合金中的相变诱导塑性(TRIP)机制是什么?这种机制如何影响合金的力学性能?'\n top_k: 5\n\n2) 查询FCC到HCP相变的条件:\n → Tool: query_heakb_literature\n question: '高熵合金中的FCC到HCP相变的条件和影响因素是什么?'\n top_k: 8\n\n3) 查询低温下的力学性能:\n → Tool: query_heakb_literature\n question: '高熵合金在低温下的力学性能如何?影响低温性能的主要因素有哪些?'\n top_k: 10\n\n4) 查询腐蚀行为和防护机制:\n → Tool: query_heakb_literature\n question: '高熵合金的腐蚀行为和防护机制是什么?不同元素对腐蚀性能的影响如何?'\n top_k: 5\n\n5) 查询微观结构特征:\n → Tool: query_heakb_literature\n question: '高熵合金的微观结构特征是什么?如何通过热处理调控微观结构?'\n top_k: 6\n\n6) 查询制备方法:\n → Tool: query_heakb_literature\n question: '高熵合金的主要制备方法有哪些?不同制备方法对合金性能的影响如何?'\n top_k: 7\n", + "server": { + "test": "http://lmnm1410647.bohrium.tech:50001/sse", + "uat": "http://lmnm1410647.bohrium.tech:50001/sse", + "prod": "http://fwne1412142.bohrium.tech:50001/sse" + } }, { "tool_id": "019-EXTRACTM-001", "name": "extract_material_data_from_pdf", - "description": "What it does: Read and extract material data and methodologies from PDF documents.\nWhen to use: When you need to extract info from PDF literature.\nPrerequisites / Inputs: PDF file.\nOutputs: Extracted material info and methodologies.\nCannot do / Limits: Cannot retrieve from internet; local PDFs only.\nCost / Notes: Low.", - "description_cn": "功能: Read 和 extract material data 和 methodologies 从 PDF documents.\n何时使用: 当您需要 到 extract info 从 PDF literature.\n前提条件/输入: PDF file.\n输出: 提取ed material info 和 methodologies.\n无法做到/限制: Cannot retrieve 从 internet; local PDFs 仅.\n成本/备注: 低.", + "description": { + "What it does": "Read and extract material data and methodologies from PDF documents.", + "When to use": "When you need to extract info from PDF literature.", + "Input": "PDF file.", + "Output": "Extracted material info and methodologies.", + "Notes": "Cannot retrieve from internet; local PDFs only.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从 PDF 文档中读取并提取材料数据和方法。", + "使用场景": "当需要从 PDF 文献中提取信息时使用。", + "输入": "PDF 文件。", + "输出": "提取的材料信息和方法。", + "注意事项": "无法从互联网检索;仅支持本地 PDF 文件。", + "成本": "低。" + }, "belonging_agent": "document_parser_agent", "scenes": [ "LITERATURE", @@ -750,16 +1581,35 @@ "extract_material_data_from_webpage" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": null, + "server": { + "test": "http://pfmx1355864.bohrium.tech:50005/mcp", + "uat": "http://pfmx1355864.bohrium.tech:50005/mcp", + "prod": "http://pfmx1355864.bohrium.tech:50001/mcp" + }, "bypass_confirmation": true }, { "tool_id": "019-SEARCH-P-002", "name": "search-papers-enhanced", - "description": "What it does: Search scientific papers.\nWhen to use: Find research on topics.\nPrerequisites / Inputs: Topic keywords.\nOutputs: Literature summary, abstract information of relevant papers, web link of the papers\nCannot do / Limits: Literature search only. No thesis files (.pdf,.doc, etc.) will be downloaded.\nCost / Notes: Low.", - "description_cn": "功能: 搜索 scientific papers.\n何时使用: Find research on 到pics.\n前提条件/输入: 到pic keyw或ds.\n输出: Literature summary, abstract in用于mation relevant的 papers, web link the的 papers\n无法做到/限制: Literature search 仅. No thesis files (.pdf,.doc, etc.) will be downloaded.\n成本/备注: 低.", + "description": { + "What it does": "Search scientific papers.", + "When to use": "Find research on topics.", + "Input": "Topic keywords.", + "Output": "Literature summary, abstract information of relevant papers, web link of the papers", + "Notes": "Literature search only. No thesis files (.pdf,.doc, etc.) will be downloaded.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "检索科学文献。", + "使用场景": "按主题查找相关研究。 文献", + "输入": "主题关键词。", + "输出": "文献摘要、相关论文摘要信息及论文链接。", + "注意事项": "仅进行文献检索;不下载学位论文等文件(.pdf、.doc 等)。", + "成本": "低。" + }, "belonging_agent": "science_navigator_agent", "scenes": [ "LITERATURE" @@ -768,16 +1618,35 @@ "web-search" ], "summary_prompt": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools returns a list of papers with metadata. You need to scan through the papers and organize them with as broad coverage as possible.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening;\n- Expression: Clear, layered, without introducing irrelevant content, try not to use analogies or overly complex concepts, but rather explain from first principles;\n- Output should avoid hollow summaries; each claim must be explicitly supported by facts, numerical data, or methodological details extracted from the papers;\n- Include comparisons, contradictions, or confirmations between studies whenever relevant to give analytical depth.\n- If the user's question is open-ended, provide a thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships);\n 2. Quantitative or semi-quantitative results whenever available (including material names, numerical data, performance metrics, space groups, etc.);\n 3. Any inconsistencies, limitations, or gaps in the current research.\n 4. Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary.\n- When the user requests querying or searching, you should consider the relevance and irrelevance between the search results and user needs, using positive and negative thinking to ensure the search results are highly relevant to user needs. You should also analyze the relevance and irrelevance when answering.\n- If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n\nThe overall abstract should be brief with less than 3 sentences, including and only including:\n1) Professional definition of the key concepts involved.\n2) Key breakthroughs in recent years.\n3) Main challenges that remain unsolved.\n\nFor joints between each section or subsection, avoid using bullets or numbering.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on spefic topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", - "summary_prompt_cn": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 知识使用限制:\n- 所有事实信息(数据、结论、定义、实验结果等)必须来自工具调用结果;\n- 您可以使用自己的知识来组织、解释和推理这些事实,但不能凭空添加信息。\n- 引用时,尽量直接使用原始表达。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头,例如“当然,我将...”、“好的,我将...”或“我现在将分析...”。相反,直接输出实质性内容。\n- 避免没有论文证据的声明,例如第一个、最好的、最受欢迎的等。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n\n# 内部大纲协议(大纲不得显示):\n- 在开始时,内部构建一个详细的分层大纲,至少包含 3 个主要章节和多个子章节。除非明确要求,否则不得向用户显示此大纲。\n- 大纲应大致从简要解释所涉及的关键术语、基于摘要声明的主要研究空白开始。\n- 您必须使用此内部大纲来指导一个长、全面和完全结构化的最终输出。\n", - "self_check": false, - "args_setting": "\n If not specified, apply start_time=2020-01-01, end_time=2026-01-26, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise.\n\n Must be aware of these prior knowledge:\n - \n### KNOWLEDGE RETRIEVAL STRATEGY: SYNONYM EXPANSION\nYou are equipped with a \"Material Synonym Registry\". When a user asks about a specific material, check if it falls under any known naming conflicts or aliases.\n\n**Registry Rules:**\n- If user mentions ZIF-8or MAF-4or Zn(MeIm)2, use preferred name 'MAF-4'. **Explicitly output this warning** at appropriate place: \"Important: Althogh the structure commonly known as 'ZIF-8' was first reported by **Xiao-Ming Chen's (陈小明) group** ([maf4]), and renamed as MAF-4.\"\n- If user mentions DPA-1or DPA-2or DPA-3, use preferred name 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)'. **Explicitly output this warning** at appropriate place: \"Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).\"\n\n\n**Instructions:**\n1. **Identify**: Check if the user's query contains any keywords from the registry.\n2. **Expand**: If a match is found, you MUST use the explicitly defined `search_query` logic (e.g., OR logic) to ensure no literature is missed.\n - *Example:* If the user asks for \"ZIF-8\", do NOT just search \"ZIF-8\". Search \"('ZIF-8' OR 'MAF-4')\" to capture all priority papers.\n3. **Merge**: Treat results from different aliases as the same entity.\n\n ", + "summary_cn": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools returns a list of papers with metadata. You need to scan through the papers and organize them with as broad coverage as possible.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening;\n- Expression: Clear, layered, without introducing irrelevant content, try not to use analogies or overly complex concepts, but rather explain from first principles;\n- Output should avoid hollow summaries; each claim must be explicitly supported by facts, numerical data, or methodological details extracted from the papers;\n- Include comparisons, contradictions, or confirmations between studies whenever relevant to give analytical depth.\n- If the user's question is open-ended, provide a thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships);\n 2. Quantitative or semi-quantitative results whenever available (including material names, numerical data, performance metrics, space groups, etc.);\n 3. Any inconsistencies, limitations, or gaps in the current research.\n 4. Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary.\n- When the user requests querying or searching, you should consider the relevance and irrelevance between the search results and user needs, using positive and negative thinking to ensure the search results are highly relevant to user needs. You should also analyze the relevance and irrelevance when answering.\n- If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n\nThe overall abstract should be brief with less than 3 sentences, including and only including:\n1) Professional definition of the key concepts involved.\n2) Key breakthroughs in recent years.\n3) Main challenges that remain unsolved.\n\nFor joints between each section or subsection, avoid using bullets or numbering.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on spefic topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", + "self_check": false, + "args_setting": "\n If not specified, apply start_time=2020-01-01, end_time=2026-01-27, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise.\n\n Must be aware of these prior knowledge:\n - \n### KNOWLEDGE RETRIEVAL STRATEGY: SYNONYM EXPANSION\nYou are equipped with a \"Material Synonym Registry\". When a user asks about a specific material, check if it falls under any known naming conflicts or aliases.\n\n**Registry Rules:**\n- If user mentions ZIF-8or MAF-4or Zn(MeIm)2, use preferred name 'MAF-4'. **Explicitly output this warning** at appropriate place: \"Important: Althogh the structure commonly known as 'ZIF-8' was first reported by **Xiao-Ming Chen's (陈小明) group** ([maf4]), and renamed as MAF-4.\"\n- If user mentions DPA-1or DPA-2or DPA-3, use preferred name 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)'. **Explicitly output this warning** at appropriate place: \"Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).\"\n\n\n**Instructions:**\n1. **Identify**: Check if the user's query contains any keywords from the registry.\n2. **Expand**: If a match is found, you MUST use the explicitly defined `search_query` logic (e.g., OR logic) to ensure no literature is missed.\n - *Example:* If the user asks for \"ZIF-8\", do NOT just search \"ZIF-8\". Search \"('ZIF-8' OR 'MAF-4')\" to capture all priority papers.\n3. **Merge**: Treat results from different aliases as the same entity.\n\n ", + "server": { + "test": "http://bohrium-mcp-internal.dp.tech:11003/sse", + "uat": "http://bohrium-mcp-internal.dp.tech:11003/sse", + "prod": "http://bohrium-mcp-internal.dp.tech:11003/sse" + }, "bypass_confirmation": true }, { "tool_id": "020-ORCHESTR-001", "name": "orchestrate_input", - "description": "What it does: Generate input scripts for simulation engines (Currently supports: LAMMPS).\nWhen to use: Create input from description.\nPrerequisites / Inputs: engine_type=\"lammps\", natural language task.\nOutputs: Input script content.\nCannot do / Limits: Script generation only.\nCost / Notes: Low.", - "description_cn": "功能: 生成 input scripts 用于 simulation engines (Currently 支持: LAMMPS).\n何时使用: 创建 input 从 description.\n前提条件/输入: engine_type=\"lammps\", natural language task.\n输出: Input script content.\n无法做到/限制: Script generation 仅.\n成本/备注: 低.", + "description": { + "What it does": "Generate input scripts for simulation engines (Currently supports: LAMMPS).", + "When to use": "Create input from description.", + "Input": "engine_type=\"lammps\", natural language task.", + "Output": "Input script content.", + "Notes": "Script generation only.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "为模拟引擎生成输入脚本(当前支持:LAMMPS)。", + "使用场景": "根据描述创建输入文件。", + "输入": "engine_type=\"lammps\",自然语言任务描述。", + "输出": "输入脚本内容。", + "注意事项": "仅生成脚本,不执行模拟。", + "成本": "低。" + }, "belonging_agent": "LAMMPS_agent", "scenes": [ "MOLECULAR_DYNAMICS", @@ -785,15 +1654,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://qpus1389933.bohrium.tech:50004/mcp", + "uat": "http://qpus1389933.bohrium.tech:50004/mcp", + "prod": "https://lammps-agent-uuid1763559305.appspace.bohrium.com/mcp?token=6e158d039c1f46399578cef5e286dd4a" + } }, { "tool_id": "020-CONVERTS-002", "name": "convert_structural_format", - "description": "What it does: Convert structure to target format (Currently supports: lammps/lmp).\nWhen to use: Prepare structures for simulation.\nPrerequisites / Inputs: Structure file URL, target_format=\"lammps/lmp\".\nOutputs: Converted structure file.\nCannot do / Limits: Format conversion only.\nCost / Notes: Low.", - "description_cn": "功能: Convert structure 到 target 用于mat (Currently 支持: lammps/lmp).\n何时使用: Prepare structures 用于 simulation.\n前提条件/输入: 结构文件 URL, target_用于mat=\"lammps/lmp\".\n输出: Converted structure file.\n无法做到/限制: 用于mat conversion 仅.\n成本/备注: 低.", + "description": { + "What it does": "Convert structure to target format (Currently supports: lammps/lmp).", + "When to use": "Prepare structures for simulation.", + "Input": "Structure file URL, target_format=\"lammps/lmp\".", + "Output": "Converted structure file.", + "Notes": "Format conversion only.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "将结构转换为目标格式(当前支持:lammps/lmp)。", + "使用场景": "为模拟准备结构文件。", + "输入": "结构文件 URL;target_format=\"lammps/lmp\"。", + "输出": "转换后的结构文件。", + "注意事项": "仅进行格式转换。", + "成本": "低。" + }, "belonging_agent": "LAMMPS_agent", "scenes": [ "MOLECULAR_DYNAMICS", @@ -801,15 +1689,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://qpus1389933.bohrium.tech:50004/mcp", + "uat": "http://qpus1389933.bohrium.tech:50004/mcp", + "prod": "https://lammps-agent-uuid1763559305.appspace.bohrium.com/mcp?token=6e158d039c1f46399578cef5e286dd4a" + } }, { "tool_id": "020-RUNLAMMP-003", "name": "run_lammps", - "description": "What it does: Run LAMMPS simulations.\nWhen to use: Perform MD or minimization.\nPrerequisites / Inputs: LAMMPS data file.\nOutputs: Simulation results.\nCannot do / Limits: Requires LAMMPS format.\nCost / Notes: High (simulation time).", - "description_cn": "功能: 运行 LAMMPS simulations.\n何时使用: 执行 MD 或 minimization.\n前提条件/输入: LAMMPS data file.\n输出: Simulation results.\n无法做到/限制: 需要 LAMMPS 用于mat.\n成本/备注: 高 (simulation time).", + "description": { + "What it does": "Run LAMMPS simulations.", + "When to use": "Perform MD or minimization.", + "Input": "LAMMPS data file.", + "Output": "Simulation results.", + "Notes": "Requires LAMMPS format.", + "Costs": "High (simulation time)." + }, + "description_cn": { + "工具简介": "运行 LAMMPS 分子动力学模拟。", + "使用场景": "执行分子动力学或能量最小化。", + "输入": "LAMMPS 数据文件。", + "输出": "模拟结果。", + "注意事项": "输入须为 LAMMPS 格式。", + "成本": "高(取决于模拟时长)。" + }, "belonging_agent": "LAMMPS_agent", "scenes": [ "MOLECULAR_DYNAMICS", @@ -817,60 +1724,136 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://qpus1389933.bohrium.tech:50004/mcp", + "uat": "http://qpus1389933.bohrium.tech:50004/mcp", + "prod": "https://lammps-agent-uuid1763559305.appspace.bohrium.com/mcp?token=6e158d039c1f46399578cef5e286dd4a" + } }, { "tool_id": "021-NMRSEARC-001", "name": "NMR_search_tool", - "description": "What it does: Search a molecular database by NMR spectroscopic features to retrieve candidate structures.\nWhen to use: You have NMR peak/shift patterns and want likely matching molecules.\nPrerequisites / Inputs: NMR features (e.g., shifts, multiplicities, coupling, nucleus type) in the tool-accepted schema; optional tolerance settings.\nOutputs: Ranked candidate molecules/structures with match scores and key evidence fields.\nCannot do / Limits: Not a definitive identification; results depend on database coverage and feature quality.\nCost / Notes: Medium; tighter tolerances increase runtime and reduce recall.", - "description_cn": "功能: 搜索 a molecular database 通过 NMR spectroscopic features 到 retrieve c和idate structures.\n何时使用: You have NMR peak/shift patterns 和 want likely matching molecules.\n前提条件/输入: NMR features (e.g., shifts, multiplicities, coupling, nucleus type) in the 到ol-accepted schema; 可选 到lerance settings.\n输出: Ranked c和idate molecules/structures 使用 match sc或es 和 key evidence fields.\n无法做到/限制: Not a definitive identification; results depend on database coverage 和 feature quality.\n成本/备注: 中; tighter 到lerances increase runtime 和 reduce recall.", + "description": { + "What it does": "Search a molecular database by NMR spectroscopic features to retrieve candidate structures.", + "When to use": "You have NMR peak/shift patterns and want likely matching molecules.", + "Input": "NMR features (e.g., shifts, multiplicities, coupling, nucleus type) in the tool-accepted schema; optional tolerance settings.", + "Output": "Ranked candidate molecules/structures with match scores and key evidence fields.", + "Notes": "Not a definitive identification; results depend on database coverage and feature quality.", + "Costs": "Medium; tighter tolerances increase runtime and reduce recall." + }, + "description_cn": { + "工具简介": "根据核磁共振谱图特征在分子数据库中检索候选结构。", + "使用场景": "已有 NMR 峰/化学位移等谱图信息,需要匹配的可能分子。", + "输入": "符合工具规范的 NMR 特征(如化学位移、多重度、耦合、核类型等);可选容差设置。", + "输出": "带匹配分数和关键证据的候选分子/结构排序列表。", + "注意事项": "非唯一鉴定;结果依赖数据库覆盖度和特征质量。", + "成本": "中等;容差越严,耗时增加、召回率降低。" + }, "belonging_agent": "nmr_agent", "scenes": [ "NMR" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://aubn1408899.bohrium.tech:50001/sse", + "uat": "http://aubn1408899.bohrium.tech:50001/sse", + "prod": "http://aubn1408899.bohrium.tech:50001/sse" + } }, { "tool_id": "021-NMRPREDI-002", "name": "NMR_predict_tool", - "description": "What it does: Predict NMR spectroscopic properties for molecular structures.\nWhen to use: When you need simulated NMR chemical shifts.\nPrerequisites / Inputs: SMILES strings.\nOutputs: Predicted NMR shifts and similarity scores.\nCannot do / Limits: 1H and 13C only.\nCost / Notes: Medium.", - "description_cn": "功能: 预测 NMR spectroscopic properties 用于 molecular structures.\n何时使用: 当您需要 simulated NMR chemical shifts.\n前提条件/输入: SMILES strings.\n输出: 预测ed NMR shifts 和 similarity sc或es.\n无法做到/限制: 1H 和 13C 仅.\n成本/备注: 中.", + "description": { + "What it does": "Predict NMR spectroscopic properties for molecular structures.", + "When to use": "When you need simulated NMR chemical shifts.", + "Input": "SMILES strings.", + "Output": "Predicted NMR shifts and similarity scores.", + "Notes": "1H and 13C only.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "预测分子结构的核磁共振谱图性质。", + "使用场景": "需要模拟的 NMR 化学位移时使用。", + "输入": "SMILES 字符串。", + "输出": "预测的 NMR 化学位移及相似度分数。", + "注意事项": "仅支持 1H 与 13C。", + "成本": "中等。" + }, "belonging_agent": "nmr_agent", "scenes": [ "NMR" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://aubn1408899.bohrium.tech:50001/sse", + "uat": "http://aubn1408899.bohrium.tech:50001/sse", + "prod": "http://aubn1408899.bohrium.tech:50001/sse" + } }, { "tool_id": "021-NMRREVER-003", "name": "NMR_reverse_predict_tool", - "description": "What it does: Generate candidate molecular structures from NMR spectroscopic data.\nWhen to use: When you have NMR data and need structure candidates.\nPrerequisites / Inputs: NMR spectroscopic data.\nOutputs: Candidate molecular structures.\nCannot do / Limits: Based on NMR features.\nCost / Notes: Medium.", - "description_cn": "功能: 生成 c和idate molecular structures 从 NMR spectroscopic data.\n何时使用: When you have NMR data 和 need structure c和idates.\n前提条件/输入: NMR spectroscopic data.\n输出: C和idate molecular structures.\n无法做到/限制: Based on NMR features.\n成本/备注: 中.", + "description": { + "What it does": "Generate candidate molecular structures from NMR spectroscopic data.", + "When to use": "When you have NMR data and need structure candidates.", + "Input": "NMR spectroscopic data.", + "Output": "Candidate molecular structures.", + "Notes": "Based on NMR features.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "从核磁共振谱图数据生成候选分子结构。", + "使用场景": "已有 NMR 数据,需要结构候选时使用。", + "输入": "核磁共振谱图数据。", + "输出": "候选分子结构。", + "注意事项": "基于 NMR 特征生成。", + "成本": "中等。" + }, "belonging_agent": "nmr_agent", "scenes": [ "NMR" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://aubn1408899.bohrium.tech:50001/sse", + "uat": "http://aubn1408899.bohrium.tech:50001/sse", + "prod": "http://aubn1408899.bohrium.tech:50001/sse" + } }, { "tool_id": "023-APEXOPTI-001", "name": "apex_optimize_structure", - "description": "What it does: Perform geometry optimization of a crystal, relaxing atomic positions and optionally the unit cell.\nWhen to use: When you need optimized crystal structure, especially for alloy systems.\nPrerequisites / Inputs: Structure file.\nOutputs: Optimized structure.\nCannot do / Limits: DFT-based.\nCost / Notes: DFT calculation cost.", - "description_cn": "功能: 执行 geometry 优化 a的 crystal, relaxing 原子ic positions 和 可选ly the unit cell.\n何时使用: 当您需要 optimized crystal structure, especially 用于 alloy systems.\n前提条件/输入: 结构文件.\n输出: 优化d structure.\n无法做到/限制: 基于 DFT.\n成本/备注: DFT 计算成本.", + "description": { + "What it does": "Perform geometry optimization of a crystal, relaxing atomic positions and optionally the unit cell.", + "When to use": "When you need optimized crystal structure, especially for alloy systems.", + "Input": "Structure file.", + "Output": "Optimized structure.", + "Notes": "DFT-based.", + "Costs": "DFT calculation cost." + }, + "description_cn": { + "工具简介": "执行晶体的几何优化,弛豫原子位置并可选择弛豫原胞。", + "使用场景": "当需要优化的晶体结构时使用,特别适用于合金体系。", + "输入": "结构文件。", + "输出": "优化后的结构。", + "注意事项": "基于 DFT。", + "成本": "涉及 DFT 计算成本。" + }, "belonging_agent": "apex_agent", "scenes": [ "OPTIMIZE_STRUCTURE", @@ -881,120 +1864,272 @@ "optimize_structure" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://rtvq1394775.bohrium.tech:50001/mcp", + "uat": "http://rtvq1394775.bohrium.tech:50001/mcp", + "prod": "https://apex-prime-uuid1754990126.appspace.bohrium.com/mcp?token=334be07f71404e92bf7ab7eb4350f1ac" + } }, { "tool_id": "024-GETDATAB-001", "name": "get_database_info", - "description": "What it does: Fetch complete schema and descriptive information for the perovskite solar cell database.\nWhen to use: Before querying the perovskite database.\nPrerequisites / Inputs: None.\nOutputs: Database schema and descriptions.\nCannot do / Limits: Specific to perovskite database.\nCost / Notes: Low.", - "description_cn": "功能: 获取 complete schema 和 descriptive in用于mation 用于 the perovskite solar cell database.\n何时使用: Be用于e querying the perovskite database.\n前提条件/输入: None.\n输出: Database schema 和 descriptions.\n无法做到/限制: 特定于 perovskite database.\n成本/备注: 低.", + "description": { + "What it does": "Fetch complete schema and descriptive information for the perovskite solar cell database.", + "When to use": "Before querying the perovskite database.", + "Input": "None.", + "Output": "Database schema and descriptions.", + "Notes": "Specific to perovskite database.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "获取钙钛矿太阳能电池数据库的完整模式和描述信息。", + "使用场景": "在查询钙钛矿数据库之前使用。 钙钛矿", + "输入": "无。", + "输出": "数据库模式和描述。", + "注意事项": "特定于钙钛矿数据库。", + "成本": "低。" + }, "belonging_agent": "perovskite_research_agent", "scenes": [ "PEROVSKITE_RESEARCH" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://cbqz1338812.bohrium.tech:50004/mcp", + "uat": "http://cbqz1338812.bohrium.tech:50004/mcp", + "prod": "https://perovskite-rag-uuid1753420543.appspace.bohrium.com/mcp?token=2034f102fe2e4eb99962dfa684058bf1" + } }, { "tool_id": "024-SQLDATAB-002", "name": "sql_database_mcp", - "description": "What it does: Execute SQL queries against the perovskite solar cell database and return first k rows.\nWhen to use: When querying perovskite database after getting schema.\nPrerequisites / Inputs: SQL query; call get_database_info first.\nOutputs: First k rows of query results.\nCannot do / Limits: Limited to first k rows.\nCost / Notes: Medium.", - "description_cn": "功能: 执行 SQL queries against the perovskite solar cell database 和 return first k rows.\n何时使用: When querying perovskite database after getting schema.\n前提条件/输入: SQL query; call get_database_info first.\n输出: First k rows query的 results.\n无法做到/限制: 仅限于 first k rows.\n成本/备注: 中.", + "description": { + "What it does": "Execute SQL queries against the perovskite solar cell database and return first k rows.", + "When to use": "When querying perovskite database after getting schema.", + "Input": "SQL query; call get_database_info first.", + "Output": "First k rows of query results.", + "Notes": "Limited to first k rows.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "对钙钛矿太阳能电池数据库执行 SQL 查询并返回前 k 行。", + "使用场景": "获取数据库架构(Schema)信息后,需要查询钙钛矿数据库时使用。 钙钛矿", + "输入": "SQL 查询语句。", + "输出": "查询结果的前 k 行。", + "注意事项": "仅限于前 k 行。", + "成本": "中等。" + }, "belonging_agent": "perovskite_research_agent", "scenes": [ "PEROVSKITE_RESEARCH" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://cbqz1338812.bohrium.tech:50004/mcp", + "uat": "http://cbqz1338812.bohrium.tech:50004/mcp", + "prod": "https://perovskite-rag-uuid1753420543.appspace.bohrium.com/mcp?token=2034f102fe2e4eb99962dfa684058bf1" + } }, { "tool_id": "024-UNIMOLPR-003", "name": "Unimol_Predict_Perovskite_Additive", - "description": "What it does: Predict the additive effect on perovskite PCE with a list of additive molecules.\nWhen to use: When you need PCE change prediction for additives.\nPrerequisites / Inputs: List of additive molecules.\nOutputs: Predicted PCE changes.\nCannot do / Limits: Specific to perovskite additives.\nCost / Notes: Medium.", - "description_cn": "功能: 预测 the additive effect on perovskite PCE 使用 a list additive的 molecules.\n何时使用: 当您需要 PCE change prediction 用于 additives.\n前提条件/输入: List additive的 molecules.\n输出: 预测ed PCE changes.\n无法做到/限制: 特定于 perovskite additives.\n成本/备注: 中.", + "description": { + "What it does": "Predict the additive effect on perovskite PCE with a list of additive molecules.", + "When to use": "When you need PCE change prediction for additives.", + "Input": "List of additive molecules.", + "Output": "Predicted PCE changes.", + "Notes": "Specific to perovskite additives.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "使用添加剂分子列表预测添加剂对钙钛矿 PCE 的影响。", + "使用场景": "当需要添加剂的 PCE 变化预测时使用。 钙钛矿", + "输入": "添加剂分子列表。", + "输出": "预测的 PCE 变化。", + "注意事项": "特定于钙钛矿添加剂。", + "成本": "中等。" + }, "belonging_agent": "perovskite_research_agent", "scenes": [ "PEROVSKITE_RESEARCH" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://cbqz1338812.bohrium.tech:50004/mcp", + "uat": "http://cbqz1338812.bohrium.tech:50004/mcp", + "prod": "https://perovskite-rag-uuid1753420543.appspace.bohrium.com/mcp?token=2034f102fe2e4eb99962dfa684058bf1" + } }, { "tool_id": "026-PHYSICAL-001", "name": "physical_adsorption_echart_data", - "description": "What it does: Analyze physical adsorption instrument reports.\nWhen to use: When you have gas adsorption data.\nPrerequisites / Inputs: Instrument reports.\nOutputs: Analyzed data.\nCannot do / Limits: Specific to physical adsorption.\nCost / Notes: Low.", - "description_cn": "功能: 分析 physical ads或ption instrument rep或ts.\n何时使用: When you have gas ads或ption data.\n前提条件/输入: Instrument rep或ts.\n输出: 分析d data.\n无法做到/限制: 特定于 physical ads或ption.\n成本/备注: 低.", + "description": { + "What it does": "Analyze physical adsorption instrument reports.", + "When to use": "When you have gas adsorption data.", + "Input": "Instrument reports.", + "Output": "Analyzed data.", + "Notes": "Specific to physical adsorption.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "分析物理吸附仪器报告。", + "使用场景": "有气体吸附数据需要分析时使用。 物理吸附", + "输入": "仪器报告。", + "输出": "分析后的数据。", + "注意事项": "仅针对物理吸附。", + "成本": "低。" + }, "belonging_agent": "physical_adsorption_agent", "scenes": [ "PHYSICAL_ADSORPTION" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@pkfz1410356.bohrium.tech:50003/sse", + "uat": "http://root@pkfz1410356.bohrium.tech:50003/sse", + "prod": "http://root@pkfz1410356.bohrium.tech:50003/sse" + } }, { "tool_id": "027-RUNPILOT-001", "name": "run_piloteye", - "description": "What it does: Perform property calculations for lithium-ion battery electrolytes using MD and DFT.\nWhen to use: When you need electrolyte property calculations.\nPrerequisites / Inputs: Params JSON with formulation.\nOutputs: Target properties from modeling pipeline.\nCannot do / Limits: Built-in molecule library; complete workflow.\nCost / Notes: High.", - "description_cn": "功能: 执行 property calculations 用于 lithium-ion battery electrolytes using MD 和 DFT.\n何时使用: 当您需要 electrolyte property calculations.\n前提条件/输入: Params JSON 使用 用于mulation.\n输出: Target properties 从 modeling pipeline.\n无法做到/限制: Built-in molecule library; complete w或kflow.\n成本/备注: 高.", + "description": { + "What it does": "Perform property calculations for lithium-ion battery electrolytes using MD and DFT.", + "When to use": "When you need electrolyte property calculations.", + "Input": "Params JSON with formulation.", + "Output": "Target properties from modeling pipeline.", + "Notes": "Built-in molecule library; complete workflow.", + "Costs": "High." + }, + "description_cn": { + "工具简介": "使用分子动力学和密度泛函理论对锂离子电池电解质进行性质计算。", + "使用场景": "当你需要评估或预测电解液体系的性能指标时。", + "输入": "包含“配方信息(Formulation)”的 JSON 格式参数文件。", + "输出": "建模流程的目标性质。", + "注意事项": "仅限使用内置分子库中的物料。该模块为固定工作流,自定义灵活度受限。", + "成本": "高。" + }, "belonging_agent": "piloteye_electro_agent", "scenes": [ "PILOTEYE_ELECTRO" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://nlig1368433.bohrium.tech:50002/sse", + "uat": "http://nlig1368433.bohrium.tech:50003/sse", + "prod": "http://nlig1368433.bohrium.tech:50001/sse" + } }, { "tool_id": "028-GETTARGE-001", "name": "get_target_info", - "description": "What it does: Get target information from configuration settings for Uni-ELF inference system.\nWhen to use: When you need configuration info for Uni-ELF.\nPrerequisites / Inputs: None.\nOutputs: Comprehensive configuration information and available target model mappings.\nCannot do / Limits: Specific to Uni-ELF system.\nCost / Notes: Low.", - "description_cn": "功能: Get target in用于mation 从 configuration settings 用于 Uni-ELF inference system.\n何时使用: 当您需要 configuration info 用于 Uni-ELF.\n前提条件/输入: None.\n输出: Comprehensive configuration in用于mation 和 available target model mappings.\n无法做到/限制: 特定于 Uni-ELF system.\n成本/备注: 低.", + "description": { + "What it does": "Get target information from configuration settings for Uni-ELF inference system.", + "When to use": "When you need configuration info for Uni-ELF.", + "Input": "None.", + "Output": "Comprehensive configuration information and available target model mappings.", + "Notes": "Specific to Uni-ELF system.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从 Uni-ELF 推理系统的配置设置中获取目标信息。", + "使用场景": "当需要 Uni-ELF 的配置信息时使用。 聚合物", + "输入": "无。", + "输出": "全面的配置信息和可用的目标模型映射。", + "注意事项": "特定于 Uni-ELF 系统。", + "成本": "低。" + }, "belonging_agent": "unielf_agent", "scenes": [ "POLYMER" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "", + "uat": "", + "prod": "http://efpl1193834.bohrium.tech:50002/sse" + } }, { "tool_id": "028-UNIELFIN-002", "name": "unielf_inference", - "description": "What it does: Run Uni-ELF inference for formulation inputs to predict properties.\nWhen to use: When you need property prediction for formulations.\nPrerequisites / Inputs: Components and ratios for formulations.\nOutputs: Predicted properties.\nCannot do / Limits: Supports mixtures and pseudo-formulations.\nCost / Notes: Medium.", - "description_cn": "功能: 运行 Uni-ELF inference 用于 用于mulation inputs 到 predict properties.\n何时使用: 当您需要 property prediction 用于 用于mulations.\n前提条件/输入: Components 和 ratios 用于 用于mulations.\n输出: 预测ed properties.\n无法做到/限制: 支持 mixtures 和 pseudo-用于mulations.\n成本/备注: 中.", + "description": { + "What it does": "Run Uni-ELF inference for formulation inputs to predict properties.", + "When to use": "When you need property prediction for formulations.", + "Input": "Components and ratios for formulations.", + "Output": "Predicted properties.", + "Notes": "Supports mixtures and pseudo-formulations.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "对配方输入运行 Uni-ELF 推理以预测性质。", + "使用场景": "当需要配方的性质预测时使用。 聚合物", + "输入": "配方的组分和比例。", + "输出": "预测的性质。", + "注意事项": "支持混合物和伪配方。", + "成本": "中等。" + }, "belonging_agent": "unielf_agent", "scenes": [ "POLYMER" ], "alternative_tools": [], "summary_prompt": "Summarize the Uni-ELF inference results based on the output:\n1. Report the url to the full results CSV file (`result_csv`).\n2. List the top 10 formulations from `top_10_results_dict`. For each, display the `formulation_id`, the composition (combine `smiles_i` and `ratio_i`), and the predicted property value (key ending in `_pred`).\n3. Highlight the best performing formulation.\n", - "summary_prompt_cn": "根据输出结果总结 Uni-ELF 推理结果:\n1. 报告完整结果 CSV 文件的 URL (`result_csv`)。\n2. 列出 `top_10_results_dict` 中的前 10 个配方。对于每个配方,显示 `formulation_id`、组成(结合 `smiles_i` 和 `ratio_i`)以及预测的属性值(以 `_pred` 结尾的键)。\n3. 突出显示表现最好的配方。\n", + "summary_cn": "Summarize the Uni-ELF inference results based on the output:\n1. Report the url to the full results CSV file (`result_csv`).\n2. List the top 10 formulations from `top_10_results_dict`. For each, display the `formulation_id`, the composition (combine `smiles_i` and `ratio_i`), and the predicted property value (key ending in `_pred`).\n3. Highlight the best performing formulation.\n", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "", + "uat": "", + "prod": "http://efpl1193834.bohrium.tech:50002/mcp" + } }, { "tool_id": "028-QUERYPOL-003", "name": "query_polymerkb_literature", - "description": "What it does: Query literature knowledge base for polymer research with natural language.\nWhen to use: When you need in-depth literature analysis on polymer topics.\nPrerequisites / Inputs: Natural language questions about polymer.\nOutputs: Literature summaries from vector similarity search.\nCannot do / Limits: Topics limited to polymers.\nCost / Notes: Medium.", - "description_cn": "功能: 查询 literature knowledge base 用于 polymer research 使用 natural language.\n何时使用: 当您需要 in-depth literature analysis on polymer 到pics.\n前提条件/输入: Natural language questions about polymer.\n输出: Literature summaries 从 vec到r similarity search.\n无法做到/限制: 到pics 仅限于 polymers.\n成本/备注: 中.", + "description": { + "What it does": "Query literature knowledge base for polymer research with natural language.", + "When to use": "When you need in-depth literature analysis on polymer topics.", + "Input": "Natural language questions about polymer.", + "Output": "Literature summaries from vector similarity search.", + "Notes": "Topics limited to polymers.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "使用自然语言查询聚合物研究的文献知识库。", + "使用场景": "当您需要对聚合物相关主题进行深入的文献分析时。 聚合物", + "输入": "关于聚合物的自然语言问题。", + "输出": "通过向量相似性搜索返回的文献摘要。", + "注意事项": "主题仅限于聚合物。", + "成本": "中等。" + }, "belonging_agent": "POLYMERkb_agent", "scenes": [ "POLYMER" @@ -1004,105 +2139,238 @@ "web-search" ], "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries and database entries (List[str])\n - Each item can be either:\n - A detailed literature summary (for papers with fulltext): Contains comprehensive analysis of the paper\n - A database entry (for papers without fulltext): Contains DOI and database properties (e.g., polymer_type, tensile_strength, flexural_strength, etc.)\n - These summaries and entries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries and database entries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n**IMPORTANT**: The summaries list may contain two types of entries:\n1. **Detailed literature summaries** (from papers with fulltext): These contain comprehensive analysis\n2. **Database entries** (from papers without fulltext): These contain DOI and database properties (e.g., polymer_type, tensile_strength, flexural_strength, glass_transition_temperature, etc.)\n\n**YOU MUST**:\n- Include BOTH types of entries in your synthesis\n- For database entries, extract and cite the quantitative data (properties, values, DOI)\n- Integrate database property data into your analysis (e.g., compare property ranges, identify trends)\n- Cite database entries using their DOI: [n] (DOI: xxx)\n- Do NOT ignore database entries - they provide valuable quantitative data even without full text\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *T_g*, *E*, *T*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed (including both detailed summaries and database entries)\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries AND database entries with detailed explanations\n - Include specific quantitative data from both detailed summaries and database entries\n - **For database entries**: Extract and cite property data (e.g., \"epoxy resins show tensile_strength values ranging from 1.2 to 1130 MPa [n] (DOI: 10.xxx), with most values between 20-60 MPa [m] (DOI: 10.yyy)\")\n - **Use database entries for statistical analysis**: Group by polymer_type, calculate property ranges, identify trends, create property distributions\n - **Example integration**: \"While detailed studies [1] show that SPAEK/PLA membranes achieve 0.129 S/cm proton conductivity, database entries reveal that epoxy resins typically exhibit tensile_strength in the range of 20-60 MPa [2-10] (DOIs: 10.xxx, 10.yyy, ...), suggesting different property profiles for different polymer classes\"\n - Use database entries to provide statistical overviews, property ranges, and material comparisons\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable (include data from database entries)\n - Address contradictions or gaps in current understanding\n - **CRITICAL**: Database entries provide valuable quantitative data - always cite them with their DOI, even if they lack full text context\n\n3. **Property Data Summary** (if database entries are present):\n - Create a dedicated section summarizing quantitative data from database entries\n - Group entries by polymer_type or property type\n - Present property ranges, typical values, and distributions\n - Use tables to organize property data from multiple database entries\n - Cite each database entry: [n] (DOI: xxx)\n\n4. **Summary of Key Findings**: Synthesize the most important insights from both detailed summaries and database entries\n\n5. **References**: List all cited sources [1], [2], [3], etc.\n - For detailed summaries: Include title, authors, journal if available\n - For database entries: Format as [n] DOI: xxx (database entry - property data only)\n - **CRITICAL**: Do NOT omit database entries from references - they are valid data sources and must be cited\n", - "summary_prompt_cn": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要和数据库条目列表(List[str])\n - 每个项目可以是:\n - 详细的文献摘要(对于有全文的论文):包含论文的全面分析\n - 数据库条目(对于没有全文的论文):包含 DOI 和数据库属性(例如,polymer_type、tensile_strength、flexural_strength 等)\n - 这些摘要和条目是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要和数据库条目。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n**重要**:摘要列表可能包含两种类型的条目:\n1. **详细的文献摘要**:包含论文的全面分析,包括方法、结果、讨论等\n2. **数据库条目**:包含 DOI 和数据库属性(例如,polymer_type、tensile_strength、flexural_strength 等)\n\n您应该将这两种类型的条目整合到报告中,使用文献摘要提供深入分析,使用数据库条目提供定量数据。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要和数据库条目的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + "summary_cn": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries and database entries (List[str])\n - Each item can be either:\n - A detailed literature summary (for papers with fulltext): Contains comprehensive analysis of the paper\n - A database entry (for papers without fulltext): Contains DOI and database properties (e.g., polymer_type, tensile_strength, flexural_strength, etc.)\n - These summaries and entries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries and database entries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n**IMPORTANT**: The summaries list may contain two types of entries:\n1. **Detailed literature summaries** (from papers with fulltext): These contain comprehensive analysis\n2. **Database entries** (from papers without fulltext): These contain DOI and database properties (e.g., polymer_type, tensile_strength, flexural_strength, glass_transition_temperature, etc.)\n\n**YOU MUST**:\n- Include BOTH types of entries in your synthesis\n- For database entries, extract and cite the quantitative data (properties, values, DOI)\n- Integrate database property data into your analysis (e.g., compare property ranges, identify trends)\n- Cite database entries using their DOI: [n] (DOI: xxx)\n- Do NOT ignore database entries - they provide valuable quantitative data even without full text\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *T_g*, *E*, *T*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed (including both detailed summaries and database entries)\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries AND database entries with detailed explanations\n - Include specific quantitative data from both detailed summaries and database entries\n - **For database entries**: Extract and cite property data (e.g., \"epoxy resins show tensile_strength values ranging from 1.2 to 1130 MPa [n] (DOI: 10.xxx), with most values between 20-60 MPa [m] (DOI: 10.yyy)\")\n - **Use database entries for statistical analysis**: Group by polymer_type, calculate property ranges, identify trends, create property distributions\n - **Example integration**: \"While detailed studies [1] show that SPAEK/PLA membranes achieve 0.129 S/cm proton conductivity, database entries reveal that epoxy resins typically exhibit tensile_strength in the range of 20-60 MPa [2-10] (DOIs: 10.xxx, 10.yyy, ...), suggesting different property profiles for different polymer classes\"\n - Use database entries to provide statistical overviews, property ranges, and material comparisons\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable (include data from database entries)\n - Address contradictions or gaps in current understanding\n - **CRITICAL**: Database entries provide valuable quantitative data - always cite them with their DOI, even if they lack full text context\n\n3. **Property Data Summary** (if database entries are present):\n - Create a dedicated section summarizing quantitative data from database entries\n - Group entries by polymer_type or property type\n - Present property ranges, typical values, and distributions\n - Use tables to organize property data from multiple database entries\n - Cite each database entry: [n] (DOI: xxx)\n\n4. **Summary of Key Findings**: Synthesize the most important insights from both detailed summaries and database entries\n\n5. **References**: List all cited sources [1], [2], [3], etc.\n - For detailed summaries: Include title, authors, journal if available\n - For database entries: Format as [n] DOI: xxx (database entry - property data only)\n - **CRITICAL**: Do NOT omit database entries from references - they are valid data sources and must be cited\n", "self_check": false, - "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_polymerkb_literature(query_description)\n\n=== KNOWLEDGE BASE COVERAGE ===\nThe knowledge base contains:\n• Structured database with polymer properties and paper metadata\n• Multiple tables including:\n - Polymer properties: polymer names, types, compositions, properties, DOI\n - Paper metadata: titles, abstracts, authors, publication dates, journal info, DOI\n - Paper full text: complete paper text and supplementary information\n - Monomer information: monomer abbreviations, full names, SMILES, notes\n• Topics covering:\n - Polymer types and compositions\n - Material properties (glass transition temperature, mechanical properties, etc.)\n - Monomer structures and synthesis\n - Processing methods and conditions\n - Structure-property relationships\n - Applications and performance\n\n**Examples:**\n1) 查询特定类型的聚合物:\n → Tool: query_polymerkb_literature\n query_description: '查找玻璃化转变温度低于400°C的聚酰亚胺相关论文'\n\n2) 查询特定单体:\n → Tool: query_polymerkb_literature\n query_description: '查找包含PMDA单体的聚合物相关论文'\n\n3) 查询特定属性的聚合物:\n → Tool: query_polymerkb_literature\n query_description: '查找发表在一区期刊上的聚酰亚胺论文'\n" + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_polymerkb_literature(query_description)\n\n=== KNOWLEDGE BASE COVERAGE ===\nThe knowledge base contains:\n• Structured database with polymer properties and paper metadata\n• Multiple tables including:\n - Polymer properties: polymer names, types, compositions, properties, DOI\n - Paper metadata: titles, abstracts, authors, publication dates, journal info, DOI\n - Paper full text: complete paper text and supplementary information\n - Monomer information: monomer abbreviations, full names, SMILES, notes\n• Topics covering:\n - Polymer types and compositions\n - Material properties (glass transition temperature, mechanical properties, etc.)\n - Monomer structures and synthesis\n - Processing methods and conditions\n - Structure-property relationships\n - Applications and performance\n\n**Examples:**\n1) 查询特定类型的聚合物:\n → Tool: query_polymerkb_literature\n query_description: '查找玻璃化转变温度低于400°C的聚酰亚胺相关论文'\n\n2) 查询特定单体:\n → Tool: query_polymerkb_literature\n query_description: '查找包含PMDA单体的聚合物相关论文'\n\n3) 查询特定属性的聚合物:\n → Tool: query_polymerkb_literature\n query_description: '查找发表在一区期刊上的聚酰亚胺论文'\n", + "server": { + "test": "http://lmnm1410647.bohrium.tech:50003/sse", + "uat": "http://lmnm1410647.bohrium.tech:50003/sse", + "prod": "http://fwne1412142.bohrium.tech:50003/sse" + } }, { "tool_id": "029-TRAJANAL-001", "name": "traj_analysis_diffusion", - "description": "What it does: Analyze diffusion from trajectories.\nWhen to use: Calculate MSD, diffusion coeffs.\nPrerequisites / Inputs: MD trajectory file.\nOutputs: MSD, D, conductivity.\nCannot do / Limits: Post-MD analysis only.\nCost / Notes: Medium.", - "description_cn": "功能: 分析 diffusion 从 trajec到ries.\n何时使用: 计算 MSD, diffusion coeffs.\n前提条件/输入: MD trajec到ry file.\n输出: MSD, D, conductivity.\n无法做到/限制: Post-MD analysis 仅.\n成本/备注: 中.", + "description": { + "What it does": "Analyze diffusion from trajectories.", + "When to use": "Calculate MSD, diffusion coeffs.", + "Input": "MD trajectory file.", + "Output": "MSD, D, conductivity.", + "Notes": "Post-MD analysis only.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "从分子动力学轨迹分析扩散。", + "使用场景": "计算均方位移(MSD)、扩散系数等。", + "输入": "分子动力学轨迹文件。", + "输出": "MSD、扩散系数 D、电导率等。", + "注意事项": "仅用于分子动力学后处理分析。", + "成本": "中等。" + }, "belonging_agent": "traj_analysis_agent", "scenes": [ "POST_MD_ANALYSIS" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://pfmx1355864.bohrium.tech:50004/sse", + "uat": "http://pfmx1355864.bohrium.tech:50004/sse", + "prod": "https://traj-analysis-mcp-uuid1753018121.appspace.bohrium.com/sse?token=f7cb423b96044d09a5096e2591a26c0c" + } }, { "tool_id": "029-TRAJANAL-002", "name": "traj_analysis_rdf", - "description": "What it does: Compute RDF from trajectories.\nWhen to use: Analyze atomic distributions.\nPrerequisites / Inputs: MD trajectory.\nOutputs: Radial distribution function.\nCannot do / Limits: Post-MD analysis only.\nCost / Notes: Medium.", - "description_cn": "功能: Compute RDF 从 trajec到ries.\n何时使用: 分析 原子ic distributions.\n前提条件/输入: MD trajec到ry.\n输出: Radial distribution function.\n无法做到/限制: Post-MD analysis 仅.\n成本/备注: 中.", + "description": { + "What it does": "Compute RDF from trajectories.", + "When to use": "Analyze atomic distributions.", + "Input": "MD trajectory.", + "Output": "Radial distribution function.", + "Notes": "Post-MD analysis only.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "从分子动力学轨迹计算径向分布函数(RDF)。", + "使用场景": "分析原子分布。", + "输入": "分子动力学轨迹。", + "输出": "径向分布函数。", + "注意事项": "仅用于分子动力学后处理分析。", + "成本": "中等。" + }, "belonging_agent": "traj_analysis_agent", "scenes": [ "POST_MD_ANALYSIS" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://pfmx1355864.bohrium.tech:50004/sse", + "uat": "http://pfmx1355864.bohrium.tech:50004/sse", + "prod": "https://traj-analysis-mcp-uuid1753018121.appspace.bohrium.com/sse?token=f7cb423b96044d09a5096e2591a26c0c" + } }, { "tool_id": "029-TRAJANAL-003", "name": "traj_analysis_solvation", - "description": "What it does: Analyze solvation structures.\nWhen to use: Study solvent-solute interactions.\nPrerequisites / Inputs: MD trajectory.\nOutputs: Solvation shells, properties.\nCannot do / Limits: Post-MD analysis only.\nCost / Notes: Medium.", - "description_cn": "功能: 分析 solvation structures.\n何时使用: Study solvent-solute interactions.\n前提条件/输入: MD trajec到ry.\n输出: Solvation shells, properties.\n无法做到/限制: Post-MD analysis 仅.\n成本/备注: 中.", + "description": { + "What it does": "Analyze solvation structures.", + "When to use": "Study solvent-solute interactions.", + "Input": "MD trajectory.", + "Output": "Solvation shells, properties.", + "Notes": "Post-MD analysis only.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "分析溶剂化结构。", + "使用场景": "研究溶剂-溶质相互作用。", + "输入": "分子动力学轨迹。", + "输出": "溶剂化壳层、相关性质。", + "注意事项": "仅用于分子动力学后处理分析。", + "成本": "中等。" + }, "belonging_agent": "traj_analysis_agent", "scenes": [ "POST_MD_ANALYSIS" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://pfmx1355864.bohrium.tech:50004/sse", + "uat": "http://pfmx1355864.bohrium.tech:50004/sse", + "prod": "https://traj-analysis-mcp-uuid1753018121.appspace.bohrium.com/sse?token=f7cb423b96044d09a5096e2591a26c0c" + } }, { "tool_id": "029-TRAJANAL-004", "name": "traj_analysis_bond", - "description": "What it does: Analyze bond length evolution.\nWhen to use: Monitor bond dynamics.\nPrerequisites / Inputs: MD trajectory.\nOutputs: Bond length time series.\nCannot do / Limits: Post-MD analysis only.\nCost / Notes: Medium.", - "description_cn": "功能: 分析 bond length evolution.\n何时使用: Moni到r bond dynamics.\n前提条件/输入: MD trajec到ry.\n输出: Bond length time series.\n无法做到/限制: Post-MD analysis 仅.\n成本/备注: 中.", + "description": { + "What it does": "Analyze bond length evolution.", + "When to use": "Monitor bond dynamics.", + "Input": "MD trajectory.", + "Output": "Bond length time series.", + "Notes": "Post-MD analysis only.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "分析键长随时间的变化。", + "使用场景": "监测化学键动力学。", + "输入": "分子动力学轨迹。", + "输出": "键长时间序列。", + "注意事项": "仅用于分子动力学后处理分析。", + "成本": "中等。" + }, "belonging_agent": "traj_analysis_agent", "scenes": [ "POST_MD_ANALYSIS" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://pfmx1355864.bohrium.tech:50004/sse", + "uat": "http://pfmx1355864.bohrium.tech:50004/sse", + "prod": "https://traj-analysis-mcp-uuid1753018121.appspace.bohrium.com/sse?token=f7cb423b96044d09a5096e2591a26c0c" + } }, { "tool_id": "029-TRAJANAL-005", "name": "traj_analysis_react", - "description": "What it does: Analyze reaction networks.\nWhen to use: Study chemical reactions.\nPrerequisites / Inputs: MD trajectory.\nOutputs: Reaction species, networks.\nCannot do / Limits: Post-MD analysis only.\nCost / Notes: Medium.", - "description_cn": "功能: 分析 reaction netw或ks.\n何时使用: Study chemical reactions.\n前提条件/输入: MD trajec到ry.\n输出: Reaction species, netw或ks.\n无法做到/限制: Post-MD analysis 仅.\n成本/备注: 中.", + "description": { + "What it does": "Analyze reaction networks.", + "When to use": "Study chemical reactions.", + "Input": "MD trajectory.", + "Output": "Reaction species, networks.", + "Notes": "Post-MD analysis only.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "分析反应网络。", + "使用场景": "研究化学反应。", + "输入": "分子动力学轨迹。", + "输出": "反应物种、反应网络。", + "注意事项": "仅用于分子动力学后处理分析。", + "成本": "中等。" + }, "belonging_agent": "traj_analysis_agent", "scenes": [ "POST_MD_ANALYSIS" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://pfmx1355864.bohrium.tech:50004/sse", + "uat": "http://pfmx1355864.bohrium.tech:50004/sse", + "prod": "https://traj-analysis-mcp-uuid1753018121.appspace.bohrium.com/sse?token=f7cb423b96044d09a5096e2591a26c0c" + } }, { "tool_id": "030-CALCULAT-001", "name": "calculate_reaction_profile", - "description": "What it does: Calculate reaction profile.\nWhen to use: For organic reaction analysis.\nPrerequisites / Inputs: Reaction inputs.\nOutputs: Reaction profile.\nCannot do / Limits: Specific to reactions.\nCost / Notes: Medium.", - "description_cn": "功能: 计算 reaction profile.\n何时使用: 用于 或ganic reaction analysis.\n前提条件/输入: Reaction inputs.\n输出: Reaction profile.\n无法做到/限制: 特定于 reactions.\n成本/备注: 中.", + "description": { + "What it does": "Calculate reaction profile.", + "When to use": "For organic reaction analysis.", + "Input": "Reaction inputs.", + "Output": "Reaction profile.", + "Notes": "Specific to reactions.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "计算反应势能剖面。", + "使用场景": "用于有机反应分析。 反应", + "输入": "反应输入。", + "输出": "反应势能剖面(展示反应坐标与能量关系的剖面图)。", + "注意事项": "仅针对化学反应体系;不适用于通用的结构搜索或非反应性计算。", + "成本": "中等。" + }, "belonging_agent": "organic_reaction_agent", "scenes": [ "REACTION" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://luts1388252.bohrium.tech:50001/sse", + "uat": "http://luts1388252.bohrium.tech:50001/sse", + "prod": "https://1f187c8bc462403c4646ab271007edf4.app-space.dplink.cc/sse?token=aca7d1ad24ef436faa4470eaea006c12" + } }, { "tool_id": "033-QUERYSTE-001", "name": "query_steelkb_literature", - "description": "What it does: Query literature knowledge base for Stainless Steel research.\nWhen to use: When you need in-depth literature analysis on Stainless Steel topics.\nPrerequisites / Inputs: Natural language questions about Stainless Steel.\nOutputs: Literature summaries from vector search.\nCannot do / Limits: Topics limited to Stainless Steel.\nCost / Notes: Medium.", - "description_cn": "功能: 查询 literature knowledge base 用于 Stainless Steel research.\n何时使用: 当您需要 in-depth literature analysis on Stainless Steel 到pics.\n前提条件/输入: Natural language questions about Stainless Steel.\n输出: Literature summaries 从 vec到r search.\n无法做到/限制: 到pics 仅限于 Stainless Steel.\n成本/备注: 中.", + "description": { + "What it does": "Query literature knowledge base for Stainless Steel research.", + "When to use": "When you need in-depth literature analysis on Stainless Steel topics.", + "Input": "Natural language questions about Stainless Steel.", + "Output": "Literature summaries from vector search.", + "Notes": "Topics limited to Stainless Steel.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "查询不锈钢研究的文献知识库。", + "使用场景": "当您需要对不锈钢相关主题进行深入的文献分析时。 不锈钢", + "输入": "关于不锈钢的自然语言问题。", + "输出": "通过向量搜索返回的文献摘要。", + "注意事项": "主题仅限于不锈钢。", + "成本": "中等。" + }, "belonging_agent": "STEELkb_agent", "scenes": [ "STEEL" @@ -1112,15 +2380,34 @@ "web-search" ], "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries (List[str])\n - Each summary is a text string containing the summary of one literature paper\n - These summaries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries with detailed explanations\n - Include specific quantitative data, experimental conditions, and results\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable\n - Address contradictions or gaps in current understanding\n\n3. **Summary of Key Findings**: Synthesize the most important insights\n\n4. **References**: List all cited sources [1], [2], [3], etc.\n", - "summary_prompt_cn": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要列表(List[str])\n - 每个摘要是包含一篇文献论文摘要的文本字符串\n - 这些摘要是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + "summary_cn": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries (List[str])\n - Each summary is a text string containing the summary of one literature paper\n - These summaries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries with detailed explanations\n - Include specific quantitative data, experimental conditions, and results\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable\n - Address contradictions or gaps in current understanding\n\n3. **Summary of Key Findings**: Synthesize the most important insights\n\n4. **References**: List all cited sources [1], [2], [3], etc.\n", "self_check": false, - "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_steelkb_literature(question, top_k)\n\n**Parameters:**\n- question (str, required): Natural language query about Stainless Steel research topics\n- top_k (int, optional): Number of chunks to retrieve (5-15 recommended, default: 5)\n\n**Examples:**\n1) 查询不锈钢的腐蚀机制:\n → Tool: query_steelkb_literature\n question: '不锈钢的腐蚀行为和防护机制是什么?不同元素对腐蚀性能的影响如何?'\n top_k: 5\n\n2) 查询力学性能:\n → Tool: query_steelkb_literature\n question: '不锈钢的力学性能如何?影响力学性能的主要因素有哪些?'\n top_k: 8\n\n3) 查询微观结构:\n → Tool: query_steelkb_literature\n question: '不锈钢的微观结构特征是什么?如何通过热处理调控微观结构?'\n top_k: 10\n\n4) 查询制备方法:\n → Tool: query_steelkb_literature\n question: '不锈钢的主要制备方法有哪些?不同制备方法对合金性能的影响如何?'\n top_k: 5\n" + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_steelkb_literature(question, top_k)\n\n**Parameters:**\n- question (str, required): Natural language query about Stainless Steel research topics\n- top_k (int, optional): Number of chunks to retrieve (5-15 recommended, default: 5)\n\n**Examples:**\n1) 查询不锈钢的腐蚀机制:\n → Tool: query_steelkb_literature\n question: '不锈钢的腐蚀行为和防护机制是什么?不同元素对腐蚀性能的影响如何?'\n top_k: 5\n\n2) 查询力学性能:\n → Tool: query_steelkb_literature\n question: '不锈钢的力学性能如何?影响力学性能的主要因素有哪些?'\n top_k: 8\n\n3) 查询微观结构:\n → Tool: query_steelkb_literature\n question: '不锈钢的微观结构特征是什么?如何通过热处理调控微观结构?'\n top_k: 10\n\n4) 查询制备方法:\n → Tool: query_steelkb_literature\n question: '不锈钢的主要制备方法有哪些?不同制备方法对合金性能的影响如何?'\n top_k: 5\n", + "server": { + "test": "http://lmnm1410647.bohrium.tech:50004/sse", + "uat": "http://lmnm1410647.bohrium.tech:50004/sse", + "prod": "http://fwne1412142.bohrium.tech:50004/sse" + } }, { "tool_id": "033-PREDICTT-002", "name": "predict_tensile_strength", - "description": "What it does: Predict ultimate tensile strength for stainless steel using neural network.\nWhen to use: When you need UTS prediction based on composition.\nPrerequisites / Inputs: List of chemical formulas.\nOutputs: List of predicted UTS values in MPa.\nCannot do / Limits: Stainless steel only; no files returned.\nCost / Notes: Low.", - "description_cn": "功能: 预测 ultimate tensile strength 用于 stainless steel using neural netw或k.\n何时使用: 当您需要 UTS prediction based on composition.\n前提条件/输入: List chemical的 用于mulas.\n输出: List predicted的 UTS values in MPa.\n无法做到/限制: Stainless steel 仅; no files returned.\n成本/备注: 低.", + "description": { + "What it does": "Predict ultimate tensile strength for stainless steel using neural network.", + "When to use": "When you need UTS prediction based on composition.", + "Input": "List of chemical formulas.", + "Output": "List of predicted UTS values in MPa.", + "Notes": "Stainless steel only; no files returned.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "使用神经网络预测不锈钢的极限抗拉强度。", + "使用场景": "当您需要基于化学成分预测抗拉强度时。 不锈钢", + "输入": "化学配方列表。", + "输出": "预测的极限抗拉强度值列表(单位:MPa)。", + "注意事项": "仅适用于不锈钢;不返回文件。", + "成本": "低。" + }, "belonging_agent": "STEEL_PREDICT_agent", "scenes": [ "STEEL" @@ -1130,30 +2417,68 @@ "web-search" ], "summary_prompt": "\n## RESPONSE FORMAT\n\n**Returns:**\n- List of float values: List of predicted tensile strength values in MPa\n- The order matches the input formula list\n- Example: [650.25, 680.50, 695.30] for three formulas\n- For single formula: Returns a list with one value, e.g., [650.25]\n\n**Presentation Guidelines:**\n- Present results clearly to the user:\n - For single formula: \"预测结果: 650.25 MPa\"\n - For batch: Create a table or list showing formula → prediction mapping\n- If the user asks for interpretation, explain what the predicted value(s) mean in context\n- For batch results, analyze trends (e.g., \"As Cr content increases from 16% to 22%, predicted strength increases from 620.30 to 710.15 MPa\")\n- Compare with typical stainless steel tensile strength ranges if relevant (e.g., 300-800 MPa for common grades)\n- When presenting batch results, organize them in a clear format (table, list, or trend analysis)\n- Match each prediction value with its corresponding formula from the input list\n", - "summary_prompt_cn": "## 响应格式\n\n**返回:**\n- 浮点值列表:预测的抗拉强度值列表(单位:MPa)\n- 顺序与输入化学式列表匹配\n- 示例:三个化学式为 [650.25, 680.50, 695.30]\n", + "summary_cn": "\n## RESPONSE FORMAT\n\n**Returns:**\n- List of float values: List of predicted tensile strength values in MPa\n- The order matches the input formula list\n- Example: [650.25, 680.50, 695.30] for three formulas\n- For single formula: Returns a list with one value, e.g., [650.25]\n\n**Presentation Guidelines:**\n- Present results clearly to the user:\n - For single formula: \"预测结果: 650.25 MPa\"\n - For batch: Create a table or list showing formula → prediction mapping\n- If the user asks for interpretation, explain what the predicted value(s) mean in context\n- For batch results, analyze trends (e.g., \"As Cr content increases from 16% to 22%, predicted strength increases from 620.30 to 710.15 MPa\")\n- Compare with typical stainless steel tensile strength ranges if relevant (e.g., 300-800 MPa for common grades)\n- When presenting batch results, organize them in a clear format (table, list, or trend analysis)\n- Match each prediction value with its corresponding formula from the input list\n", "self_check": false, - "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** predict_tensile_strength(formula)\n\n**Parameters:**\n- formula (list[str], required): List of chemical formula strings\n - **IMPORTANT**: Always provide a list, even for a single formula\n - Format: ElementSymbol followed by numeric value\n - Example (single): [\"Fe70Cr20Ni10\"] means Fe=70%, Cr=20%, Ni=10%\n - Example (single): [\"C0.1Si0.5Mn1.0Cr18.0Ni8.0\"] means C=0.1%, Si=0.5%, Mn=1.0%, Cr=18.0%, Ni=8.0%\n - Example (batch): [\"Fe70Cr20Ni10\", \"Fe68Cr22Ni10\", \"Fe66Cr24Ni10\"] for multiple predictions\n\n**Allowed Elements:**\nB, C, N, O, Al, Si, P, S, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Nb, Mo, W\n\n**Examples:**\n1) Predict tensile strength for a single formula (use list with one element):\n → Tool: predict_tensile_strength\n formula: [\"Fe70Cr20Ni10\"]\n Returns: [650.25] (list with one value)\n\n2) Predict tensile strength with specific composition:\n → Tool: predict_tensile_strength\n formula: [\"C0.1Si0.5Mn1.0Cr18.0Ni8.0\"]\n Returns: [680.50] (list with one value)\n\n3) Batch prediction for multiple formulas (more efficient):\n → Tool: predict_tensile_strength\n formula: [\"Fe70Cr20Ni10\", \"Fe68Cr22Ni10\", \"Fe66Cr24Ni10\", \"Fe64Cr26Ni10\"]\n Returns: [650.25, 680.50, 695.30, 710.15]\n This is especially useful when analyzing the effect of element variation on strength.\n\n4) Systematic composition variation analysis:\n → Tool: predict_tensile_strength\n formula: [\"Fe66Cr16Ni12Mo2.5\", \"Fe64Cr18Ni12Mo2.5\", \"Fe62Cr20Ni12Mo2.5\", \"Fe60Cr22Ni12Mo2.5\"]\n Returns: [620.30, 650.25, 680.50, 710.15]\n Use this to analyze how changing Cr content affects tensile strength.\n\n**Usage Guidelines:**\n- **CRITICAL**: Always provide formula as a list, even for a single formula: [\"Fe70Cr20Ni10\"] not \"Fe70Cr20Ni10\"\n- Always provide the chemical formula in the correct format\n- Ensure all elements in the formula are from the allowed set\n- The tool will automatically handle element ordering and normalization\n- If prediction fails, check the formula format and element names\n- The model uses standardized input features, so the tool handles data preprocessing automatically\n- **For systematic analysis**: Use batch prediction when analyzing element variation effects (e.g., changing Cr from 16% to 22%)\n- **Batch prediction is more efficient**: When predicting multiple formulas, include all in one list\n" + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** predict_tensile_strength(formula)\n\n**Parameters:**\n- formula (list[str], required): List of chemical formula strings\n - **IMPORTANT**: Always provide a list, even for a single formula\n - Format: ElementSymbol followed by numeric value\n - Example (single): [\"Fe70Cr20Ni10\"] means Fe=70%, Cr=20%, Ni=10%\n - Example (single): [\"C0.1Si0.5Mn1.0Cr18.0Ni8.0\"] means C=0.1%, Si=0.5%, Mn=1.0%, Cr=18.0%, Ni=8.0%\n - Example (batch): [\"Fe70Cr20Ni10\", \"Fe68Cr22Ni10\", \"Fe66Cr24Ni10\"] for multiple predictions\n\n**Allowed Elements:**\nB, C, N, O, Al, Si, P, S, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Nb, Mo, W\n\n**Examples:**\n1) Predict tensile strength for a single formula (use list with one element):\n → Tool: predict_tensile_strength\n formula: [\"Fe70Cr20Ni10\"]\n Returns: [650.25] (list with one value)\n\n2) Predict tensile strength with specific composition:\n → Tool: predict_tensile_strength\n formula: [\"C0.1Si0.5Mn1.0Cr18.0Ni8.0\"]\n Returns: [680.50] (list with one value)\n\n3) Batch prediction for multiple formulas (more efficient):\n → Tool: predict_tensile_strength\n formula: [\"Fe70Cr20Ni10\", \"Fe68Cr22Ni10\", \"Fe66Cr24Ni10\", \"Fe64Cr26Ni10\"]\n Returns: [650.25, 680.50, 695.30, 710.15]\n This is especially useful when analyzing the effect of element variation on strength.\n\n4) Systematic composition variation analysis:\n → Tool: predict_tensile_strength\n formula: [\"Fe66Cr16Ni12Mo2.5\", \"Fe64Cr18Ni12Mo2.5\", \"Fe62Cr20Ni12Mo2.5\", \"Fe60Cr22Ni12Mo2.5\"]\n Returns: [620.30, 650.25, 680.50, 710.15]\n Use this to analyze how changing Cr content affects tensile strength.\n\n**Usage Guidelines:**\n- **CRITICAL**: Always provide formula as a list, even for a single formula: [\"Fe70Cr20Ni10\"] not \"Fe70Cr20Ni10\"\n- Always provide the chemical formula in the correct format\n- Ensure all elements in the formula are from the allowed set\n- The tool will automatically handle element ordering and normalization\n- If prediction fails, check the formula format and element names\n- The model uses standardized input features, so the tool handles data preprocessing automatically\n- **For systematic analysis**: Use batch prediction when analyzing element variation effects (e.g., changing Cr from 16% to 22%)\n- **Batch prediction is more efficient**: When predicting multiple formulas, include all in one list\n", + "server": { + "test": "http://khag1410990.bohrium.tech:50001/sse", + "uat": "http://khag1410990.bohrium.tech:50001/sse", + "prod": "http://khag1410990.bohrium.tech:50002/sse" + } }, { "tool_id": "034-GENERATE-001", "name": "generate_calypso_structures", - "description": "What it does: Perform global structure search with CALYPSO to generate candidate crystal structures.\nWhen to use: When you need to explore polymorphs for a composition.\nPrerequisites / Inputs: Valid element inputs; CALYPSO environment.\nOutputs: Multiple POSCAR files.\nCannot do / Limits: Requires relaxation downstream.\nCost / Notes: Medium.", - "description_cn": "功能: 执行 global structure search 使用 CALYPSO 到 generate c和idate crystal structures.\n何时使用: 当您需要 到 expl或e polym或phs 用于 a composition.\n前提条件/输入: Valid element inputs; CALYPSO environment.\n输出: Multiple POSCAR files.\n无法做到/限制: 需要 弛豫 downstream.\n成本/备注: 中.", + "description": { + "What it does": "Perform global structure search with CALYPSO to generate candidate crystal structures.", + "When to use": "When you need to explore polymorphs for a composition.", + "Input": "Valid element inputs; CALYPSO environment.", + "Output": "Multiple POSCAR files.", + "Notes": "Requires relaxation downstream.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "利用 CALYPSO 进行全局结构搜索,从而生成一系列候选晶体结构。", + "使用场景": "当需要探索成分的同质异形体时使用。 结构生成", + "输入": "有效的元素输入。", + "输出": "POSCAR 文件。", + "注意事项": "需要下游弛豫。", + "成本": "中等。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": true, - "args_setting": "Parameter guidance: n_tot=10–30 gives reasonable diversity without excessive cost. Elements must be from the supported list (H–Bi, Ac–Pu). Output is a set of POSCAR files; downstream relaxation is strongly recommended." + "args_setting": "Parameter guidance: n_tot=10–30 gives reasonable diversity without excessive cost. Elements must be from the supported list (H–Bi, Ac–Pu). Output is a set of POSCAR files; downstream relaxation is strongly recommended.", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + } }, { "tool_id": "034-GENERATE-002", "name": "generate_crystalformer_structures", - "description": "What it does: Generate crystal structures based on conditional attributes and space groups.\nWhen to use: When you need structures with specific properties.\nPrerequisites / Inputs: Target properties (bandgap, moduli, Tc, sound); space groups.\nOutputs: Generated structures.\nCannot do / Limits: Limited to supported properties; requires space group.\nCost / Notes: High; uses generative model.", - "description_cn": "功能: 生成 crystal structures based on conditional attributes 和 space groups.\n何时使用: 当您需要 structures 使用 specific properties.\n前提条件/输入: Target properties (b和gap, moduli, Tc, sound); space groups.\n输出: 生成d structures.\n无法做到/限制: 仅限于 supp或ted properties; 需要 space group.\n成本/备注: 高; uses generative model.", + "description": { + "What it does": "Generate crystal structures based on conditional attributes and space groups.", + "When to use": "When you need structures with specific properties.", + "Input": "Target properties (bandgap, moduli, Tc, sound); space groups.", + "Output": "Generated structures.", + "Notes": "Limited to supported properties; requires space group.", + "Costs": "High; uses generative model." + }, + "description_cn": { + "工具简介": "基于条件属性和空间群生成晶体结构。", + "使用场景": "当需要具有特定性质的结构时使用。 结构生成,条件生成", + "输入": "目标性质(带隙、模量、Tc、声速);空间群。", + "输出": "生成的结构。", + "注意事项": "仅支持模型预训练过的特定性质;必须指定空间群作为生成的约束条件。", + "成本": "高;使用生成模型。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE", @@ -1161,31 +2486,69 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": true, - "args_setting": "Parameter guidance: Supported properties: bandgap (eV), shear_modulus, bulk_modulus (both log₁₀ GPa), superconducting ambient_pressure/high_pressure (K), sound (m/s). For target_type=\"minimize\", use small target (e.g., 0.1) and low alpha (0.01); for \"equal\", \"greater\", \"less\", use alpha=1.0. mc_steps=500 balances convergence and speed; increase to 2000 for high-accuracy targets. sample_num=20–100 recommended; distribute across space groups if random_spacegroup_num>0. Critical: Space group must be explicitly specified by the user — no defaults or auto-inference." + "args_setting": "Parameter guidance: Supported properties: bandgap (eV), shear_modulus, bulk_modulus (both log₁₀ GPa), superconducting ambient_pressure/high_pressure (K), sound (m/s). For target_type=\"minimize\", use small target (e.g., 0.1) and low alpha (0.01); for \"equal\", \"greater\", \"less\", use alpha=1.0. mc_steps=500 balances convergence and speed; increase to 2000 for high-accuracy targets. sample_num=20–100 recommended; distribute across space groups if random_spacegroup_num>0. Critical: Space group must be explicitly specified by the user — no defaults or auto-inference.", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + } }, { "tool_id": "034-MAKESUPE-003", "name": "make_supercell_structure", - "description": "What it does: Create supercell expansion from structure file.\nWhen to use: When you need larger unit cell for simulations.\nPrerequisites / Inputs: Structure file.\nOutputs: Supercell structure.\nCannot do / Limits: Expansion only; no reduction.\nCost / Notes: Low.", - "description_cn": "功能: 创建 超胞 expansion 从 structure file.\n何时使用: 当您需要 larger unit cell 用于 simulations.\n前提条件/输入: 结构文件.\n输出: 超胞 structure.\n无法做到/限制: Expansion 仅; no reduction.\n成本/备注: 低.", + "description": { + "What it does": "Create supercell expansion from structure file.", + "When to use": "When you need larger unit cell for simulations.", + "Input": "Structure file.", + "Output": "Supercell structure.", + "Notes": "Expansion only; no reduction.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从结构文件创建超胞扩充。", + "使用场景": "当你需要构建更大尺寸的单元以进行模拟时。 结构生成", + "输入": "结构文件。", + "输出": "超胞结构。", + "注意事项": "仅支持扩展,不支持缩减。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": true, "args_setting": "Parameter guidance: Primarily follow user's instrucution. If not specified, firstly get structure information to understand the raw lattice. An ideal supercell for computation is isotropic. For example, the raw lattice is (4 A, 10 A, 12 A, 90 deg, 90 deg, 90 deg), the supercell should be 5 × 2 × 2. 30-50 angstrom is often appropriate for simulations. Avoid overly large cells unless needed for long-range interactions.", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-BUILDBUL-004", "name": "build_bulk_structure_by_template", - "description": "What it does: Build bulk structures for simple packing types and compounds.\nWhen to use: For standard crystal structures like sc, fcc, bcc, hcp, rocksalt, etc.\nPrerequisites / Inputs: Element symbols or formulas; lattice constants.\nOutputs: Crystal structure file.\nCannot do / Limits: Limited to simple structures; no complex crystals.\nCost / Notes: Low.", - "description_cn": "功能: 构建 bulk structures 用于 simple packing types 和 compounds.\n何时使用: 用于 st和ard crystal structures 如 sc, fcc, bcc, hcp, rocksalt, etc.\n前提条件/输入: Element symbols 或 用于mulas; lattice constants.\n输出: Crystal structure file.\n无法做到/限制: 仅限于 simple structures; no complex crystals.\n成本/备注: 低.", + "description": { + "What it does": "Build bulk structures for simple packing types and compounds.", + "When to use": "For standard crystal structures like sc, fcc, bcc, hcp, rocksalt, etc.", + "Input": "Element symbols or formulas; lattice constants.", + "Output": "Crystal structure file.", + "Notes": "Limited to simple structures; no complex crystals.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "为简单堆积类型和化合物构建体相结构。", + "使用场景": "用于标准晶体结构,如 sc、fcc、bcc、hcp、岩盐等。 结构生成", + "输入": "元素符号或化学式;晶格常数。", + "输出": "晶体结构文件。", + "注意事项": "仅限于简单结构;不支持复杂晶体。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" @@ -1196,80 +2559,175 @@ "build_bulk_structure_by_wyckoff" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": true, "args_setting": "Parameter guidance: Lattice constant requirements due to symmetry constraints: sc/fcc/bcc/diamond/rocksalt/cesiumchloride/zincblende/fluorite → only a; hcp/wurtzite → a and c; orthorhombic/monoclinic → a, b, c. Set conventional=True by default unless primitive cell is explicitly required. For elements, use element symbols; for compounds, use chemical formula (e.g., \"NaCl\"). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-BUILDSUR-005", "name": "build_surface_slab", - "description": "What it does: Build surface slab structures from bulk structure.\nWhen to use: When you need surface models for calculations.\nPrerequisites / Inputs: Bulk structure file; Miller indices.\nOutputs: Slab structure file.\nCannot do / Limits: Requires bulk input; vacuum added.\nCost / Notes: Low.", - "description_cn": "功能: 构建 surface slab structures 从 bulk structure.\n何时使用: 当您需要 surface models 进行计算s.\n前提条件/输入: Bulk structure file; Miller indices.\n输出: Slab structure file.\n无法做到/限制: 需要 bulk input; vacuum added.\n成本/备注: 低.", + "description": { + "What it does": "Build surface slab structures from bulk structure.", + "When to use": "When you need surface models for calculations.", + "Input": "Bulk structure file; Miller indices.", + "Output": "Slab structure file.", + "Notes": "Requires bulk input; vacuum added.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从体相结构构建表面结构。", + "使用场景": "当需要表面模型进行计算时使用。 结构生成", + "输入": "体相结构文件;Miller 指数。", + "输出": "表面结构文件。", + "注意事项": "需要体相输入;添加真空层。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": true, "args_setting": "Parameter guidance: Prefer slab_size_mode=\"layers\" with slab_size_value=4–6 for stability; or \"thickness\" with ≥12 Å for electronic convergence. Use vacuum=15–20 Å to minimize spurious interactions. For polar surfaces or systems with strong dipoles, increase vacuum to ensure the electrostatic potential flattens in the vacuum region. Enable repair=True for covalent materials (e.g., drug-like molecule crystals, oragnic-inorganic hybrids, MOFs); Set false for regular sphrical-like inorganic crystals. Gets slow if set True. Default termination=\"auto\" usually selects the most stoichiometric termination. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-BUILDSUR-006", "name": "build_surface_adsorbate", - "description": "What it does: Build surface-adsorbate structures by placing molecules on slabs.\nWhen to use: For adsorption studies.\nPrerequisites / Inputs: Surface slab and adsorbate structure files.\nOutputs: Combined structure file.\nCannot do / Limits: Single adsorbate placement.\nCost / Notes: Low.", - "description_cn": "功能: 构建 surface-ads或bate structures 通过 placing molecules on slabs.\n何时使用: 用于 ads或ption studies.\n前提条件/输入: Surface slab 和 ads或bate structure files.\n输出: Combined structure file.\n无法做到/限制: Single ads或bate placement.\n成本/备注: 低.", + "description": { + "What it does": "Build surface-adsorbate structures by placing molecules on slabs.", + "When to use": "For adsorption studies.", + "Input": "Surface slab and adsorbate structure files.", + "Output": "Combined structure file.", + "Notes": "Single adsorbate placement.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "通过在表面上放置分子来构建表面-吸附物结构。", + "使用场景": "用于吸附研究。 结构生成", + "输入": "表面结构文件和吸附质结构文件。", + "输出": "组合结构文件。", + "注意事项": "仅支持单吸附质放置。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": true, "args_setting": "Parameter guidance: height=2.0 Å is typical for physisorption; reduce to 1.5–1.8 Å for chemisorption (e.g., CO on Pt). For high-symmetry sites, use string keywords (\"ontop\", \"fcc\", \"hcp\"); for custom placement, supply [x, y] fractional coordinates. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-BUILDSUR-007", "name": "build_surface_interface", - "description": "What it does: Build heterointerface by stacking two slab structures.\nWhen to use: For interface studies.\nPrerequisites / Inputs: Two slab structure files.\nOutputs: Interface structure file.\nCannot do / Limits: Basic strain checking.\nCost / Notes: Low.", - "description_cn": "功能: 构建 heterointerface 通过 stacking two slab structures.\n何时使用: 用于 interface studies.\n前提条件/输入: Two slab structure files.\n输出: Interface structure file.\n无法做到/限制: Basic strain checking.\n成本/备注: 低.", + "description": { + "What it does": "Build heterointerface by stacking two slab structures.", + "When to use": "For interface studies.", + "Input": "Two slab structure files.", + "Output": "Interface structure file.", + "Notes": "Basic strain checking.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "通过堆叠两个表面结构来构建异质界面。", + "使用场景": "用于界面研究。 结构生成", + "输入": "两个表面结构文件。", + "输出": "界面结构文件。", + "注意事项": "基础的应变 (Strain) 检查。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": "Parameter guidance: Keep max_strain=0.05 (5%) for physical relevance; relax only if intentional strain engineering is intended. Try combinding make_supercell and get_structural_info to obtain the appropriate size of the two slabs. interface_distance=2.5 Å is safe for van der Waals gaps; reduce to 1.8–2.0 Å for covalent bonding (e.g., heterostructures with orbital overlap). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-ADDCELLF-008", "name": "add_cell_for_molecules", - "description": "What it does: Add periodic cell to molecular structures for calculations.\nWhen to use: For isolated molecule calculations requiring periodicity.\nPrerequisites / Inputs: Molecular structure file.\nOutputs: Structure with periodic cell.\nCannot do / Limits: For gas-phase molecules.\nCost / Notes: Low.", - "description_cn": "功能: Add periodic cell 到 molecular structures 进行计算s.\n何时使用: 用于 isolated molecule calculations requiring periodicity.\n前提条件/输入: Molecular structure file.\n输出: Structure 使用 periodic cell.\n无法做到/限制: 用于 gas-phase molecules.\n成本/备注: 低.", + "description": { + "What it does": "Add periodic cell to molecular structures for calculations.", + "When to use": "For isolated molecule calculations requiring periodicity.", + "Input": "Molecular structure file.", + "Output": "Structure with periodic cell.", + "Notes": "For gas-phase molecules.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "为分子结构添加周期晶胞以进行计算。", + "使用场景": "用于需要周期性的孤立分子计算。", + "输入": "分子结构文件。", + "输出": "带周期晶胞的结构。", + "注意事项": "用于气相分子。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": "Parameter guidance: For non-periodic system aiming to run calculations with periodic boundary conditions required (e.g., DFT calculations with ABACUS), use add_cell_for_molecules to put the system in a large cell. Default cell [10, 10, 10] Å and vacuum = 5 Å are suitable for most gas-phase molecules; increase to ≥15 Å and ≥8 Å vacuum for polar or diffuse systems (e.g., anions, excited states). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-BUILDBUL-009", "name": "build_bulk_structure_by_wyckoff", - "description": "What it does: Build crystal structures by specifying space group and Wyckoff positions.\nWhen to use: For custom crystal structures.\nPrerequisites / Inputs: Space group; Wyckoff positions with coordinates.\nOutputs: Crystal structure file.\nCannot do / Limits: Requires symmetry knowledge.\nCost / Notes: Low.", - "description_cn": "功能: 构建 crystal structures 通过 specifying space group 和 Wyckoff positions.\n何时使用: 用于 cus到m crystal structures.\n前提条件/输入: Space group; Wyckoff positions 使用 co或dinates.\n输出: Crystal structure file.\n无法做到/限制: 需要 symmetry knowledge.\n成本/备注: 低.", + "description": { + "What it does": "Build crystal structures by specifying space group and Wyckoff positions.", + "When to use": "For custom crystal structures.", + "Input": "Space group; Wyckoff positions with coordinates.", + "Output": "Crystal structure file.", + "Notes": "Requires symmetry knowledge.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "通过指定空间群和 Wyckoff 位置来构建晶体结构。", + "使用场景": "用于自定义晶体结构。 结构生成", + "输入": "空间群;带坐标的 Wyckoff 位置。", + "输出": "晶体结构文件。", + "注意事项": "需要对称性知识。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" @@ -1280,80 +2738,175 @@ "build_bulk_structure_by_template" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": "Parameter guidance: Space Group: Integer (e.g., 225) or Symbol (e.g., \"Fm-3m\"). Wyckoff Consistency: The provided coordinates must mathematically belong to the specific Wyckoff position (e.g., if using position 4a at (0,0,0), do not input (0.5, 0.5, 0) just because it's in the same unit cell; only input the canonical generator). Lattice: Angles in degrees, lengths in Å. Fractional Coordinates: Must be in [0, 1). Strictly Use the Asymmetric Unit: You must provide only the generating coordinates for each Wyckoff orbit. Do NOT Pre-calculate Symmetry: The function will automatically apply all space group operators to your input. If you manually input coordinates that are already symmetry-equivalent (e.g., providing both (x, y, z) and (-x, -y, -z) in a centrosymmetric structure), the function will generate them again, causing catastrophic atom overlapping. Redundancy Rule: Before adding a coordinate, check if it can be generated from an existing input coordinate via any operator in the Space Group. If yes, discard it. One Wyckoff letter = One coordinate triplet input. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-BUILDMOL-010", "name": "build_molecule_structures_from_smiles", - "description": "What it does: Build 3D molecular structures from SMILES strings.\nWhen to use: When you have SMILES and need 3D coordinates.\nPrerequisites / Inputs: SMILES string.\nOutputs: Molecular structure file.\nCannot do / Limits: Single conformer generation.\nCost / Notes: Low.", - "description_cn": "功能: 构建 3D molecular structures 从 SMILES strings.\n何时使用: When you have SMILES 和 need 3D co或dinates.\n前提条件/输入: SMILES string.\n输出: Molecular structure file.\n无法做到/限制: Single con用于mer generation.\n成本/备注: 低.", + "description": { + "What it does": "Build 3D molecular structures from SMILES strings.", + "When to use": "When you have SMILES and need 3D coordinates.", + "Input": "SMILES string.", + "Output": "Molecular structure file.", + "Notes": "Single conformer generation.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从 SMILES 字符串构建 3D 分子结构。", + "使用场景": "当您有 SMILES 并需要 3D 坐标时使用。 结构生成", + "输入": "SMILES 字符串。", + "输出": "分子结构文件。", + "注意事项": "单个构象生成。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": "\nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-MAKEDOPE-011", "name": "make_doped_structure", - "description": "What it does: Generate doped crystal structures by substituting atoms.\nWhen to use: For doping studies.\nPrerequisites / Inputs: Host structure; dopant species and concentrations.\nOutputs: Doped structure file.\nCannot do / Limits: Random substitution; recommend supercells.\nCost / Notes: Low.", - "description_cn": "功能: 生成 doped crystal structures 通过 substituting 原子.\n何时使用: 用于 doping studies.\n前提条件/输入: Host structure; dopant species 和 concentrations.\n输出: Doped structure file.\n无法做到/限制: R和om substitution; recommend 超胞s.\n成本/备注: 低.", + "description": { + "What it does": "Generate doped crystal structures by substituting atoms.", + "When to use": "For doping studies.", + "Input": "Host structure; dopant species and concentrations.", + "Output": "Doped structure file.", + "Notes": "Random substitution; recommend supercells.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "通过替换原子生成掺杂晶体结构。", + "使用场景": "用于掺杂研究。 结构生成", + "输入": "主体结构;掺杂物种和浓度。", + "输出": "掺杂结构文件。", + "注意事项": "随机替换;建议使用超胞。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": "Parameter guidance: Fractions are applied per-site; actual doping % may differ slightly in small cells — recommend ≥2×2×2 supercells for <10% doping. Covalent ions (ammonium, formamidinium, etc.) are supported via built-in library; specify by name (e.g., \"ammonium\"). \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-MAKEDEFE-012", "name": "make_defect_structure", - "description": "What it does: Create a defect structure by removing specific molecular clusters based on spatial relationships.\nWhen to use: For creating vacancy defects in molecular crystals by removing specific molecular units based on spatial clustering.\nPrerequisites / Inputs: Input molecular crystal structure file; optionally target species to remove and starting molecule index.\nOutputs: Defective structure file.\nCannot do / Limits: Specifically designed for molecular crystals where entire molecules need to be removed as clusters rather than individual atoms.\nCost / Notes: Low.", - "description_cn": "功能: 创建 a defect structure 通过 removing specific molecular clusters based on spatial relationships.\n何时使用: 用于 creating vacancy defects in molecular crystals 通过 removing specific molecular units based on spatial clustering.\n前提条件/输入: Input molecular crystal structure file; 可选ly target species 到 remove 和 starting molecule index.\n输出: Defective structure file.\n无法做到/限制: Specifically designed 用于 molecular crystals where entire molecules need 到 be removed as clusters rather than individual 原子.\n成本/备注: 低.", + "description": { + "What it does": "Create a defect structure by removing specific molecular clusters based on spatial relationships.", + "When to use": "For creating vacancy defects in molecular crystals by removing specific molecular units based on spatial clustering.", + "Input": "Input molecular crystal structure file; optionally target species to remove and starting molecule index.", + "Output": "Defective structure file.", + "Notes": "Specifically designed for molecular crystals where entire molecules need to be removed as clusters rather than individual atoms.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "通过基于空间关系移除特定分子簇来创建缺陷结构。", + "使用场景": "用于通过基于空间聚类移除特定分子单元在分子晶体中创建空位缺陷。 结构生成", + "输入": "分子晶体结构文件;(可选)目标移除物种、起始分子索引。", + "输出": "缺陷结构文件。", + "注意事项": "专为分子晶体设计。该功能确保移除的是整个分子单元,而非晶格中的孤立原子。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": "Parameter guidance: structure_path is the input molecular crystal structure file (e.g., CIF); target_spec is an optional dictionary mapping species IDs to counts to remove (e.g., {\"C6H14N2_1\": 1, \"H4N_1\": 1}), if None uses the simplest unit in crystal; seed_index is the index of molecule to start removing from, if None picks randomly from rarest species; method is the method to use for selecting molecules to remove; return_removed_cluster: controls whether returns removed clusters; output_file is the path to save the generated defective structure file.", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-MAKEAMOR-013", "name": "make_amorphous_structure", - "description": "What it does: Generate amorphous molecular structures in periodic boxes.\nWhen to use: For amorphous material simulations.\nPrerequisites / Inputs: Molecule structure; box size/density/count.\nOutputs: Amorphous structure file.\nCannot do / Limits: Avoids overlaps; for further relaxation.\nCost / Notes: Medium.", - "description_cn": "功能: 生成 am或phous molecular structures in periodic boxes.\n何时使用: 用于 am或phous material simulations.\n前提条件/输入: Molecule structure; box size/density/count.\n输出: Am或phous structure file.\n无法做到/限制: Avoids overlaps; 用于 further 弛豫.\n成本/备注: 中.", + "description": { + "What it does": "Generate amorphous molecular structures in periodic boxes.", + "When to use": "For amorphous material simulations.", + "Input": "Molecule structure; box size/density/count.", + "Output": "Amorphous structure file.", + "Notes": "Avoids overlaps; for further relaxation.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "在周期性盒子 (Periodic Box) 中生成非晶态/无定形分子结构。", + "使用场景": "用于非晶材料模拟。 结构生成", + "输入": "分子结构;盒子尺寸/密度/数量。", + "输出": "非晶结构文件。", + "注意事项": "具备基础的防重叠功能,但生成的结构仍需进行后续的结构弛豫或分子动力学平衡。", + "成本": "中等。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": true, "args_setting": "Parameter guidance: Input Constraint: Specify exactly two of: box_size, density, molecule_numbers. The third is derived. Density Regimes (CRITICAL): Solids/Liquids: Target ~0.9–1.2 g/cm³ (e.g., water ~1.0, polymers ~1.1). Gases/Vapors: Target orders of magnitude lower (e.g., ~0.001–0.002 g/cm³ for STP gases). Warning: Do not apply default liquid densities to gas inputs. If simulating a specific pressure, pre-calculate the required number of molecules N for the given Box Volume V (using Ideal Gas Law), then fix box_size and molecule_numbers. Composition: Use composition for multi-component mixtures; otherwise equal molar ratios are assumed. Packing Geometry: Box Size: For gases, ensure the box is large enough (usually >15 Å) to minimize unphysical periodic self-interactions, even if the density is low. \nRules (MUST follow, no exceptions):\n1. ASCII letters/digits/underscores only; no spaces or symbols.\n2. Format: [type]_[name][suffix].[ext]\n3. Periodic: ext = cif or vasp; Molecules: ext = xyz only.\n4. Name must be descriptive; if insufficient info, return error.\n\n\nbulk_fcc_Cu.cif\ninterface_Cu_111_Ni_111.cif\nmol_benzene.xyz\n\nINVALID EXAMPLES (explain why if produced):\nstructure.cif (not descriptive)\nmolecule1.xyz (not meaningful)\nbulk_fcc_Cu (missing extension)\nbulk_fcc_Cu.json (invalid extension)\nCu–111.cif (invalid character '-')\n\" \" (empty or whitespace)\n", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-GENERATE-014", "name": "generate_ordered_replicas", - "description": "What it does: Process disordered CIF files to generate ordered replica structures.\nWhen to use: When you have a disordered structure and need to resolve disorder to create ordered structures.\nPrerequisites / Inputs: Disordered CIF file path; optional number of structures to generate, method for generation.\nOutputs: List of paths to the generated ordered structure files.\nCannot do / Limits: Only processes disordered structures to ordered ones; requires valid CIF input.\nCost / Notes: Medium.", - "description_cn": "功能: Process dis或dered CIF files 到 generate 或dered replica structures.\n何时使用: When you have a dis或dered structure 和 need 到 resolve dis或der 到 create 或dered structures.\n前提条件/输入: Dis或dered CIF file path; 可选 number structures的 到 generate, method 用于 generation.\n输出: List paths的 到 the generated 或dered structure files.\n无法做到/限制: 仅 processes dis或dered structures 到 或dered ones; 需要 valid CIF input.\n成本/备注: 中.", + "description": { + "What it does": "Process disordered CIF files to generate ordered replica structures.", + "When to use": "When you have a disordered structure and need to resolve disorder to create ordered structures.", + "Input": "Disordered CIF file path; optional number of structures to generate, method for generation.", + "Output": "List of paths to the generated ordered structure files.", + "Notes": "Only processes disordered structures to ordered ones; requires valid CIF input.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "处理含有原子无序的 CIF 文件,生成对应的有序化副本结构。", + "使用场景": "当您有无序结构并需要解决无序以创建有序结构时使用。", + "输入": "无序 CIF 文件路径;(可选)生成的有序结构数量、生成方法。", + "输出": "生成的有序结构文件路径列表。", + "注意事项": "仅处理无序结构到有序结构;必须提供符合规范的 CIF 输入文件。", + "成本": "中等。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE", @@ -1361,16 +2914,35 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": "Parameter guidance: structure_path: Required. Input disordered structure file (CIF format). generate_count: Optional. Number of ordered structures to generate (default: 1). method: Optional. Method for generation (\"optimal\" for single best structure, \"random\" for ensemble of structures) (default: \"random\"). output_file: Optional. Directory to save output files; defaults to subdirectory of input file location.", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "034-REMOVESO-015", "name": "remove_solvents", - "description": "What it does: Remove specified solvent molecules from a molecular crystal structure.\nWhen to use: When desolvating molecular crystals to obtain solvent-free or partially desolvated structures for analysis or simulation.\nPrerequisites / Inputs: CIF structure file containing identifiable solvent molecules; target solvent names or formulas.\nOutputs: Path to the desolvated structure file.\nCannot do / Limits: Only removes whole solvent molecules that can be identified by composition; does not modify framework atoms or resolve disorder.\nPrior step: It is recommended to call get_structure_info first to inspect molecular components and confirm solvent identities.\nCost / Notes: Low. Recommended to inspect molecular components first.", - "description_cn": "功能: Remove specified solvent molecules 从 a molecular crystal structure.\n何时使用: When desolvating molecular crystals 到 obtain solvent-free 或 partially desolvated structures 用于 analysis 或 simulation.\n前提条件/输入: CIF structure file containing identifiable solvent molecules; target solvent names 或 用于mulas.\n输出: Path 到 the desolvated structure file.\n无法做到/限制: 仅 removes whole solvent molecules that can be identified 通过 composition; does not modify framew或k 原子 或 resolve dis或der.\nPri或 step: It is recommended 到 call get_structure_info first 到 inspect molecular components 和 confirm solvent identities.\n成本/备注: 低. Recommended 到 inspect molecular components first.", + "description": { + "What it does": "Remove specified solvent molecules from a molecular crystal structure.", + "When to use": "When desolvating molecular crystals to obtain solvent-free or partially desolvated structures for analysis or simulation.", + "Input": "CIF structure file containing identifiable solvent molecules; target solvent names or formulas.", + "Output": "Path to the desolvated structure file.", + "Notes": "Only removes whole solvent molecules that can be identified by composition; does not modify framework atoms or resolve disorder. Prior step: It is recommended to call get_structure_info first to inspect molecular components and confirm solvent identities.", + "Costs": "Low. Recommended to inspect molecular components first." + }, + "description_cn": { + "工具简介": "从分子晶体结构中移除指定的溶剂分子。", + "使用场景": "当对分子晶体进行去溶剂化以获得无溶剂或部分去溶剂化结构用于分析或模拟时使用。", + "输入": "包含可识别溶剂分子的 CIF 结构文件;目标溶剂名称或化学式。", + "输出": "去溶剂化结构文件的路径。", + "注意事项": "仅能移除基于化学组成识别的完整溶剂分子;该操作不会修改骨架原子,也不会处理结构中的无序问题。建议首先调用 get_structure_info 以检查分子组分并确认溶剂身份。", + "成本": "低。建议首先检查分子组分。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_GENERATE", @@ -1378,16 +2950,35 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": "Parameter guidance: structure_path: Required. Input CIF file containing solvent molecules. output_file: Required. Path to save the desolvated structure. targets: Required. List of solvent names or chemical formulas to remove (e.g., \"H2O\", \"DMF\"). ", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "035-ADDHYDRO-001", "name": "add_hydrogens", - "description": "What it does: Add hydrogen atoms to a structure.\nWhen to use: Complete structures by adding missing hydrogens.\nPrerequisites / Inputs: Structure file path; optional bonding or hydrogen-adding rules.\nOutputs: Structure file with hydrogens added.\nCannot do / Limits: No optimization, refinement, or reactions.\nCost / Notes: Low.", - "description_cn": "功能: Add hydrogen 原子 到 a structure.\n何时使用: Complete structures 通过 adding missing hydrogens.\n前提条件/输入: 结构文件 path; 可选 bonding 或 hydrogen-adding rules.\n输出: 结构文件 使用 hydrogens added.\n无法做到/限制: No 优化, refinement, 或 reactions.\n成本/备注: 低.", + "description": { + "What it does": "Add hydrogen atoms to a structure.", + "When to use": "Complete structures by adding missing hydrogens.", + "Input": "Structure file path; optional bonding or hydrogen-adding rules.", + "Output": "Structure file with hydrogens added.", + "Notes": "No optimization, refinement, or reactions.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "为输入结构添加氢原子。", + "使用场景": "补全结构中缺失的氢原子。", + "输入": "结构文件路径;成键规则或特定的加氢逻辑。", + "输出": "已添加氢原子的结构文件。", + "注意事项": "不进行优化、精化或反应。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "STRUCTURE_SANITIZE", @@ -1395,31 +2986,69 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": true, "args_setting": "- target_elements: Optional. Limit hydrogen addition to specific elements.\n- optimize_torsion: Optional. If True, adjust torsion angles to optimize geometry; default is False.\n- rules: Optional. **Critical** for special cases (e.g., N in ammonium must remain target_coordination=4 and geometry of tetrahedron). If not provided, default chemical environment rules are used. For precise control, provide rules to override defaults.\n- bond_lengths: Optional. Override default bond lengths for specific atom pairs. If None, defaults are used.\nIMPORTANT: Even though rules are optional, certain functional groups require explicit rules for correctness. ", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "036-RUNSUPER-001", "name": "run_superconductor_optimization", - "description": "What it does: Optimize superconducting structures.\nWhen to use: Relax superconductor geometries.\nPrerequisites / Inputs: Structure file (CIF/POSCAR).\nOutputs: Optimized structure.\nCannot do / Limits: Only geometry optimization.\nCost / Notes: High (DPA calculations).", - "description_cn": "功能: 优化 superconducting structures.\n何时使用: Relax superconduc到r geometries.\n前提条件/输入: 结构文件 (CIF/POSCAR).\n输出: 优化d structure.\n无法做到/限制: 仅 geometry 优化.\n成本/备注: 高 (DPA calculations).", + "description": { + "What it does": "Optimize superconducting structures.", + "When to use": "Relax superconductor geometries.", + "Input": "Structure file (CIF/POSCAR).", + "Output": "Optimized structure.", + "Notes": "Only geometry optimization.", + "Costs": "High (DPA calculations)." + }, + "description_cn": { + "工具简介": "优化超导结构。", + "使用场景": "弛豫超导体几何结构。 超导体", + "输入": "结构文件(CIF/POSCAR)。", + "输出": "优化后的结构。", + "注意事项": "仅进行几何优化。", + "成本": "高(DPA 计算)。" + }, "belonging_agent": "superconductor_agent", "scenes": [ "SUPERCONDUCTOR" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@mllo1368252.bohrium.tech:50002/sse", + "uat": "http://root@mllo1368252.bohrium.tech:50002/sse", + "prod": "https://superconductor-ambient-010-uuid1750845273.appspace.bohrium.com/sse?token=508f784b29d748af898819c6534a2fc2" + } }, { "tool_id": "036-CALCULAT-002", "name": "calculate_superconductor_enthalpy", - "description": "What it does: Calculate enthalpy and stability.\nWhen to use: Screen superconductor stability.\nPrerequisites / Inputs: Structure candidates.\nOutputs: Enthalpy, convex hull, stable phases.\nCannot do / Limits: Superconductor-specific only.\nCost / Notes: High (DPA calculations).", - "description_cn": "功能: 计算 enthalpy 和 stability.\n何时使用: 筛选 superconduc到r stability.\n前提条件/输入: Structure c和idates.\n输出: Enthalpy, convex hull, stable phases.\n无法做到/限制: Superconduc到r-specific 仅.\n成本/备注: 高 (DPA calculations).", + "description": { + "What it does": "Calculate enthalpy and stability.", + "When to use": "Screen superconductor stability.", + "Input": "Structure candidates.", + "Output": "Enthalpy, convex hull, stable phases.", + "Notes": "Superconductor-specific only.", + "Costs": "High (DPA calculations)." + }, + "description_cn": { + "工具简介": "计算焓和稳定性。", + "使用场景": "筛选超导体稳定性。 超导体", + "输入": "结构候选物。", + "输出": "焓、凸包、稳定相。", + "注意事项": "仅限超导体。", + "成本": "高(DPA 计算)。" + }, "belonging_agent": "superconductor_agent", "scenes": [ "SUPERCONDUCTOR" @@ -1428,15 +3057,34 @@ "predict_superconductor_Tc" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@mllo1368252.bohrium.tech:50002/sse", + "uat": "http://root@mllo1368252.bohrium.tech:50002/sse", + "prod": "https://superconductor-ambient-010-uuid1750845273.appspace.bohrium.com/sse?token=508f784b29d748af898819c6534a2fc2" + } }, { "tool_id": "036-PREDICTS-003", "name": "predict_superconductor_Tc", - "description": "What it does: Predict superconducting Tc.\nWhen to use: Estimate critical temperature.\nPrerequisites / Inputs: Material structure.\nOutputs: Tc prediction.\nCannot do / Limits: DPA model only.\nCost / Notes: High (ML predictions).", - "description_cn": "功能: 预测 superconducting Tc.\n何时使用: Estimate critical temperature.\n前提条件/输入: Material structure.\n输出: Tc prediction.\n无法做到/限制: DPA model 仅.\n成本/备注: 高 (ML predictions).", + "description": { + "What it does": "Predict superconducting Tc.", + "When to use": "Estimate critical temperature.", + "Input": "Material structure.", + "Output": "Tc prediction.", + "Notes": "DPA model only.", + "Costs": "High (ML predictions)." + }, + "description_cn": { + "工具简介": "预测超导 Tc。", + "使用场景": "估算临界温度。 超导体", + "输入": "材料结构。", + "输出": "Tc 预测。", + "注意事项": "仅限 DPA 模型。", + "成本": "高(ML 预测)。" + }, "belonging_agent": "superconductor_agent", "scenes": [ "SUPERCONDUCTOR" @@ -1445,30 +3093,68 @@ "calculate_superconductor_enthalpy" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@mllo1368252.bohrium.tech:50002/sse", + "uat": "http://root@mllo1368252.bohrium.tech:50002/sse", + "prod": "https://superconductor-ambient-010-uuid1750845273.appspace.bohrium.com/sse?token=508f784b29d748af898819c6534a2fc2" + } }, { "tool_id": "036-SCREENSU-004", "name": "screen_superconductor", - "description": "What it does: Screen multiple superconductors.\nWhen to use: Compare Tc and stability.\nPrerequisites / Inputs: List of candidates.\nOutputs: Ranked Tc and stability.\nCannot do / Limits: Multiple candidates only.\nCost / Notes: High (batch DPA).", - "description_cn": "功能: 筛选 multiple superconduc到rs.\n何时使用: Compare Tc 和 stability.\n前提条件/输入: List c和idates的.\n输出: Ranked Tc 和 stability.\n无法做到/限制: Multiple c和idates 仅.\n成本/备注: 高 (batch DPA).", + "description": { + "What it does": "Screen multiple superconductors.", + "When to use": "Compare Tc and stability.", + "Input": "List of candidates.", + "Output": "Ranked Tc and stability.", + "Notes": "Multiple candidates only.", + "Costs": "High (batch DPA)." + }, + "description_cn": { + "工具简介": "筛选多个超导体。", + "使用场景": "比较 Tc 和稳定性。 超导体", + "输入": "候选物列表。", + "输出": "排序的 Tc 和稳定性。", + "注意事项": "仅限多个候选物。", + "成本": "高(批量 DPA)。" + }, "belonging_agent": "superconductor_agent", "scenes": [ "SUPERCONDUCTOR" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@mllo1368252.bohrium.tech:50002/sse", + "uat": "http://root@mllo1368252.bohrium.tech:50002/sse", + "prod": "https://superconductor-ambient-010-uuid1750845273.appspace.bohrium.com/sse?token=508f784b29d748af898819c6534a2fc2" + } }, { "tool_id": "038-QUERYSSE-001", "name": "query_ssekb_literature", - "description": "What it does: Query literature knowledge base for SSE(Solid-state electrolyte) research with natural language.\nWhen to use: When you need in-depth literature analysis on Solid-state electrolyte topics.\nPrerequisites / Inputs: Natural language questions about Solid-state electrolyte.\nOutputs: Literature summaries from vector similarity search.\nCannot do / Limits: Topics limited to Solid-state electrolyte.\nCost / Notes: Medium.", - "description_cn": "功能: 查询 literature knowledge base 用于 SSE(Solid-state electrolyte) research 使用 natural language.\n何时使用: 当您需要 in-depth literature analysis on Solid-state electrolyte 到pics.\n前提条件/输入: Natural language questions about Solid-state electrolyte.\n输出: Literature summaries 从 vec到r similarity search.\n无法做到/限制: 到pics 仅限于 Solid-state electrolyte.\n成本/备注: 中.", + "description": { + "What it does": "Query literature knowledge base for SSE(Solid-state electrolyte) research with natural language.", + "When to use": "When you need in-depth literature analysis on Solid-state electrolyte topics.", + "Input": "Natural language questions about Solid-state electrolyte.", + "Output": "Literature summaries from vector similarity search.", + "Notes": "Topics limited to Solid-state electrolyte.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "使用自然语言查询固态电解质(SSE)研究的文献知识库。", + "使用场景": "当您需要对固态电解质相关主题进行深入的文献分析时。 固态电解质", + "输入": "关于固态电解质的自然语言问题。", + "输出": "通过向量相似性搜索返回的文献摘要。", + "注意事项": "主题仅限于固态电解质。", + "成本": "中等。" + }, "belonging_agent": "SSEkb_agent", "scenes": [ "Solid_State_Electrolyte" @@ -1478,135 +3164,306 @@ "web-search" ], "summary_prompt": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries and database entries (List[str])\n - Each item can be either:\n - A detailed literature summary (for papers with fulltext): Contains comprehensive analysis of the paper\n - A database entry (for papers without fulltext): Contains DOI and database properties (e.g., material properties, experimental data, etc.)\n - These summaries and entries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries and database entries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n**IMPORTANT**: The summaries list may contain two types of entries:\n1. **Detailed literature summaries** (from papers with fulltext): These contain comprehensive analysis\n2. **Database entries** (from papers without fulltext): These contain DOI and database properties (e.g., material properties, experimental data, etc.)\n\n**YOU MUST**:\n- Include BOTH types of entries in your synthesis\n- For database entries, extract and cite the quantitative data (properties, values, DOI)\n- Integrate database property data into your analysis (e.g., compare property ranges, identify trends)\n- Cite database entries using their DOI: [n] (DOI: xxx)\n- Do NOT ignore database entries - they provide valuable quantitative data even without full text\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, space groups, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed (including both detailed summaries and database entries)\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries AND database entries with detailed explanations\n - Include specific quantitative data from both detailed summaries and database entries\n - **For database entries**: Extract and cite property data (e.g., material properties, experimental values, DOI)\n - **Use database entries for statistical analysis**: Group by material type or property type, calculate property ranges, identify trends, create property distributions\n - Use database entries to provide statistical overviews, property ranges, and material comparisons\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable (include data from database entries)\n - Address contradictions or gaps in current understanding\n - **CRITICAL**: Database entries provide valuable quantitative data - always cite them with their DOI, even if they lack full text context\n\n3. **Property Data Summary** (if database entries are present):\n - Create a dedicated section summarizing quantitative data from database entries\n - Group entries by material type or property type\n - Present property ranges, typical values, and distributions\n - Use tables to organize property data from multiple database entries\n - Cite each database entry: [n] (DOI: xxx)\n\n4. **Summary of Key Findings**: Synthesize the most important insights from both detailed summaries and database entries\n\n5. **References**: List all cited sources [1], [2], [3], etc.\n - For detailed summaries: Include title, authors, journal if available\n - For database entries: Format as [n] DOI: xxx (database entry - property data only)\n - **CRITICAL**: Do NOT omit database entries from references - they are valid data sources and must be cited\n", - "summary_prompt_cn": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要和数据库条目列表(List[str])\n - 每个项目可以是:\n - 详细的文献摘要(对于有全文的论文):包含论文的全面分析\n - 数据库条目(对于没有全文的论文):包含 DOI 和数据库属性(例如,材料属性、实验数据等)\n - 这些摘要和条目是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要和数据库条目。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n**重要**:摘要列表可能包含两种类型的条目:\n1. **详细的文献摘要**:包含论文的全面分析,包括方法、结果、讨论等\n2. **数据库条目**:包含 DOI 和数据库属性(例如,材料属性、实验数据等)\n\n您应该将这两种类型的条目整合到报告中,使用文献摘要提供深入分析,使用数据库条目提供定量数据。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要和数据库条目的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", + "summary_cn": "\n## TOOL OUTPUT\n\nThe tool returns:\n- **summaries**: List of literature summaries and database entries (List[str])\n - Each item can be either:\n - A detailed literature summary (for papers with fulltext): Contains comprehensive analysis of the paper\n - A database entry (for papers without fulltext): Contains DOI and database properties (e.g., material properties, experimental data, etc.)\n - These summaries and entries are RAW MATERIALS - you must synthesize them into a comprehensive report\n- **code**: Status code\n - 0: Success (summaries available)\n - 1: No results found\n - 2: Cannot read literature fulltext\n - 4: Other errors\n\n## RESPONSE FORMAT\n\n**CRITICAL**: The tool returns RAW summaries and database entries. You MUST synthesize them into a comprehensive, in-depth research report.\n**DO NOT simply list or concatenate the summaries - synthesize them into a unified, coherent narrative.**\n\n**IMPORTANT**: The summaries list may contain two types of entries:\n1. **Detailed literature summaries** (from papers with fulltext): These contain comprehensive analysis\n2. **Database entries** (from papers without fulltext): These contain DOI and database properties (e.g., material properties, experimental data, etc.)\n\n**YOU MUST**:\n- Include BOTH types of entries in your synthesis\n- For database entries, extract and cite the quantitative data (properties, values, DOI)\n- Integrate database property data into your analysis (e.g., compare property ranges, identify trends)\n- Cite database entries using their DOI: [n] (DOI: xxx)\n- Do NOT ignore database entries - they provide valuable quantitative data even without full text\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening\n- Expression: Clear, layered, without introducing irrelevant content\n- Avoid hollow summaries: Each claim must be explicitly supported by facts, numerical data, or methodological details from the summaries\n- Include analytical depth: Provide comparisons, contradictions, or confirmations between studies whenever relevant\n- If the user's question is open-ended, provide thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships)\n 2. Quantitative or semi-quantitative results (material names, numerical data, performance metrics, space groups, etc.)\n 3. Inconsistencies, limitations, or gaps in current research\n- Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary\n\n## FORMAT INSTRUCTIONS:\n- Output in plain text with clear section headers (##, ###), no bullet points unless necessary\n- Avoid statements without evidence from the summaries (e.g., \"the first\", \"the best\", \"most popular\")\n- Add space between figures and units (e.g., 10 cm, 5 kg)\n- Use italic font for physical quantities (e.g., *E*, *T*, *k*)\n- Use bold font for vectors (e.g., **F**, **E**) and serial code names of compounds/materials (e.g., compound **1**)\n- Define abbreviations at first use and use consistently throughout\n- Cite sources using [1], [2], [3] format (number refers to summary order) throughout the text\n\n## REPORT STRUCTURE:\n1. **Introduction**: Professional definition of key concepts, key breakthroughs in recent years, main challenges that remain unsolved, number of papers analyzed (including both detailed summaries and database entries)\n\n2. **Main Content**: Organize into logical sections with subsections (##, ###). For each section:\n - Integrate findings from multiple summaries AND database entries with detailed explanations\n - Include specific quantitative data from both detailed summaries and database entries\n - **For database entries**: Extract and cite property data (e.g., material properties, experimental values, DOI)\n - **Use database entries for statistical analysis**: Group by material type or property type, calculate property ranges, identify trends, create property distributions\n - Use database entries to provide statistical overviews, property ranges, and material comparisons\n - Explain mechanisms and processes in depth (HOW things work, not just WHAT happens)\n - Compare findings across studies, highlighting agreements and disagreements\n - Use tables to compare data from different studies when applicable (include data from database entries)\n - Address contradictions or gaps in current understanding\n - **CRITICAL**: Database entries provide valuable quantitative data - always cite them with their DOI, even if they lack full text context\n\n3. **Property Data Summary** (if database entries are present):\n - Create a dedicated section summarizing quantitative data from database entries\n - Group entries by material type or property type\n - Present property ranges, typical values, and distributions\n - Use tables to organize property data from multiple database entries\n - Cite each database entry: [n] (DOI: xxx)\n\n4. **Summary of Key Findings**: Synthesize the most important insights from both detailed summaries and database entries\n\n5. **References**: List all cited sources [1], [2], [3], etc.\n - For detailed summaries: Include title, authors, journal if available\n - For database entries: Format as [n] DOI: xxx (database entry - property data only)\n - **CRITICAL**: Do NOT omit database entries from references - they are valid data sources and must be cited\n", "self_check": false, - "args_setting": "## PARAMETER CONSTRUCTION GUIDE\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_ssekb_literature(query_description)\n\n**Parameters:**\n- query_description (str, required): Natural language query about SSE(Solid-state electrolyte) research topics\n\n**Examples:**\n1) 查询特定材料属性:\n → Tool: query_ssekb_literature\n query_description: '查找具有特定性能的固态电解质材料相关论文'\n\n2) 查询特定材料类型:\n → Tool: query_ssekb_literature\n query_description: '查找特定材料类型的固态电解质相关论文'\n" + "args_setting": "## PARAMETER CONSTRUCTION GUIDE\n## PARAMETER CONSTRUCTION GUIDE\n\n**Tool:** query_ssekb_literature(query_description)\n\n**Parameters:**\n- query_description (str, required): Natural language query about SSE(Solid-state electrolyte) research topics\n\n**Examples:**\n1) 查询特定材料属性:\n → Tool: query_ssekb_literature\n query_description: '查找具有特定性能的固态电解质材料相关论文'\n\n2) 查询特定材料类型:\n → Tool: query_ssekb_literature\n query_description: '查找特定材料类型的固态电解质相关论文'\n", + "server": { + "test": "http://lmnm1410647.bohrium.tech:50002/sse", + "uat": "http://lmnm1410647.bohrium.tech:50002/sse", + "prod": "http://fwne1412142.bohrium.tech:50002/sse" + } }, { "tool_id": "039-PREDICTT-001", "name": "predict_thermoelectric_properties", - "description": "What it does: Predict thermoelectric properties.\nWhen to use: Estimate band gap, Seebeck, etc.\nPrerequisites / Inputs: Material structure.\nOutputs: Band gap, Seebeck, power factor, moduli.\nCannot do / Limits: No thermal conductivity.\nCost / Notes: High (DPA predictions).", - "description_cn": "功能: 预测 thermoelectric properties.\n何时使用: Estimate 带隙, Seebeck, etc.\n前提条件/输入: Material structure.\n输出: 带隙, Seebeck, power fac到r, moduli.\n无法做到/限制: No thermal conductivity.\n成本/备注: 高 (DPA predictions).", + "description": { + "What it does": "Predict thermoelectric properties.", + "When to use": "Estimate band gap, Seebeck, etc.", + "Input": "Material structure.", + "Output": "Band gap, Seebeck, power factor, moduli.", + "Notes": "No thermal conductivity.", + "Costs": "High (DPA predictions)." + }, + "description_cn": { + "工具简介": "预测热电性质。", + "使用场景": "估算带隙、塞贝克系数等。 热电", + "输入": "材料结构文件。", + "输出": "带隙、塞贝克系数、功率因子、模量。", + "注意事项": "暂不支持热导率的预测。", + "成本": "高(DPA 预测)。" + }, "belonging_agent": "thermoelectric_agent", "scenes": [ "THERMOELECTRIC" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@mllo1368252.bohrium.tech:50001/sse", + "uat": "http://root@mllo1368252.bohrium.tech:50001/sse", + "prod": "https://thermoelectricmcp000-uuid1750905361.appspace.bohrium.com/sse?token=f195408805934dab9313de6fb46f8767" + } }, { "tool_id": "039-RUNPRESS-002", "name": "run_pressure_optimization", - "description": "What it does: Optimize under pressure.\nWhen to use: Relax thermoelectric structures.\nPrerequisites / Inputs: Structure, pressure.\nOutputs: Optimized structure.\nCannot do / Limits: Thermoelectric-specific.\nCost / Notes: High (DPA calculations).", - "description_cn": "功能: 优化 under pressure.\n何时使用: Relax thermoelectric structures.\n前提条件/输入: Structure, pressure.\n输出: 优化d structure.\n无法做到/限制: Thermoelectric-specific.\n成本/备注: 高 (DPA calculations).", + "description": { + "What it does": "Optimize under pressure.", + "When to use": "Relax thermoelectric structures.", + "Input": "Structure, pressure.", + "Output": "Optimized structure.", + "Notes": "Thermoelectric-specific.", + "Costs": "High (DPA calculations)." + }, + "description_cn": { + "工具简介": "在压力下优化。", + "使用场景": "弛豫热电结构。 热电", + "输入": "结构、压力。", + "输出": "优化后的结构。", + "注意事项": "仅限热电材料。", + "成本": "高(DPA 计算)。" + }, "belonging_agent": "thermoelectric_agent", "scenes": [ "THERMOELECTRIC" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@mllo1368252.bohrium.tech:50001/sse", + "uat": "http://root@mllo1368252.bohrium.tech:50001/sse", + "prod": "https://thermoelectricmcp000-uuid1750905361.appspace.bohrium.com/sse?token=f195408805934dab9313de6fb46f8767" + } }, { "tool_id": "039-CALCULAT-003", "name": "calculate_thermoele_enthalp", - "description": "What it does: Calculate enthalpy under pressure.\nWhen to use: Screen thermoelectric stability.\nPrerequisites / Inputs: Candidates, pressure.\nOutputs: Enthalpy, convex hull.\nCannot do / Limits: Thermoelectric-specific.\nCost / Notes: High (DPA calculations).", - "description_cn": "功能: 计算 enthalpy under pressure.\n何时使用: 筛选 thermoelectric stability.\n前提条件/输入: C和idates, pressure.\n输出: Enthalpy, convex hull.\n无法做到/限制: Thermoelectric-specific.\n成本/备注: 高 (DPA calculations).", + "description": { + "What it does": "Calculate enthalpy under pressure.", + "When to use": "Screen thermoelectric stability.", + "Input": "Candidates, pressure.", + "Output": "Enthalpy, convex hull.", + "Notes": "Thermoelectric-specific.", + "Costs": "High (DPA calculations)." + }, + "description_cn": { + "工具简介": "计算压力下的焓。", + "使用场景": "筛选热电稳定性。 热电", + "输入": "候选物、压力。", + "输出": "焓、凸包。", + "注意事项": "仅限热电材料。", + "成本": "高(DPA 计算)。" + }, "belonging_agent": "thermoelectric_agent", "scenes": [ "THERMOELECTRIC" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@mllo1368252.bohrium.tech:50001/sse", + "uat": "http://root@mllo1368252.bohrium.tech:50001/sse", + "prod": "https://thermoelectricmcp000-uuid1750905361.appspace.bohrium.com/sse?token=f195408805934dab9313de6fb46f8767" + } }, { "tool_id": "039-SCREENTH-004", "name": "screen_thermoelectric_candidate", - "description": "What it does: Screen thermoelectric candidates.\nWhen to use: Identify promising materials.\nPrerequisites / Inputs: Multiple structures.\nOutputs: Ranked thermoelectric properties.\nCannot do / Limits: Requires multiple inputs.\nCost / Notes: High (batch DPA).", - "description_cn": "功能: 筛选 thermoelectric c和idates.\n何时使用: 识别 promising materials.\n前提条件/输入: Multiple structures.\n输出: Ranked thermoelectric properties.\n无法做到/限制: 需要 multiple inputs.\n成本/备注: 高 (batch DPA).", + "description": { + "What it does": "Screen thermoelectric candidates.", + "When to use": "Identify promising materials.", + "Input": "Multiple structures.", + "Output": "Ranked thermoelectric properties.", + "Notes": "Requires multiple inputs.", + "Costs": "High (batch DPA)." + }, + "description_cn": { + "工具简介": "筛选热电候选物。", + "使用场景": "识别有前景的材料。 热电", + "输入": "多个结构。", + "输出": "排序的热电性质。", + "注意事项": "需要多个输入。", + "成本": "高(批量 DPA)。" + }, "belonging_agent": "thermoelectric_agent", "scenes": [ "THERMOELECTRIC" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@mllo1368252.bohrium.tech:50001/sse", + "uat": "http://root@mllo1368252.bohrium.tech:50001/sse", + "prod": "https://thermoelectricmcp000-uuid1750905361.appspace.bohrium.com/sse?token=f195408805934dab9313de6fb46f8767" + } }, { "tool_id": "040-TPDPARSE-001", "name": "tpd_parse_and_get_mol", - "description": "What it does: Parse a single TPD file and extract recognized molecule weights (m/z or labels).\nWhen to use: When you need to know which molecule weights are present in a TPD file.\nPrerequisites / Inputs: Local file path, file name, data type (Signal vs. Temp/Time).\nOutputs: List of molecule weights (m/z or \"*\").\nCannot do / Limits: Only parses local files; remote URLs must be downloaded first.\nCost / Notes: Fast; supports three data types.", - "description_cn": "功能: 解析 a single TPD file 和 extract recognized molecule weights (m/z 或 labels).\n何时使用: 当您需要 到 know which molecule weights are present in a TPD file.\n前提条件/输入: Local file path, file name, data type (Signal vs. Temp/Time).\n输出: List molecule的 weights (m/z 或 \"*\").\n无法做到/限制: 仅 parses local files; remote URLs must be downloaded first.\n成本/备注: Fast; 支持 three data types.", + "description": { + "What it does": "Parse a single TPD file and extract recognized molecule weights (m/z or labels).", + "When to use": "When you need to know which molecule weights are present in a TPD file.", + "Input": "Local file path, file name, data type (Signal vs. Temp/Time).", + "Output": "List of molecule weights (m/z or \"*\").", + "Notes": "Only parses local files; remote URLs must be downloaded first.", + "Costs": "Fast; supports three data types." + }, + "description_cn": { + "工具简介": "解析单个 TPD 文件并提取识别到的分子量(m/z 或标签)。", + "使用场景": "需要获知 TPD 文件中包含哪些分子量时使用。", + "输入": "本地文件路径、文件名、数据类型(Signal 或 Temp/Time)。", + "输出": "分子量列表(m/z 或 \"*\")。", + "注意事项": "仅解析本地文件;远程 URL 需先下载。", + "成本": "快速;支持三种数据类型。" + }, "belonging_agent": "tpd_agent", "scenes": [ "TPD" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@pkfz1410356.bohrium.tech:50004/sse", + "uat": "http://root@pkfz1410356.bohrium.tech:50004/sse", + "prod": "http://root@pkfz1410356.bohrium.tech:50004/sse" + } }, { "tool_id": "040-TPDGETCH-002", "name": "tpd_get_chart", - "description": "What it does: Generate ECharts visualization config for selected molecule weights in a TPD file.\nWhen to use: When you want to plot curves for selected m/z channels from a TPD file.\nPrerequisites / Inputs: Local file path, file name, selected_weights (list of m/z), data type, line width.\nOutputs: Path to saved ECharts option JSON file.\nCannot do / Limits: Only local files; selected_weights must match available m/z.\nCost / Notes: Fast; supports three data types.", - "description_cn": "功能: 生成 ECharts visualization config 用于 selected molecule weights in a TPD file.\n何时使用: When you want 到 plot curves 用于 selected m/z channels 从 a TPD file.\n前提条件/输入: Local file path, file name, selected_weights (list m的/z), data type, line width.\n输出: Path 到 saved ECharts option JSON file.\n无法做到/限制: 仅 local files; selected_weights must match available m/z.\n成本/备注: Fast; 支持 three data types.", + "description": { + "What it does": "Generate ECharts visualization config for selected molecule weights in a TPD file.", + "When to use": "When you want to plot curves for selected m/z channels from a TPD file.", + "Input": "Local file path, file name, selected_weights (list of m/z), data type, line width.", + "Output": "Path to saved ECharts option JSON file.", + "Notes": "Only local files; selected_weights must match available m/z.", + "Costs": "Fast; supports three data types." + }, + "description_cn": { + "工具简介": "为 TPD 文件中选定的分子量生成 ECharts 可视化配置。", + "使用场景": "需要绘制 TPD 文件中选定 m/z 通道的曲线时使用。", + "输入": "本地文件路径、文件名、selected_weights(m/z 列表)、数据类型、线宽。", + "输出": "保存的 ECharts 配置 JSON 文件路径。", + "注意事项": "仅支持本地文件;selected_weights 须与可用 m/z 对应。", + "成本": "快速;支持三种数据类型。" + }, "belonging_agent": "tpd_agent", "scenes": [ "TPD" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@pkfz1410356.bohrium.tech:50004/sse", + "uat": "http://root@pkfz1410356.bohrium.tech:50004/sse", + "prod": "http://root@pkfz1410356.bohrium.tech:50004/sse" + } }, { "tool_id": "040-TPDGETCA-003", "name": "tpd_get_cal", - "description": "What it does: Perform TPD analysis (peak finding, curve fitting, integration, derivative) for a single molecule weight (m/z) signal from one file.\nWhen to use: When you need detailed peak analysis, area calculation, or derivative for a specific m/z channel or total signal.\nPrerequisites / Inputs: Local file path; target molecule weight (m/z as string like \"18\", \"44\", or \"*\" for total signal); analysis operations (peak finding, fitting, integration range, derivative settings).\nOutputs: ECharts visualization config, integration area (if calculated), error list for failed operations.\nCannot do / Limits: Processes one m/z at a time; call multiple times for multiple molecules; requires local files.\nCost / Notes: Medium; each operation is independent; default to total signal (*) if m/z not specified.", - "description_cn": "功能: 执行 TPD analysis (peak finding, curve fitting, integration, derivative) 用于 a single molecule weight (m/z) signal 从 one file.\n何时使用: 当您需要 detailed peak analysis, area calculation, 或 derivative 用于 a specific m/z channel 或 到tal signal.\n前提条件/输入: Local file path; target molecule weight (m/z as string like \"18\", \"44\", 或 \"*\" 用于 到tal signal); analysis operations (peak finding, fitting, integration range, derivative settings).\n输出: ECharts visualization config, integration area (if calculated), err或 list 用于 failed operations.\n无法做到/限制: Processes one m/z at a time; call multiple times 用于 multiple molecules; 需要 local files.\n成本/备注: 中; each operation is independent; default 到 到tal signal (*) if m/z not specified.", + "description": { + "What it does": "Perform TPD analysis (peak finding, curve fitting, integration, derivative) for a single molecule weight (m/z) signal from one file.", + "When to use": "When you need detailed peak analysis, area calculation, or derivative for a specific m/z channel or total signal.", + "Input": "Local file path; target molecule weight (m/z as string like \"18\", \"44\", or \"*\" for total signal); analysis operations (peak finding, fitting, integration range, derivative settings).", + "Output": "ECharts visualization config, integration area (if calculated), error list for failed operations.", + "Notes": "Processes one m/z at a time; call multiple times for multiple molecules; requires local files.", + "Costs": "Medium; each operation is independent; default to total signal (*) if m/z not specified." + }, + "description_cn": { + "工具简介": "对单个文件中某一分子量(m/z)信号进行 TPD 分析(寻峰、拟合、积分、求导)。", + "使用场景": "需要对特定 m/z 通道或总信号做峰分析、面积计算或求导时使用。", + "输入": "本地文件路径;目标分子量(m/z 字符串如 \"18\"、\"44\",或 \"*\" 表示总信号);分析操作(寻峰、拟合、积分范围、求导设置等)。", + "输出": "ECharts 可视化配置、积分面积(若计算)、失败操作的错误列表。", + "注意事项": "每次仅处理一个 m/z;多分子需多次调用;须为本地文件。", + "成本": "中等;各操作独立;未指定 m/z 时默认总信号。" + }, "belonging_agent": "tpd_agent", "scenes": [ "TPD" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@pkfz1410356.bohrium.tech:50004/sse", + "uat": "http://root@pkfz1410356.bohrium.tech:50004/sse", + "prod": "http://root@pkfz1410356.bohrium.tech:50004/sse" + } }, { "tool_id": "040-TPDPEAKI-004", "name": "tpd_peak_integrate", - "description": "What it does: For a single TPD file and m/z, detect peaks and integrate each peak within a local window; visualize raw curve, peak markers, and baseline segments.\nWhen to use: Quickly estimate peak areas for one channel.\nPrerequisites / Inputs: Local file path, file name, mol_weight (m/z or \"*\"), data type, baseline_mode, window_halfwidth, line width.\nOutputs: Path to ECharts option JSON, peaks list, integrations per peak, llm_context summary.\nCannot do / Limits: Only local files; window-based integration may overlap for dense peaks.\nCost / Notes: Fast; supports horizontal/trend baseline.", - "description_cn": "功能: 用于 a single TPD file 和 m/z, detect peaks 和 integrate each peak 使用in a local window; visualize raw curve, peak markers, 和 baseline segments.\n何时使用: Quickly estimate peak areas 用于 one channel.\n前提条件/输入: Local file path, file name, mol_weight (m/z 或 \"*\"), data type, baseline_mode, window_halfwidth, line width.\n输出: Path 到 ECharts option JSON, peaks list, integrations per peak, llm_context summary.\n无法做到/限制: 仅 local files; window-based integration may overlap 用于 dense peaks.\n成本/备注: Fast; 支持 h或izontal/trend baseline.", + "description": { + "What it does": "For a single TPD file and m/z, detect peaks and integrate each peak within a local window; visualize raw curve, peak markers, and baseline segments.", + "When to use": "Quickly estimate peak areas for one channel.", + "Input": "Local file path, file name, mol_weight (m/z or \"*\"), data type, baseline_mode, window_halfwidth, line width.", + "Output": "Path to ECharts option JSON, peaks list, integrations per peak, llm_context summary.", + "Notes": "Only local files; window-based integration may overlap for dense peaks.", + "Costs": "Fast; supports horizontal/trend baseline." + }, + "description_cn": { + "工具简介": "对单个 TPD 文件及 m/z,在局部窗口内检测峰并对各峰积分;可视化原始曲线、峰标记与基线段。", + "使用场景": "快速估算单通道峰面积时使用。", + "输入": "本地文件路径、文件名、mol_weight(m/z 或 \"*\")、数据类型、baseline_mode、window_halfwidth、线宽。", + "输出": "ECharts 配置 JSON 路径、峰列表、各峰积分值、llm_context 摘要。", + "注意事项": "仅支持本地文件;窗口积分在峰密集时可能重叠。", + "成本": "快速;支持水平/趋势基线。" + }, "belonging_agent": "tpd_agent", "scenes": [ "TPD" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@pkfz1410356.bohrium.tech:50004/sse", + "uat": "http://root@pkfz1410356.bohrium.tech:50004/sse", + "prod": "http://root@pkfz1410356.bohrium.tech:50004/sse" + } }, { "tool_id": "041-GETSTRUC-001", "name": "get_structure_info", - "description": "What it does: Extract structural information from **files**.\nWhen to use: Analyze crystal/molecular structures **files**.\nPrerequisites / Inputs: Structure file path.\nOutputs: Formula, space group, lattice, atoms.\nCannot do / Limits: No modifications; read-only.\nCost / Notes: Low.", - "description_cn": "功能: 提取 structural in用于mation 从 **files**.\n何时使用: 分析 crystal/molecular structures **files**.\n前提条件/输入: 结构文件 path.\n输出: 用于mula, space group, lattice, 原子.\n无法做到/限制: No modifications; read-仅.\n成本/备注: 低.", + "description": { + "What it does": "Extract structural information from **files**.", + "When to use": "Analyze crystal/molecular structures **files**.", + "Input": "Structure file path.", + "Output": "Formula, space group, lattice, atoms.", + "Notes": "No modifications; read-only.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从文件中提取结构信息。", + "使用场景": "分析晶体/分子结构文件。 通用场景", + "输入": "结构文件路径。", + "输出": "化学式、空间群、晶格、原子。", + "注意事项": "不进行修改;只读。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "UNIVERSAL" @@ -1615,16 +3472,35 @@ "file_parse" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": "", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "041-GETMOLEC-002", "name": "get_molecule_info", - "description": "What it does: Extract molecular structure information from **files**.\nWhen to use: Analyze molecular structures **files**.\nPrerequisites / Inputs: Molecule file path.\nOutputs: Formula, atoms, bonds, properties.\nCannot do / Limits: No modifications; read-only.\nCost / Notes: Low.", - "description_cn": "功能: 提取 molecular structure in用于mation 从 **files**.\n何时使用: 分析 molecular structures **files**.\n前提条件/输入: Molecule file path.\n输出: 用于mula, 原子, bonds, properties.\n无法做到/限制: No modifications; read-仅.\n成本/备注: 低.", + "description": { + "What it does": "Extract molecular structure information from **files**.", + "When to use": "Analyze molecular structures **files**.", + "Input": "Molecule file path.", + "Output": "Formula, atoms, bonds, properties.", + "Notes": "No modifications; read-only.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从文件中提取分子结构信息。", + "使用场景": "分析分子结构文件。 通用场景", + "输入": "分子文件路径。", + "输出": "化学式、原子、键、性质。", + "注意事项": "不进行修改;只读。", + "成本": "低。" + }, "belonging_agent": "structure_generate_agent", "scenes": [ "UNIVERSAL" @@ -1633,55 +3509,112 @@ "file_parse" ], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": "", + "server": { + "test": "http://qpus1389933.bohrium.tech:50003/mcp", + "uat": "https://structure-generator-uat-2-uuid1767842266.appspace.uat.bohrium.com/mcp?token=45e714e2de6942829021f4c6e81971cf", + "prod": "https://structure-generator-uuid1767674194.appspace.bohrium.com/mcp?token=a297dc122dc74368af3d2e725991d559" + }, "bypass_confirmation": true }, { "tool_id": "041-WEB-SEAR-003", "name": "web-search", - "description": "What it does: Perform web searches for what, why, how questions.\nWhen to use: For concise factual or explanatory lookups.\nPrerequisites / Inputs: Search query.\nOutputs: URL, title, snippet.\nCannot do / Limits: No command-type queries; follow up with extract_info_from_webpage.\nCost / Notes: Low.", - "description_cn": "功能: 执行 web searches 用于 what, why, how questions.\n何时使用: 用于 concise factual 或 explana到ry lookups.\n前提条件/输入: 搜索 query.\n输出: URL, title, snippet.\n无法做到/限制: No comm和-type queries; follow up 使用 extract_info_从_webpage.\n成本/备注: 低.", + "description": { + "What it does": "Perform web searches for what, why, how questions.", + "When to use": "For concise factual or explanatory lookups.", + "Input": "Search query.", + "Output": "URL, title, snippet.", + "Notes": "No command-type queries; follow up with extract_info_from_webpage.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "执行网页搜索,回答 what、why、how 类问题。", + "使用场景": "进行简明的事实查询或解释性检索。 通用场景", + "输入": "搜索查询词。", + "输出": "URL、标题、摘要片段。", + "注意事项": "不支持指令型查询;如需提取页面内容可后续调用 extract_info_from_webpage。", + "成本": "低。" + }, "belonging_agent": "science_navigator_agent", "scenes": [ "UNIVERSAL" ], "alternative_tools": [], "summary_prompt": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n# WEB SEARCH REQUIREMENTS:\n\nWhen summarizing snippets from the 'web-search' tool:\n1. Evaluate the relevance of each search result by examining the title and URL in relation to the user's query intent\n2. Skip URLs with irrelevant titles to optimize performance and reduce unnecessary processing time\n3. Ensure that only URLs that likely contain valuable information related to the user's query are processed\n4. Only pass relevant URLs to the 'extract_info_from_webpage' tool for detailed content extraction\n5. Provide short and concise answers focused on addressing the user's specific query\n\n## HANDLING “WHAT” QUESTIONS (DEFINITIONAL & FACTUAL):\n- Aim for **precise, direct, fact-based** answers grounded strictly in the retrieved snippets.\n- Extract simple definitions, key features, or key facts explicitly mentioned in the snippets.\n- When multiple snippets provide overlapping or partially consistent definitions, merge them into a **single, clear, plain-language explanation**.\n- Avoid unnecessary technical depth; prioritize clarity and factual correctness over complexity.\n- When snippets contain different perspectives, list them briefly and indicate the variation rather than forcing a single viewpoint.\n- Avoid any inference beyond what search snippets directly support.\n\nThe ending should be a concise and clear one-sentence statement. NEVER ASK THE USER FOR NEXT STEPS.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", - "summary_prompt_cn": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头。\n- 避免没有证据的声明。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n", + "summary_cn": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n# WEB SEARCH REQUIREMENTS:\n\nWhen summarizing snippets from the 'web-search' tool:\n1. Evaluate the relevance of each search result by examining the title and URL in relation to the user's query intent\n2. Skip URLs with irrelevant titles to optimize performance and reduce unnecessary processing time\n3. Ensure that only URLs that likely contain valuable information related to the user's query are processed\n4. Only pass relevant URLs to the 'extract_info_from_webpage' tool for detailed content extraction\n5. Provide short and concise answers focused on addressing the user's specific query\n\n## HANDLING “WHAT” QUESTIONS (DEFINITIONAL & FACTUAL):\n- Aim for **precise, direct, fact-based** answers grounded strictly in the retrieved snippets.\n- Extract simple definitions, key features, or key facts explicitly mentioned in the snippets.\n- When multiple snippets provide overlapping or partially consistent definitions, merge them into a **single, clear, plain-language explanation**.\n- Avoid unnecessary technical depth; prioritize clarity and factual correctness over complexity.\n- When snippets contain different perspectives, list them briefly and indicate the variation rather than forcing a single viewpoint.\n- Avoid any inference beyond what search snippets directly support.\n\nThe ending should be a concise and clear one-sentence statement. NEVER ASK THE USER FOR NEXT STEPS.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", "self_check": false, "args_setting": null, + "server": { + "test": "http://bohrium-mcp-internal.dp.tech:11003/sse", + "uat": "http://bohrium-mcp-internal.dp.tech:11003/sse", + "prod": "http://bohrium-mcp-internal.dp.tech:11003/sse" + }, "bypass_confirmation": true }, { "tool_id": "041-EXTRACTI-004", "name": "extract_info_from_webpage", - "description": "What it does: Extract key information from a webpage URL.\nWhen to use: When you need scientific facts, data, or findings from a webpage.\nPrerequisites / Inputs: Webpage URL.\nOutputs: Extracted information in text form.\nCannot do / Limits: Only return text and do not support generating files in any format.\nCost / Notes: Low.", - "description_cn": "功能: 提取 key in用于mation 从 a webpage URL.\n何时使用: 当您需要 scientific facts, data, 或 findings 从 a webpage.\n前提条件/输入: Webpage URL.\n输出: 提取ed in用于mation in text 用于m.\n无法做到/限制: 仅 return text 和 do not supp或t generating files in any 用于mat.\n成本/备注: 低.", + "description": { + "What it does": "Extract key information from a webpage URL.", + "When to use": "When you need scientific facts, data, or findings from a webpage.", + "Input": "Webpage URL.", + "Output": "Extracted information in text form.", + "Notes": "Only return text and do not support generating files in any format.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从网页 URL 提取关键信息。", + "使用场景": "需要从网页获取科学事实、数据或结论时使用。 通用场景", + "输入": "网页 URL。", + "输出": "以文本形式呈现的提取结果。", + "注意事项": "仅返回文本,不支持生成任何格式的文件。", + "成本": "低。" + }, "belonging_agent": "science_navigator_agent", "scenes": [ "UNIVERSAL" ], "alternative_tools": [], "summary_prompt": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# WEBPAGE PARSING REQUIREMENTS:\nThe tool returns a whole content from a webpage.\n\n## EXPRESSION STYLE:\n- Tone: Analytical, rigorous, structured, and concise.\n- Expression: Clear and well-organized. Every factual assertion must trace back to retrieved webpage content.\n- Avoid irrelevant narrative or assumption-based reasoning; prioritize what is explicitly stated in the webpages.\n- For conceptual or mechanism-type questions (complex “what”/“why”/“how” questions), synthesize explanations only from the retrieved information; if the webpages contain fragmented or partial information, provide a structured reconstruction explicitly marked as inference.\n- For unclear or conflicting webpage content, explicitly compare the differences and indicate uncertainty rather than merging them.\n- When appropriate, include minimal, high-value contextualization (e.g., definitions, conceptual framing) only when supported or partially supported by webpage data.\n\n## HANDLING COMPLEX EXPLANATION-TYPE QUESTIONS (e.g., mechanisms, principles, causality):\n1. Identify all concept-relevant content across webpages and extract precise statements.\n2. Integrate them into a layered explanation:\n - Level 1: Definitions or fundamental concepts as supported by webpages.\n - Level 2: Mechanistic or causal relationships explicitly mentioned.\n - Level 3: Synthesized reasoning that logically connects webpage content (clearly labeled as \"based on integration of retrieved info\").\n3. Avoid overgeneralization; do not infer domain knowledge beyond what webpages support.\n4. Cite each supporting sentence or phrase from the webpages with a numbered link, **strictly follow this format**: [n]; This is **WRONG**: [n].\n5. If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n### Example template for mechanism-oriented answer:\n```\nAccording to webpage [n], \"[quoted phrase]\" [n].\nAnother source indicates that \"[quoted phrase]\" [m].\nIntegrating these, the mechanism can be structured into: (1) ..., (2) ..., (3) ... (derived solely from the above retrieved content).\n```\n\n## HANDLING COMPLEX “HOW-TO” / PROCEDURAL / TUTORIAL-TYPE QUESTIONS:\n1. Extract all actionable steps, instructions, or procedural guidelines from the webpages.\n2. Reconstruct them into a coherent, step-by-step procedure with explicit citation markers for each step.\n3. When webpages provide code samples, configuration blocks, commands, or scripts, reproduce them **verbatim** inside fenced code blocks.\n - Explain the purpose of each step setup;\n - Explain the meaning of variables in codes or scripts;\n - Give examples of input scripts snippets or commands if possible.\n4. If multiple webpages provide overlapping or conflicting instructions, compare them explicitly and indicate which set of steps is more complete or reliable.\n5. If webpages contain insufficient procedural detail, state so clearly and provide only the steps supported by retrieved text; do not fabricate intermediate steps.\n\n### Step-by-step procedure\n1. Step description derived from \"[snippet]\" [n]\n2. Another step derived from \"[snippet]\" [m]\n3. (Optional) Show verbatim code example wrapped in a code block\n\n## CITATION RULES:\n- Every factual statement or step must map to at least one source link reference.\n- Use the following citation format: [n]\n- If a statement is synthesized from multiple snippets, list multiple links.\n\n## SUGGESTING NEXT ACTIONS / RELATED QUERY DIRECTIONS:\nProvide a short follow-up section (≤3 sentences) suggesting:\n- Clarifying questions the user may ask to obtain more complete or actionable information.\n- Additional aspects the user could explore, referencing the retrieved topics.\n- Optional: Suggest performing a new focused research paper\n\nAll suggestions must be grounded in actual webpage content; do not propose irrelevant or generic follow-up topics.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", - "summary_prompt_cn": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头。\n- 避免没有证据的声明。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n", + "summary_cn": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# WEBPAGE PARSING REQUIREMENTS:\nThe tool returns a whole content from a webpage.\n\n## EXPRESSION STYLE:\n- Tone: Analytical, rigorous, structured, and concise.\n- Expression: Clear and well-organized. Every factual assertion must trace back to retrieved webpage content.\n- Avoid irrelevant narrative or assumption-based reasoning; prioritize what is explicitly stated in the webpages.\n- For conceptual or mechanism-type questions (complex “what”/“why”/“how” questions), synthesize explanations only from the retrieved information; if the webpages contain fragmented or partial information, provide a structured reconstruction explicitly marked as inference.\n- For unclear or conflicting webpage content, explicitly compare the differences and indicate uncertainty rather than merging them.\n- When appropriate, include minimal, high-value contextualization (e.g., definitions, conceptual framing) only when supported or partially supported by webpage data.\n\n## HANDLING COMPLEX EXPLANATION-TYPE QUESTIONS (e.g., mechanisms, principles, causality):\n1. Identify all concept-relevant content across webpages and extract precise statements.\n2. Integrate them into a layered explanation:\n - Level 1: Definitions or fundamental concepts as supported by webpages.\n - Level 2: Mechanistic or causal relationships explicitly mentioned.\n - Level 3: Synthesized reasoning that logically connects webpage content (clearly labeled as \"based on integration of retrieved info\").\n3. Avoid overgeneralization; do not infer domain knowledge beyond what webpages support.\n4. Cite each supporting sentence or phrase from the webpages with a numbered link, **strictly follow this format**: [n]; This is **WRONG**: [n].\n5. If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n### Example template for mechanism-oriented answer:\n```\nAccording to webpage [n], \"[quoted phrase]\" [n].\nAnother source indicates that \"[quoted phrase]\" [m].\nIntegrating these, the mechanism can be structured into: (1) ..., (2) ..., (3) ... (derived solely from the above retrieved content).\n```\n\n## HANDLING COMPLEX “HOW-TO” / PROCEDURAL / TUTORIAL-TYPE QUESTIONS:\n1. Extract all actionable steps, instructions, or procedural guidelines from the webpages.\n2. Reconstruct them into a coherent, step-by-step procedure with explicit citation markers for each step.\n3. When webpages provide code samples, configuration blocks, commands, or scripts, reproduce them **verbatim** inside fenced code blocks.\n - Explain the purpose of each step setup;\n - Explain the meaning of variables in codes or scripts;\n - Give examples of input scripts snippets or commands if possible.\n4. If multiple webpages provide overlapping or conflicting instructions, compare them explicitly and indicate which set of steps is more complete or reliable.\n5. If webpages contain insufficient procedural detail, state so clearly and provide only the steps supported by retrieved text; do not fabricate intermediate steps.\n\n### Step-by-step procedure\n1. Step description derived from \"[snippet]\" [n]\n2. Another step derived from \"[snippet]\" [m]\n3. (Optional) Show verbatim code example wrapped in a code block\n\n## CITATION RULES:\n- Every factual statement or step must map to at least one source link reference.\n- Use the following citation format: [n]\n- If a statement is synthesized from multiple snippets, list multiple links.\n\n## SUGGESTING NEXT ACTIONS / RELATED QUERY DIRECTIONS:\nProvide a short follow-up section (≤3 sentences) suggesting:\n- Clarifying questions the user may ask to obtain more complete or actionable information.\n- Additional aspects the user could explore, referencing the retrieved topics.\n- Optional: Suggest performing a new focused research paper\n\nAll suggestions must be grounded in actual webpage content; do not propose irrelevant or generic follow-up topics.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", "self_check": false, "args_setting": null, + "server": { + "test": "http://bohrium-mcp-internal.dp.tech:11003/sse", + "uat": "http://bohrium-mcp-internal.dp.tech:11003/sse", + "prod": "http://bohrium-mcp-internal.dp.tech:11003/sse" + }, "bypass_confirmation": true }, { "tool_id": "041-FILEPARS-005", "name": "file_parse", - "description": "What it does: Parse various file contents to extract key information.\nWhen to use: When you need to extract information from a file but there is no dedicated information extraction tool available.\nPrerequisites / Inputs: File (TXT, PDF, Word, Excel, PNG, JPG, etc.).\nOutputs: Extracted information in text form.\nCannot do / Limits: Only return text and do not support generating files in any format.\nCost / Notes: Low.", - "description_cn": "功能: 解析 various file contents 到 extract key in用于mation.\n何时使用: 当您需要 到 extract in用于mation 从 a file but there is no dedicated in用于mation extraction 到ol available.\n前提条件/输入: File (TXT, PDF, W或d, Excel, PNG, JPG, etc.).\n输出: 提取ed in用于mation in text 用于m.\n无法做到/限制: 仅 return text 和 do not supp或t generating files in any 用于mat.\n成本/备注: 低.", + "description": { + "What it does": "Parse various file contents to extract key information.", + "When to use": "When you need to extract information from a file but there is no dedicated information extraction tool available.", + "Input": "File (TXT, PDF, Word, Excel, PNG, JPG, etc.).", + "Output": "Extracted information in text form.", + "Notes": "Only return text and do not support generating files in any format.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "解析各类文件内容并提取关键信息。", + "使用场景": "需要从文件中提取信息、且无专用提取工具时使用。 通用工具", + "输入": "文件(TXT、PDF、Word、Excel、PNG、JPG 等)。", + "输出": "以文本形式呈现的提取信息。", + "注意事项": "仅返回文本,不支持生成任何格式的文件。", + "成本": "低。" + }, "belonging_agent": "file_parse_agent", "scenes": [ "UNIVERSAL" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": null, "bypass_confirmation": true @@ -1689,8 +3622,22 @@ { "tool_id": "043-VISUALIZ-001", "name": "visualize_data_from_file", - "description": "What it does: Create plots from data files.\nWhen to use: Visualize CSV/Excel/JSON data.\nPrerequisites / Inputs: Data file URL.\nOutputs: Plots.\nCannot do / Limits: Data files only.\nCost / Notes: Low.", - "description_cn": "功能: 创建 plots 从 data files.\n何时使用: 可视化 CSV/Excel/JSON data.\n前提条件/输入: Data file URL.\n输出: Plots.\n无法做到/限制: Data files 仅.\n成本/备注: 低.", + "description": { + "What it does": "Create plots from data files.", + "When to use": "Visualize CSV/Excel/JSON data.", + "Input": "Data file URL.", + "Output": "Plots.", + "Notes": "Data files only.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "从数据文件创建图表。", + "使用场景": "可视化 CSV/Excel/JSON 等数据。", + "输入": "数据文件 URL。", + "输出": "图表。", + "注意事项": "仅支持数据文件。", + "成本": "低。" + }, "belonging_agent": "visualizer_agent", "scenes": [ "VISUALIZE_DATA", @@ -1698,16 +3645,34 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": null, + "server": { + "test": "http://qpus1389933.bohrium.tech:50005/mcp", + "uat": "http://qpus1389933.bohrium.tech:50005/mcp", + "prod": "http://qpus1389933.bohrium.tech:50002/mcp" + }, "bypass_confirmation": true }, { "tool_id": "043-VISUALIZ-002", "name": "visualize_data_from_prompt", - "description": "What it does: Create plots from prompts.\nWhen to use: Quick visualize data embedded in prompt.\nOutputs: Plots.\nCannot do / Limits: Plot requests with valid data only.\nCost / Notes: Low.", - "description_cn": "功能: 创建 plots 从 prompts.\n何时使用: Quick visualize data embedded in prompt.\n输出: Plots.\n无法做到/限制: Plot requests 使用 valid data 仅.\n成本/备注: 低.", + "description": { + "What it does": "Create plots from prompts.", + "When to use": "Quick visualize data embedded in prompt.", + "Output": "Plots.", + "Notes": "Plot requests with valid data only.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "根据提示词创建图表。", + "使用场景": "快速可视化嵌入在提示词中的数据。", + "输入": "提示词(内含数据)。", + "输出": "图表。", + "注意事项": "仅支持包含有效数据的绘图请求。", + "成本": "低。" + }, "belonging_agent": "visualizer_agent", "scenes": [ "VISUALIZE_DATA", @@ -1715,51 +3680,108 @@ ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": null, + "server": { + "test": "http://qpus1389933.bohrium.tech:50005/mcp", + "uat": "http://qpus1389933.bohrium.tech:50005/mcp", + "prod": "http://qpus1389933.bohrium.tech:50002/mcp" + }, "bypass_confirmation": true }, { "tool_id": "045-XRDPARSE-001", "name": "xrd_parse_file", - "description": "What it does: Parse and preprocess raw XRD data files.\nWhen to use: When you have XRD data to analyze.\nPrerequisites / Inputs: XRD files (.xrdml, .xy, .asc, .txt).\nOutputs: Processed data and visualization configs.\nCannot do / Limits: Not support .raw and .mdi format files.\nCost / Notes: Low.", - "description_cn": "功能: 解析 和 preprocess raw XRD data files.\n何时使用: When you have XRD data 到 analyze.\n前提条件/输入: XRD files (.xrdml, .xy, .asc, .txt).\n输出: Processed data 和 visualization configs.\n无法做到/限制: Not supp或t .raw 和 .mdi 用于mat files.\n成本/备注: 低.", + "description": { + "What it does": "Parse and preprocess raw XRD data files.", + "When to use": "When you have XRD data to analyze.", + "Input": "XRD files (.xrdml, .xy, .asc, .txt).", + "Output": "Processed data and visualization configs.", + "Notes": "Not support .raw and .mdi format files.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "解析并预处理原始 XRD 数据文件。", + "使用场景": "有待分析的 XRD 数据时使用。", + "输入": "XRD 文件(.xrdml、.xy、.asc、.txt)。", + "输出": "处理后的数据及可视化配置。", + "注意事项": "不支持 .raw、.mdi 格式。", + "成本": "低。" + }, "belonging_agent": "xrd_agent", "scenes": [ "XRD" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@pkfz1410356.bohrium.tech:50001/sse", + "uat": "http://root@pkfz1410356.bohrium.tech:50001/sse", + "prod": "http://root@pkfz1410356.bohrium.tech:50001/sse" + } }, { "tool_id": "045-XRDPHASE-002", "name": "xrd_phase_identification", - "description": "What it does: Identify crystalline phases in XRD pattern.\nWhen to use: When you have processed XRD data.\nPrerequisites / Inputs: Processed CSV file; optional composition filters.\nOutputs: Top matching phases and comparison chart.\nCannot do / Limits: Requires processed data.\nCost / Notes: Medium.", - "description_cn": "功能: 识别 crystalline phases in XRD pattern.\n何时使用: When you have processed XRD data.\n前提条件/输入: Processed CSV file; 可选 composition filters.\n输出: 到p matching phases 和 comparison chart.\n无法做到/限制: 需要 processed data.\n成本/备注: 中.", + "description": { + "What it does": "Identify crystalline phases in XRD pattern.", + "When to use": "When you have processed XRD data.", + "Input": "Processed CSV file; optional composition filters.", + "Output": "Top matching phases and comparison chart.", + "Notes": "Requires processed data.", + "Costs": "Medium." + }, + "description_cn": { + "工具简介": "在 XRD 谱图中鉴定晶相。", + "使用场景": "已有处理后的 XRD 数据时使用。", + "输入": "处理后的 CSV 文件;可选的组分过滤条件。", + "输出": "最佳匹配相及对比图。", + "注意事项": "需要先完成数据预处理。", + "成本": "中等。" + }, "belonging_agent": "xrd_agent", "scenes": [ "XRD" ], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, - "args_setting": null + "args_setting": null, + "server": { + "test": "http://root@pkfz1410356.bohrium.tech:50001/sse", + "uat": "http://root@pkfz1410356.bohrium.tech:50001/sse", + "prod": "http://root@pkfz1410356.bohrium.tech:50001/sse" + } }, { "tool_id": "000-LLMTOOL-001", "name": "llm_tool", - "description": "What it does: Use LLM for general tasks.\nWhen to use: For LLM-based assistance.\nPrerequisites / Inputs: Query or task.\nOutputs: LLM response.\nCannot do / Limits: General purpose.\nCost / Notes: Low.", - "description_cn": "功能: Use LLM 用于 general tasks.\n何时使用: 用于 LLM-based assistance.\n前提条件/输入: 查询 或 task.\n输出: LLM response.\n无法做到/限制: General purpose.\n成本/备注: 低.", + "description": { + "What it does": "Use LLM for general tasks.", + "When to use": "For LLM-based assistance.", + "Input": "Query or task.", + "Output": "LLM response.", + "Notes": "General purpose.", + "Costs": "Low." + }, + "description_cn": { + "工具简介": "调用大语言模型处理通用任务。", + "使用场景": "需要基于 LLM 的辅助时使用。", + "输入": "查询或任务描述。", + "输出": "LLM 回复。", + "注意事项": "通用工具。", + "成本": "低。" + }, "belonging_agent": "llm_tool_agent", "scenes": [], "alternative_tools": [], "summary_prompt": "", - "summary_prompt_cn": "", + "summary_cn": "", "self_check": false, "args_setting": null, "bypass_confirmation": true diff --git a/agents/matmaster_agent/sub_agents/tools_opt.py b/agents/matmaster_agent/sub_agents/tools_opt.py new file mode 100644 index 00000000..fdc3a3c5 --- /dev/null +++ b/agents/matmaster_agent/sub_agents/tools_opt.py @@ -0,0 +1,3616 @@ +from datetime import date + +from agents.matmaster_agent.flow_agents.scene_agent.model import SceneEnum +from agents.matmaster_agent.prompt import ( + ALIAS_SEARCH_PROMPT, + DPA_MODEL_BRANCH_SELECTION, + STRUCTURE_BUILDING_SAVENAME, +) +from agents.matmaster_agent.sub_agents.ABACUS_agent.constant import ABACUS_AGENT_NAME +from agents.matmaster_agent.sub_agents.apex_agent.constant import ApexAgentName +from agents.matmaster_agent.sub_agents.built_in_agent.file_parse_agent.constant import ( + FILE_PARSE_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.built_in_agent.llm_tool_agent.constant import ( + TOOL_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.chembrain_agent.unielf_agent.constant import ( + UniELFAgentName, +) +from agents.matmaster_agent.sub_agents.CompDART_agent.constant import ( + COMPDART_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.convexhull_agent.constant import ( + ConvexHullAgentName, +) +from agents.matmaster_agent.sub_agents.document_parser_agent.constant import ( + DocumentParserAgentName, +) +from agents.matmaster_agent.sub_agents.doe_agent.constant import ( + DOE_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.DPACalculator_agent.constant import ( + DPACalulator_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.Electron_Microscope_agent.constant import ( + Electron_Microscope_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.finetune_dpa_agent.constant import ( + FinetuneDPAAgentName, +) +from agents.matmaster_agent.sub_agents.HEA_assistant_agent.constant import ( + HEA_assistant_AgentName, +) +from agents.matmaster_agent.sub_agents.HEACalculator_agent.constant import ( + HEACALCULATOR_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.HEAkb_agent.constant import ( + HEA_KB_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.HEAkb_agent.prompt import ( + HEAKbAgentArgsSetting, + HEAKbAgentSummaryPrompt, + HEAKbAgentToolDescription, +) +from agents.matmaster_agent.sub_agents.LAMMPS_agent.constant import LAMMPS_AGENT_NAME +from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.constant import ( + BOHRIUMPUBLIC_DATABASE_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.prompt import ( + BohriumPublicAgentArgsSetting, + BohriumPublicAgentSummaryPrompt, + BohriumPublicAgentToolDescription, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.constant import ( + MOFDB_DATABASE_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.prompt import ( + MofdbAgentArgsSetting, + MofdbAgentSummaryPrompt, + MofdbAgentToolDescription, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.constant import ( + OPENLAM_DATABASE_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.prompt import ( + OpenlamAgentArgsSetting, + OpenlamAgentSummaryPrompt, + OpenlamAgentToolDescription, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.constant import ( + OPTIMADE_DATABASE_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.prompt import ( + OptimadeAgentSummaryPrompt, + OptimadeBandgapArgsSetting, + OptimadeBandgapToolDescription, + OptimadeFilterArgsSetting, + OptimadeFilterToolDescription, + OptimadeSpgArgsSetting, + OptimadeSpgToolDescription, +) +from agents.matmaster_agent.sub_agents.NMR_agent.constant import ( + NMR_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.organic_reaction_agent.constant import ( + ORGANIC_REACTION_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.perovskite_agent.constant import ( + PerovskiteAgentName, +) +from agents.matmaster_agent.sub_agents.Physical_adsorption_agent.constant import ( + Physical_Adsorption_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.piloteye_electro_agent.constant import ( + PILOTEYE_ELECTRO_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.POLYMERkb_agent.constant import ( + POLYMER_KB_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.POLYMERkb_agent.prompt import ( + POLYMERKbAgentArgsSetting, + POLYMERKbAgentSummaryPrompt, + POLYMERKbAgentToolDescription, +) +from agents.matmaster_agent.sub_agents.ScienceNavigator_agent.constant import ( + SCIENCE_NAVIGATOR_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.ScienceNavigator_agent.prompt import ( + PAPER_SEARCH_AGENT_INSTRUCTION, + WEB_SEARCH_AGENT_INSTRUCTION, + WEBPAGE_PARSING_AGENT_INSTRUCTION, +) +from agents.matmaster_agent.sub_agents.SSEkb_agent.constant import ( + SSE_KB_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.SSEkb_agent.prompt import ( + SSEKbAgentArgsSetting, + SSEKbAgentSummaryPrompt, + SSEKbAgentToolDescription, +) +from agents.matmaster_agent.sub_agents.STEEL_PREDICT_agent.constant import ( + STEEL_PREDICT_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.STEEL_PREDICT_agent.prompt import ( + STEELPredictAgentArgsSetting, + STEELPredictAgentSummaryPrompt, + STEELPredictAgentToolDescription, +) +from agents.matmaster_agent.sub_agents.STEELkb_agent.constant import ( + STEEL_KB_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.STEELkb_agent.prompt import ( + STEELKbAgentArgsSetting, + STEELKbAgentSummaryPrompt, + STEELKbAgentToolDescription, +) +from agents.matmaster_agent.sub_agents.structure_generate_agent.constant import ( + StructureGenerateAgentName, +) +from agents.matmaster_agent.sub_agents.superconductor_agent.constant import ( + SuperconductorAgentName, +) +from agents.matmaster_agent.sub_agents.thermoelectric_agent.constant import ( + ThermoelectricAgentName, +) +from agents.matmaster_agent.sub_agents.TPD_agent.constant import ( + TPD_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.traj_analysis_agent.constant import ( + TrajAnalysisAgentName, +) +from agents.matmaster_agent.sub_agents.visualizer_agent.constant import ( + VisualizerAgentName, +) +from agents.matmaster_agent.sub_agents.XRD_agent.constant import ( + XRD_AGENT_NAME, +) + +TODAY = date.today() + + +ALL_TOOLS = { + 'abacus_vacancy_formation_energy': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.VACANCY_FORMATION_ENERGY], + 'description': ( + 'What it does: Calculate formation energy of non-charged vacancy in metal atoms using DFT.\n' + 'When to use: When you need vacancy formation energy for metal structures.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters like functional, spin polarization, DFT+U, magnetic moments.\n' + 'Outputs: Vacancy formation energy.\n' + 'Cannot do / Limits: Only non-charged vacancy of metal atoms; requires supercell for calculation.\n' + 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.' + ), + 'alternative': ['apex_calculate_vacancy'], + 'self_check': False, + }, + 'abacus_vacancy_formation_energy_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.VACANCY_FORMATION_ENERGY], + 'description': ( + '功能:使用密度泛函理论(DFT)计算金属原子中非带电空位的形成能。\n' + '使用场景:当需要计算金属结构的空位形成能时使用。\n' + 'ABACUS,空位形成能\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:如泛函、自旋极化、DFT+U、磁矩等。\n' + '2. 输出:空位形成能。\n' + '3. 注意事项:仅支持金属原子的非带电空位;计算需使用超胞。\n' + '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。' + ), + 'alternative': ['apex_calculate_vacancy'], + 'self_check': False, + }, + 'abacus_phonon_dispersion': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.PHONON], + 'description': ( + 'What it does: Calculate phonon dispersion curve using DFT.\n' + 'When to use: When you need phonon properties and thermal corrections for a structure.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional supercell, high-symmetry points, k-path.\n' + 'Outputs: Plot of phonon dispersion band structure and thermal corrections.\n' + 'Cannot do / Limits: Requires DFT; may need supercell for accuracy.\n' + 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.' + ), + 'alternative': ['apex_calculate_phonon', 'calculate_phonon'], + 'self_check': False, + }, + 'abacus_phonon_dispersion_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.PHONON], + 'description': ( + '功能:使用密度泛函理论(DFT)计算声子色散曲线。\n' + '使用场景:当需要结构的声子性质和热修正时使用。\n' + 'ABACUS,声子\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:可选超胞、高对称点、k 路径。\n' + '2. 输出:声子色散能带结构图和热修正。\n' + '3. 注意事项:需要 DFT 计算;可能需要超胞以提高精度。\n' + '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。' + ), + 'alternative': ['apex_calculate_phonon', 'calculate_phonon'], + 'self_check': False, + }, + 'abacus_cal_band': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.BAND], + 'description': ( + 'What it does: Calculate electronic band structure using DFT.\n' + 'When to use: When you need band structure and band gap for a material.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; optional high-symmetry points, k-path.\n' + 'Outputs: Plot of band structure and band gap.\n' + 'Cannot do / Limits: DFT-based; supports PYATB or ABACUS nscf.\n' + 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_cal_band_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.BAND], + 'description': ( + '功能:使用密度泛函理论(DFT)计算电子能带结构。\n' + '使用场景:当需要材料的能带结构和带隙时使用。\n' + 'ABACUS,能带\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:可选高对称点、k 路径。\n' + '2. 输出:能带结构图和带隙。\n' + '3. 注意事项:基于 DFT;支持 PYATB 或 ABACUS nscf。\n' + '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_calculation_scf': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.SCF], + 'description': ( + 'What it does: Perform SCF calculation to compute energy using DFT.\n' + 'When to use: When you need ground state energy for a structure.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\n' + 'Outputs: Energy.\n' + 'Cannot do / Limits: Basic SCF; no relaxation or other properties.\n' + 'Cost / Notes: DFT calculation cost.' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_calculation_scf_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.SCF], + 'description': ( + '功能:使用密度泛函理论(DFT)执行自洽场(SCF)计算以计算能量。\n' + '使用场景:当需要结构的基态能量时使用。\n' + 'ABACUS,SCF\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:DFT 参数。\n' + '2. 输出:能量。\n' + '3. 注意事项:基础 SCF 计算;不包含弛豫或其他性质。\n' + '4. 成本/备注:涉及 DFT 计算成本。' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_dos_run': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.DENSITY_OF_STATES], + 'description': ( + 'What it does: Calculate DOS and PDOS using DFT.\n' + 'When to use: When you need density of states for electronic structure analysis.\n' + "Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; PDOS mode ('species', 'species+shell', 'species+orbital').\n" + 'Outputs: Plots for DOS and PDOS.\n' + 'Cannot do / Limits: DFT-based; requires relaxation support.\n' + 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_dos_run_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.DENSITY_OF_STATES], + 'description': ( + '功能:使用密度泛函理论(DFT)计算态密度(DOS)和投影态密度(PDOS)。\n' + '使用场景:当需要态密度进行电子结构分析时使用。\n' + 'ABACUS,态密度\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:DFT参数,PDOS 模式("species"、"species+shell"、"species+orbital")。\n' + '2. 输出:DOS 和 PDOS 图。\n' + '3. 注意事项:基于 DFT;需要弛豫支持。\n' + '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_badercharge_run': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.BADER_CHARGE_ANALYSIS], + 'description': ( + 'What it does: Calculate Bader charge using DFT.\n' + 'When to use: When you need atomic charge analysis.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\n' + 'Outputs: Bader charge for each atom.\n' + 'Cannot do / Limits: DFT-based; requires charge density calculation.\n' + 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_badercharge_run_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.BADER_CHARGE_ANALYSIS], + 'description': ( + '功能:使用密度泛函理论(DFT)计算 Bader 电荷。\n' + '使用场景:当需要进行原子电荷分析时使用。\n' + 'ABACUS,Bader 电荷\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:DFT 参数。\n' + '2. 输出:每个原子的 Bader 电荷。\n' + '3. 注意事项:基于 DFT;需要电荷密度计算。\n' + '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_do_relax': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.OPTIMIZE_STRUCTURE], + 'description': ( + 'What it does: Perform geometry optimization (relaxation) using DFT.\n' + 'When to use: When you need optimized structure.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; relaxation settings (cell, steps, method, axes).\n' + 'Outputs: Relaxed structure file.\n' + 'Cannot do / Limits: DFT-based relaxation.\n' + 'Cost / Notes: DFT calculation cost.' + ), + 'alternative': ['apex_optimize_structure', 'optimize_structure'], + 'self_check': False, + }, + 'abacus_do_relax_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.OPTIMIZE_STRUCTURE], + 'description': ( + '功能:使用密度泛函理论(DFT)执行几何优化(弛豫)。\n' + '使用场景:当需要优化结构时使用。\n' + 'ABACUS,结构优化\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:DFT 参数;弛豫设置(晶胞、步数、方法、轴)。\n' + '2. 输出:弛豫后的结构文件。\n' + '3. 注意事项:基于 DFT 的弛豫。\n' + '4. 成本/备注:涉及 DFT 计算成本。' + ), + 'alternative': ['apex_optimize_structure', 'optimize_structure'], + 'self_check': False, + }, + 'abacus_cal_work_function': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.WORK_FUNCTION], + 'description': ( + 'What it does: Calculate work function of slabs and 2D materials using DFT.\n' + 'When to use: When you need work function for surface materials.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; vacuum direction, dipole correction.\n' + 'Outputs: Plot of electrostatic potential and work function.\n' + 'Cannot do / Limits: For slabs and 2D materials; polar slabs have two work functions.\n' + 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_cal_work_function_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.WORK_FUNCTION], + 'description': ( + '功能:使用密度泛函理论(DFT)计算表面和二维材料的功函数。\n' + '使用场景:当需要表面材料的功函数时使用。\n' + 'ABACUS,功函数\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:DFT 参数;真空方向、偶极修正。\n' + '2. 输出:静电势和功函数图。\n' + '3. 注意事项:适用于表面和二维材料;极性表面有两个功函数。\n' + '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_run_md': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.MOLECULAR_DYNAMICS], + 'description': ( + 'What it does: Perform ab-initio molecular dynamics using DFT.\n' + 'When to use: When you need MD simulation with DFT accuracy.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters; ensemble, steps, timestep, temperature.\n' + 'Outputs: ASE trajectory file.\n' + 'Cannot do / Limits: DFT-based MD; expensive for long simulations.\n' + 'Cost / Notes: High DFT cost; supports relaxation before calculation.' + ), + 'alternative': ['run_molecular_dynamics'], + 'self_check': False, + }, + 'abacus_run_md_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.MOLECULAR_DYNAMICS], + 'description': ( + '功能:使用密度泛函理论(DFT)执行从头算分子动力学。\n' + '使用场景:当需要具有 DFT 精度的分子动力学模拟时使用。\n' + 'ABACUS,分子动力学模拟\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:DFT 参数;系综、步数、时间步长、温度。\n' + '2. 输出:ASE 轨迹文件。\n' + '3. 注意事项:基于 DFT 的分子动力学;长时间模拟成本高。\n' + '4. 成本/备注:高 DFT 计算成本;支持在计算前进行结构弛豫。' + ), + 'alternative': ['run_molecular_dynamics'], + 'self_check': False, + }, + 'abacus_cal_elf': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.Electron_Localization_Function], + 'description': ( + 'What it does: Calculate electron localization function using DFT.\n' + 'When to use: When you need ELF for bonding analysis.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\n' + 'Outputs: Cube file of ELF.\n' + 'Cannot do / Limits: DFT-based.\n' + 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_cal_elf_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.Electron_Localization_Function], + 'description': ( + '功能:使用密度泛函理论(DFT)计算电子局域化函数(ELF)。\n' + '使用场景:当需要 ELF 进行键合分析时使用。\n' + 'ABACUS,电子局域函数\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:DFT 参数。\n' + '2. 输出:ELF 的 Cube 文件。\n' + '3. 注意事项:基于 DFT。\n' + '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。' + ), + 'alternative': [], + 'self_check': False, + }, + 'abacus_eos': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.EOS], + 'description': ( + 'What it does: Calculate equation of state using DFT.\n' + 'When to use: When you need EOS curve and bulk properties.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\n' + 'Outputs: Plot of fitted EOS and fitting parameters.\n' + 'Cannot do / Limits: DFT-based.\n' + 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.' + ), + 'alternative': ['apex_calculate_eos'], + 'self_check': False, + }, + 'abacus_eos_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.EOS], + 'description': ( + '功能:使用密度泛函理论(DFT)计算状态方程。\n' + '使用场景:当需要状态方程曲线和体相性质时使用。\n' + 'ABACUS,EOS\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:DFT 参数。\n' + '2. 输出:拟合的状态方程图和拟合参数。\n' + '3. 注意事项:基于 DFT。\n' + '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。' + ), + 'alternative': ['apex_calculate_eos'], + 'self_check': False, + }, + 'abacus_cal_elastic': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.ELASTIC_CONSTANT], + 'description': ( + 'What it does: Calculate elastic properties using DFT.\n' + 'When to use: When you need elastic constants and moduli.\n' + 'Prerequisites / Inputs: Structure file in cif/VASP POSCAR/ABACUS STRU format; DFT parameters.\n' + 'Outputs: Elastic tensor (Voigt notation), bulk/shear/Young\'s modulus, Poisson ratio.\n' + 'Cannot do / Limits: DFT-based.\n' + 'Cost / Notes: DFT calculation cost; supports relaxation before calculation.' + ), + 'alternative': ['apex_calculate_elastic', 'calculate_elastic_constants'], + 'self_check': False, + }, + 'abacus_cal_elastic_zh': { + 'belonging_agent': ABACUS_AGENT_NAME, + 'scene': [SceneEnum.ABACUS, SceneEnum.ELASTIC_CONSTANT], + 'description': ( + '功能:使用密度泛函理论(DFT)计算弹性性质。\n' + '使用场景:当需要弹性常数和模量时使用。\n' + 'ABACUS,弹性常数\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:cif、VASP POSCAR 或 ABACUS STRU 格式的结构文件;\n' + ' 计算参数:DFT 参数。\n' + '2. 输出:弹性张量(Voigt 记号)、体积/剪切/杨氏模量、泊松比。\n' + '3. 注意事项:基于 DFT。\n' + '4. 成本/备注:涉及 DFT 计算成本;支持在计算前进行结构弛豫。' + ), + 'alternative': ['apex_calculate_elastic', 'calculate_elastic_constants'], + 'self_check': False, + }, + 'apex_calculate_vacancy': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.VACANCY_FORMATION_ENERGY], + 'description': ( + 'What it does: Evaluate vacancy formation energies by relaxing supercells after creating vacancies internally (removes one atom from a pristine supercell).\n' + 'When to use: When you need vacancy formation energies for a material starting from a pristine crystal.\n' + 'Prerequisites / Inputs: Pristine (defect-free) structure file of the bulk crystal (unit cell or supercell). Do NOT provide a structure that already contains vacancies/defects (missing atoms, partial occupancies, disordered sites), because the tool assumes a complete bulk lattice and will construct vacancies itself; defected inputs may cause errors or invalid energies.\n' + 'Outputs: Vacancy formation energies.\n' + 'Cannot do / Limits: DFT-based.; does not accept pre-defected structures.\n' + 'Cost / Notes: DFT calculation cost.' + ), + 'alternative': ['abacus_vacancy_formation_energy'], + 'self_check': False, + }, + 'apex_calculate_vacancy_zh': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.VACANCY_FORMATION_ENERGY], + 'description': ( + '功能:通过在内部创建空位后弛豫超胞(从完整超胞中移除一个原子)来评估空位形成能。\n' + '使用场景:当需要从完整晶体开始计算材料的空位形成能时使用。\n' + 'APEX,空位形成能\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:完整(无缺陷)的体相晶体结构文件(原胞或超胞)。\n' + '2. 输出:空位形成能。\n' + '3. 注意事项:基于 DFT;不要提供已包含空位/缺陷的结构(缺失原子、部分占位、无序位点),该工具假设完整的体相晶格并会自行构建空位;提供已有缺陷的结构可能导致错误或无效的能量。\n' + '4. 成本/备注:涉及 DFT 计算成本。' + ), + 'alternative': ['abacus_vacancy_formation_energy'], + 'self_check': False, + }, + 'apex_optimize_structure': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.OPTIMIZE_STRUCTURE, SceneEnum.APEX], + 'description': ( + 'What it does: Perform geometry optimization of a crystal, relaxing atomic positions and optionally the unit cell.\n' + 'When to use: When you need optimized crystal structure, especially for alloy systems.\n' + 'Prerequisites / Inputs: Structure file.\n' + 'Outputs: Optimized structure.\n' + 'Cannot do / Limits: DFT-based.\n' + 'Cost / Notes: DFT calculation cost.' + ), + 'alternative': ['abacus_do_relax', 'optimize_structure'], + 'self_check': False, + }, + 'apex_optimize_structure_zh': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.OPTIMIZE_STRUCTURE, SceneEnum.APEX], + 'description': ( + '功能:执行晶体的几何优化,弛豫原子位置并可选择弛豫原胞。\n' + '使用场景:当需要优化的晶体结构时使用,特别适用于合金体系。\n' + 'APEX,结构优化\n' + '使用方法:\n' + '1. 输入:结构文件。\n' + '2. 输出:优化后的结构。\n' + '3. 注意事项:基于 DFT。\n' + '4. 成本/备注:涉及 DFT 计算成本。' + ), + 'alternative': ['abacus_do_relax', 'optimize_structure'], + 'self_check': False, + }, + 'apex_calculate_interstitial': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.INTERSTITIAL_FORMATION_ENERGY], + 'description': ( + 'What it does: Insert interstitial atoms into a host lattice to compute formation energies across candidate sites (generated internally).\n' + 'When to use: When you need interstitial formation energies starting from a defect-free bulk crystal.\n' + 'Prerequisites / Inputs: Pristine (defect-free) host lattice structure and interstitial atoms.\n The host structure must be a complete bulk lattice (no vacancies/antisites/substitutions, no missing atoms, no partial occupancies/disordered sites). Do NOT provide a structure that already contains defects or extra atoms; the tool assumes a pristine lattice and will place interstitials itself—defected inputs may cause errors or invalid energies.\n' + 'Outputs: Interstitial formation energies for candidate sites.\n' + 'Cannot do / Limits: DFT-based. Not intended for pre-defected host structures.\n' + 'Cost / Notes: DFT calculation cost.' + ), + 'alternative': [], + 'self_check': False, + }, + 'apex_calculate_interstitial_zh': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.INTERSTITIAL_FORMATION_ENERGY], + 'description': ( + '功能:将间隙原子插入宿主晶格,计算候选位点(内部生成)的形成能。\n' + '使用场景:当需要从无缺陷的体相晶体开始计算间隙形成能时使用。\n' + 'APEX,间隙形成能\n' + '使用方法:\n' + '1. 输入:\n' + ' 结构文件:完整(无缺陷)的宿主晶格结构和间隙原子。\n' + ' 宿主结构必须是完整的体相晶格(无空位/反位/替代、无缺失原子、无部分占位/无序位点)。\n' + '2. 输出:候选位点的间隙形成能。\n' + '3. 注意事项:基于 DFT。不要提供已包含缺陷或额外原子的结构;该工具假设完整的晶格并会自行放置间隙原子——提供已有缺陷的结构可能导致错误或无效的能量。\n' + '4. 成本/备注:涉及 DFT 计算成本。' + ), + 'alternative': [], + 'self_check': False, + }, + 'apex_calculate_elastic': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.ELASTIC_CONSTANT], + 'description': ( + 'What it does: Apply small strains to the lattice to extract elastic constants and derived moduli.\n' + 'When to use: When you need elastic constants and moduli.\n' + 'Prerequisites / Inputs: Structure file.\n' + 'Outputs: Elastic constants and derived moduli.\n' + 'Cannot do / Limits: DFT-based.\n' + 'Cost / Notes: DFT calculation cost.' + ), + 'alternative': ['abacus_cal_elastic', 'calculate_elastic_constants'], + 'self_check': False, + }, + 'apex_calculate_elastic_zh': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.ELASTIC_CONSTANT], + 'description': ( + '功能:对晶格施加小应变以提取弹性常数和衍生模量。\n' + '使用场景:当需要弹性常数和模量时使用。\n' + 'APEX,弹性常数\n' + '使用方法:\n' + '1. 输入:结构文件。\n' + '2. 输出:弹性常数和衍生模量。\n' + '3. 注意事项:基于 DFT。\n' + '4. 成本/备注:涉及 DFT 计算成本。' + ), + 'alternative': ['abacus_cal_elastic', 'calculate_elastic_constants'], + 'self_check': False, + }, + 'apex_calculate_surface': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.SURFACE_ENERGY], + 'description': ( + 'What it does: Execute a workflow of surface energy calculation using a pristine Bulk crystal as input.\n' + 'When to use: When you need surface energy starting from a Bulk structure.\n' + 'Prerequisites / Inputs: Bulk structure file. \n' + 'Outputs: Surface energy.\n' + 'Cannot do / Limits: Do NOT provide an already-cut slab/surface structure as input. Slab inputs can cause errors or lead to invalid surface energies.; DFT-based.\n' + 'Cost / Notes: DFT calculation cost.ensure the input is a complete bulk lattice.' + ), + 'alternative': [], + 'self_check': False, + }, + 'apex_calculate_surface_zh': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.SURFACE_ENERGY], + 'description': ( + '功能:使用完整的体相晶体作为输入执行表面能计算工作流。\n' + '使用场景:当需要从体相结构开始计算表面能时使用。\n' + 'APEX,表面能\n' + '使用方法:\n' + '1. 输入:体相结构文件。\n' + '2. 输出:表面能。\n' + '3. 注意事项:\n' + ' 不要提供已切割的板/表面结构作为输入。板状输入可能导致错误或无效的表面能。\n' + ' 基于 DFT。\n' + '4. 成本/备注:涉及 DFT 计算成本。确保输入是完整的体相晶格。' + ), + 'alternative': [], + 'self_check': False, + }, + 'apex_calculate_eos': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.EOS], + 'description': ( + 'What it does: Scan volumes around equilibrium, relax internal coordinates, and build an equation-of-state energy–volume curve.\n' + 'When to use: When you need EOS curve.\n' + 'Prerequisites / Inputs: Structure file.\n' + 'Outputs: EOS energy-volume curve.\n' + 'Cannot do / Limits: DFT-based.\n' + 'Cost / Notes: DFT calculation cost.' + ), + 'alternative': ['abacus_eos'], + 'self_check': False, + }, + 'apex_calculate_eos_zh': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.EOS], + 'description': ( + '功能:扫描平衡点附近的体积,弛豫内部坐标,构建状态方程的能量-体积曲线。\n' + '使用场景:当需要状态方程曲线时使用。\n' + 'APEX,EOS\n' + '使用方法:\n' + '1. 输入:结构文件。\n' + '2. 输出:状态方程能量-体积曲线。\n' + '3. 注意事项:基于 DFT。\n' + '4. 成本/备注:涉及 DFT 计算成本。' + ), + 'alternative': ['abacus_eos'], + 'self_check': False, + }, + 'apex_calculate_phonon': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.PHONON], + 'description': ( + 'What it does: Perform supercell finite-displacement calculations, relax configurations, and assemble phonon spectra.\n' + 'When to use: When you need phonon spectra.\n' + 'Prerequisites / Inputs: Structure file.\n' + 'Outputs: Phonon spectra.\n' + 'Cannot do / Limits: DFT-based.\n' + 'Cost / Notes: DFT calculation cost.' + ), + 'alternative': ['abacus_phonon_dispersion', 'calculate_phonon'], + 'self_check': False, + }, + 'apex_calculate_phonon_zh': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.PHONON], + 'description': ( + '功能:执行超胞有限位移计算,弛豫构型,并组装声子谱。\n' + '使用场景:当需要声子谱时使用。\n' + 'APEX,声子\n' + '使用方法:\n' + '1. 输入:结构文件。\n' + '2. 输出:声子谱。\n' + '3. 注意事项:基于 DFT。\n' + '4. 成本/备注:涉及 DFT 计算成本。\n' + ), + 'alternative': ['abacus_phonon_dispersion', 'calculate_phonon'], + 'self_check': False, + }, + 'apex_calculate_gamma': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.STACKING_FAULT_ENERGY], + 'description': ( + 'What it does: Construct and relax sliding slabs to map generalized stacking-fault energies along specified slip paths.\n' + 'When to use: When you need stacking-fault energies.\n' + 'Prerequisites / Inputs: Structure file and specified slip paths.\n' + 'Outputs: Generalized stacking-fault energies.\n' + 'Cannot do / Limits: DFT-based.\n' + 'Cost / Notes: DFT calculation cost.' + ), + 'alternative': [], + 'self_check': False, + }, + 'apex_calculate_gamma_zh': { + 'belonging_agent': ApexAgentName, + 'scene': [SceneEnum.APEX, SceneEnum.STACKING_FAULT_ENERGY], + 'description': ( + '功能:构建并弛豫滑动板,沿指定滑移路径映射广义堆垛层错能。\n' + '使用场景:当需要堆垛层错能时使用。\n' + 'APEX,堆垛层错能\n' + '使用方法:\n' + '1. 输入:结构文件和指定的滑移路径。\n' + '2. 输出:广义堆垛层错能。\n' + '3. 注意事项:基于 DFT。\n' + '4. 成本/备注:涉及 DFT 计算成本。' + ), + 'alternative': [], + 'self_check': False, + }, + 'get_target_info': { + 'belonging_agent': UniELFAgentName, + 'scene': [SceneEnum.POLYMER], + 'description': ( + 'What it does: Get target information from configuration settings for Uni-ELF inference system.\n' + 'When to use: When you need configuration info for Uni-ELF.\n' + 'Prerequisites / Inputs: None.\n' + 'Outputs: Comprehensive configuration information and available target model mappings.\n' + 'Cannot do / Limits: Specific to Uni-ELF system.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'self_check': False, + }, + 'get_target_info_zh': { + 'belonging_agent': UniELFAgentName, + 'scene': [SceneEnum.POLYMER], + 'description': ( + '功能:从 Uni-ELF 推理系统的配置设置中获取目标信息。\n' + '使用场景:当需要 Uni-ELF 的配置信息时使用。\n' + '聚合物\n' + '使用方法:\n' + '1. 输入:无。\n' + '2. 输出:全面的配置信息和可用的目标模型映射。\n' + '3. 注意事项:特定于 Uni-ELF 系统。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'unielf_inference': { + 'belonging_agent': UniELFAgentName, + 'scene': [SceneEnum.POLYMER], + 'description': ( + 'What it does: Run Uni-ELF inference for formulation inputs to predict properties.\n' + 'When to use: When you need property prediction for formulations.\n' + 'Prerequisites / Inputs: Components and ratios for formulations.\n' + 'Outputs: Predicted properties.\n' + 'Cannot do / Limits: Supports mixtures and pseudo-formulations.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'summary_prompt': ( + 'Summarize the Uni-ELF inference results based on the output:\n' + '1. Report the url to the full results CSV file (`result_csv`).\n' + '2. List the top 10 formulations from `top_10_results_dict`. ' + 'For each, display the `formulation_id`, the composition ' + '(combine `smiles_i` and `ratio_i`), and the predicted property ' + 'value (key ending in `_pred`).\n' + '3. Highlight the best performing formulation.\n' + ), + 'self_check': False, + }, + 'unielf_inference_zh': { + 'belonging_agent': UniELFAgentName, + 'scene': [SceneEnum.POLYMER], + 'description': ( + '功能:对配方输入运行 Uni-ELF 推理以预测性质。\n' + '使用场景:当需要配方的性质预测时使用。\n' + '聚合物\n' + '使用方法:\n' + '1. 输入:配方的组分和比例。\n' + '2. 输出:预测的性质。\n' + '3. 注意事项:支持混合物和伪配方。\n' + '4. 成本/备注:中等。' + ), + + + + }, + 'get_database_info': { + 'belonging_agent': PerovskiteAgentName, + 'scene': [SceneEnum.PEROVSKITE_RESEARCH], + 'description': ( + 'What it does: Fetch complete schema and descriptive information for the perovskite solar cell database.\n' + 'When to use: Before querying the perovskite database.\n' + 'Prerequisites / Inputs: None.\n' + 'Outputs: Database schema and descriptions.\n' + 'Cannot do / Limits: Specific to perovskite database.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'self_check': False, + }, + 'get_database_info_zh': { + 'belonging_agent': PerovskiteAgentName, + 'scene': [SceneEnum.PEROVSKITE_RESEARCH], + 'description': ( + '功能:获取钙钛矿太阳能电池数据库的完整模式和描述信息。\n' + '使用场景:在查询钙钛矿数据库之前使用。\n' + '钙钛矿\n' + '使用方法:\n' + '1. 输入:无。\n' + '2. 输出:数据库模式和描述。\n' + '3. 注意事项:特定于钙钛矿数据库。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'sql_database_mcp': { + 'belonging_agent': PerovskiteAgentName, + 'scene': [SceneEnum.PEROVSKITE_RESEARCH], + 'description': ( + 'What it does: Execute SQL queries against the perovskite solar cell database and return first k rows.\n' + 'When to use: When querying perovskite database after getting schema.\n' + 'Prerequisites / Inputs: SQL query; call get_database_info first.\n' + 'Outputs: First k rows of query results.\n' + 'Cannot do / Limits: Limited to first k rows.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'sql_database_mcp_zh': { + 'belonging_agent': PerovskiteAgentName, + 'scene': [SceneEnum.PEROVSKITE_RESEARCH], + 'description': ( + '功能:对钙钛矿太阳能电池数据库执行 SQL 查询并返回前 k 行。\n' + '使用场景:获取数据库架构(Schema)信息后,需要查询钙钛矿数据库时使用。\n' + '钙钛矿\n' + '使用方法:\n' + '1. 输入:SQL 查询语句。\n' + '2. 输出:查询结果的前 k 行。\n' + '3. 注意事项:仅限于前 k 行。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'Unimol_Predict_Perovskite_Additive': { + 'belonging_agent': PerovskiteAgentName, + 'scene': [SceneEnum.PEROVSKITE_RESEARCH], + 'description': ( + 'What it does: Predict the additive effect on perovskite PCE with a list of additive molecules.\n' + 'When to use: When you need PCE change prediction for additives.\n' + 'Prerequisites / Inputs: List of additive molecules.\n' + 'Outputs: Predicted PCE changes.\n' + 'Cannot do / Limits: Specific to perovskite additives.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'Unimol_Predict_Perovskite_Additive_zh': { + 'belonging_agent': PerovskiteAgentName, + 'scene': [SceneEnum.PEROVSKITE_RESEARCH], + 'description': ( + '功能:使用添加剂分子列表预测添加剂对钙钛矿 PCE 的影响。\n' + '使用场景:当需要添加剂的 PCE 变化预测时使用。\n' + '钙钛矿\n' + '使用方法:\n' + '1. 输入:添加剂分子列表。\n' + '2. 输出:预测的 PCE 变化。\n' + '3. 注意事项:特定于钙钛矿添加剂。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_dart_ga': { + 'belonging_agent': COMPDART_AGENT_NAME, + 'scene': [SceneEnum.COMPOSITION_OPTIMIZATION], + 'description': ( + 'What it does: Perform compositional optimization for multi-component materials to target specific properties using genetic algorithm.\n' + 'When to use: Search optimized compositions for target properties.\n' + 'Prerequisites / Inputs: Target properties, optional initial compositions or structure templates, constrains, and surrogate model.\n' + 'Outputs: Optimized compositions.\n' + 'Cannot do / Limits: Cannot build doping structures; requires surrogate model.\n' + 'Cost / Notes: High due to long iterations.' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_dart_ga_zh': { + 'belonging_agent': COMPDART_AGENT_NAME, + 'scene': [SceneEnum.COMPOSITION_OPTIMIZATION], + 'description': ( + '功能:利用遗传算法对多组分材料进行成分优化,以匹配特定的目标性能。\n' + '使用场景:搜索针对目标性质的优化成分。\n' + '组分优化\n' + '使用方法:\n' + '1. 输入:目标性质、可选的初始成分或结构模板、约束条件和代理模型。\n' + '2. 输出:优化后的成分。\n' + '3. 注意事项:无法构建掺杂结构;需要代理模型。\n' + '4. 成本/备注:由于迭代时间长,成本高。' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_doe_task': { + 'belonging_agent': DOE_AGENT_NAME, + 'scene': [SceneEnum.DOE], + 'description': ( + 'What it does: Run a Design of Experiments (DoE) task using supported algorithms.\n' + 'When to use: When you need experimental design.\n' + 'Prerequisites / Inputs: Algorithm choice (Extreme Vertices, Simplex Centroid, etc.).\n' + 'Outputs: DoE results.\n' + 'Cannot do / Limits: Limited to supported algorithms.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_doe_task_zh': { + 'belonging_agent': DOE_AGENT_NAME, + 'scene': [SceneEnum.DOE], + 'description': ( + '功能:使用支持的算法运行实验设计(DoE)任务。\n' + '使用场景:当需要实验设计时使用。\n' + 'DOE\n' + '使用方法:\n' + '1. 输入:算法选择(极值顶点、单纯形重心等)。\n' + '2. 输出:DOE 结果。\n' + '3. 注意事项:仅限于支持的算法。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'extract_material_data_from_pdf': { + 'belonging_agent': DocumentParserAgentName, + 'scene': [SceneEnum.LITERATURE, SceneEnum.UNIVERSAL], + 'description': ( + 'What it does: Read and extract material data and methodologies from PDF documents.\n' + 'When to use: When you need to extract info from PDF literature.\n' + 'Prerequisites / Inputs: PDF file.\n' + 'Outputs: Extracted material info and methodologies.\n' + 'Cannot do / Limits: Cannot retrieve from internet; local PDFs only.\n' + 'Cost / Notes: Low.' + ), + 'alternative': ['file_parse', 'extract_material_data_from_webpage'], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'extract_material_data_from_pdf_zh': { + 'belonging_agent': DocumentParserAgentName, + 'scene': [SceneEnum.LITERATURE, SceneEnum.UNIVERSAL], + 'description': ( + '功能:从 PDF 文档中读取并提取材料数据和方法。\n' + '使用场景:当需要从 PDF 文献中提取信息时使用。\n' + '文献,通用场景\n' + '使用方法:\n' + '1. 输入:PDF 文件。\n' + '2. 输出:提取的材料信息和方法。\n' + '3. 注意事项:无法从互联网检索;仅支持本地 PDF 文件。\n' + '4. 成本/备注:低。' + ), + 'alternative': ['file_parse', 'extract_material_data_from_webpage'], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'optimize_structure': { + 'belonging_agent': DPACalulator_AGENT_NAME, + 'scene': [SceneEnum.DPA, SceneEnum.OPTIMIZE_STRUCTURE], + 'description': ( + 'What it does: Perform geometry optimization of a crystal or molecular structure using ML potential.\n' + 'When to use: When you need fast optimized structure without DFT.\n' + 'Prerequisites / Inputs: Structure file (CIF/POSCAR/ABACUS STRU/LAMMPS data); compatible ML potential.\n' + 'Outputs: Optimized structure file.\n' + 'Cannot do / Limits: ML-based; accuracy depends on potential domain.\n' + 'Cost / Notes: Low relative to DFT.' + ), + 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}", + 'alternative': ['apex_optimize_structure', 'abacus_do_relax'], + 'self_check': False, + }, + 'optimize_structure_zh': { + 'belonging_agent': DPACalulator_AGENT_NAME, + 'scene': [SceneEnum.DPA, SceneEnum.OPTIMIZE_STRUCTURE], + 'description': ( + '功能:使用机器学习势对晶体或分子结构进行几何优化。\n' + '使用场景:当你需要快速获得优化后的结构,且不想进行耗时的 DFT 计算时使用\n' + 'DPA,结构优化\n' + '使用方法:\n' + '1. 输入:结构文件(CIF/POSCAR/ABACUS STRU/LAMMPS 数据);兼容的机器学习势文件。\n' + '2. 输出:优化后的结构文件。\n' + '3. 注意事项:基于机器学习;精度取决于所使用的势函数适用范围\n' + '4. 成本/备注:相对于 DFT 成本低。' + ), + 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}", + 'alternative': ['apex_optimize_structure', 'abacus_do_relax'], + 'self_check': False, + }, + 'run_molecular_dynamics': { + 'belonging_agent': DPACalulator_AGENT_NAME, + 'scene': [SceneEnum.DPA, SceneEnum.MOLECULAR_DYNAMICS], + 'description': ( + 'What it does: Run molecular dynamics simulations using ML potential.\n' + 'When to use: When you need fast MD without DFT.\n' + 'Prerequisites / Inputs: Structure file; ML potential; ensemble settings.\n' + 'Outputs: MD trajectories and thermodynamics.\n' + 'Cannot do / Limits: NVE/NVT/NPT only; no classical force fields or DFT.\n' + 'Cost / Notes: Medium; scales with system size and steps.' + ), + 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}", + 'alternative': ['abacus_run_md'], + 'self_check': False, + }, + 'run_molecular_dynamics_zh': { + 'belonging_agent': DPACalulator_AGENT_NAME, + 'scene': [SceneEnum.DPA, SceneEnum.MOLECULAR_DYNAMICS], + 'description': ( + '功能:使用机器学习势运行分子动力学模拟。\n' + '使用场景:当你需要比密度泛函理论(DFT)更快的速度,但又不满足于传统力场的精度时。\n' + 'DPA,分子动力学\n' + '使用方法:\n' + '1. 输入:结构文件;机器学习势;系综设置。\n' + '2. 输出:分子动力学轨迹和热力学性质。\n' + '3. 注意事项:仅支持 NVE/NVT/NPT;不支持经典力场或 DFT。\n' + '4. 成本/备注:中等;计算量随系统规模(原子数)和模拟步数增加。' + ), + 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}", + 'alternative': ['abacus_run_md'], + 'self_check': False, + }, + 'calculate_phonon': { + 'belonging_agent': DPACalulator_AGENT_NAME, + 'scene': [SceneEnum.DPA, SceneEnum.PHONON], + 'description': ( + 'What it does: Compute phonon properties using ML potential.\n' + 'When to use: When you need phonon dispersion and thermal properties.\n' + 'Prerequisites / Inputs: Optimized structure; ML potential.\n' + 'Outputs: Phonon dispersion, DOS, thermal properties.\n' + 'Cannot do / Limits: Requires finite-displacement supercells.\n' + 'Cost / Notes: High; scales with supercell size.' + ), + 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}", + 'alternative': ['abacus_phonon_dispersion', 'apex_calculate_phonon'], + 'self_check': False, + }, + 'calculate_phonon_zh': { + 'belonging_agent': DPACalulator_AGENT_NAME, + 'scene': [SceneEnum.DPA, SceneEnum.PHONON], + 'description': ( + '功能:使用机器学习势计算声子性质。\n' + '使用场景:当需要声子色散和热性质时使用。\n' + 'DPA,声子\n' + '使用方法:\n' + '1. 输入:优化后的结构;机器学习势。\n' + '2. 输出:声子色散、态密度、热性质。\n' + '3. 注意事项:需要有限位移超胞。\n' + '4. 成本/备注:高;计算量随超胞规模的增大而显著增加。' + ), + 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}", + 'alternative': ['abacus_phonon_dispersion', 'apex_calculate_phonon'], + 'self_check': False, + }, + 'calculate_elastic_constants': { + 'belonging_agent': DPACalulator_AGENT_NAME, + 'scene': [SceneEnum.DPA, SceneEnum.ELASTIC_CONSTANT], + 'description': ( + 'What it does: Compute elastic constants (Cij) and derived mechanical properties using a machine-learning interatomic potential.\n' + 'When to use: You have a relaxed structure and want fast elastic properties without running DFT.\n' + 'Prerequisites / Inputs: A structure file (e.g., CIF / POSCAR / ABACUS STRU / LAMMPS data) and a compatible ML potential available to the backend; recommended to relax the structure first.\n' + 'Outputs: Elastic tensor (Cij), bulk/shear/Young\'s modulus, Poisson ratio (units reported in the result payload).\n' + 'Cannot do / Limits: Not a DFT calculation; accuracy depends on the ML potential domain; may be unreliable for structures far from training distribution.\n' + 'Cost / Notes: Medium; scales with system size and deformation settings.' + ), + 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}", + 'alternative': ['abacus_cal_elastic', 'apex_calculate_elastic'], + 'self_check': False, + }, + 'calculate_elastic_constants_zh': { + 'belonging_agent': DPACalulator_AGENT_NAME, + 'scene': [SceneEnum.DPA, SceneEnum.ELASTIC_CONSTANT], + 'description': ( + '功能:使用机器学习原子间势计算弹性常数(Cij)和衍生的力学性质。\n' + '使用场景:当你已拥有优化好的结构(Relaxed Structure),并希望跳过 DFT 计算,快速获取弹性性质时。\n' + 'DPA,弹性常数\n' + '使用方法:\n' + '1. 输入:结构文件(例如 CIF/POSCAR/ABACUS STRU/LAMMPS 数据)、兼容的机器学习势。\n' + '2. 输出:弹性张量(Cij)、体积/剪切/杨氏模量、泊松比。\n' + '3. 注意事项:\n' + ' 非 DFT 计算;其精度高度依赖于机器学习势的拟合水平;\n' + ' 如果目标结构超出了机器学习势的训练集分布,结果可能不可靠。\n' + '4. 成本/备注:中等;计算量随原子数规模和形变采样(Deformation settings)的复杂程度增加。' + ), + 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}", + 'alternative': ['abacus_cal_elastic', 'apex_calculate_elastic'], + 'self_check': False, + }, + 'run_neb': { + 'belonging_agent': DPACalulator_AGENT_NAME, + 'scene': [SceneEnum.DPA, SceneEnum.Nudged_Elastic_Band], + 'description': ( + 'What it does: Run a Nudged Elastic Band (NEB) calculation with a machine-learning potential to estimate minimum energy path and barrier.\n' + 'When to use: You have initial/final states (and optionally an initial guess path) and need a fast barrier estimate.\n' + 'Prerequisites / Inputs: Initial and final structure files; optional intermediate images or image count; a compatible ML potential available to the backend.\n' + 'Outputs: Optimized NEB path, energies along images, estimated barrier and reaction coordinate.\n' + 'Cannot do / Limits: Not DFT-quality by default; may fail if images are too distorted or if the potential is not valid for the chemistry.\n' + 'Cost / Notes: High relative to single relax; cost scales with number of images and system size.' + ), + 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}", + 'alternative': [], + 'self_check': False, + }, + 'run_neb_zh': { + 'belonging_agent': DPACalulator_AGENT_NAME, + 'scene': [SceneEnum.DPA, SceneEnum.Nudged_Elastic_Band], + 'description': ( + '功能:使用机器学习势运行微动弹性能带(NEB)计算以估计最小能量路径和能垒。\n' + '使用场景:当你已知反应的初态和末态(以及可选的初始猜测路径),且需要快速估算反应能垒时。\n' + 'DPA,NEB\n' + '使用方法:\n' + '1. 输入:初始和最终结构文件;可选的中间态构型或插值点数;兼容的机器学习势。\n' + '2. 输出:优化的 NEB 路径、沿图像的能量、估计的能垒和反应坐标。\n' + '3. 注意事项:\n' + ' 默认精度不直接等同于 DFT 水准。如果中间映像畸变过大,或势函数无法准确描述该化学环境,计算可能会失败。\n' + '4. 成本/备注:相对于单次弛豫成本高;计算量随映像数量和系统规模增加。' + ), + 'args_setting': f"{DPA_MODEL_BRANCH_SELECTION}", + 'alternative': [], + 'self_check': False, + }, + 'finetune_dpa_model': { + 'belonging_agent': FinetuneDPAAgentName, + 'scene': [SceneEnum.DPA], + 'description': ( + 'What it does: Fine-tune DPA pretrained models using DFT-labeled data.\n' + 'When to use: When you need to adapt DPA potential to specific systems.\n' + 'Prerequisites / Inputs: DFT-labeled data (energies, forces, stresses).\n' + 'Outputs: Fine-tuned DPA model.\n' + 'Cannot do / Limits: Cannot run calculations with the model.\n' + 'Cost / Notes: High.' + ), + 'args_setting': 'Do NOT omit parameters that have default values. If the user does not provide a value, you MUST use the default value defined in the input parameters and include that field in the tool call. Only parameters without defaults are truly required and must be filled from user input.', + 'alternative': [], + 'self_check': False, + }, + 'finetune_dpa_model_zh': { + 'belonging_agent': FinetuneDPAAgentName, + 'scene': [SceneEnum.DPA], + 'description': ( + '功能:使用 DFT 标记的数据微调 DPA 预训练模型。\n' + '使用场景:当需要将 DPA 势适应特定体系时使用。\n' + 'DPA\n' + '使用方法:\n' + '1. 输入:DFT 标记的数据(能量、力、应力)。\n' + '2. 输出:微调后的 DPA 模型。\n' + '3. 注意事项:该功能仅负责“训练”,不能直接运行具体的模拟计算(如 MD 或 NEB)。\n' + '4. 成本/备注:高。' + ), + 'args_setting': '不要省略具有默认值的参数。如果用户未提供值,您必须使用输入参数中定义的默认值,并在工具调用中包含该字段。只有没有默认值的参数才是真正必需的,必须从用户输入中填充。', + 'alternative': [], + 'self_check': False, + }, + 'HEA_params_calculator': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + 'What it does: Calculate HEA parameters like VEC, delta, Hmix, Smix, Lambda from composition.\n' + 'When to use: When you need HEA thermodynamic parameters.\n' + 'Prerequisites / Inputs: HEA chemical formula.\n' + 'Outputs: VEC, delta, Hmix, Smix, Lambda.\n' + 'Cannot do / Limits: Specific to HEA.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'self_check': False, + }, + 'HEA_params_calculator_zh': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + '功能:从成分计算高熵合金参数,如 VEC、delta、Hmix、Smix、Lambda。\n' + '使用场景:当需要高熵合金热力学参数时使用。\n' + '高熵合金\n' + '使用方法:\n' + '1. 输入:高熵合金化学式。\n' + '2. 输出:VEC、delta、Hmix、Smix、Lambda。\n' + '3. 注意事项:特定于 HEA。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'HEA_predictor': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + 'What it does: Predict if HEA composition forms solid-solution and its crystal structure.\n' + 'When to use: When you need phase prediction for HEA.\n' + 'Prerequisites / Inputs: HEA composition.\n' + 'Outputs: Solid-solution formation and crystal structure.\n' + 'Cannot do / Limits: Uses pre-trained ML model.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'self_check': False, + }, + 'HEA_predictor_zh': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + '功能:预测高熵合金成分是否形成固溶体及其晶体结构。\n' + '使用场景:当需要高熵合金的相预测时使用。\n' + '高熵合金\n' + '使用方法:\n' + '1. 输入:高熵合金成分。\n' + '2. 输出:固溶体形成和晶体结构。\n' + '3. 注意事项:使用预训练的机器学习模型。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'HEA_comps_generator': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + 'What it does: Generate HEA compositions by adjusting molar ratios of one element.\n' + 'When to use: For HEA composition design and optimization.\n' + 'Prerequisites / Inputs: Initial HEA composition.\n' + 'Outputs: Series of modified compositions.\n' + 'Cannot do / Limits: Adjusts one element at a time.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'self_check': False, + }, + 'HEA_comps_generator_zh': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + '功能:通过调节单一元素的摩尔比来生成一系列高熵合金成分。\n' + '使用场景:用于高熵合金成分设计和优化。\n' + '高熵合金\n' + '使用方法:\n' + '1. 输入:初始高熵合金成分。\n' + '2. 输出:一系列修改后的成分。\n' + '3. 注意事项:一次调整一个元素。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'HEA_data_extract': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + 'What it does: Extract HEA data from PDF literature.\n' + 'When to use: When you need HEA data from papers.\n' + 'Prerequisites / Inputs: PDF literature.\n' + 'Outputs: Compositions, processing, microstructures, properties.\n' + 'Cannot do / Limits: PDF format only.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'self_check': False, + }, + 'HEA_data_extract_zh': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + '功能:从 PDF 文献中提取高熵合金数据。\n' + '使用场景:当需要从论文中获取高熵合金数据时使用。\n' + '高熵合金\n' + '使用方法:\n' + '1. 输入:PDF 文献。\n' + '2. 输出:成分、合成、微观结构、性质。\n' + '3. 注意事项:仅支持 PDF 格式。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'HEA_paper_search': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + 'What it does: Search and download HEA papers from arXiv.\n' + 'When to use: When you need HEA literature.\n' + 'Prerequisites / Inputs: Title, author, or keywords.\n' + 'Outputs: Search results and downloaded papers.\n' + 'Cannot do / Limits: arXiv only.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [ + 'query_heakb_literature', + 'search-papers-enhanced', + 'web-search', + ], + 'self_check': False, + }, + 'HEA_paper_search_zh': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + '功能:从 arXiv 搜索并下载高熵合金论文。\n' + '使用场景:当需要高熵合金文献时使用。\n' + '高熵合金\n' + '使用方法:\n' + '1. 输入:标题、作者或关键词。\n' + '2. 输出:搜索结果和下载的论文。\n' + '3. 注意事项:仅支持 arXiv。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [ + 'query_heakb_literature', + 'search-papers-enhanced', + 'web-search', + ], + 'self_check': False, + }, + 'HEA_bi_phase_Calc': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + 'What it does: Calculate formation energies and phase diagrams for binary pairs in HEA.\n' + 'When to use: When you need binary phase info for HEA.\n' + 'Prerequisites / Inputs: HEA chemical system.\n' + 'Outputs: Formation energies and convex hulls.\n' + 'Cannot do / Limits: Binary pairs only.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'HEA_bi_phase_Calc_zh': { + 'belonging_agent': HEA_assistant_AgentName, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + '功能:计算高熵合金 中二元对的形成能和相图。\n' + '使用场景:当需要高熵合金的二元相信息时使用。\n' + '高熵合金\n' + '使用方法:\n' + '1. 输入:高熵合金化学体系。\n' + '2. 输出:形成能和凸包。\n' + '3. 注意事项:仅支持二元对。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'generate_binary_phase_diagram': { + 'belonging_agent': HEACALCULATOR_AGENT_NAME, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + 'What it does: Generate a binary phase diagram for a specified A–B system based on available thermodynamic/energy data in the backend workflow.\n' + 'When to use: You want a quick overview of stable/competing phases across composition for a binary alloy/compound system.\n' + 'Prerequisites / Inputs: Element pair (A, B) and optional temperature/pressure range; requires accessible formation-energy/thermo dataset or computation route configured in the backend.\n' + 'Outputs: Phase diagram data (stable phases, tie-lines, composition ranges) and a plot-ready representation.\n' + 'Cannot do / Limits: If no dataset/computation route is available, the tool will return an error; results depend on data coverage and model assumptions.\n' + 'Cost / Notes: Medium; faster with cached datasets.' + ), + 'alternative': [], + 'self_check': False, + }, + 'generate_binary_phase_diagram_zh': { + 'belonging_agent': HEACALCULATOR_AGENT_NAME, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + '功能:基于后端工作流中可用的热力学/能量数据,为指定的 A–B 体系生成二元相图。\n' + '使用场景:当你需要快速了解二元合金或化合物体系在不同成分下,有哪些稳定相(Stable phases)或竞争相(Competing phases)时。\n' + '高熵合金\n' + '使用方法:\n' + '1. 输入:元素对(A, B)和可选的温度/压力范围;可访问的形成能/热力学数据集或计算路径。\n' + '2. 输出:相图原始数据(稳定相、结线/共轭线 (Tie-lines)、成分范围)以及可直接绘图的展示结果。\n' + '3. 注意事项:\n' + ' 如果没有可用的数据集/计算路径,工具将返回错误;\n' + ' 结果依赖于数据覆盖范围和模型假设。\n' + '4. 成本/备注:中等;使用缓存数据集更快。' + ), + 'alternative': [], + 'self_check': False, + }, + 'query_heakb_literature': { + 'belonging_agent': HEA_KB_AGENT_NAME, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': HEAKbAgentToolDescription, + 'args_setting': f"{HEAKbAgentArgsSetting}", + 'alternative': ['HEA_paper_search', 'search-papers-enhanced', 'web-search'], + 'summary_prompt': HEAKbAgentSummaryPrompt, + 'self_check': False, + }, + 'query_heakb_literature_zh': { + 'belonging_agent': HEA_KB_AGENT_NAME, + 'scene': [SceneEnum.HIGH_ENTROPY_ALLOY], + 'description': ( + '功能:使用自然语言查询高熵合金(HEA)研究的文献知识库。\n' + '使用场景:当您需要对高熵合金相关主题进行深入的文献分析时。\n' + '高熵合金\n' + '使用方法:\n' + '1. 输入:关于高熵合金的自然语言问题。\n' + '2. 输出:通过向量相似性搜索返回的文献摘要。\n' + '3. 注意事项:\n' + ' 主题仅限于高熵合金。\n' + '4. 成本/备注:中等。\n', + ), + 'args_setting': f"{HEAKbAgentArgsSetting}", + 'alternative': ['HEA_paper_search', 'search-papers-enhanced', 'web-search'], + 'summary_prompt': HEAKbAgentSummaryPrompt, + 'self_check': False, + }, + 'query_ssekb_literature': { + 'belonging_agent': SSE_KB_AGENT_NAME, + 'scene': [SceneEnum.Solid_State_Electrolyte], + 'description': SSEKbAgentToolDescription, + 'args_setting': f"{SSEKbAgentArgsSetting}", + 'alternative': ['search-papers-enhanced', 'web-search'], + 'summary_prompt': SSEKbAgentSummaryPrompt, + 'self_check': False, + }, + 'query_ssekb_literature_zh': { + 'belonging_agent': SSE_KB_AGENT_NAME, + 'scene': [SceneEnum.Solid_State_Electrolyte], + 'description': ( + '功能:使用自然语言查询固态电解质(SSE)研究的文献知识库。\n' + '使用场景:当您需要对固态电解质相关主题进行深入的文献分析时。\n' + '固态电解质\n' + '使用方法:\n' + '1. 输入:关于固态电解质的自然语言问题。\n' + '2. 输出:通过向量相似性搜索返回的文献摘要。\n' + '3. 注意事项:\n' + ' 主题仅限于固态电解质。\n' + '4. 成本/备注:中等。\n', + ), + 'args_setting': f"{SSEKbAgentArgsSetting}", + 'alternative': ['search-papers-enhanced', 'web-search'], + 'summary_prompt': SSEKbAgentSummaryPrompt, + 'self_check': False, + }, + 'query_polymerkb_literature': { + 'belonging_agent': POLYMER_KB_AGENT_NAME, + 'scene': [SceneEnum.POLYMER], + 'description': POLYMERKbAgentToolDescription, + 'args_setting': f"{POLYMERKbAgentArgsSetting}", + 'alternative': ['search-papers-enhanced', 'web-search'], + 'summary_prompt': POLYMERKbAgentSummaryPrompt, + 'self_check': False, + }, + 'query_polymerkb_literature_zh': { + 'belonging_agent': POLYMER_KB_AGENT_NAME, + 'scene': [SceneEnum.POLYMER], + 'description': ('功能:使用自然语言查询聚合物研究的文献知识库。\n' + '使用场景:当您需要对聚合物相关主题进行深入的文献分析时。\n' + '聚合物\n' + '使用方法:\n' + '1. 输入:关于聚合物的自然语言问题。\n' + '2. 输出:通过向量相似性搜索返回的文献摘要。\n' + '3. 注意事项:\n' + ' 主题仅限于聚合物。\n' + '4. 成本/备注:中等。\n', + ), + 'args_setting': f"{POLYMERKbAgentArgsSetting}", + 'alternative': ['search-papers-enhanced', 'web-search'], + 'summary_prompt': POLYMERKbAgentSummaryPrompt, + 'self_check': False, + }, + 'query_steelkb_literature': { + 'belonging_agent': STEEL_KB_AGENT_NAME, + 'scene': [SceneEnum.STEEL], + 'description': STEELKbAgentToolDescription, + 'args_setting': f"{STEELKbAgentArgsSetting}", + 'alternative': ['search-papers-enhanced', 'web-search'], + 'summary_prompt': STEELKbAgentSummaryPrompt, + 'self_check': False, + }, + 'query_steelkb_literature_zh': { + 'belonging_agent': STEEL_KB_AGENT_NAME, + 'scene': [SceneEnum.STEEL], + 'description': ( + '功能:查询不锈钢研究的文献知识库。\n' + '使用场景:当您需要对不锈钢相关主题进行深入的文献分析时。\n' + '不锈钢\n' + '使用方法:\n' + '1. 输入:关于不锈钢的自然语言问题。\n' + '2. 输出:通过向量搜索返回的文献摘要。\n' + '3. 注意事项:\n' + ' 主题仅限于不锈钢。\n' + '4. 成本/备注:中等。\n', + ), + 'args_setting': f"{STEELKbAgentArgsSetting}", + 'alternative': ['search-papers-enhanced', 'web-search'], + 'summary_prompt': STEELKbAgentSummaryPrompt, + 'self_check': False, + }, + 'predict_tensile_strength': { + 'belonging_agent': STEEL_PREDICT_AGENT_NAME, + 'scene': [SceneEnum.STEEL], + 'description': STEELPredictAgentToolDescription, + 'args_setting': f"{STEELPredictAgentArgsSetting}", + 'alternative': ['search-papers-enhanced', 'web-search'], + 'summary_prompt': STEELPredictAgentSummaryPrompt, + 'self_check': False, + }, + 'predict_tensile_strength_zh': { + 'belonging_agent': STEEL_PREDICT_AGENT_NAME, + 'scene': [SceneEnum.STEEL], + 'description': ( + '功能:使用神经网络预测不锈钢的极限抗拉强度。\n' + '使用场景:当您需要基于化学成分预测抗拉强度时。\n' + '不锈钢\n' + '使用方法:\n' + '1. 输入:化学配方列表。\n' + '2. 输出:预测的极限抗拉强度值列表(单位:MPa)。\n' + '3. 注意事项:\n' + ' 仅适用于不锈钢;不返回文件。\n' + '4. 成本/备注:低。\n', + ), + 'args_setting': f"{STEELPredictAgentArgsSetting}", + 'alternative': ['search-papers-enhanced', 'web-search'], + 'summary_prompt': STEELPredictAgentSummaryPrompt, + 'self_check': False, + }, + 'fetch_structures_with_filter': { + 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': OptimadeFilterToolDescription, + 'args_setting': f"{OptimadeFilterArgsSetting}", + 'alternative': [ + 'fetch_bohrium_crystals', + 'fetch_openlam_structures', + 'web-search', + ], + 'summary_prompt': OptimadeAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_structures_with_filter_zh': { + 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': ( + '功能:向OPTIMADE提供者发送过滤字符串进行结构搜索。\n' + '使用场景:用于灵活的组成/化学式查询,无需空间群或带隙约束。\n' + '数据库搜索\n' + '使用方法:\n' + '1. 输入:OPTIMADE过滤字符串。\n' + '2. 输出:匹配的结构。\n' + '3. 注意事项:\n' + ' 完整的OPTIMADE过滤语言;并行查询。\n' + '4. 成本/备注:中等。\n', + ), + 'args_setting': f"{OptimadeFilterArgsSetting}", + 'alternative': [ + 'fetch_bohrium_crystals', + 'fetch_openlam_structures', + 'web-search', + ], + 'summary_prompt': OptimadeAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_structures_with_spg': { + 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': OptimadeSpgToolDescription, + 'args_setting': f"{OptimadeSpgArgsSetting}", + 'alternative': [ + 'fetch_bohrium_crystals', + 'fetch_structures_with_filter', + 'web-search', + ], + 'summary_prompt': OptimadeAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_structures_with_spg_zh': { + 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': ( + '功能:通过空间群编号搜索结构,可附加可选过滤器。\n' + '使用场景:当用户指定空间群编号或原型结构时。\n' + '数据库搜索\n' + '使用方法:\n' + '1. 输入:空间群编号和OPTIMADE过滤字符串。\n' + '2. 输出:匹配空间群的结构。\n' + '3. 注意事项:\n' + ' 提供者特定的空间群过滤器。\n' + '4. 成本/备注:中等。\n', + ), + 'args_setting': f"{OptimadeSpgArgsSetting}", + 'alternative': [ + 'fetch_bohrium_crystals', + 'fetch_structures_with_filter', + 'web-search', + ], + 'summary_prompt': OptimadeAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_structures_with_bandgap': { + 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': OptimadeBandgapToolDescription, + 'args_setting': f"{OptimadeBandgapArgsSetting}", + 'alternative': [ + 'fetch_bohrium_crystals', + 'fetch_structures_with_filter', + 'web-search', + ], + 'summary_prompt': OptimadeAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_structures_with_bandgap_zh': { + 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': ( + '功能:通过带隙范围搜索结构,可附加可选过滤器。\n' + '使用场景:当用户指定带隙范围时。\n' + '数据库搜索\n', + '使用方法:\n' + '1. 输入:带隙范围和OPTIMADE过滤字符串。\n' + '2. 输出:带隙在范围内的结构。\n' + '3. 注意事项:\n' + ' 提供者特定的带隙过滤器。\n' + '4. 成本/备注:中等。\n', + ), + 'args_setting': f"{OptimadeBandgapArgsSetting}", + 'alternative': [ + 'fetch_bohrium_crystals', + 'fetch_structures_with_filter', + 'web-search', + ], + 'summary_prompt': OptimadeAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_bohrium_crystals': { + 'belonging_agent': BOHRIUMPUBLIC_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': BohriumPublicAgentToolDescription, + 'args_setting': f"{BohriumPublicAgentArgsSetting}", + 'alternative': [ + 'fetch_structures_with_filter', + 'web-search', + 'fetch_openlam_structures', + ], + 'summary_prompt': BohriumPublicAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_bohrium_crystals_zh': { + 'belonging_agent': BOHRIUMPUBLIC_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': ( + '功能:从Bohrium Public数据库检索晶体结构。\n' + '使用场景:用于化学式、元素、空间群、原子数、形成能、带隙查询。\n' + '数据库搜索\n' + '使用方法:\n' + '1. 输入:化学式、元素等过滤器。\n' + '2. 输出:CIF或JSON格式的结构。\n' + '3. 注意事项:\n' + ' 不支持逻辑表达式;比OPTIMADE更快。\n' + '4. 成本/备注:低。\n', + ), + 'args_setting': f"{BohriumPublicAgentArgsSetting}", + 'alternative': [ + 'fetch_structures_with_filter', + 'web-search', + 'fetch_openlam_structures', + ], + 'summary_prompt': BohriumPublicAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_openlam_structures': { + 'belonging_agent': OPENLAM_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': OpenlamAgentToolDescription, + 'args_setting': f"{OpenlamAgentArgsSetting}", + 'alternative': [ + 'fetch_structures_with_filter', + 'web-search', + 'fetch_openlam_structures', + ], + 'summary_prompt': OpenlamAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_openlam_structures_zh': { + 'belonging_agent': OPENLAM_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': ( + '功能:从OpenLAM数据库检索晶体结构。\n' + '使用场景:当查询OpenLAM特定材料或基于时间的过滤器时。\n' + '数据库搜索\n' + '使用方法:\n' + '1. 输入:化学式、能量范围、提交时间过滤器。\n' + '2. 输出:CIF或JSON格式的结构。\n' + '3. 注意事项:\n' + ' 不支持空间群、带隙、元素列表或逻辑过滤器。\n' + '4. 成本/备注:中等。\n', + ), + 'args_setting': f"{OpenlamAgentArgsSetting}", + 'alternative': [ + 'fetch_structures_with_filter', + 'web-search', + 'fetch_openlam_structures', + ], + 'summary_prompt': OpenlamAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_mofs_sql': { + 'belonging_agent': MOFDB_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': MofdbAgentToolDescription, + 'args_setting': f"{MofdbAgentArgsSetting}", + 'alternative': ['web-search'], + 'summary_prompt': MofdbAgentSummaryPrompt, + 'self_check': True, + }, + 'fetch_mofs_sql_zh': { + 'belonging_agent': MOFDB_DATABASE_AGENT_NAME, + 'scene': [SceneEnum.DATABASE_SEARCH], + 'description': ( + '功能:对MOF数据库执行SQL查询。\n' + '使用场景:用于复杂的MOF查询,包括多表连接和统计分析。\n' + '数据库搜索\n' + '使用方法:\n' + '1. 输入:SQL查询字符串。\n' + '2. 输出:查询结果。\n' + '3. 注意事项:\n' + ' 特定于MOF;支持高级SQL。\n' + '4. 成本/备注:中等。\n', + ), + 'args_setting': f"{MofdbAgentArgsSetting}", + 'alternative': ['web-search'], + 'summary_prompt': MofdbAgentSummaryPrompt, + 'self_check': True, + }, + 'calculate_reaction_profile': { + 'belonging_agent': ORGANIC_REACTION_AGENT_NAME, + 'scene': [SceneEnum.REACTION], + 'description': ( + 'What it does: Calculate reaction profile.\n' + 'When to use: For organic reaction analysis.\n' + 'Prerequisites / Inputs: Reaction inputs.\n' + 'Outputs: Reaction profile.\n' + 'Cannot do / Limits: Specific to reactions.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'calculate_reaction_profile_zh': { + 'belonging_agent': ORGANIC_REACTION_AGENT_NAME, + 'scene': [SceneEnum.REACTION], + 'description': ( + '功能:计算反应势能剖面。\n' + '使用场景:用于有机反应分析。\n' + '反应\n' + '使用方法:\n' + '1. 输入:反应输入。\n' + '2. 输出:反应势能剖面(展示反应坐标与能量关系的剖面图)。\n' + '3. 注意事项:仅针对化学反应体系;不适用于通用的结构搜索或非反应性计算。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_piloteye': { + 'belonging_agent': PILOTEYE_ELECTRO_AGENT_NAME, + 'scene': [SceneEnum.PILOTEYE_ELECTRO], + 'description': ( + 'What it does: Perform property calculations for lithium-ion battery electrolytes using MD and DFT.\n' + 'When to use: When you need electrolyte property calculations.\n' + 'Prerequisites / Inputs: Params JSON with formulation.\n' + 'Outputs: Target properties from modeling pipeline.\n' + 'Cannot do / Limits: Built-in molecule library; complete workflow.\n' + 'Cost / Notes: High.' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_piloteye_zh': { + 'belonging_agent': PILOTEYE_ELECTRO_AGENT_NAME, + 'scene': [SceneEnum.PILOTEYE_ELECTRO], + 'description': ( + '功能:使用分子动力学和密度泛函理论对锂离子电池电解质进行性质计算。\n' + '使用场景:当你需要评估或预测电解液体系的性能指标时。\n' + 'PILOTEYE_ELECTRO\n' + '使用方法:\n' + '1. 输入:包含“配方信息(Formulation)”的 JSON 格式参数文件。\n' + '2. 输出:建模流程的目标性质。\n' + '3. 注意事项:仅限使用内置分子库中的物料。该模块为固定工作流,自定义灵活度受限。\n' + '4. 成本/备注:高。' + ), + 'alternative': [], + 'self_check': False, + }, + 'generate_calypso_structures': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Perform global structure search with CALYPSO to generate candidate crystal structures.\n' + 'When to use: When you need to explore polymorphs for a composition.\n' + 'Prerequisites / Inputs: Valid element inputs; CALYPSO environment.\n' + 'Outputs: Multiple POSCAR files.\n' + 'Cannot do / Limits: Requires relaxation downstream.\n' + 'Cost / Notes: Medium.' + ), + 'args_setting': 'Parameter guidance: n_tot=10–30 gives reasonable diversity without excessive cost. Elements must be from the supported list (H–Bi, Ac–Pu). Output is a set of POSCAR files; downstream relaxation is strongly recommended.', + 'alternative': [], + 'self_check': True, + }, + 'generate_calypso_structures_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:利用 CALYPSO 进行全局结构搜索,从而生成一系列候选晶体结构。\n' + '使用场景:当需要探索成分的同质异形体时使用。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:有效的元素输入。\n' + '2. 输出:POSCAR 文件。\n' + '3. 注意事项:需要下游弛豫。\n' + '4. 成本/备注:中等。' + ), + 'args_setting': '参数指导:n_tot=10–30 可在不过度成本的情况下提供合理的多样性。元素必须来自支持的列表(H–Bi, Ac–Pu)。输出是一组 POSCAR 文件;强烈建议进行下游弛豫。', + 'alternative': [], + 'self_check': True, + }, + 'generate_crystalformer_structures': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.CONDITIONAL_GENERATE], + 'description': ( + 'What it does: Generate crystal structures based on conditional attributes and space groups.\n' + 'When to use: When you need structures with specific properties.\n' + 'Prerequisites / Inputs: Target properties (bandgap, moduli, Tc, sound); space groups.\n' + 'Outputs: Generated structures.\n' + 'Cannot do / Limits: Limited to supported properties; requires space group.\n' + 'Cost / Notes: High; uses generative model.' + ), + 'args_setting': 'Parameter guidance: Supported properties: bandgap (eV), shear_modulus, bulk_modulus (both log₁₀ GPa), superconducting ambient_pressure/high_pressure (K), sound (m/s). For target_type="minimize", use small target (e.g., 0.1) and low alpha (0.01); for "equal", "greater", "less", use alpha=1.0. mc_steps=500 balances convergence and speed; increase to 2000 for high-accuracy targets. sample_num=20–100 recommended; distribute across space groups if random_spacegroup_num>0. Critical: Space group must be explicitly specified by the user — no defaults or auto-inference.', + 'alternative': [], + 'self_check': True, + }, + 'generate_crystalformer_structures_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.CONDITIONAL_GENERATE], + 'description': ( + '功能:基于条件属性和空间群生成晶体结构。\n' + '使用场景:当需要具有特定性质的结构时使用。\n' + '结构生成,条件生成\n' + '使用方法:\n' + '1. 输入:目标性质(带隙、模量、Tc、声速);空间群。\n' + '2. 输出:生成的结构。\n' + '3. 注意事项:仅支持模型预训练过的特定性质;必须指定空间群作为生成的约束条件。\n' + '4. 成本/备注:高;使用生成模型。' + ), + 'args_setting': '参数指导:支持的性质:带隙(eV)、剪切模量、体积模量(均为 log₁₀ GPa)、超导常压/高压(K)、声速(m/s)。对于 target_type="minimize",使用小目标值(例如 0.1)和低 alpha(0.01);对于 "equal"、"greater"、"less",使用 alpha=1.0。mc_steps=500 平衡收敛和速度;对于高精度目标,增加到 2000。建议 sample_num=20–100;如果 random_spacegroup_num>0,则在空间群之间分布。关键:空间群必须由用户明确指定——无默认值或自动推断。', + 'alternative': [], + 'self_check': True, + }, + 'make_supercell_structure': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Create supercell expansion from structure file.\n' + 'When to use: When you need larger unit cell for simulations.\n' + 'Prerequisites / Inputs: Structure file.\n' + 'Outputs: Supercell structure.\n' + 'Cannot do / Limits: Expansion only; no reduction.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': "Parameter guidance: Primarily follow user's instrucution. If not specified, firstly get structure information to understand the raw lattice. An ideal supercell for computation is isotropic. For example, the raw lattice is (4 A, 10 A, 12 A, 90 deg, 90 deg, 90 deg), the supercell should be 5 × 2 × 2. 30-50 angstrom is often appropriate for simulations. Avoid overly large cells unless needed for long-range interactions.", + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'make_supercell_structure_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:从结构文件创建超胞扩充。\n' + '使用场景:当你需要构建更大尺寸的单元以进行模拟时。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:结构文件。\n' + '2. 输出:超胞结构。\n' + '3. 注意事项:仅支持扩展,不支持缩减。\n' + '4. 成本/备注:低。' + ), + 'args_setting': '参数指导:主要遵循用户的指示。如果未指定,首先获取结构信息以了解原始晶格。用于计算的理想超胞是各向同性的。例如,原始晶格为(4 Å, 10 Å, 12 Å, 90 deg, 90 deg, 90 deg),超胞应为 5 × 2 × 2。30-50 埃通常适合模拟。除非需要长程相互作用,否则避免过大的晶胞。', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'build_bulk_structure_by_template': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Build bulk structures for simple packing types and compounds.\n' + 'When to use: For standard crystal structures like sc, fcc, bcc, hcp, rocksalt, etc.\n' + 'Prerequisites / Inputs: Element symbols or formulas; lattice constants.\n' + 'Outputs: Crystal structure file.\n' + 'Cannot do / Limits: Limited to simple structures; no complex crystals.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': f'Parameter guidance: Lattice constant requirements due to symmetry constraints: sc/fcc/bcc/diamond/rocksalt/cesiumchloride/zincblende/fluorite → only a; hcp/wurtzite → a and c; orthorhombic/monoclinic → a, b, c. Set conventional=True by default unless primitive cell is explicitly required. For elements, use element symbols; for compounds, use chemical formula (e.g., "NaCl"). {STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [ + 'fetch_bohrium_crystals', + 'fetch_structures_with_filter', + 'build_bulk_structure_by_wyckoff', + ], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'build_bulk_structure_by_template_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:为简单堆积类型和化合物构建体相结构。\n' + '使用场景:用于标准晶体结构,如 sc、fcc、bcc、hcp、岩盐等。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:元素符号或化学式;晶格常数。\n' + '2. 输出:晶体结构文件。\n' + '3. 注意事项:仅限于简单结构;不支持复杂晶体。\n' + '4. 成本/备注:低。' + ), + 'args_setting': f'参数指导:由于对称性约束的晶格常数要求:sc/fcc/bcc/diamond/rocksalt/cesiumchloride/zincblende/fluorite → 仅 a;hcp/wurtzite → a 和 c;orthorhombic/monoclinic → a, b, c。除非明确要求原胞,否则默认设置 conventional=True。对于元素,使用元素符号;对于化合物,使用化学式(例如 "NaCl")。{STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [ + 'fetch_bohrium_crystals', + 'fetch_structures_with_filter', + 'build_bulk_structure_by_wyckoff', + ], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'build_surface_slab': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Build surface slab structures from bulk structure.\n' + 'When to use: When you need surface models for calculations.\n' + 'Prerequisites / Inputs: Bulk structure file; Miller indices.\n' + 'Outputs: Slab structure file.\n' + 'Cannot do / Limits: Requires bulk input; vacuum added.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': f'Parameter guidance: Prefer slab_size_mode="layers" with slab_size_value=4–6 for stability; or "thickness" with ≥12 Å for electronic convergence. Use vacuum=15–20 Å to minimize spurious interactions. For polar surfaces or systems with strong dipoles, increase vacuum to ensure the electrostatic potential flattens in the vacuum region. Enable repair=True for covalent materials (e.g., drug-like molecule crystals, oragnic-inorganic hybrids, MOFs); Set false for regular sphrical-like inorganic crystals. Gets slow if set True. Default termination="auto" usually selects the most stoichiometric termination. {STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'build_surface_slab_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:从体相结构构建表面结构。\n' + '使用场景:当需要表面模型进行计算时使用。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:体相结构文件;Miller 指数。\n' + '2. 输出:表面结构文件。\n' + '3. 注意事项:需要体相输入;添加真空层。\n' + '4. 成本/备注:低。' + ), + 'args_setting': f'参数指导:为了稳定性,优先使用 slab_size_mode="layers",slab_size_value=4–6;或使用 "thickness",≥12 Å 用于电子收敛。使用 vacuum=15–20 Å 以最小化虚假相互作用。对于极性表面或具有强偶极子的体系,增加真空层以确保静电势在真空区域变平。对于共价材料(例如,类药物分子晶体、有机-无机杂化物、MOF),启用 repair=True;对于规则的类球形无机晶体,设置为 false。如果设置为 True,速度会变慢。默认 termination="auto" 通常选择最化学计量的终止。{STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'build_surface_adsorbate': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Build surface-adsorbate structures by placing molecules on slabs.\n' + 'When to use: For adsorption studies.\n' + 'Prerequisites / Inputs: Surface slab and adsorbate structure files.\n' + 'Outputs: Combined structure file.\n' + 'Cannot do / Limits: Single adsorbate placement.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': f'Parameter guidance: height=2.0 Å is typical for physisorption; reduce to 1.5–1.8 Å for chemisorption (e.g., CO on Pt). For high-symmetry sites, use string keywords ("ontop", "fcc", "hcp"); for custom placement, supply [x, y] fractional coordinates. {STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'build_surface_adsorbate_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:通过在表面上放置分子来构建表面-吸附物结构。\n' + '使用场景:用于吸附研究。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:表面结构文件和吸附质结构文件。\n' + '2. 输出:组合结构文件。\n' + '3. 注意事项:仅支持单吸附质放置。\n' + '4. 成本/备注:低。' + ), + 'args_setting': f'参数指导:height=2.0 Å 通常用于物理吸附;对于化学吸附(例如,CO 在 Pt 上)减少到 1.5–1.8 Å。对于高对称性位点,使用字符串关键词("ontop"、"fcc"、"hcp");对于自定义放置,提供 [x, y] 分数坐标。{STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'build_surface_interface': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Build heterointerface by stacking two slab structures.\n' + 'When to use: For interface studies.\n' + 'Prerequisites / Inputs: Two slab structure files.\n' + 'Outputs: Interface structure file.\n' + 'Cannot do / Limits: Basic strain checking.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': f'Parameter guidance: Keep max_strain=0.05 (5%) for physical relevance; relax only if intentional strain engineering is intended. Try combinding make_supercell and get_structural_info to obtain the appropriate size of the two slabs. interface_distance=2.5 Å is safe for van der Waals gaps; reduce to 1.8–2.0 Å for covalent bonding (e.g., heterostructures with orbital overlap). {STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'build_surface_interface_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:通过堆叠两个表面结构来构建异质界面。\n' + '使用场景:用于界面研究。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:两个表面结构文件。\n' + '2. 输出:界面结构文件。\n' + '3. 注意事项:基础的应变 (Strain) 检查。\n' + '4. 成本/备注:低。' + ), + 'args_setting': f'参数指导:保持 max_strain=0.05(5%)以确保物理相关性;仅在有意进行应变工程时进行弛豫。尝试结合 make_supercell 和 get_structural_info 以获得两个板的适当尺寸。interface_distance=2.5 Å 对于范德华间隙是安全的;对于共价键合(例如,具有轨道重叠的异质结构)减少到 1.8–2.0 Å。{STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'add_cell_for_molecules': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Add periodic cell to molecular structures for calculations.\n' + 'When to use: For isolated molecule calculations requiring periodicity.\n' + 'Prerequisites / Inputs: Molecular structure file.\n' + 'Outputs: Structure with periodic cell.\n' + 'Cannot do / Limits: For gas-phase molecules.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': f'Parameter guidance: For non-periodic system aiming to run calculations with periodic boundary conditions required (e.g., DFT calculations with ABACUS), use add_cell_for_molecules to put the system in a large cell. Default cell [10, 10, 10] Å and vacuum = 5 Å are suitable for most gas-phase molecules; increase to ≥15 Å and ≥8 Å vacuum for polar or diffuse systems (e.g., anions, excited states). {STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'add_cell_for_molecules_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:为分子结构添加周期晶胞以进行计算。\n' + '使用场景:用于需要周期性的孤立分子计算。\n' + '使用方法:\n' + '结构生成\n' + '1. 输入:分子结构文件。\n' + '2. 输出:带周期晶胞的结构。\n' + '3. 注意事项:用于气相分子。\n' + '4. 成本/备注:低。' + ), + 'args_setting': f'参数指导:对于需要周期性边界条件的非周期体系(例如,使用 ABACUS 的 DFT 计算),使用 add_cell_for_molecules 将体系放入大晶胞中。默认晶胞 [10, 10, 10] Å 和 vacuum = 5 Å 适合大多数气相分子;对于极性或扩散体系(例如,阴离子、激发态)增加到 ≥15 Å 和 ≥8 Å 真空。{STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'build_bulk_structure_by_wyckoff': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Build crystal structures by specifying space group and Wyckoff positions.\n' + 'When to use: For custom crystal structures.\n' + 'Prerequisites / Inputs: Space group; Wyckoff positions with coordinates.\n' + 'Outputs: Crystal structure file.\n' + 'Cannot do / Limits: Requires symmetry knowledge.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': f'Parameter guidance: Space Group: Integer (e.g., 225) or Symbol (e.g., "Fm-3m"). Wyckoff Consistency: The provided coordinates must mathematically belong to the specific Wyckoff position (e.g., if using position 4a at (0,0,0), do not input (0.5, 0.5, 0) just because it\'s in the same unit cell; only input the canonical generator). Lattice: Angles in degrees, lengths in Å. Fractional Coordinates: Must be in [0, 1). Strictly Use the Asymmetric Unit: You must provide only the generating coordinates for each Wyckoff orbit. Do NOT Pre-calculate Symmetry: The function will automatically apply all space group operators to your input. If you manually input coordinates that are already symmetry-equivalent (e.g., providing both (x, y, z) and (-x, -y, -z) in a centrosymmetric structure), the function will generate them again, causing catastrophic atom overlapping. Redundancy Rule: Before adding a coordinate, check if it can be generated from an existing input coordinate via any operator in the Space Group. If yes, discard it. One Wyckoff letter = One coordinate triplet input. {STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [ + 'fetch_bohrium_crystals', + 'fetch_structures_with_filter', + 'build_bulk_structure_by_template', + ], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'build_bulk_structure_by_wyckoff_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:通过指定空间群和 Wyckoff 位置来构建晶体结构。\n' + '使用场景:用于自定义晶体结构。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:空间群;带坐标的 Wyckoff 位置。\n' + '2. 输出:晶体结构文件。\n' + '3. 注意事项:需要对称性知识。\n' + '4. 成本/备注:低。' + ), + 'args_setting': f'参数指导:空间群:整数(例如,225)或符号(例如,"Fm-3m")。Wyckoff 一致性:提供的坐标必须在数学上属于特定的 Wyckoff 位置(例如,如果在 (0,0,0) 使用位置 4a,不要仅仅因为它在同一晶胞中就输入 (0.5, 0.5, 0);只输入规范生成元)。晶格:角度以度为单位,长度以 Å 为单位。分数坐标:必须在 [0, 1) 范围内。严格使用非对称单元:您必须仅为每个 Wyckoff 轨道提供生成坐标。不要预先计算对称性:函数将自动将所有空间群操作符应用于您的输入。如果您手动输入已经对称等价的坐标(例如,在中心对称结构中同时提供 (x, y, z) 和 (-x, -y, -z)),函数将再次生成它们,导致灾难性的原子重叠。冗余规则:在添加坐标之前,检查它是否可以通过空间群中的任何操作符从现有输入坐标生成。如果是,则丢弃它。一个 Wyckoff 字母 = 一个坐标三元组输入。{STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [ + 'fetch_bohrium_crystals', + 'fetch_structures_with_filter', + 'build_bulk_structure_by_template', + ], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'build_molecule_structures_from_smiles': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Build 3D molecular structures from SMILES strings.\n' + 'When to use: When you have SMILES and need 3D coordinates.\n' + 'Prerequisites / Inputs: SMILES string.\n' + 'Outputs: Molecular structure file.\n' + 'Cannot do / Limits: Single conformer generation.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': f'{STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'build_molecule_structures_from_smiles_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:从 SMILES 字符串构建 3D 分子结构。\n' + '使用场景:当您有 SMILES 并需要 3D 坐标时使用。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:SMILES 字符串。\n' + '2. 输出:分子结构文件。\n' + '3. 注意事项:单个构象生成。\n' + '4. 成本/备注:低。' + ), + 'args_setting': f'{STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'make_doped_structure': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Generate doped crystal structures by substituting atoms.\n' + 'When to use: For doping studies.\n' + 'Prerequisites / Inputs: Host structure; dopant species and concentrations.\n' + 'Outputs: Doped structure file.\n' + 'Cannot do / Limits: Random substitution; recommend supercells.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': f'Parameter guidance: Fractions are applied per-site; actual doping % may differ slightly in small cells — recommend ≥2×2×2 supercells for <10% doping. Covalent ions (ammonium, formamidinium, etc.) are supported via built-in library; specify by name (e.g., "ammonium"). {STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'make_doped_structure_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:通过替换原子生成掺杂晶体结构。\n' + '使用场景:用于掺杂研究。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:主体结构;掺杂物种和浓度。\n' + '2. 输出:掺杂结构文件。\n' + '3. 注意事项:随机替换;建议使用超胞。\n' + '4. 成本/备注:低。' + ), + 'args_setting': f'参数指导:分数按位点应用;实际掺杂百分比在小晶胞中可能略有不同——对于 <10% 掺杂,建议使用 ≥2×2×2 超胞。共价离子(铵、甲脒等)通过内置库支持;按名称指定(例如,"ammonium")。{STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'make_defect_structure': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Create a defect structure by removing specific molecular clusters based on spatial relationships.\n' + 'When to use: For creating vacancy defects in molecular crystals by removing specific molecular units based on spatial clustering.\n' + 'Prerequisites / Inputs: Input molecular crystal structure file; optionally target species to remove and starting molecule index.\n' + 'Outputs: Defective structure file.\n' + 'Cannot do / Limits: Specifically designed for molecular crystals where entire molecules need to be removed as clusters rather than individual atoms.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': 'Parameter guidance: structure_path is the input molecular crystal structure file (e.g., CIF); target_spec is an optional dictionary mapping species IDs to counts to remove (e.g., {"C6H14N2_1": 1, "H4N_1": 1}), if None uses the simplest unit in crystal; seed_index is the index of molecule to start removing from, if None picks randomly from rarest species; method is the method to use for selecting molecules to remove; return_removed_cluster: controls whether returns removed clusters; output_file is the path to save the generated defective structure file.', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'make_defect_structure_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:通过基于空间关系移除特定分子簇来创建缺陷结构。\n' + '使用场景:用于通过基于空间聚类移除特定分子单元在分子晶体中创建空位缺陷。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:分子晶体结构文件;(可选)目标移除物种、起始分子索引。\n' + '2. 输出:缺陷结构文件。\n' + '3. 注意事项:专为分子晶体设计。该功能确保移除的是整个分子单元,而非晶格中的孤立原子。\n' + '4. 成本/备注:低。' + ), + 'args_setting': '参数指导:structure_path 是输入的分子晶体结构文件(例如,CIF);target_spec 是一个可选的字典,将物种 ID 映射到要移除的数量(例如,{"C6H14N2_1": 1, "H4N_1": 1}),如果为 None 则使用晶体中最简单的单元;seed_index 是开始移除的分子的索引,如果为 None 则从最稀有物种中随机选择;method 是用于选择要移除的分子的方法;return_removed_cluster:控制是否返回移除的簇;output_file 是保存生成的缺陷结构文件的路径。', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'make_amorphous_structure': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Generate amorphous molecular structures in periodic boxes.\n' + 'When to use: For amorphous material simulations.\n' + 'Prerequisites / Inputs: Molecule structure; box size/density/count.\n' + 'Outputs: Amorphous structure file.\n' + 'Cannot do / Limits: Avoids overlaps; for further relaxation.\n' + 'Cost / Notes: Medium.' + ), + 'args_setting': f'Parameter guidance: Input Constraint: Specify exactly two of: box_size, density, molecule_numbers. The third is derived. Density Regimes (CRITICAL): Solids/Liquids: Target ~0.9–1.2 g/cm³ (e.g., water ~1.0, polymers ~1.1). Gases/Vapors: Target orders of magnitude lower (e.g., ~0.001–0.002 g/cm³ for STP gases). Warning: Do not apply default liquid densities to gas inputs. If simulating a specific pressure, pre-calculate the required number of molecules N for the given Box Volume V (using Ideal Gas Law), then fix box_size and molecule_numbers. Composition: Use composition for multi-component mixtures; otherwise equal molar ratios are assumed. Packing Geometry: Box Size: For gases, ensure the box is large enough (usually >15 Å) to minimize unphysical periodic self-interactions, even if the density is low. {STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'make_amorphous_structure_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:在周期性盒子 (Periodic Box) 中生成非晶态/无定形分子结构。\n' + '使用场景:用于非晶材料模拟。\n' + '结构生成\n' + '使用方法:\n' + '1. 输入:分子结构;盒子尺寸/密度/数量。\n' + '2. 输出:非晶结构文件。\n' + '3. 注意事项:具备基础的防重叠功能,但生成的结构仍需进行后续的结构弛豫或分子动力学平衡。\n' + '4. 成本/备注:中等。' + ), + 'args_setting': f'参数指导:输入约束:精确指定以下两个:box_size、density、molecule_numbers。第三个是推导的。密度范围(关键):固体/液体:目标 ~0.9–1.2 g/cm³(例如,水 ~1.0,聚合物 ~1.1)。气体/蒸汽:目标数量级更低(例如,STP 气体 ~0.001–0.002 g/cm³)。警告:不要将默认液体密度应用于气体输入。如果模拟特定压力,预先计算给定盒子体积 V 所需的分子数 N(使用理想气体定律),然后固定 box_size 和 molecule_numbers。组成:对于多组分混合物使用 composition;否则假设等摩尔比。堆积几何:盒子尺寸:对于气体,确保盒子足够大(通常 >15 Å)以最小化非物理周期性自相互作用,即使密度很低。{STRUCTURE_BUILDING_SAVENAME}', + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'get_structure_info': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.UNIVERSAL], + 'description': ( + 'What it does: Extract structural information from **files**.\n' + 'When to use: Analyze crystal/molecular structures **files**.\n' + 'Prerequisites / Inputs: Structure file path.\n' + 'Outputs: Formula, space group, lattice, atoms.\n' + 'Cannot do / Limits: No modifications; read-only.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': '', + 'alternative': ['file_parse'], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'get_structure_info_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.UNIVERSAL], + 'description': ( + '功能:从文件中提取结构信息。\n' + '使用场景:分析晶体/分子结构文件。\n' + '通用场景\n' + '使用方法:\n' + '1. 输入:结构文件路径。\n' + '2. 输出:化学式、空间群、晶格、原子。\n' + '3. 注意事项:不进行修改;只读。\n' + '4. 成本/备注:低。' + ), + 'args_setting': '', + 'alternative': ['file_parse'], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'get_molecule_info': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.UNIVERSAL], + 'description': ( + 'What it does: Extract molecular structure information from **files**.\n' + 'When to use: Analyze molecular structures **files**.\n' + 'Prerequisites / Inputs: Molecule file path.\n' + 'Outputs: Formula, atoms, bonds, properties.\n' + 'Cannot do / Limits: No modifications; read-only.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': '', + 'alternative': ['file_parse'], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'get_molecule_info_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.UNIVERSAL], + 'description': ( + '功能:从文件中提取分子结构信息。\n' + '使用场景:分析分子结构文件。\n' + '通用场景\n' + '使用方法:\n' + '1. 输入:分子文件路径。\n' + '2. 输出:化学式、原子、键、性质。\n' + '3. 注意事项:不进行修改;只读。\n' + '4. 成本/备注:低。' + ), + 'args_setting': '', + 'alternative': ['file_parse'], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'add_hydrogens': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_SANITIZE, SceneEnum.STRUCTURE_GENERATE], + 'description': ( + 'What it does: Add hydrogen atoms to a structure.\n' + 'When to use: Complete structures by adding missing hydrogens.\n' + 'Prerequisites / Inputs: Structure file path; optional bonding or hydrogen-adding rules.\n' + 'Outputs: Structure file with hydrogens added.\n' + 'Cannot do / Limits: No optimization, refinement, or reactions.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': ( + '- target_elements: Optional. Limit hydrogen addition to specific elements.\n' + '- optimize_torsion: Optional. If True, adjust torsion angles to optimize geometry; default is False.\n' + '- rules: Optional. **Critical** for special cases (e.g., N in ammonium must remain target_coordination=4 and geometry of tetrahedron). ' + 'If not provided, default chemical environment rules are used. For precise control, provide rules to override defaults.\n' + '- bond_lengths: Optional. Override default bond lengths for specific atom pairs. If None, defaults are used.\n' + 'IMPORTANT: Even though rules are optional, certain functional groups require explicit rules for correctness. ' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'add_hydrogens_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_SANITIZE, SceneEnum.STRUCTURE_GENERATE], + 'description': ( + '功能:为输入结构添加氢原子。\n' + '使用场景:补全结构中缺失的氢原子。\n' + '结构规范化,结构生成\n' + '使用方法:\n' + '1. 输入:结构文件路径;成键规则或特定的加氢逻辑。\n' + '2. 输出:已添加氢原子的结构文件。\n' + '3. 注意事项:不进行优化、精化或反应。\n' + '4. 成本/备注:低。' + ), + 'args_setting': ( + '- target_elements: 可选。将氢添加限制到特定元素。\n' + '- optimize_torsion: 可选。如果为 True,调整扭转角以优化几何结构;默认为 False。\n' + '- rules: 可选。对于特殊情况**关键**(例如,铵中的 N 必须保持 target_coordination=4 和四面体几何)。' + '如果未提供,则使用默认化学环境规则。为了精确控制,提供规则以覆盖默认值。\n' + '- bond_lengths: 可选。覆盖特定原子对的默认键长。如果为 None,则使用默认值。\n' + '重要提示:尽管规则是可选的,但某些官能团需要显式规则才能正确。' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': True, + }, + 'generate_ordered_replicas': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.STRUCTURE_SANITIZE], + 'description': ( + 'What it does: Process disordered CIF files to generate ordered replica structures.\n' + 'When to use: When you have a disordered structure and need to resolve disorder to create ordered structures.\n' + 'Prerequisites / Inputs: Disordered CIF file path; optional number of structures to generate, method for generation.\n' + 'Outputs: List of paths to the generated ordered structure files.\n' + 'Cannot do / Limits: Only processes disordered structures to ordered ones; requires valid CIF input.\n' + 'Cost / Notes: Medium.' + ), + 'args_setting': ( + 'Parameter guidance: structure_path: Required. Input disordered structure file (CIF format). ' + 'generate_count: Optional. Number of ordered structures to generate (default: 1). ' + 'method: Optional. Method for generation ("optimal" for single best structure, "random" for ensemble of structures) (default: "random"). ' + 'output_file: Optional. Directory to save output files; defaults to subdirectory of input file location.' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'generate_ordered_replicas_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.STRUCTURE_SANITIZE], + 'description': ( + '功能:处理含有原子无序的 CIF 文件,生成对应的有序化副本结构。\n' + '使用场景:当您有无序结构并需要解决无序以创建有序结构时使用。\n' + '结构生成,结构规范化\n' + '使用方法:\n' + '1. 输入:无序 CIF 文件路径;(可选)生成的有序结构数量、生成方法。\n' + '2. 输出:生成的有序结构文件路径列表。\n' + '3. 注意事项:仅处理无序结构到有序结构;必须提供符合规范的 CIF 输入文件。\n' + '4. 成本/备注:中等。' + ), + 'args_setting': ( + '参数指导:structure_path: 必需。输入无序结构文件(CIF 格式)。' + 'generate_count: 可选。要生成的有序结构数量(默认:1)。' + 'method: 可选。生成方法("optimal" 用于单个最佳结构,"random" 用于结构集合)(默认:"random")。' + 'output_file: 可选。保存输出文件的目录;默认为输入文件位置的子目录。' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'remove_solvents': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.STRUCTURE_SANITIZE], + 'description': ( + 'What it does: Remove specified solvent molecules from a molecular crystal structure.\n' + 'When to use: When desolvating molecular crystals to obtain solvent-free or partially desolvated structures for analysis or simulation.\n' + 'Prerequisites / Inputs: CIF structure file containing identifiable solvent molecules; target solvent names or formulas.\n' + 'Outputs: Path to the desolvated structure file.\n' + 'Cannot do / Limits: Only removes whole solvent molecules that can be identified by composition; does not modify framework atoms or resolve disorder.\n' + 'Prior step: It is recommended to call get_structure_info first to inspect molecular components and confirm solvent identities.\n' + 'Cost / Notes: Low. Recommended to inspect molecular components first.' + ), + 'args_setting': ( + 'Parameter guidance: structure_path: Required. Input CIF file containing solvent molecules. ' + 'output_file: Required. Path to save the desolvated structure. ' + 'targets: Required. List of solvent names or chemical formulas to remove (e.g., "H2O", "DMF"). ' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'remove_solvents_zh': { + 'belonging_agent': StructureGenerateAgentName, + 'scene': [SceneEnum.STRUCTURE_GENERATE, SceneEnum.STRUCTURE_SANITIZE], + 'description': ( + '功能:从分子晶体结构中移除指定的溶剂分子。\n' + '使用场景:当对分子晶体进行去溶剂化以获得无溶剂或部分去溶剂化结构用于分析或模拟时使用。\n' + '结构生成,结构规范化\n' + '使用方法:\n' + '1. 输入:包含可识别溶剂分子的 CIF 结构文件;目标溶剂名称或化学式。\n' + '2. 输出:去溶剂化结构文件的路径。\n' + '3. 注意事项:仅能移除基于化学组成识别的完整溶剂分子;该操作不会修改骨架原子,也不会处理结构中的无序问题。建议首先调用 get_structure_info 以检查分子组分并确认溶剂身份。\n' + '4. 成本/备注:低。建议首先检查分子组分。' + ), + 'args_setting': ( + '参数指导:structure_path: 必需。包含溶剂分子的输入 CIF 文件。' + 'output_file: 必需。保存去溶剂化结构的路径。' + 'targets: 必需。要移除的溶剂名称或化学式列表(例如,"H2O"、"DMF")。' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'run_superconductor_optimization': { + 'belonging_agent': SuperconductorAgentName, + 'scene': [SceneEnum.SUPERCONDUCTOR], + 'description': ( + 'What it does: Optimize superconducting structures.\n' + 'When to use: Relax superconductor geometries.\n' + 'Prerequisites / Inputs: Structure file (CIF/POSCAR).\n' + 'Outputs: Optimized structure.\n' + 'Cannot do / Limits: Only geometry optimization.\n' + 'Cost / Notes: High (DPA calculations).' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_superconductor_optimization_zh': { + 'belonging_agent': SuperconductorAgentName, + 'scene': [SceneEnum.SUPERCONDUCTOR], + 'description': ( + '功能:优化超导结构。\n' + '使用场景:弛豫超导体几何结构。\n' + '超导体\n' + '使用方法:\n' + '1. 输入:结构文件(CIF/POSCAR)。\n' + '2. 输出:优化后的结构。\n' + '3. 注意事项:仅进行几何优化。\n' + '4. 成本/备注:高(DPA 计算)。' + ), + 'alternative': [], + 'self_check': False, + }, + 'calculate_superconductor_enthalpy': { + 'belonging_agent': SuperconductorAgentName, + 'scene': [SceneEnum.SUPERCONDUCTOR], + 'description': ( + 'What it does: Calculate enthalpy and stability.\n' + 'When to use: Screen superconductor stability.\n' + 'Prerequisites / Inputs: Structure candidates.\n' + 'Outputs: Enthalpy, convex hull, stable phases.\n' + 'Cannot do / Limits: Superconductor-specific only.\n' + 'Cost / Notes: High (DPA calculations).' + ), + 'alternative': ['predict_superconductor_Tc'], + 'self_check': False, + }, + 'calculate_superconductor_enthalpy_zh': { + 'belonging_agent': SuperconductorAgentName, + 'scene': [SceneEnum.SUPERCONDUCTOR], + 'description': ( + '功能:计算焓和稳定性。\n' + '使用场景:筛选超导体稳定性。\n' + '超导体\n' + '使用方法:\n' + '1. 输入:结构候选物。\n' + '2. 输出:焓、凸包、稳定相。\n' + '3. 注意事项:仅限超导体。\n' + '4. 成本/备注:高(DPA 计算)。' + ), + 'alternative': ['predict_superconductor_Tc'], + 'self_check': False, + }, + 'predict_superconductor_Tc': { + 'belonging_agent': SuperconductorAgentName, + 'scene': [SceneEnum.SUPERCONDUCTOR], + 'description': ( + 'What it does: Predict superconducting Tc.\n' + 'When to use: Estimate critical temperature.\n' + 'Prerequisites / Inputs: Material structure.\n' + 'Outputs: Tc prediction.\n' + 'Cannot do / Limits: DPA model only.\n' + 'Cost / Notes: High (ML predictions).' + ), + 'alternative': ['calculate_superconductor_enthalpy'], + 'self_check': False, + }, + 'predict_superconductor_Tc_zh': { + 'belonging_agent': SuperconductorAgentName, + 'scene': [SceneEnum.SUPERCONDUCTOR], + 'description': ( + '功能:预测超导 Tc。\n' + '使用场景:估算临界温度。\n' + '超导体\n' + '使用方法:\n' + '1. 输入:材料结构。\n' + '2. 输出:Tc 预测。\n' + '3. 注意事项:仅限 DPA 模型。\n' + '4. 成本/备注:高(ML 预测)。' + ), + 'alternative': ['calculate_superconductor_enthalpy'], + 'self_check': False, + }, + 'screen_superconductor': { + 'belonging_agent': SuperconductorAgentName, + 'scene': [SceneEnum.SUPERCONDUCTOR], + 'description': ( + 'What it does: Screen multiple superconductors.\n' + 'When to use: Compare Tc and stability.\n' + 'Prerequisites / Inputs: List of candidates.\n' + 'Outputs: Ranked Tc and stability.\n' + 'Cannot do / Limits: Multiple candidates only.\n' + 'Cost / Notes: High (batch DPA).' + ), + 'alternative': [], + 'self_check': False, + }, + 'screen_superconductor_zh': { + 'belonging_agent': SuperconductorAgentName, + 'scene': [SceneEnum.SUPERCONDUCTOR], + 'description': ( + '功能:筛选多个超导体。\n' + '使用场景:比较 Tc 和稳定性。\n' + '超导体\n' + '使用方法:\n' + '1. 输入:候选物列表。\n' + '2. 输出:排序的 Tc 和稳定性。\n' + '3. 注意事项:仅限多个候选物。\n' + '4. 成本/备注:高(批量 DPA)。' + ), + 'alternative': [], + 'self_check': False, + }, + 'predict_thermoelectric_properties': { + 'belonging_agent': ThermoelectricAgentName, + 'scene': [SceneEnum.THERMOELECTRIC], + 'description': ( + 'What it does: Predict thermoelectric properties.\n' + 'When to use: Estimate band gap, Seebeck, etc.\n' + 'Prerequisites / Inputs: Material structure.\n' + 'Outputs: Band gap, Seebeck, power factor, moduli.\n' + 'Cannot do / Limits: No thermal conductivity.\n' + 'Cost / Notes: High (DPA predictions).' + ), + 'alternative': [], + 'self_check': False, + }, + 'predict_thermoelectric_properties_zh': { + 'belonging_agent': ThermoelectricAgentName, + 'scene': [SceneEnum.THERMOELECTRIC], + 'description': ( + '功能:预测热电性质。\n' + '使用场景:估算带隙、塞贝克系数等。\n' + '热电\n' + '使用方法:\n' + '1. 输入:材料结构文件。\n' + '2. 输出:带隙、塞贝克系数、功率因子、模量。\n' + '3. 注意事项:暂不支持热导率的预测。\n' + '4. 成本/备注:高(DPA 预测)。' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_pressure_optimization': { + 'belonging_agent': ThermoelectricAgentName, + 'scene': [SceneEnum.THERMOELECTRIC], + 'description': ( + 'What it does: Optimize under pressure.\n' + 'When to use: Relax thermoelectric structures.\n' + 'Prerequisites / Inputs: Structure, pressure.\n' + 'Outputs: Optimized structure.\n' + 'Cannot do / Limits: Thermoelectric-specific.\n' + 'Cost / Notes: High (DPA calculations).' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_pressure_optimization_zh': { + 'belonging_agent': ThermoelectricAgentName, + 'scene': [SceneEnum.THERMOELECTRIC], + 'description': ( + '功能:在压力下优化。\n' + '使用场景:弛豫热电结构。\n' + '热电\n' + '使用方法:\n' + '1. 输入:结构、压力。\n' + '2. 输出:优化后的结构。\n' + '3. 注意事项:仅限热电材料。\n' + '4. 成本/备注:高(DPA 计算)。' + ), + 'alternative': [], + 'self_check': False, + }, + 'calculate_thermoele_enthalp': { + 'belonging_agent': ThermoelectricAgentName, + 'scene': [SceneEnum.THERMOELECTRIC], + 'description': ( + 'What it does: Calculate enthalpy under pressure.\n' + 'When to use: Screen thermoelectric stability.\n' + 'Prerequisites / Inputs: Candidates, pressure.\n' + 'Outputs: Enthalpy, convex hull.\n' + 'Cannot do / Limits: Thermoelectric-specific.\n' + 'Cost / Notes: High (DPA calculations).' + ), + 'alternative': [], + 'self_check': False, + }, + 'calculate_thermoele_enthalp_zh': { + 'belonging_agent': ThermoelectricAgentName, + 'scene': [SceneEnum.THERMOELECTRIC], + 'description': ( + '功能:计算压力下的焓。\n' + '使用场景:筛选热电稳定性。\n' + '热电\n' + '使用方法:\n' + '1. 输入:候选物、压力。\n' + '2. 输出:焓、凸包。\n' + '3. 注意事项:仅限热电材料。\n' + '4. 成本/备注:高(DPA 计算)。' + ), + 'alternative': [], + 'self_check': False, + }, + 'screen_thermoelectric_candidate': { + 'belonging_agent': ThermoelectricAgentName, + 'scene': [SceneEnum.THERMOELECTRIC], + 'description': ( + 'What it does: Screen thermoelectric candidates.\n' + 'When to use: Identify promising materials.\n' + 'Prerequisites / Inputs: Multiple structures.\n' + 'Outputs: Ranked thermoelectric properties.\n' + 'Cannot do / Limits: Requires multiple inputs.\n' + 'Cost / Notes: High (batch DPA).' + ), + 'alternative': [], + 'self_check': False, + }, + 'screen_thermoelectric_candidate_zh': { + 'belonging_agent': ThermoelectricAgentName, + 'scene': [SceneEnum.THERMOELECTRIC], + 'description': ( + '功能:筛选热电候选物。\n' + '使用场景:识别有前景的材料。\n' + '热电\n' + '使用方法:\n' + '1. 输入:多个结构。\n' + '2. 输出:排序的热电性质。\n' + '3. 注意事项:需要多个输入。\n' + '4. 成本/备注:高(批量 DPA)。' + ), + 'alternative': [], + 'self_check': False, + }, + 'traj_analysis_diffusion': { + 'belonging_agent': TrajAnalysisAgentName, + 'scene': [SceneEnum.POST_MD_ANALYSIS], + 'description': ( + 'What it does: Analyze diffusion from trajectories.\n' + 'When to use: Calculate MSD, diffusion coeffs.\n' + 'Prerequisites / Inputs: MD trajectory file.\n' + 'Outputs: MSD, D, conductivity.\n' + 'Cannot do / Limits: Post-MD analysis only.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'traj_analysis_diffusion_zh': { + 'belonging_agent': TrajAnalysisAgentName, + 'scene': [SceneEnum.POST_MD_ANALYSIS], + 'description': ( + '功能:从分子动力学轨迹分析扩散。\n' + '使用场景:计算均方位移(MSD)、扩散系数等。\n' + 'POST_MD_ANALYSIS\n' + '使用方法:\n' + '1. 输入:分子动力学轨迹文件。\n' + '2. 输出:MSD、扩散系数 D、电导率等。\n' + '3. 注意事项:仅用于分子动力学后处理分析。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'traj_analysis_rdf': { + 'belonging_agent': TrajAnalysisAgentName, + 'scene': [SceneEnum.POST_MD_ANALYSIS], + 'description': ( + 'What it does: Compute RDF from trajectories.\n' + 'When to use: Analyze atomic distributions.\n' + 'Prerequisites / Inputs: MD trajectory.\n' + 'Outputs: Radial distribution function.\n' + 'Cannot do / Limits: Post-MD analysis only.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'traj_analysis_rdf_zh': { + 'belonging_agent': TrajAnalysisAgentName, + 'scene': [SceneEnum.POST_MD_ANALYSIS], + 'description': ( + '功能:从分子动力学轨迹计算径向分布函数(RDF)。\n' + '使用场景:分析原子分布。\n' + 'POST_MD_ANALYSIS\n' + '使用方法:\n' + '1. 输入:分子动力学轨迹。\n' + '2. 输出:径向分布函数。\n' + '3. 注意事项:仅用于分子动力学后处理分析。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'traj_analysis_solvation': { + 'belonging_agent': TrajAnalysisAgentName, + 'scene': [SceneEnum.POST_MD_ANALYSIS], + 'description': ( + 'What it does: Analyze solvation structures.\n' + 'When to use: Study solvent-solute interactions.\n' + 'Prerequisites / Inputs: MD trajectory.\n' + 'Outputs: Solvation shells, properties.\n' + 'Cannot do / Limits: Post-MD analysis only.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'traj_analysis_solvation_zh': { + 'belonging_agent': TrajAnalysisAgentName, + 'scene': [SceneEnum.POST_MD_ANALYSIS], + 'description': ( + '功能:分析溶剂化结构。\n' + '使用场景:研究溶剂-溶质相互作用。\n' + 'POST_MD_ANALYSIS\n' + '使用方法:\n' + '1. 输入:分子动力学轨迹。\n' + '2. 输出:溶剂化壳层、相关性质。\n' + '3. 注意事项:仅用于分子动力学后处理分析。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'traj_analysis_bond': { + 'belonging_agent': TrajAnalysisAgentName, + 'scene': [SceneEnum.POST_MD_ANALYSIS], + 'description': ( + 'What it does: Analyze bond length evolution.\n' + 'When to use: Monitor bond dynamics.\n' + 'Prerequisites / Inputs: MD trajectory.\n' + 'Outputs: Bond length time series.\n' + 'Cannot do / Limits: Post-MD analysis only.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'traj_analysis_bond_zh': { + 'belonging_agent': TrajAnalysisAgentName, + 'scene': [SceneEnum.POST_MD_ANALYSIS], + 'description': ( + '功能:分析键长随时间的变化。\n' + '使用场景:监测化学键动力学。\n' + 'POST_MD_ANALYSIS\n' + '使用方法:\n' + '1. 输入:分子动力学轨迹。\n' + '2. 输出:键长时间序列。\n' + '3. 注意事项:仅用于分子动力学后处理分析。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'traj_analysis_react': { + 'belonging_agent': TrajAnalysisAgentName, + 'scene': [SceneEnum.POST_MD_ANALYSIS], + 'description': ( + 'What it does: Analyze reaction networks.\n' + 'When to use: Study chemical reactions.\n' + 'Prerequisites / Inputs: MD trajectory.\n' + 'Outputs: Reaction species, networks.\n' + 'Cannot do / Limits: Post-MD analysis only.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'traj_analysis_react_zh': { + 'belonging_agent': TrajAnalysisAgentName, + 'scene': [SceneEnum.POST_MD_ANALYSIS], + 'description': ( + '功能:分析反应网络。\n' + '使用场景:研究化学反应。\n' + 'POST_MD_ANALYSIS\n' + '使用方法:\n' + '1. 输入:分子动力学轨迹。\n' + '2. 输出:反应物种、反应网络。\n' + '3. 注意事项:仅用于分子动力学后处理分析。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'visualize_data_from_file': { + 'belonging_agent': VisualizerAgentName, + 'scene': [SceneEnum.VISUALIZE_DATA, SceneEnum.UNIVERSAL], + 'description': ( + 'What it does: Create plots from data files.\n' + 'When to use: Visualize CSV/Excel/JSON data.\n' + 'Prerequisites / Inputs: Data file URL.\n' + 'Outputs: Plots.\n' + 'Cannot do / Limits: Data files only.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'visualize_data_from_file_zh': { + 'belonging_agent': VisualizerAgentName, + 'scene': [SceneEnum.VISUALIZE_DATA, SceneEnum.UNIVERSAL], + 'description': ( + '功能:从数据文件创建图表。\n' + '使用场景:可视化 CSV/Excel/JSON 等数据。\n' + '数据可视化,通用场景\n' + '使用方法:\n' + '1. 输入:数据文件 URL。\n' + '2. 输出:图表。\n' + '3. 注意事项:仅支持数据文件。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'visualize_data_from_prompt': { + 'belonging_agent': VisualizerAgentName, + 'scene': [SceneEnum.VISUALIZE_DATA, SceneEnum.UNIVERSAL], + 'description': ( + 'What it does: Create plots from prompts.\n' + 'When to use: Quick visualize data embedded in prompt.\n' + 'Outputs: Plots.\n' + 'Cannot do / Limits: Plot requests with valid data only.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'visualize_data_from_prompt_zh': { + 'belonging_agent': VisualizerAgentName, + 'scene': [SceneEnum.VISUALIZE_DATA, SceneEnum.UNIVERSAL], + 'description': ( + '功能:根据提示词创建图表。\n' + '使用场景:快速可视化嵌入在提示词中的数据。\n' + '数据可视化,通用场景\n' + '使用方法:\n' + '1. 输入:提示词(内含数据)。\n' + '2. 输出:图表。\n' + '3. 注意事项:仅支持包含有效数据的绘图请求。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'orchestrate_input': { + 'belonging_agent': LAMMPS_AGENT_NAME, + 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS], + 'description': ( + 'What it does: Generate input scripts for simulation engines (Currently supports: LAMMPS).\n' + 'When to use: Create input from description.\n' + 'Prerequisites / Inputs: engine_type="lammps", natural language task.\n' + 'Outputs: Input script content.\n' + 'Cannot do / Limits: Script generation only.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'self_check': False, + }, + 'orchestrate_input_zh': { + 'belonging_agent': LAMMPS_AGENT_NAME, + 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS], + 'description': ( + '功能:为模拟引擎生成输入脚本(当前支持:LAMMPS)。\n' + '使用场景:根据描述创建输入文件。\n' + '分子动力学,LAMMPS\n' + '使用方法:\n' + '1. 输入:engine_type="lammps",自然语言任务描述。\n' + '2. 输出:输入脚本内容。\n' + '3. 注意事项:仅生成脚本,不执行模拟。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'convert_structural_format': { + 'belonging_agent': LAMMPS_AGENT_NAME, + 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS], + 'description': ( + 'What it does: Convert structure to target format (Currently supports: lammps/lmp).\n' + 'When to use: Prepare structures for simulation.\n' + 'Prerequisites / Inputs: Structure file URL, target_format="lammps/lmp".\n' + 'Outputs: Converted structure file.\n' + 'Cannot do / Limits: Format conversion only.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'self_check': False, + }, + 'convert_structural_format_zh': { + 'belonging_agent': LAMMPS_AGENT_NAME, + 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS], + 'description': ( + '功能:将结构转换为目标格式(当前支持:lammps/lmp)。\n' + '使用场景:为模拟准备结构文件。\n' + '分子动力学,LAMMPS\n' + '使用方法:\n' + '1. 输入:结构文件 URL;target_format="lammps/lmp"。\n' + '2. 输出:转换后的结构文件。\n' + '3. 注意事项:仅进行格式转换。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_lammps': { + 'belonging_agent': LAMMPS_AGENT_NAME, + 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS], + 'description': ( + 'What it does: Run LAMMPS simulations.\n' + 'When to use: Perform MD or minimization.\n' + 'Prerequisites / Inputs: LAMMPS data file.\n' + 'Outputs: Simulation results.\n' + 'Cannot do / Limits: Requires LAMMPS format.\n' + 'Cost / Notes: High (simulation time).' + ), + 'alternative': [], + 'self_check': False, + }, + 'run_lammps_zh': { + 'belonging_agent': LAMMPS_AGENT_NAME, + 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS], + 'description': ( + '功能:运行 LAMMPS 分子动力学模拟。\n' + '使用场景:执行分子动力学或能量最小化。\n' + '分子动力学,LAMMPS\n' + '使用方法:\n' + '1. 输入:LAMMPS 数据文件。\n' + '2. 输出:模拟结果。\n' + '3. 注意事项:输入须为 LAMMPS 格式。\n' + '4. 成本/备注:高(取决于模拟时长)。' + ), + 'alternative': [], + 'self_check': False, + }, + 'search-papers-enhanced': { + 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME, + 'scene': [SceneEnum.LITERATURE], + 'description': ( + 'What it does: Search scientific papers.\n' + 'When to use: Find research on topics.\n' + 'Prerequisites / Inputs: Topic keywords.\n' + 'Outputs: Literature summary, abstract information of relevant papers, web link of the papers\n' + 'Cannot do / Limits: Literature search only. No thesis files (.pdf,.doc, etc.) will be downloaded.\n' + 'Cost / Notes: Low.' + ), + 'args_setting': f""" + If not specified, apply start_time=2020-01-01, end_time={TODAY}, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise. + + Must be aware of these prior knowledge: + - {ALIAS_SEARCH_PROMPT} + """, + 'alternative': ['web-search'], + 'summary_prompt': PAPER_SEARCH_AGENT_INSTRUCTION, + 'bypass_confirmation': True, + 'self_check': False, + }, + 'search-papers-enhanced_zh': { + 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME, + 'scene': [SceneEnum.LITERATURE], + 'description': ( + '功能:检索科学文献。\n' + '使用场景:按主题查找相关研究。\n' + '文献\n' + '使用方法:\n' + '1. 输入:主题关键词。\n' + '2. 输出:文献摘要、相关论文摘要信息及论文链接。\n' + '3. 注意事项:仅进行文献检索;不下载学位论文等文件(.pdf、.doc 等)。\n' + '4. 成本/备注:低。' + ), + 'args_setting': f""" + If not specified, apply start_time=2020-01-01, end_time={TODAY}, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise. + + Must be aware of these prior knowledge: + - {ALIAS_SEARCH_PROMPT} + """, + 'alternative': ['web-search'], + 'summary_prompt': PAPER_SEARCH_AGENT_INSTRUCTION, + 'bypass_confirmation': True, + 'self_check': False, + }, + 'web-search': { + 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME, + 'scene': [SceneEnum.UNIVERSAL], + 'description': ( + 'What it does: Perform web searches for what, why, how questions.\n' + 'When to use: For concise factual or explanatory lookups.\n' + 'Prerequisites / Inputs: Search query.\n' + 'Outputs: URL, title, snippet.\n' + 'Cannot do / Limits: No command-type queries; follow up with extract_info_from_webpage.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'summary_prompt': WEB_SEARCH_AGENT_INSTRUCTION, + 'bypass_confirmation': True, + 'self_check': False, + }, + 'web-search_zh': { + 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME, + 'scene': [SceneEnum.UNIVERSAL], + 'description': ( + '功能:执行网页搜索,回答 what、why、how 类问题。\n' + '使用场景:进行简明的事实查询或解释性检索。\n' + '通用场景\n' + '使用方法:\n' + '1. 输入:搜索查询词。\n' + '2. 输出:URL、标题、摘要片段。\n' + '3. 注意事项:不支持指令型查询;如需提取页面内容可后续调用 extract_info_from_webpage。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'summary_prompt': WEB_SEARCH_AGENT_INSTRUCTION, + 'bypass_confirmation': True, + 'self_check': False, + }, + 'build_convex_hull': { + 'belonging_agent': ConvexHullAgentName, + 'scene': [SceneEnum.CONVEXHULL], + 'description': ( + 'What it does: Build convex hull diagrams.\n' + 'When to use: Assess thermodynamic stability.\n' + 'Prerequisites / Inputs: Material structures.\n' + 'Outputs: Convex hull, stable phases.\n' + 'Cannot do / Limits: General materials only.\n' + 'Cost / Notes: High (DPA calculations).' + ), + 'alternative': [], + 'self_check': False, + }, + 'build_convex_hull_zh': { + 'belonging_agent': ConvexHullAgentName, + 'scene': [SceneEnum.CONVEXHULL], + 'description': ( + '功能:构建凸包图。\n' + '使用场景:评估材料的热力学稳定性。\n' + '凸包\n' + '使用方法:\n' + '1. 输入:材料结构。\n' + '2. 输出:凸包、稳定相。\n' + '3. 注意事项:仅适用于通用材料。\n' + '4. 成本/备注:高(涉及 DPA 计算)。' + ), + 'alternative': [], + 'self_check': False, + }, + 'NMR_search_tool': { + 'belonging_agent': NMR_AGENT_NAME, + 'scene': [SceneEnum.NMR], + 'description': ( + 'What it does: Search a molecular database by NMR spectroscopic features to retrieve candidate structures.\n' + 'When to use: You have NMR peak/shift patterns and want likely matching molecules.\n' + 'Prerequisites / Inputs: NMR features (e.g., shifts, multiplicities, coupling, nucleus type) in the tool-accepted schema; optional tolerance settings.\n' + 'Outputs: Ranked candidate molecules/structures with match scores and key evidence fields.\n' + 'Cannot do / Limits: Not a definitive identification; results depend on database coverage and feature quality.\n' + 'Cost / Notes: Medium; tighter tolerances increase runtime and reduce recall.' + ), + 'alternative': [], + 'self_check': False, + }, + 'NMR_search_tool_zh': { + 'belonging_agent': NMR_AGENT_NAME, + 'scene': [SceneEnum.NMR], + 'description': ( + '功能:根据核磁共振谱图特征在分子数据库中检索候选结构。\n' + '使用场景:已有 NMR 峰/化学位移等谱图信息,需要匹配的可能分子。\n' + 'NMR\n' + '使用方法:\n' + '1. 输入:符合工具规范的 NMR 特征(如化学位移、多重度、耦合、核类型等);可选容差设置。\n' + '2. 输出:带匹配分数和关键证据的候选分子/结构排序列表。\n' + '3. 注意事项:非唯一鉴定;结果依赖数据库覆盖度和特征质量。\n' + '4. 成本/备注:中等;容差越严,耗时增加、召回率降低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'NMR_predict_tool': { + 'belonging_agent': NMR_AGENT_NAME, + 'scene': [SceneEnum.NMR], + 'description': ( + 'What it does: Predict NMR spectroscopic properties for molecular structures.\n' + 'When to use: When you need simulated NMR chemical shifts.\n' + 'Prerequisites / Inputs: SMILES strings.\n' + 'Outputs: Predicted NMR shifts and similarity scores.\n' + 'Cannot do / Limits: 1H and 13C only.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'NMR_predict_tool_zh': { + 'belonging_agent': NMR_AGENT_NAME, + 'scene': [SceneEnum.NMR], + 'description': ( + '功能:预测分子结构的核磁共振谱图性质。\n' + '使用场景:需要模拟的 NMR 化学位移时使用。\n' + 'NMR\n' + '使用方法:\n' + '1. 输入:SMILES 字符串。\n' + '2. 输出:预测的 NMR 化学位移及相似度分数。\n' + '3. 注意事项:仅支持 1H 与 13C。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'NMR_reverse_predict_tool': { + 'belonging_agent': NMR_AGENT_NAME, + 'scene': [SceneEnum.NMR], + 'description': ( + 'What it does: Generate candidate molecular structures from NMR spectroscopic data.\n' + 'When to use: When you have NMR data and need structure candidates.\n' + 'Prerequisites / Inputs: NMR spectroscopic data.\n' + 'Outputs: Candidate molecular structures.\n' + 'Cannot do / Limits: Based on NMR features.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'NMR_reverse_predict_tool_zh': { + 'belonging_agent': NMR_AGENT_NAME, + 'scene': [SceneEnum.NMR], + 'description': ( + '功能:从核磁共振谱图数据生成候选分子结构。\n' + '使用场景:已有 NMR 数据,需要结构候选时使用。\n' + 'NMR\n' + '使用方法:\n' + '1. 输入:核磁共振谱图数据。\n' + '2. 输出:候选分子结构。\n' + '3. 注意事项:基于 NMR 特征生成。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'extract_info_from_webpage': { + 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME, + 'scene': [SceneEnum.UNIVERSAL], + 'description': ( + 'What it does: Extract key information from a webpage URL.\n' + 'When to use: When you need scientific facts, data, or findings from a webpage.\n' + 'Prerequisites / Inputs: Webpage URL.\n' + 'Outputs: Extracted information in text form.\n' + 'Cannot do / Limits: Only return text and do not support generating files in any format.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'summary_prompt': WEBPAGE_PARSING_AGENT_INSTRUCTION, + 'bypass_confirmation': True, + 'self_check': False, + }, + 'extract_info_from_webpage_zh': { + 'belonging_agent': SCIENCE_NAVIGATOR_AGENT_NAME, + 'scene': [SceneEnum.UNIVERSAL], + 'description': ( + '功能:从网页 URL 提取关键信息。\n' + '使用场景:需要从网页获取科学事实、数据或结论时使用。\n' + '通用场景\n' + '使用方法:\n' + '1. 输入:网页 URL。\n' + '2. 输出:以文本形式呈现的提取结果。\n' + '3. 注意事项:仅返回文本,不支持生成任何格式的文件。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'summary_prompt': WEBPAGE_PARSING_AGENT_INSTRUCTION, + 'bypass_confirmation': True, + 'self_check': False, + }, + 'xrd_parse_file': { + 'belonging_agent': XRD_AGENT_NAME, + 'scene': [SceneEnum.XRD], + 'description': ( + 'What it does: Parse and preprocess raw XRD data files.\n' + 'When to use: When you have XRD data to analyze.\n' + 'Prerequisites / Inputs: XRD files (.xrdml, .xy, .asc, .txt).\n' + 'Outputs: Processed data and visualization configs.\n' + 'Cannot do / Limits: Not support .raw and .mdi format files.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'self_check': False, + }, + 'xrd_parse_file_zh': { + 'belonging_agent': XRD_AGENT_NAME, + 'scene': [SceneEnum.XRD], + 'description': ( + '功能:解析并预处理原始 XRD 数据文件。\n' + '使用场景:有待分析的 XRD 数据时使用。\n' + 'XRD\n' + '使用方法:\n' + '1. 输入:XRD 文件(.xrdml、.xy、.asc、.txt)。\n' + '2. 输出:处理后的数据及可视化配置。\n' + '3. 注意事项:不支持 .raw、.mdi 格式。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'xrd_phase_identification': { + 'belonging_agent': XRD_AGENT_NAME, + 'scene': [SceneEnum.XRD], + 'description': ( + 'What it does: Identify crystalline phases in XRD pattern.\n' + 'When to use: When you have processed XRD data.\n' + 'Prerequisites / Inputs: Processed CSV file; optional composition filters.\n' + 'Outputs: Top matching phases and comparison chart.\n' + 'Cannot do / Limits: Requires processed data.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'xrd_phase_identification_zh': { + 'belonging_agent': XRD_AGENT_NAME, + 'scene': [SceneEnum.XRD], + 'description': ( + '功能:在 XRD 谱图中鉴定晶相。\n' + '使用场景:已有处理后的 XRD 数据时使用。\n' + 'XRD\n' + '使用方法:\n' + '1. 输入:处理后的 CSV 文件;可选的组分过滤条件。\n' + '2. 输出:最佳匹配相及对比图。\n' + '3. 注意事项:需要先完成数据预处理。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'get_electron_microscope_recognize': { + 'belonging_agent': Electron_Microscope_AGENT_NAME, + 'scene': [SceneEnum.Electron_Microscope], + 'description': ( + 'What it does: Analyze electron microscope images for particles and morphology.\n' + 'When to use: When you have TEM/SEM images to analyze.\n' + 'Prerequisites / Inputs: Electron microscope images(.tif, .tiff, .png, .jpeg, .jpg).\n' + 'Outputs: Detected particles, morphology, geometric properties.\n' + 'Cannot do / Limits: Only support .tif, .tiff, .png, .jpeg, .jpg format files.\n' + 'Cost / Notes: Medium.' + ), + 'alternative': [], + 'self_check': False, + }, + 'get_electron_microscope_recognize_zh': { + 'belonging_agent': Electron_Microscope_AGENT_NAME, + 'scene': [SceneEnum.Electron_Microscope], + 'description': ( + '功能:分析电镜图像中的颗粒与形貌。\n' + '使用场景:有待分析的 TEM/SEM 图像时使用。\n' + '电镜\n' + '使用方法:\n' + '1. 输入:电镜图像(.tif、.tiff、.png、.jpeg、.jpg)。\n' + '2. 输出:检测到的颗粒、形貌及几何性质。\n' + '3. 注意事项:仅支持 .tif、.tiff、.png、.jpeg、.jpg 格式。\n' + '4. 成本/备注:中等。' + ), + 'alternative': [], + 'self_check': False, + }, + 'tpd_parse_and_get_mol': { + 'belonging_agent': TPD_AGENT_NAME, + 'scene': [SceneEnum.TPD], + 'description': ( + 'What it does: Parse a single TPD file and extract recognized molecule weights (m/z or labels).\n' + 'When to use: When you need to know which molecule weights are present in a TPD file.\n' + 'Prerequisites / Inputs: Local file path, file name, data type (Signal vs. Temp/Time).\n' + 'Outputs: List of molecule weights (m/z or "*").\n' + 'Cannot do / Limits: Only parses local files; remote URLs must be downloaded first.\n' + 'Cost / Notes: Fast; supports three data types.' + ), + 'alternative': [], + 'self_check': False, + }, + 'tpd_parse_and_get_mol_zh': { + 'belonging_agent': TPD_AGENT_NAME, + 'scene': [SceneEnum.TPD], + 'description': ( + '功能:解析单个 TPD 文件并提取识别到的分子量(m/z 或标签)。\n' + '使用场景:需要获知 TPD 文件中包含哪些分子量时使用。\n' + 'TPD\n' + '使用方法:\n' + '1. 输入:本地文件路径、文件名、数据类型(Signal 或 Temp/Time)。\n' + '2. 输出:分子量列表(m/z 或 "*")。\n' + '3. 注意事项:仅解析本地文件;远程 URL 需先下载。\n' + '4. 成本/备注:快速;支持三种数据类型。' + ), + 'alternative': [], + 'self_check': False, + }, + 'tpd_get_chart': { + 'belonging_agent': TPD_AGENT_NAME, + 'scene': [SceneEnum.TPD], + 'description': ( + 'What it does: Generate ECharts visualization config for selected molecule weights in a TPD file.\n' + 'When to use: When you want to plot curves for selected m/z channels from a TPD file.\n' + 'Prerequisites / Inputs: Local file path, file name, selected_weights (list of m/z), data type, line width.\n' + 'Outputs: Path to saved ECharts option JSON file.\n' + 'Cannot do / Limits: Only local files; selected_weights must match available m/z.\n' + 'Cost / Notes: Fast; supports three data types.' + ), + 'alternative': [], + 'self_check': False, + }, + 'tpd_get_chart_zh': { + 'belonging_agent': TPD_AGENT_NAME, + 'scene': [SceneEnum.TPD], + 'description': ( + '功能:为 TPD 文件中选定的分子量生成 ECharts 可视化配置。\n' + '使用场景:需要绘制 TPD 文件中选定 m/z 通道的曲线时使用。\n' + 'TPD\n' + '使用方法:\n' + '1. 输入:本地文件路径、文件名、selected_weights(m/z 列表)、数据类型、线宽。\n' + '2. 输出:保存的 ECharts 配置 JSON 文件路径。\n' + '3. 注意事项:仅支持本地文件;selected_weights 须与可用 m/z 对应。\n' + '4. 成本/备注:快速;支持三种数据类型。' + ), + 'alternative': [], + 'self_check': False, + }, + 'tpd_get_cal': { + 'belonging_agent': TPD_AGENT_NAME, + 'scene': [SceneEnum.TPD], + 'description': ( + 'What it does: Perform TPD analysis (peak finding, curve fitting, integration, derivative) for a single molecule weight (m/z) signal from one file.\n' + 'When to use: When you need detailed peak analysis, area calculation, or derivative for a specific m/z channel or total signal.\n' + 'Prerequisites / Inputs: Local file path; target molecule weight (m/z as string like "18", "44", or "*" for total signal); analysis operations (peak finding, fitting, integration range, derivative settings).\n' + 'Outputs: ECharts visualization config, integration area (if calculated), error list for failed operations.\n' + 'Cannot do / Limits: Processes one m/z at a time; call multiple times for multiple molecules; requires local files.\n' + 'Cost / Notes: Medium; each operation is independent; default to total signal (*) if m/z not specified.' + ), + 'alternative': [], + 'self_check': False, + }, + 'tpd_get_cal_zh': { + 'belonging_agent': TPD_AGENT_NAME, + 'scene': [SceneEnum.TPD], + 'description': ( + '功能:对单个文件中某一分子量(m/z)信号进行 TPD 分析(寻峰、拟合、积分、求导)。\n' + '使用场景:需要对特定 m/z 通道或总信号做峰分析、面积计算或求导时使用。\n' + 'TPD\n' + '使用方法:\n' + '1. 输入:本地文件路径;目标分子量(m/z 字符串如 "18"、"44",或 "*" 表示总信号);分析操作(寻峰、拟合、积分范围、求导设置等)。\n' + '2. 输出:ECharts 可视化配置、积分面积(若计算)、失败操作的错误列表。\n' + '3. 注意事项:每次仅处理一个 m/z;多分子需多次调用;须为本地文件。\n' + '4. 成本/备注:中等;各操作独立;未指定 m/z 时默认总信号。' + ), + 'alternative': [], + 'self_check': False, + }, + 'tpd_peak_integrate': { + 'belonging_agent': TPD_AGENT_NAME, + 'scene': [SceneEnum.TPD], + 'description': ( + 'What it does: For a single TPD file and m/z, detect peaks and integrate each peak within a local window; visualize raw curve, peak markers, and baseline segments.\n' + 'When to use: Quickly estimate peak areas for one channel.\n' + 'Prerequisites / Inputs: Local file path, file name, mol_weight (m/z or "*"), data type, baseline_mode, window_halfwidth, line width.\n' + 'Outputs: Path to ECharts option JSON, peaks list, integrations per peak, llm_context summary.\n' + 'Cannot do / Limits: Only local files; window-based integration may overlap for dense peaks.\n' + 'Cost / Notes: Fast; supports horizontal/trend baseline.' + ), + 'alternative': [], + 'self_check': False, + }, + 'tpd_peak_integrate_zh': { + 'belonging_agent': TPD_AGENT_NAME, + 'scene': [SceneEnum.TPD], + 'description': ( + '功能:对单个 TPD 文件及 m/z,在局部窗口内检测峰并对各峰积分;可视化原始曲线、峰标记与基线段。\n' + '使用场景:快速估算单通道峰面积时使用。\n' + 'TPD\n' + '使用方法:\n' + '1. 输入:本地文件路径、文件名、mol_weight(m/z 或 "*")、数据类型、baseline_mode、window_halfwidth、线宽。\n' + '2. 输出:ECharts 配置 JSON 路径、峰列表、各峰积分值、llm_context 摘要。\n' + '3. 注意事项:仅支持本地文件;窗口积分在峰密集时可能重叠。\n' + '4. 成本/备注:快速;支持水平/趋势基线。' + ), + 'alternative': [], + 'self_check': False, + }, + 'llm_tool': { + 'belonging_agent': TOOL_AGENT_NAME, + 'scene': [], + 'description': ( + 'What it does: Use LLM for general tasks.\n' + 'When to use: For LLM-based assistance.\n' + 'Prerequisites / Inputs: Query or task.\n' + 'Outputs: LLM response.\n' + 'Cannot do / Limits: General purpose.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'llm_tool_zh': { + 'belonging_agent': TOOL_AGENT_NAME, + 'scene': [], + 'description': ( + '功能:调用大语言模型处理通用任务。\n' + '使用场景:需要基于 LLM 的辅助时使用。\n' + 'LLM\n' + '使用方法:\n' + '1. 输入:查询或任务描述。\n' + '2. 输出:LLM 回复。\n' + '3. 注意事项:通用工具。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'physical_adsorption_echart_data': { + 'belonging_agent': Physical_Adsorption_AGENT_NAME, + 'scene': [SceneEnum.PHYSICAL_ADSORPTION], + 'description': ( + 'What it does: Analyze physical adsorption instrument reports.\n' + 'When to use: When you have gas adsorption data.\n' + 'Prerequisites / Inputs: Instrument reports.\n' + 'Outputs: Analyzed data.\n' + 'Cannot do / Limits: Specific to physical adsorption.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'self_check': False, + }, + 'physical_adsorption_echart_data_zh': { + 'belonging_agent': Physical_Adsorption_AGENT_NAME, + 'scene': [SceneEnum.PHYSICAL_ADSORPTION], + 'description': ( + '功能:分析物理吸附仪器报告。\n' + '使用场景:有气体吸附数据需要分析时使用。\n' + '物理吸附\n' + '使用方法:\n' + '1. 输入:仪器报告。\n' + '2. 输出:分析后的数据。\n' + '3. 注意事项:仅针对物理吸附。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'self_check': False, + }, + 'file_parse': { + 'belonging_agent': FILE_PARSE_AGENT_NAME, + 'scene': [SceneEnum.UNIVERSAL], + 'description': ( + 'What it does: Parse various file contents to extract key information.\n' + 'When to use: When you need to extract information from a file but there is no dedicated information extraction tool available.\n' + 'Prerequisites / Inputs: File (TXT, PDF, Word, Excel, PNG, JPG, etc.).\n' + 'Outputs: Extracted information in text form.\n' + 'Cannot do / Limits: Only return text and do not support generating files in any format.\n' + 'Cost / Notes: Low.' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, + 'file_parse_zh': { + 'belonging_agent': FILE_PARSE_AGENT_NAME, + 'scene': [SceneEnum.UNIVERSAL], + 'description': ( + '功能:解析各类文件内容并提取关键信息。\n' + '使用场景:需要从文件中提取信息、且无专用提取工具时使用。\n' + '通用工具\n' + '使用方法:\n' + '1. 输入:文件(TXT、PDF、Word、Excel、PNG、JPG 等)。\n' + '2. 输出:以文本形式呈现的提取信息。\n' + '3. 注意事项:仅返回文本,不支持生成任何格式的文件。\n' + '4. 成本/备注:低。' + ), + 'alternative': [], + 'bypass_confirmation': True, + 'self_check': False, + }, +} + + \ No newline at end of file diff --git a/scripts/generate_agents_tool_json.py b/scripts/generate_agents_tool_json.py index 8f28440c..3dce0091 100644 --- a/scripts/generate_agents_tool_json.py +++ b/scripts/generate_agents_tool_json.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 """ -Generate agents-tool.json from tools.py +Generate agents-tool.json from tools_opt.py """ import json import sys @@ -11,18 +11,54 @@ project_root = Path(__file__).parent.parent sys.path.insert(0, str(project_root)) -from agents.matmaster_agent.sub_agents.tools import ALL_TOOLS +from agents.matmaster_agent.sub_agents.tools_opt import ALL_TOOLS from agents.matmaster_agent.flow_agents.scene_agent.model import SceneEnum +# Import URL extraction function try: - import litellm - from agents.matmaster_agent.llm_config import LLMConfig - HAS_TRANSLATION = True -except ImportError: - HAS_TRANSLATION = False - print("Warning: Translation libraries not available. summary_cn will be empty.", file=sys.stderr) + from scripts.get_agent_urls import get_urls_for_all_environments + AGENT_URL_MAPPING = get_urls_for_all_environments() +except Exception as e: + print(f"Warning: Could not load agent URLs: {e}", file=sys.stderr) + AGENT_URL_MAPPING = {} +# Scene ID Mapping (Scene Name -> Scene ID) +# This mapping is generated automatically based on the scenes used in ALL_TOOLS +# Scene IDs are assigned sequentially starting from 001, sorted alphabetically by scene name +# +# Scene ID -> Scene Name: +# 001 -> ABACUS +# 002 -> APEX +# 005 -> COMPOSITION_OPTIMIZATION +# 007 -> CONVEXHULL +# 008 -> DATABASE_SEARCH +# 010 -> DOE +# 011 -> DPA +# 015 -> Electron_Microscope +# 016 -> HIGH_ENTROPY_ALLOY +# 019 -> LITERATURE +# 020 -> MOLECULAR_DYNAMICS +# 021 -> NMR +# 023 -> OPTIMIZE_STRUCTURE +# 024 -> PEROVSKITE_RESEARCH +# 026 -> PHYSICAL_ADSORPTION +# 027 -> PILOTEYE_ELECTRO +# 028 -> POLYMER +# 029 -> POST_MD_ANALYSIS +# 030 -> REACTION +# 033 -> STEEL +# 034 -> STRUCTURE_GENERATE +# 035 -> STRUCTURE_SANITIZE +# 036 -> SUPERCONDUCTOR +# 038 -> Solid_State_Electrolyte +# 039 -> THERMOELECTRIC +# 040 -> TPD +# 041 -> UNIVERSAL +# 043 -> VISUALIZE_DATA +# 045 -> XRD +# 000 -> None (empty scene) + # Create SceneEnum to numeric ID mapping (starting from 001) def create_scene_id_mapping(): """Create a mapping from SceneEnum to numeric ID (001, 002, ...).""" @@ -68,62 +104,259 @@ def get_scene_id(scene_enum): return "000" -def translate_to_chinese(text: str, tool_name: str = "") -> str: +def parse_description(description: str) -> dict: """ - Translate English text to Chinese using LLM. + Parse description string into dictionary format. Args: - text: English text to translate - tool_name: Tool name for logging + description: Description string with sections separated by newlines Returns: - Chinese translation + Dictionary with keys: "What it does", "When to use", "Input", "Output", "Notes", "Costs" """ - if not text: - return "" + # Normalize description to string (supports tuple/list concatenation) + if not description: + return {} + if isinstance(description, (tuple, list)): + # Join multi-part descriptions safely with newlines + description = "\n".join(str(part) for part in description) + else: + description = str(description) + + result = {} + lines = description.split('\n') - if not HAS_TRANSLATION: - return "" + current_key = None + current_value = [] + input_value = [] + output_value = [] - try: - llm_config = LLMConfig() - model = llm_config.gpt_5_nano.model + for line in lines: + line = line.strip() + if not line: + continue - prompt = f"""Translate the following English text to Chinese (Simplified). -Keep the technical terms, code blocks, markdown formatting, and structure exactly as they are. -Preserve all special characters, emojis, and formatting. -Only return the translation, no explanations, no additional markdown code blocks. + # Check for section headers + if line.startswith('What it does:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + current_key = "What it does" + current_value = [line.replace('What it does:', '').strip()] + elif line.startswith('When to use:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + current_key = "When to use" + current_value = [line.replace('When to use:', '').strip()] + elif line.startswith('Prerequisites / Inputs:') or line.startswith('Inputs:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + current_key = "Input" + prefix = 'Prerequisites / Inputs:' if line.startswith('Prerequisites / Inputs:') else 'Inputs:' + input_value = [line.replace(prefix, '').strip()] + current_value = input_value + elif line.startswith('Outputs:'): + # Save input if exists + if current_key == "Input": + if input_value: + result["Input"] = ' '.join(input_value).strip() + elif current_key: + result[current_key] = ' '.join(current_value).strip() + + current_key = "Output" + output_value = [line.replace('Outputs:', '').strip()] + current_value = output_value + elif line.startswith('Cannot do / Limits:') or line.startswith('Limits:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + prefix = 'Cannot do / Limits:' if line.startswith('Cannot do / Limits:') else 'Limits:' + current_key = "Notes" + current_value = [line.replace(prefix, '').strip()] + elif line.startswith('Cost / Notes:') or line.startswith('Costs:') or line.startswith('Cost:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + prefix = 'Cost / Notes:' if line.startswith('Cost / Notes:') else ('Costs:' if line.startswith('Costs:') else 'Cost:') + current_key = "Costs" + current_value = [line.replace(prefix, '').strip()] + else: + # Continue current section + if current_key: + current_value.append(line) + if current_key == "Input": + input_value.append(line) + elif current_key == "Output": + output_value.append(line) + + # Add last section + if current_key: + result[current_key] = ' '.join(current_value).strip() + + return result -Text to translate: -{text} -Chinese translation:""" - - response = litellm.completion( - model=model, - messages=[{'role': 'user', 'content': prompt}], - temperature=0.3, - ) - - translation = response.choices[0].message.content.strip() - - # Remove markdown code blocks if present (but keep the content) - if translation.startswith('```'): - # Extract content from code blocks - parts = translation.split('```') - if len(parts) >= 3: - translation = parts[1].strip() if len(parts[1].strip()) > 0 else parts[2].strip() - else: - translation = parts[-1].strip() - - if tool_name: - print(f" ✓ Translated summary for {tool_name}", file=sys.stderr) +def parse_description_cn(description_cn: str) -> dict: + """ + Parse Chinese description string into dictionary format. + + Args: + description_cn: Chinese description string with sections separated by newlines + + Returns: + Dictionary with keys: "工具简介", "使用场景", "输入", "输出", "注意事项", "成本" + """ + # Normalize Chinese description to string (supports tuple/list concatenation) + if not description_cn: + return {} + if isinstance(description_cn, (tuple, list)): + description_cn = "\n".join(str(part) for part in description_cn) + else: + description_cn = str(description_cn) + + result = {} + lines = description_cn.split('\n') + + current_key = None + current_value = [] + input_value = [] + output_value = [] + in_usage_method = False + + for line in lines: + line = line.strip() + if not line: + continue - return translation - except Exception as e: - if tool_name: - print(f" ✗ Translation failed for {tool_name}: {e}", file=sys.stderr) - return "" + # Check for section headers + if line.startswith('功能:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + current_key = "工具简介" + current_value = [line.replace('功能:', '').strip()] + elif line.startswith('使用场景:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + current_key = "使用场景" + current_value = [line.replace('使用场景:', '').strip()] + in_usage_method = False + elif current_key == "使用场景" and (',' in line or line.isupper() or line.isdigit()): + # Skip tag lines like "ABACUS,空位形成能" that appear after "使用场景:" + continue + elif line.startswith('使用方法:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + in_usage_method = True + current_key = None + current_value = [] + input_value = [] + output_value = [] + elif line.startswith('1. 输入:') or line.startswith('1.输入:'): + if in_usage_method: + if current_key: + result[current_key] = ' '.join(current_value).strip() + current_key = "输入" + prefix = '1. 输入:' if line.startswith('1. 输入:') else '1.输入:' + content = line.replace(prefix, '').strip() + # Skip if empty (the actual content is on next lines) + if content: + input_value = [content] + current_value = input_value + else: + input_value = [] + current_value = input_value + elif line.startswith('2. 输出:') or line.startswith('2.输出:'): + if in_usage_method: + if current_key == "输入": + if input_value: + result["输入"] = ' '.join(input_value).strip() + elif current_key: + result[current_key] = ' '.join(current_value).strip() + current_key = "输出" + prefix = '2. 输出:' if line.startswith('2. 输出:') else '2.输出:' + content = line.replace(prefix, '').strip() + # Skip if empty (the actual content is on next lines) + if content: + output_value = [content] + current_value = output_value + else: + output_value = [] + current_value = output_value + elif line.startswith('3. 注意事项:') or line.startswith('3.注意事项:'): + if in_usage_method: + if current_key == "输出": + if output_value: + result["输出"] = ' '.join(output_value).strip() + elif current_key: + result[current_key] = ' '.join(current_value).strip() + in_usage_method = False + current_key = "注意事项" + prefix = '3. 注意事项:' if line.startswith('3. 注意事项:') else '3.注意事项:' + content = line.replace(prefix, '').strip() + current_value = [content] if content else [] + elif line.startswith('4. 成本/备注:') or line.startswith('4.成本/备注:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + current_key = "成本" + prefix = '4. 成本/备注:' if line.startswith('4. 成本/备注:') else '4.成本/备注:' + content = line.replace(prefix, '').strip() + current_value = [content] if content else [] + in_usage_method = False + elif line.startswith('前置条件/输入:') or line.startswith('输入:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + current_key = "输入" + prefix = '前置条件/输入:' if line.startswith('前置条件/输入:') else '输入:' + input_value = [line.replace(prefix, '').strip()] + current_value = input_value + in_usage_method = False + elif line.startswith('输出:'): + # Save input if exists + if current_key == "输入": + if input_value: + result["输入"] = ' '.join(input_value).strip() + elif current_key: + result[current_key] = ' '.join(current_value).strip() + + current_key = "输出" + output_value = [line.replace('输出:', '').strip()] + current_value = output_value + in_usage_method = False + elif line.startswith('不能做/限制:') or line.startswith('限制:') or line.startswith('注意事项:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + prefix = '不能做/限制:' if line.startswith('不能做/限制:') else ('限制:' if line.startswith('限制:') else '注意事项:') + current_key = "注意事项" + current_value = [line.replace(prefix, '').strip()] + in_usage_method = False + elif line.startswith('成本/备注:') or line.startswith('成本:'): + if current_key: + result[current_key] = ' '.join(current_value).strip() + prefix = '成本/备注:' if line.startswith('成本/备注:') else '成本:' + current_key = "成本" + current_value = [line.replace(prefix, '').strip()] + in_usage_method = False + else: + # Continue current section + if current_key: + # Remove leading whitespace from indented lines + cleaned_line = line.lstrip() + if cleaned_line: + # Only append to current_value, input_value/output_value are references + current_value.append(cleaned_line) + elif in_usage_method: + # Skip lines like "ABACUS,空位形成能" that appear before "使用方法:" + pass + + # Add last section + if current_key: + result[current_key] = ' '.join(current_value).strip() + + # Handle remaining input/output if in usage method + if in_usage_method: + if current_key == "输入" and input_value: + result["输入"] = ' '.join(input_value).strip() + elif current_key == "输出" and output_value: + result["输出"] = ' '.join(output_value).strip() + + return result def generate_tool_id(tool_name: str, primary_scene, scene_index: int) -> str: @@ -148,7 +381,7 @@ def generate_tool_id(tool_name: str, primary_scene, scene_index: int) -> str: return f"{scene_id}-{tool_prefix}-{scene_index:03d}" -def process_tool(tool_name: str, tool_config: dict, scene_index: int, primary_scene) -> dict: +def process_tool(tool_name: str, tool_config: dict, scene_index: int, primary_scene, zh_tool_config: dict = None) -> dict: """ Process a single tool configuration into JSON format. @@ -157,6 +390,7 @@ def process_tool(tool_name: str, tool_config: dict, scene_index: int, primary_sc tool_config: Tool configuration dictionary scene_index: Index within the scene (starting from 1) primary_scene: Primary scene for this tool + zh_tool_config: Optional Chinese tool configuration (for _zh suffix tools) Returns: Dictionary with tool information in JSON format @@ -165,28 +399,50 @@ def process_tool(tool_name: str, tool_config: dict, scene_index: int, primary_sc scenes = tool_config.get("scene", []) scene_names = [get_scene_name(s) for s in scenes] - # Generate tool_id - tool_id = generate_tool_id(tool_name, primary_scene, scene_index) + # Generate tool_id (use base name without _zh suffix) + base_tool_name = tool_name.replace('_zh', '') + tool_id = generate_tool_id(base_tool_name, primary_scene, scene_index) # Get summary_prompt and translate it summary_prompt = tool_config.get("summary_prompt", "") - summary_cn = translate_to_chinese(summary_prompt, tool_name) if summary_prompt else "" + summary_cn = summary_prompt + + # Get agent URL + belonging_agent = tool_config.get("belonging_agent", "") + url_info = AGENT_URL_MAPPING.get(belonging_agent, {"test": None, "uat": None, "prod": None}) + + # Parse description into dictionary format + description_str = tool_config.get("description", "") + description_dict = parse_description(description_str) if description_str else {} - # Build result dictionary + # Get description_cn from zh_tool_config if available, otherwise from tool_config + if zh_tool_config: + description_cn_str = zh_tool_config.get("description", "") + else: + description_cn_str = tool_config.get("description_cn", "") + + description_cn_dict = parse_description_cn(description_cn_str) if description_cn_str else {} + + # Build result dictionary (use base name without _zh suffix) result = { "tool_id": tool_id, - "name": tool_name, - "description": tool_config.get("description", ""), - "description_cn": "", # Placeholder for Chinese description - "belonging_agent": tool_config.get("belonging_agent", ""), + "name": base_tool_name, + "description": description_dict, + "description_cn": description_cn_dict, + "belonging_agent": belonging_agent, "scenes": scene_names, "alternative_tools": tool_config.get("alternative", []), "summary_prompt": summary_prompt, "summary_cn": summary_cn, "self_check": tool_config.get("self_check", False), "args_setting": tool_config.get("args_setting", None), + "server": url_info, } + # Remove server field if all values are None + if all(v is None for v in url_info.values()): + result.pop("server", None) + # Add optional fields if they exist if "bypass_confirmation" in tool_config: result["bypass_confirmation"] = tool_config["bypass_confirmation"] @@ -202,10 +458,21 @@ def process_tool(tool_name: str, tool_config: dict, scene_index: int, primary_sc def main(): """Main function to generate agents-tool.json.""" - # Group tools by primary scene (first scene in the list) - tools_by_scene = defaultdict(list) + # Separate English and Chinese tools + en_tools = {} + zh_tools = {} for tool_name, tool_config in ALL_TOOLS.items(): + if tool_name.endswith('_zh'): + base_name = tool_name[:-3] # Remove '_zh' suffix + zh_tools[base_name] = tool_config + else: + en_tools[tool_name] = tool_config + + # Group English tools by primary scene (first scene in the list) + tools_by_scene = defaultdict(list) + + for tool_name, tool_config in en_tools.items(): scenes = tool_config.get("scene", []) primary_scene = scenes[0] if scenes else None tools_by_scene[primary_scene].append((tool_name, tool_config)) @@ -235,7 +502,9 @@ def scene_sort_key(scene): # Process each tool in this scene, resetting index for each scene for scene_index, (tool_name, tool_config) in enumerate(scene_tools, start=1): try: - tool_json = process_tool(tool_name, tool_config, scene_index, primary_scene) + # Get corresponding Chinese tool config if available + zh_tool_config = zh_tools.get(tool_name) + tool_json = process_tool(tool_name, tool_config, scene_index, primary_scene, zh_tool_config) tools_list.append(tool_json) processed += 1 if processed % 10 == 0: diff --git a/scripts/get_agent_urls.py b/scripts/get_agent_urls.py new file mode 100644 index 00000000..1632089f --- /dev/null +++ b/scripts/get_agent_urls.py @@ -0,0 +1,269 @@ +#!/usr/bin/env python3 +""" +Get agent URLs for all environments by parsing constant.py files +""" +import ast +import re +import sys +from pathlib import Path + +project_root = Path(__file__).parent.parent +sys.path.insert(0, str(project_root)) + + +def extract_urls_from_file(file_path: Path) -> dict: + """ + Extract URLs for test, uat, prod from a constant.py file. + Returns: {test: url, uat: url, prod: url} + """ + urls = {'test': None, 'uat': None, 'prod': None} + + if not file_path.exists(): + return urls + + try: + with open(file_path, 'r', encoding='utf-8') as f: + content = f.read() + + # Find URL variable name (look for variables ending in URL or ServerUrl) + url_var_pattern = r'(\w*(?:URL|ServerUrl|_URL|_SERVER_URL))\s*=' + url_vars = re.findall(url_var_pattern, content) + + if not url_vars: + return urls + + url_var = url_vars[0] # Use first URL variable found + + # Extract URLs by finding the assignment and extracting the quoted string + # Handle both single-line and multi-line assignments + + # Pattern for test/uat together + test_uat_block = re.search( + rf"if\s+CURRENT_ENV\s+in\s*\[['\"]test['\"],\s*['\"]uat['\"]\]:.*?{url_var}\s*=\s*", + content, + re.DOTALL + ) + if test_uat_block: + remaining = content[test_uat_block.end():] + # Support multi-line assignments with parentheses + lines = remaining.split('\n') + url_found = None + for i, line in enumerate(lines[:10]): + stripped = line.strip() + if stripped.startswith('#'): + continue + # Try to find URL on same line + url_match = re.search(r"['\"]([^'\"]+)['\"]", line) + if url_match: + url_found = url_match.group(1).strip() + break + # If line ends with '(' or '=', check next line(s) for URL + if line.rstrip().endswith(('(', '=')) or re.search(rf'{url_var}\s*=\s*\(', line): + for j in range(i + 1, min(i + 5, len(lines))): + next_line = lines[j].strip() + if next_line.startswith('#'): + continue + url_match = re.search(r"['\"]([^'\"]+)['\"]", next_line) + if url_match: + url_found = url_match.group(1).strip() + break + if url_found: + break + # Stop if we hit another conditional block + if re.match(r'\s*(if|elif|else)\s*:', line): + break + if url_found: + urls['test'] = url_found + urls['uat'] = url_found + + # Pattern for test only + # Support both: + # if CURRENT_ENV == 'test': + # if CURRENT_ENV in ['test']: + if not urls['test']: + test_patterns = [ + rf"(if|elif)\s+CURRENT_ENV\s*==\s*['\"]test['\"]\s*:.*?{url_var}\s*=\s*", + rf"(if|elif)\s+CURRENT_ENV\s+in\s*\[['\"]test['\"]\]\s*:.*?{url_var}\s*=\s*", + ] + for pattern in test_patterns: + test_block = re.search(pattern, content, re.DOTALL) + if test_block: + remaining = content[test_block.end():] + # Support multi-line assignments + lines = remaining.split('\n') + for i, line in enumerate(lines[:10]): + stripped = line.strip() + if stripped.startswith('#'): + continue + url_match = re.search(r"['\"]([^'\"]+)['\"]", line) + if url_match: + urls['test'] = url_match.group(1).strip() + break + # Check for multi-line assignment + if line.rstrip().endswith(('(', '=')) or re.search(rf'{url_var}\s*=\s*\(', line): + for j in range(i + 1, min(i + 5, len(lines))): + next_line = lines[j].strip() + if next_line.startswith('#'): + continue + url_match = re.search(r"['\"]([^'\"]+)['\"]", next_line) + if url_match: + urls['test'] = url_match.group(1).strip() + break + if urls['test']: + break + if re.match(r'\s*(if|elif|else)\s*:', line): + break + if urls['test']: + break + + # Pattern for uat only + # Support both: + # elif CURRENT_ENV == 'uat': + # elif CURRENT_ENV in ['uat']: + if not urls['uat']: + uat_patterns = [ + rf"elif\s+CURRENT_ENV\s*==\s*['\"]uat['\"]\s*:.*?{url_var}\s*=\s*", + rf"elif\s+CURRENT_ENV\s+in\s*\[['\"]uat['\"]\]\s*:.*?{url_var}\s*=\s*", + ] + for pattern in uat_patterns: + uat_block = re.search(pattern, content, re.DOTALL) + if uat_block: + remaining = content[uat_block.end():] + # Support multi-line assignments + lines = remaining.split('\n') + for i, line in enumerate(lines[:10]): + stripped = line.strip() + if stripped.startswith('#'): + continue + url_match = re.search(r"['\"]([^'\"]+)['\"]", line) + if url_match: + urls['uat'] = url_match.group(1).strip() + break + # Check for multi-line assignment + if line.rstrip().endswith(('(', '=')) or re.search(rf'{url_var}\s*=\s*\(', line): + for j in range(i + 1, min(i + 5, len(lines))): + next_line = lines[j].strip() + if next_line.startswith('#'): + continue + url_match = re.search(r"['\"]([^'\"]+)['\"]", next_line) + if url_match: + urls['uat'] = url_match.group(1).strip() + break + if urls['uat']: + break + if re.match(r'\s*(if|elif|else)\s*:', line): + break + if urls['uat']: + break + + # Pattern for prod (else block) + # Find else block and then search for URL assignment in subsequent lines + else_match = re.search(r'else\s*:', content) + if else_match: + remaining = content[else_match.end():] + # Look for URL assignment in the else block (stop at next if/elif/else or end of function) + # Find the URL assignment line (may be on same line or next few lines) + # Support multi-line assignments with parentheses + lines = remaining.split('\n') + for i, line in enumerate(lines[:10]): # Check first 10 lines after else + stripped = line.strip() + if stripped.startswith('#'): + continue + # Check if this line contains the URL assignment + if url_var in line and '=' in line: + # Try to find URL on same line first + url_match = re.search(r"['\"]([^'\"]+)['\"]", line) + if url_match: + urls['prod'] = url_match.group(1).strip() + break + # If line ends with '(' or '=', check next line(s) for URL (multi-line assignment) + if line.rstrip().endswith(('(', '=')) or re.search(rf'{url_var}\s*=\s*\(', line): + # Look ahead for URL string in next few lines + for j in range(i + 1, min(i + 5, len(lines))): + next_line = lines[j].strip() + if next_line.startswith('#'): + continue + url_match = re.search(r"['\"]([^'\"]+)['\"]", next_line) + if url_match: + urls['prod'] = url_match.group(1).strip() + break + if urls['prod']: + break + # Stop if we hit another conditional block + if re.match(r'\s*(if|elif|else)\s*:', line): + break + + # If no conditional found, look for direct assignment + if not any(urls.values()): + direct_match = re.search(rf"{url_var}\s*=\s*['\"]([^'\"]+)['\"]", content) + if direct_match: + url = direct_match.group(1).strip() + urls['test'] = url + urls['uat'] = url + urls['prod'] = url + + except Exception as e: + print(f"Error parsing {file_path}: {e}", file=sys.stderr) + + return urls + + +def get_urls_for_all_environments(): + """ + Get URLs for all agents in all environments. + Returns: {agent_name: {test: url, uat: url, prod: url}} + """ + # Agent name to constant file path mapping + agent_mappings = { + 'ABACUS_calculation_agent': project_root / 'agents/matmaster_agent/sub_agents/ABACUS_agent/constant.py', + 'apex_agent': project_root / 'agents/matmaster_agent/sub_agents/apex_agent/constant.py', + 'dpa_calculator_agent': project_root / 'agents/matmaster_agent/sub_agents/DPACalculator_agent/constant.py', + 'finetune_dpa_agent': project_root / 'agents/matmaster_agent/sub_agents/finetune_dpa_agent/constant.py', + 'LAMMPS_agent': project_root / 'agents/matmaster_agent/sub_agents/LAMMPS_agent/constant.py', + 'structure_generate_agent': project_root / 'agents/matmaster_agent/sub_agents/structure_generate_agent/constant.py', + 'convexhull_agent': project_root / 'agents/matmaster_agent/sub_agents/convexhull_agent/constant.py', + 'superconductor_agent': project_root / 'agents/matmaster_agent/sub_agents/superconductor_agent/constant.py', + 'thermoelectric_agent': project_root / 'agents/matmaster_agent/sub_agents/thermoelectric_agent/constant.py', + 'traj_analysis_agent': project_root / 'agents/matmaster_agent/sub_agents/traj_analysis_agent/constant.py', + 'visualizer_agent': project_root / 'agents/matmaster_agent/sub_agents/visualizer_agent/constant.py', + 'optimade_agent': project_root / 'agents/matmaster_agent/sub_agents/MrDice_agent/optimade_agent/constant.py', + 'bohriumpublic_agent': project_root / 'agents/matmaster_agent/sub_agents/MrDice_agent/bohriumpublic_agent/constant.py', + 'openlam_agent': project_root / 'agents/matmaster_agent/sub_agents/MrDice_agent/openlam_agent/constant.py', + 'mofdb_agent': project_root / 'agents/matmaster_agent/sub_agents/MrDice_agent/mofdb_agent/constant.py', + 'perovskite_research_agent': project_root / 'agents/matmaster_agent/sub_agents/perovskite_agent/constant.py', + 'doe_agent': project_root / 'agents/matmaster_agent/sub_agents/doe_agent/constant.py', + 'compdart_agent': project_root / 'agents/matmaster_agent/sub_agents/CompDART_agent/constant.py', + 'document_parser_agent': project_root / 'agents/matmaster_agent/sub_agents/document_parser_agent/constant.py', + 'electron_microscope_agent': project_root / 'agents/matmaster_agent/sub_agents/Electron_Microscope_agent/constant.py', + 'xrd_agent': project_root / 'agents/matmaster_agent/sub_agents/XRD_agent/constant.py', + 'tpd_agent': project_root / 'agents/matmaster_agent/sub_agents/TPD_agent/constant.py', + 'physical_adsorption_agent': project_root / 'agents/matmaster_agent/sub_agents/Physical_adsorption_agent/constant.py', + 'science_navigator_agent': project_root / 'agents/matmaster_agent/sub_agents/ScienceNavigator_agent/constant.py', + 'nmr_agent': project_root / 'agents/matmaster_agent/sub_agents/NMR_agent/constant.py', + 'vaspkit_agent': project_root / 'agents/matmaster_agent/sub_agents/vaspkit_agent/constant.py', + 'HEAkb_agent': project_root / 'agents/matmaster_agent/sub_agents/HEAkb_agent/constant.py', + 'SSEkb_agent': project_root / 'agents/matmaster_agent/sub_agents/SSEkb_agent/constant.py', + 'POLYMERkb_agent': project_root / 'agents/matmaster_agent/sub_agents/POLYMERkb_agent/constant.py', + 'STEELkb_agent': project_root / 'agents/matmaster_agent/sub_agents/STEELkb_agent/constant.py', + 'STEEL_PREDICT_agent': project_root / 'agents/matmaster_agent/sub_agents/STEEL_PREDICT_agent/constant.py', + 'unielf_agent': project_root / 'agents/matmaster_agent/sub_agents/chembrain_agent/unielf_agent/constant.py', + 'hea_calculator_agent': project_root / 'agents/matmaster_agent/sub_agents/HEACalculator_agent/constant.py', + 'HEA_assistant_agent': project_root / 'agents/matmaster_agent/sub_agents/HEA_assistant_agent/constant.py', + 'organic_reaction_agent': project_root / 'agents/matmaster_agent/sub_agents/organic_reaction_agent/constant.py', + 'piloteye_electro_agent': project_root / 'agents/matmaster_agent/sub_agents/piloteye_electro_agent/constant.py', + } + + url_mapping = {} + + for agent_name, constant_file in agent_mappings.items(): + urls = extract_urls_from_file(constant_file) + url_mapping[agent_name] = urls + + return url_mapping + + +if __name__ == "__main__": + mapping = get_urls_for_all_environments() + import json + print(json.dumps(mapping, indent=2, ensure_ascii=False)) + diff --git a/scripts/improve_description_translations.py b/scripts/improve_description_translations.py deleted file mode 100644 index d58015ab..00000000 --- a/scripts/improve_description_translations.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env python3 -""" -Improve description_cn translations with better phrase-level translations -""" -import json -import re -from pathlib import Path - -project_root = Path(__file__).parent.parent - -def improve_translation(description_cn: str) -> str: - """ - Improve the translation by fixing common issues from word-by-word translation. - """ - if not description_cn: - return "" - - # Fix common translation issues - fixes = { - # Fix "a到ms" -> "原子" - r"a到ms": "原子", - r"a到m": "原子", - # Fix "c或rections" -> "修正" - r"c或rections": "修正", - r"c或rection": "修正", - # Fix "of" in context - r"of non-charged vacancy in metal 原子": "金属原子中非带电空位的", - r"of (\w+)": r"\1的", - # Fix "like" -> "如" - r"like (\w+)": r"如 \1", - # Fix "for" -> "用于" (but not when it's part of "for a structure") - r" 用于 a structure": " 用于结构", - r" 用于 a material": " 用于材料", - r" 用于 calculation": " 进行计算", - r" 用于 accuracy": " 以提高精度", - # Fix "Plot of" -> "图" - r"Plot of ": "", - # Fix common phrases - r"non-charged vacancy": "非带电空位", - r"metal 原子": "金属原子", - r"metal structures": "金属结构", - r"phonon properties": "声子性质", - r"thermal 修正": "热修正", - r"electronic 能带结构": "电子能带结构", - # Remove extra spaces - r" +": " ", - r"^ ": "", - r" $": "", - } - - result = description_cn - for pattern, replacement in fixes.items(): - result = re.sub(pattern, replacement, result) - - # Clean up multiple spaces - result = re.sub(r' {2,}', ' ', result) - - return result - - -def main(): - json_file = project_root / "agents-tool.json" - - print(f"Reading {json_file}...") - with open(json_file, "r", encoding="utf-8") as f: - data = json.load(f) - - print("Improving translations...") - updated = 0 - - for tool in data["tools"]: - name = tool.get("name", "") - description_cn = tool.get("description_cn", "").strip() - - if description_cn: - improved = improve_translation(description_cn) - if improved != description_cn: - tool["description_cn"] = improved - updated += 1 - - print(f"\nSaving improved JSON...") - with open(json_file, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - print(f"✓ Improved {updated} translations") - print(f"✓ Updated {json_file}") - - -if __name__ == "__main__": - main() - diff --git a/scripts/translate_all_descriptions.py b/scripts/translate_all_descriptions.py deleted file mode 100644 index 9795f63a..00000000 --- a/scripts/translate_all_descriptions.py +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/env python3 -""" -Translate all descriptions in agents-tool.json to Chinese -""" -import json -from pathlib import Path - -project_root = Path(__file__).parent.parent - -def translate_description_section(description: str) -> str: - """ - Translate a description to Chinese, preserving the structured format. - """ - if not description: - return "" - - # Section header translations - headers = { - "What it does:": "功能:", - "When to use:": "何时使用:", - "Prerequisites / Inputs:": "前提条件/输入:", - "Outputs:": "输出:", - "Cannot do / Limits:": "无法做到/限制:", - "Cost / Notes:": "成本/备注:", - } - - lines = description.split('\n') - result = [] - - for line in lines: - stripped = line.strip() - if not stripped: - result.append("") - continue - - # Check for section headers - found_header = False - for eng, cn in headers.items(): - if stripped.startswith(eng): - content = stripped[len(eng):].strip() - if content: - result.append(f"{cn} {translate_text(content)}") - else: - result.append(cn) - found_header = True - break - - if not found_header: - result.append(translate_text(stripped)) - - return "\n".join(result) - - -def translate_text(text: str) -> str: - """ - Translate English text to Chinese. - This handles common technical terms and phrases in materials science. - """ - # Common technical translations - # Note: This is a simplified version. For production, use a proper translation service. - - # I'll provide direct translations for common phrases - # Since we have 107 tools, I'll create a comprehensive translation mapping - - # This function will be called for each piece of text - # For now, return a placeholder that we'll fill with actual translations - - # Common phrase patterns - translations = { - "Calculate": "计算", - "Perform": "执行", - "Run": "运行", - "Generate": "生成", - "Build": "构建", - "Create": "创建", - "Extract": "提取", - "Analyze": "分析", - "Predict": "预测", - "Optimize": "优化", - "Search": "搜索", - "Query": "查询", - "Retrieve": "检索", - "Fetch": "获取", - "Execute": "执行", - "using DFT": "使用 DFT", - "using ML potential": "使用机器学习势", - "Structure file": "结构文件", - "in cif/VASP POSCAR/ABACUS STRU format": "以 cif/VASP POSCAR/ABACUS STRU 格式", - "DFT parameters": "DFT 参数", - "formation energy": "形成能", - "vacancy formation energy": "空位形成能", - "phonon dispersion": "声子色散", - "band structure": "能带结构", - "band gap": "带隙", - "density of states": "态密度", - "When you need": "当您需要", - "supports": "支持", - "before calculation": "计算前", - "DFT calculation cost": "DFT 计算成本", - "Low": "低", - "Medium": "中", - "High": "高", - "requires": "需要", - "may need": "可能需要", - "optional": "可选", - "only": "仅", - "specific to": "特定于", - "limited to": "仅限于", - } - - # Simple replacement (basic translation) - result = text - for eng, cn in sorted(translations.items(), key=lambda x: -len(x[0])): - result = result.replace(eng, cn) - - return result - - -def main(): - json_file = project_root / "agents-tool.json" - - print(f"Reading {json_file}...") - with open(json_file, "r", encoding="utf-8") as f: - data = json.load(f) - - print("Translating all descriptions...") - updated = 0 - - for tool in data["tools"]: - name = tool.get("name", "") - desc = tool.get("description", "").strip() - desc_cn = tool.get("description_cn", "").strip() - - if desc and not desc_cn: - translated = translate_description_section(desc) - tool["description_cn"] = translated - updated += 1 - - if updated % 20 == 0: - print(f" Progress: {updated} tools translated...") - - print(f"\nSaving updated JSON...") - with open(json_file, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - print(f"✓ Updated {updated} descriptions") - print(f"✓ Saved to {json_file}") - - -if __name__ == "__main__": - main() - diff --git a/scripts/translate_all_descriptions_final.py b/scripts/translate_all_descriptions_final.py deleted file mode 100644 index da54bdbd..00000000 --- a/scripts/translate_all_descriptions_final.py +++ /dev/null @@ -1,196 +0,0 @@ -#!/usr/bin/env python3 -""" -Translate all descriptions in agents-tool.json to Chinese and update description_cn -""" -import json -import re -from pathlib import Path - -project_root = Path(__file__).parent.parent - -def translate_description(description: str) -> str: - """ - Translate description to Chinese, preserving the structured format. - """ - if not description: - return "" - - # Section header translations - section_map = { - "What it does:": "功能:", - "When to use:": "何时使用:", - "Prerequisites / Inputs:": "前提条件/输入:", - "Outputs:": "输出:", - "Cannot do / Limits:": "无法做到/限制:", - "Cost / Notes:": "成本/备注:", - } - - lines = description.split('\n') - translated_lines = [] - - for line in lines: - stripped = line.strip() - if not stripped: - translated_lines.append("") - continue - - # Check for section headers - translated = False - for eng_header, cn_header in section_map.items(): - if stripped.startswith(eng_header): - content = stripped[len(eng_header):].strip() - if content: - translated_content = translate_content(content) - translated_lines.append(f"{cn_header} {translated_content}") - else: - translated_lines.append(cn_header) - translated = True - break - - if not translated: - translated_lines.append(translate_content(stripped)) - - return "\n".join(translated_lines) - - -def translate_content(text: str) -> str: - """ - Translate content text to Chinese. - Handles common technical terms and phrases in materials science. - """ - # Comprehensive translation mapping - translations = { - # Actions - "Calculate": "计算", - "Perform": "执行", - "Run": "运行", - "Generate": "生成", - "Build": "构建", - "Create": "创建", - "Extract": "提取", - "Analyze": "分析", - "Predict": "预测", - "Optimize": "优化", - "Search": "搜索", - "Query": "查询", - "Retrieve": "检索", - "Fetch": "获取", - "Execute": "执行", - "Evaluate": "评估", - "Screen": "筛选", - "Identify": "识别", - "Parse": "解析", - "Visualize": "可视化", - - # Technical terms - "using DFT": "使用 DFT", - "using ML potential": "使用机器学习势", - "Structure file": "结构文件", - "in cif/VASP POSCAR/ABACUS STRU format": "以 cif/VASP POSCAR/ABACUS STRU 格式", - "DFT parameters": "DFT 参数", - "formation energy": "形成能", - "vacancy formation energy": "空位形成能", - "phonon dispersion": "声子色散", - "band structure": "能带结构", - "band gap": "带隙", - "density of states": "态密度", - "DOS": "DOS", - "PDOS": "PDOS", - "SCF calculation": "SCF 计算", - "ground state energy": "基态能量", - "relaxation": "弛豫", - "optimization": "优化", - "molecular dynamics": "分子动力学", - "MD": "MD", - "elastic constants": "弹性常数", - "elastic properties": "弹性性质", - "EOS": "EOS", - "equation of state": "状态方程", - "work function": "功函数", - "Bader charge": "Bader 电荷", - "electron localization function": "电子局域化函数", - "ELF": "ELF", - "NEB": "NEB", - "nudged elastic band": "推弹性能带", - "supercell": "超胞", - "high-symmetry points": "高对称点", - "k-path": "k 路径", - "functional": "泛函", - "spin polarization": "自旋极化", - "DFT+U": "DFT+U", - "magnetic moments": "磁矩", - "ML potential": "机器学习势", - "machine learning potential": "机器学习势", - "ML-based": "基于机器学习", - "DFT-based": "基于 DFT", - - # Common phrases - "When you need": "当您需要", - "supports": "支持", - "before calculation": "计算前", - "DFT calculation cost": "DFT 计算成本", - "Low": "低", - "Medium": "中", - "High": "高", - "requires": "需要", - "may need": "可能需要", - "optional": "可选", - "only": "仅", - "specific to": "特定于", - "limited to": "仅限于", - "for": "用于", - "from": "从", - "to": "到", - "with": "使用", - "by": "通过", - "and": "和", - "or": "或", - } - - # Apply translations (longest first to avoid partial matches) - result = text - for eng, cn in sorted(translations.items(), key=lambda x: -len(x[0])): - # Case-insensitive replacement for most terms - if eng.lower() == eng: # Lowercase terms - pattern = re.compile(re.escape(eng), re.IGNORECASE) - result = pattern.sub(cn, result) - else: # Preserve case for acronyms and specific terms - result = result.replace(eng, cn) - - return result - - -def main(): - json_file = project_root / "agents-tool.json" - - print(f"Reading {json_file}...") - with open(json_file, "r", encoding="utf-8") as f: - data = json.load(f) - - print("Translating all descriptions to Chinese...") - updated = 0 - - for tool in data["tools"]: - name = tool.get("name", "") - description = tool.get("description", "").strip() - description_cn = tool.get("description_cn", "").strip() - - if description and not description_cn: - translated = translate_description(description) - tool["description_cn"] = translated - updated += 1 - - if updated % 20 == 0: - print(f" Progress: {updated} tools translated...") - - print(f"\nSaving updated JSON...") - with open(json_file, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - print(f"✓ Successfully updated {updated} descriptions") - print(f"✓ Updated {json_file}") - - -if __name__ == "__main__": - main() - diff --git a/scripts/translate_summary_cn.py b/scripts/translate_summary_cn.py deleted file mode 100644 index ef7cda45..00000000 --- a/scripts/translate_summary_cn.py +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env python3 -""" -Translate summary_prompt to Chinese and update agents-tool.json -""" -import json -import sys -from pathlib import Path - -# Add project root to path -project_root = Path(__file__).parent.parent -sys.path.insert(0, str(project_root)) - -try: - import litellm - from agents.matmaster_agent.llm_config import LLMConfig - HAS_TRANSLATION = True -except ImportError: - HAS_TRANSLATION = False - print("Error: Translation libraries not available.", file=sys.stderr) - sys.exit(1) - - -def translate_to_chinese(text: str, tool_name: str = "") -> str: - """ - Translate English text to Chinese using LLM. - - Args: - text: English text to translate - tool_name: Tool name for logging - - Returns: - Chinese translation - """ - if not text: - return "" - - try: - llm_config = LLMConfig() - model = llm_config.gpt_5_nano.model - - prompt = f"""Translate the following English text to Chinese (Simplified). -Keep the technical terms, code blocks, markdown formatting, and structure exactly as they are. -Preserve all special characters, emojis, and formatting. -Only return the translation, no explanations, no additional markdown code blocks. - -Text to translate: -{text} - -Chinese translation:""" - - response = litellm.completion( - model=model, - messages=[{'role': 'user', 'content': prompt}], - temperature=0.3, - ) - - translation = response.choices[0].message.content.strip() - - # Remove markdown code blocks if present (but keep the content) - if translation.startswith('```'): - # Extract content from code blocks - parts = translation.split('```') - if len(parts) >= 3: - translation = parts[1].strip() if len(parts[1].strip()) > 0 else parts[2].strip() - else: - translation = parts[-1].strip() - - if tool_name: - print(f" ✓ Translated summary for {tool_name}", file=sys.stderr) - - return translation - except Exception as e: - if tool_name: - print(f" ✗ Translation failed for {tool_name}: {e}", file=sys.stderr) - return "" - - -def main(): - """Main function to translate and update JSON.""" - json_file = project_root / "agents-tool.json" - - # Read JSON file - print(f"Reading {json_file}...", file=sys.stderr) - with open(json_file, "r", encoding="utf-8") as f: - data = json.load(f) - - tools = data.get("tools", []) - total_tools = len(tools) - tools_to_translate = [t for t in tools if t.get("summary_prompt", "").strip()] - - print(f"Found {len(tools_to_translate)} tools with summary_prompt to translate", file=sys.stderr) - - # Translate each tool's summary_prompt - translated_count = 0 - for idx, tool in enumerate(tools, 1): - tool_name = tool.get("name", "") - summary_prompt = tool.get("summary_prompt", "").strip() - - if summary_prompt: - # Check if already translated - summary_cn = tool.get("summary_cn", "").strip() - if summary_cn: - print(f" ⊙ Skipping {tool_name} (already translated)", file=sys.stderr) - continue - - print(f"[{idx}/{total_tools}] Translating {tool_name}...", file=sys.stderr) - translated = translate_to_chinese(summary_prompt, tool_name) - - if translated: - tool["summary_cn"] = translated - translated_count += 1 - else: - print(f" ⚠ Warning: Translation returned empty for {tool_name}", file=sys.stderr) - - # Save updated JSON - print(f"\nSaving updated JSON...", file=sys.stderr) - with open(json_file, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - print(f"✓ Successfully translated {translated_count} summaries", file=sys.stderr) - print(f"✓ Updated {json_file}", file=sys.stderr) - - -if __name__ == "__main__": - main() - diff --git a/scripts/update_all_description_cn.py b/scripts/update_all_description_cn.py deleted file mode 100644 index c130620e..00000000 --- a/scripts/update_all_description_cn.py +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env python3 -""" -Update description_cn in agents-tool.json by translating all descriptions -""" -import json -from pathlib import Path - -project_root = Path(__file__).parent.parent - -def translate_description(description: str) -> str: - """ - Translate description from English to Chinese. - Preserves the structure with section headers. - """ - if not description: - return "" - - # Section header translations - section_translations = { - "What it does:": "功能:", - "When to use:": "何时使用:", - "Prerequisites / Inputs:": "前提条件/输入:", - "Outputs:": "输出:", - "Cannot do / Limits:": "无法做到/限制:", - "Cost / Notes:": "成本/备注:", - } - - lines = description.split('\n') - translated_lines = [] - - for line in lines: - line_stripped = line.strip() - - # Check for section headers - translated = False - for eng_header, cn_header in section_translations.items(): - if line_stripped.startswith(eng_header): - # Translate header and content - content = line_stripped[len(eng_header):].strip() - if content: - translated_content = translate_content_text(content) - translated_lines.append(f"{cn_header} {translated_content}") - else: - translated_lines.append(cn_header) - translated = True - break - - if not translated: - if line_stripped: - translated_lines.append(translate_content_text(line_stripped)) - else: - translated_lines.append("") - - return "\n".join(translated_lines) - - -def translate_content_text(text: str) -> str: - """ - Translate content text to Chinese. - This handles common technical terms and phrases. - """ - # This is a simplified translation - in practice you'd use a proper translation service - # For now, I'll provide direct translations for all descriptions - - # Common technical term mappings - term_replacements = { - "Calculate": "计算", - "Perform": "执行", - "Run": "运行", - "Generate": "生成", - "Build": "构建", - "Create": "创建", - "Extract": "提取", - "Analyze": "分析", - "Predict": "预测", - "Optimize": "优化", - "Search": "搜索", - "Query": "查询", - "Retrieve": "检索", - "Fetch": "获取", - "Execute": "执行", - "using DFT": "使用 DFT", - "using ML potential": "使用机器学习势", - "Structure file": "结构文件", - "in cif/VASP POSCAR/ABACUS STRU format": "以 cif/VASP POSCAR/ABACUS STRU 格式", - "DFT parameters": "DFT 参数", - "formation energy": "形成能", - "vacancy formation energy": "空位形成能", - "phonon dispersion": "声子色散", - "band structure": "能带结构", - "band gap": "带隙", - "density of states": "态密度", - "When you need": "当您需要", - "supports": "支持", - "before calculation": "计算前", - "DFT calculation cost": "DFT 计算成本", - "Low": "低", - "Medium": "中", - "High": "高", - "requires": "需要", - "may need": "可能需要", - "optional": "可选", - "only": "仅", - "specific to": "特定于", - "limited to": "仅限于", - } - - # Simple replacement (this is basic - full translation would be better) - result = text - for eng, cn in sorted(term_replacements.items(), key=lambda x: -len(x[0])): - result = result.replace(eng, cn) - - return result - - -def main(): - json_file = project_root / "agents-tool.json" - - # Read JSON - print(f"Reading {json_file}...") - with open(json_file, "r", encoding="utf-8") as f: - data = json.load(f) - - # Translate all descriptions - print("Translating descriptions...") - updated_count = 0 - - for tool in data["tools"]: - name = tool.get("name", "") - description = tool.get("description", "").strip() - description_cn = tool.get("description_cn", "").strip() - - if description and not description_cn: - # Use the translation function - translated = translate_description(description) - tool["description_cn"] = translated - updated_count += 1 - - if updated_count % 20 == 0: - print(f" Progress: {updated_count} tools translated...") - - # Save updated JSON - print(f"\nSaving updated JSON...") - with open(json_file, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - print(f"✓ Successfully updated {updated_count} descriptions") - print(f"✓ Updated {json_file}") - - -if __name__ == "__main__": - main() - diff --git a/scripts/update_all_description_cn_final.py b/scripts/update_all_description_cn_final.py deleted file mode 100644 index edb33ffb..00000000 --- a/scripts/update_all_description_cn_final.py +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/env python3 -""" -Update all description_cn in agents-tool.json with Chinese translations -""" -import json -from pathlib import Path - -project_root = Path(__file__).parent.parent - -def translate_description(description: str) -> str: - """ - Translate description to Chinese, preserving structure. - """ - if not description: - return "" - - # Section headers - headers = { - "What it does:": "功能:", - "When to use:": "何时使用:", - "Prerequisites / Inputs:": "前提条件/输入:", - "Outputs:": "输出:", - "Cannot do / Limits:": "无法做到/限制:", - "Cost / Notes:": "成本/备注:", - } - - lines = description.split('\n') - result = [] - - for line in lines: - stripped = line.strip() - if not stripped: - result.append("") - continue - - # Check for headers - found = False - for eng, cn in headers.items(): - if stripped.startswith(eng): - content = stripped[len(eng):].strip() - if content: - # Translate the content - translated_content = translate_content_phrase(content) - result.append(f"{cn} {translated_content}") - else: - result.append(cn) - found = True - break - - if not found: - result.append(translate_content_phrase(stripped)) - - return "\n".join(result) - - -def translate_content_phrase(text: str) -> str: - """ - Translate content phrases to Chinese. - This handles common technical terms in materials science. - """ - # Comprehensive translation mapping for common phrases - # This is a simplified version - for production use proper translation service - - # Common technical terms - translations = { - "Calculate": "计算", - "Perform": "执行", - "Run": "运行", - "Generate": "生成", - "Build": "构建", - "Create": "创建", - "Extract": "提取", - "Analyze": "分析", - "Predict": "预测", - "Optimize": "优化", - "Search": "搜索", - "Query": "查询", - "Retrieve": "检索", - "Fetch": "获取", - "Execute": "执行", - "using DFT": "使用 DFT", - "using ML potential": "使用机器学习势", - "Structure file": "结构文件", - "in cif/VASP POSCAR/ABACUS STRU format": "以 cif/VASP POSCAR/ABACUS STRU 格式", - "DFT parameters": "DFT 参数", - "formation energy": "形成能", - "vacancy formation energy": "空位形成能", - "phonon dispersion": "声子色散", - "band structure": "能带结构", - "band gap": "带隙", - "density of states": "态密度", - "When you need": "当您需要", - "supports": "支持", - "before calculation": "计算前", - "DFT calculation cost": "DFT 计算成本", - "Low": "低", - "Medium": "中", - "High": "高", - "requires": "需要", - "may need": "可能需要", - "optional": "可选", - "only": "仅", - "specific to": "特定于", - "limited to": "仅限于", - } - - # Simple replacement - result = text - for eng, cn in sorted(translations.items(), key=lambda x: -len(x[0])): - result = result.replace(eng, cn) - - return result - - -def main(): - json_file = project_root / "agents-tool.json" - - print(f"Reading {json_file}...") - with open(json_file, "r", encoding="utf-8") as f: - data = json.load(f) - - print("Translating all descriptions to Chinese...") - updated = 0 - - for tool in data["tools"]: - name = tool.get("name", "") - desc = tool.get("description", "").strip() - desc_cn = tool.get("description_cn", "").strip() - - if desc and not desc_cn: - translated = translate_description(desc) - tool["description_cn"] = translated - updated += 1 - - if updated % 20 == 0: - print(f" Progress: {updated} tools translated...") - - print(f"\nSaving updated JSON...") - with open(json_file, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - print(f"✓ Successfully updated {updated} descriptions") - print(f"✓ Updated {json_file}") - - -if __name__ == "__main__": - main() - diff --git a/scripts/update_description_cn.py b/scripts/update_description_cn.py deleted file mode 100644 index a34a6aee..00000000 --- a/scripts/update_description_cn.py +++ /dev/null @@ -1,261 +0,0 @@ -#!/usr/bin/env python3 -""" -Update description_cn in agents-tool.json by translating description -""" -import json -import re -from pathlib import Path - -project_root = Path(__file__).parent.parent - -def translate_description(description: str) -> str: - """ - Translate description to Chinese, preserving structure. - """ - if not description: - return "" - - # Common section headers - section_map = { - "What it does:": "功能:", - "When to use:": "何时使用:", - "Prerequisites / Inputs:": "前提条件/输入:", - "Outputs:": "输出:", - "Cannot do / Limits:": "无法做到/限制:", - "Cost / Notes:": "成本/备注:", - } - - # Split by lines - lines = description.split('\n') - translated_lines = [] - - current_section = None - for line in lines: - line_stripped = line.strip() - - # Check if this is a section header - is_header = False - for eng_header, cn_header in section_map.items(): - if line_stripped.startswith(eng_header): - translated_lines.append(cn_header) - # Get content after header - content = line_stripped.replace(eng_header, "").strip() - if content: - translated_lines.append(f" {translate_content(content)}") - is_header = True - current_section = eng_header - break - - if not is_header: - if line_stripped: - # Regular content line - translated_lines.append(translate_content(line)) - else: - # Empty line - translated_lines.append("") - - return "\n".join(translated_lines) - - -def translate_content(text: str) -> str: - """ - Translate content text to Chinese. - This function will translate common technical terms and phrases. - """ - # Common technical term translations - term_map = { - "Structure file": "结构文件", - "DFT": "DFT", - "DFT parameters": "DFT 参数", - "cif/VASP POSCAR/ABACUS STRU format": "cif/VASP POSCAR/ABACUS STRU 格式", - "formation energy": "形成能", - "vacancy formation energy": "空位形成能", - "phonon dispersion": "声子色散", - "band structure": "能带结构", - "band gap": "带隙", - "density of states": "态密度", - "DOS": "DOS", - "PDOS": "PDOS", - "SCF calculation": "SCF 计算", - "ground state energy": "基态能量", - "relaxation": "弛豫", - "optimization": "优化", - "molecular dynamics": "分子动力学", - "MD": "MD", - "elastic constants": "弹性常数", - "elastic properties": "弹性性质", - "EOS": "EOS", - "equation of state": "状态方程", - "work function": "功函数", - "Bader charge": "Bader 电荷", - "electron localization function": "电子局域化函数", - "ELF": "ELF", - "NEB": "NEB", - "nudged elastic band": "推弹性能带", - "supercell": "超胞", - "high-symmetry points": "高对称点", - "k-path": "k 路径", - "functional": "泛函", - "spin polarization": "自旋极化", - "DFT+U": "DFT+U", - "magnetic moments": "磁矩", - "ML potential": "机器学习势", - "machine learning potential": "机器学习势", - "ML-based": "基于机器学习", - "DPA": "DPA", - "LAMMPS": "LAMMPS", - "APEX": "APEX", - "ABACUS": "ABACUS", - } - - # Simple word-by-word translation (this is a simplified version) - # In practice, you'd want more sophisticated translation - translated = text - - # Replace common terms - for eng_term, cn_term in term_map.items(): - # Case-insensitive replacement - pattern = re.compile(re.escape(eng_term), re.IGNORECASE) - translated = pattern.sub(cn_term, translated) - - # For now, return a placeholder that indicates translation is needed - # We'll implement full translation below - return translated - - -def main(): - json_file = project_root / "agents-tool.json" - - # Read JSON - print(f"Reading {json_file}...") - with open(json_file, "r", encoding="utf-8") as f: - data = json.load(f) - - # Since we have 107 tools, we'll translate them all - # For efficiency, I'll create translations for all tools - print("Translating all descriptions...") - - updated_count = 0 - for tool in data["tools"]: - name = tool.get("name", "") - description = tool.get("description", "").strip() - description_cn = tool.get("description_cn", "").strip() - - if description and not description_cn: - # Translate the description - translated = translate_description_full(description) - tool["description_cn"] = translated - updated_count += 1 - if updated_count % 10 == 0: - print(f" Progress: {updated_count} tools translated...") - - # Save updated JSON - print(f"\nSaving updated JSON...") - with open(json_file, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - print(f"✓ Successfully updated {updated_count} descriptions") - print(f"✓ Updated {json_file}") - - -def translate_description_full(description: str) -> str: - """ - Full translation of description. - This will translate the entire description to Chinese. - """ - # This is a comprehensive translation function - # We'll translate section by section - - result = [] - lines = description.split('\n') - - for line in lines: - line = line.strip() - if not line: - result.append("") - continue - - # Translate section headers - if line.startswith("What it does:"): - content = line.replace("What it does:", "").strip() - result.append("功能:" + (f" {translate_sentence(content)}" if content else "")) - elif line.startswith("When to use:"): - content = line.replace("When to use:", "").strip() - result.append("何时使用:" + (f" {translate_sentence(content)}" if content else "")) - elif line.startswith("Prerequisites / Inputs:"): - content = line.replace("Prerequisites / Inputs:", "").strip() - result.append("前提条件/输入:" + (f" {translate_sentence(content)}" if content else "")) - elif line.startswith("Outputs:"): - content = line.replace("Outputs:", "").strip() - result.append("输出:" + (f" {translate_sentence(content)}" if content else "")) - elif line.startswith("Cannot do / Limits:"): - content = line.replace("Cannot do / Limits:", "").strip() - result.append("无法做到/限制:" + (f" {translate_sentence(content)}" if content else "")) - elif line.startswith("Cost / Notes:"): - content = line.replace("Cost / Notes:", "").strip() - result.append("成本/备注:" + (f" {translate_sentence(content)}" if content else "")) - else: - result.append(translate_sentence(line)) - - return "\n".join(result) - - -def translate_sentence(sentence: str) -> str: - """ - Translate a sentence to Chinese. - This is a placeholder - actual translation would use LLM or translation API. - """ - # For now, return the sentence as-is with a note that translation is needed - # In production, this would call a translation service - - # Common phrase translations - translations = { - "Calculate": "计算", - "Perform": "执行", - "Run": "运行", - "Generate": "生成", - "Build": "构建", - "Create": "创建", - "Extract": "提取", - "Analyze": "分析", - "Predict": "预测", - "Optimize": "优化", - "Search": "搜索", - "Query": "查询", - "Retrieve": "检索", - "Fetch": "获取", - "using": "使用", - "for": "用于", - "When you need": "当您需要", - "Structure file": "结构文件", - "in": "以", - "format": "格式", - "DFT": "DFT", - "parameters": "参数", - "supports": "支持", - "before": "之前", - "calculation": "计算", - "cost": "成本", - "Low": "低", - "Medium": "中", - "High": "高", - "requires": "需要", - "may need": "可能需要", - "optional": "可选", - "only": "仅", - "not": "不", - "no": "无", - "specific to": "特定于", - "limited to": "仅限于", - } - - # Simple word replacement (this is basic - full translation would be better) - translated = sentence - for eng, cn in sorted(translations.items(), key=lambda x: -len(x[0])): - translated = translated.replace(eng, cn) - - return translated - - -if __name__ == "__main__": - main() diff --git a/scripts/update_description_cn_complete.py b/scripts/update_description_cn_complete.py deleted file mode 100644 index 42eddb45..00000000 --- a/scripts/update_description_cn_complete.py +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/env python3 -""" -Update description_cn in agents-tool.json with complete Chinese translations -""" -import json -from pathlib import Path - -project_root = Path(__file__).parent.parent - -# Complete translations for all tools -# Format: "tool_name": "translated_description" -DESCRIPTION_TRANSLATIONS = { - "abacus_vacancy_formation_energy": "功能:使用 DFT 计算金属原子中非带电空位的形成能。\n何时使用:当您需要金属结构的空位形成能时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数,如泛函、自旋极化、DFT+U、磁矩。\n输出:空位形成能。\n无法做到/限制:仅适用于金属原子的非带电空位;计算需要超胞。\n成本/备注:DFT 计算成本;支持计算前弛豫。", - - "abacus_phonon_dispersion": "功能:使用 DFT 计算声子色散曲线。\n何时使用:当您需要结构的声子性质和热修正时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;可选超胞、高对称点、k 路径。\n输出:声子色散能带结构和热修正图。\n无法做到/限制:需要 DFT;可能需要超胞以提高精度。\n成本/备注:DFT 计算成本;支持计算前弛豫。", - - "abacus_cal_band": "功能:使用 DFT 计算电子能带结构。\n何时使用:当您需要材料的能带结构和带隙时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;可选高对称点、k 路径。\n输出:能带结构和带隙图。\n无法做到/限制:基于 DFT;支持 PYATB 或 ABACUS nscf。\n成本/备注:DFT 计算成本;支持计算前弛豫。", - - "abacus_calculation_scf": "功能:执行 SCF 计算以使用 DFT 计算能量。\n何时使用:当您需要结构的基态能量时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数。\n输出:能量。\n无法做到/限制:基本 SCF;无弛豫或其他性质。\n成本/备注:DFT 计算成本。", - - "abacus_dos_run": "功能:使用 DFT 计算 DOS 和 PDOS。\n何时使用:当您需要电子结构分析的态密度时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;PDOS 模式('species'、'species+shell'、'species+orbital')。\n输出:DOS 和 PDOS 图。\n无法做到/限制:基于 DFT;需要弛豫支持。\n成本/备注:DFT 计算成本;支持计算前弛豫。", - - "abacus_badercharge_run": "功能:使用 DFT 计算 Bader 电荷。\n何时使用:当您需要原子电荷分析时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数。\n输出:每个原子的 Bader 电荷。\n无法做到/限制:基于 DFT;需要电荷密度计算。\n成本/备注:DFT 计算成本;支持计算前弛豫。", - - "abacus_do_relax": "功能:使用 DFT 执行几何优化(弛豫)。\n何时使用:当您需要优化结构时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;弛豫设置(晶胞、步数、方法、轴)。\n输出:弛豫后的结构文件。\n无法做到/限制:基于 DFT 的弛豫。\n成本/备注:DFT 计算成本。", - - "abacus_cal_work_function": "功能:使用 DFT 计算表面和二维材料的功函数。\n何时使用:当您需要表面材料的功函数时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;真空方向、偶极修正。\n输出:静电势和功函数图。\n无法做到/限制:适用于表面和二维材料;极性表面有两个功函数。\n成本/备注:DFT 计算成本;支持计算前弛豫。", - - "abacus_run_md": "功能:使用 DFT 执行从头算分子动力学。\n何时使用:当您需要具有 DFT 精度的 MD 模拟时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数;系综、步数、时间步长、温度。\n输出:ASE 轨迹文件。\n无法做到/限制:基于 DFT 的 MD;长时间模拟成本高。\n成本/备注:高 DFT 成本;支持计算前弛豫。", - - "abacus_cal_elf": "功能:使用 DFT 计算电子局域化函数。\n何时使用:当您需要键合分析的 ELF 时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数。\n输出:ELF 的立方文件。\n无法做到/限制:基于 DFT。\n成本/备注:DFT 计算成本;支持计算前弛豫。", - - "abacus_eos": "功能:使用 DFT 计算状态方程。\n何时使用:当您需要 EOS 曲线和体积性质时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数。\n输出:拟合的 EOS 图和拟合参数。\n无法做到/限制:基于 DFT。\n成本/备注:DFT 计算成本;支持计算前弛豫。", - - "abacus_cal_elastic": "功能:使用 DFT 计算弹性性质。\n何时使用:当您需要弹性常数和模量时。\n前提条件/输入:以 cif/VASP POSCAR/ABACUS STRU 格式的结构文件;DFT 参数。\n输出:弹性张量(Voigt 符号)、体积/剪切/杨氏模量、泊松比。\n无法做到/限制:基于 DFT。\n成本/备注:DFT 计算成本;支持计算前弛豫。", -} - -def main(): - json_file = project_root / "agents-tool.json" - - print(f"Reading {json_file}...") - with open(json_file, "r", encoding="utf-8") as f: - data = json.load(f) - - print("Updating description_cn...") - updated = 0 - - for tool in data["tools"]: - name = tool.get("name", "") - if name in DESCRIPTION_TRANSLATIONS: - tool["description_cn"] = DESCRIPTION_TRANSLATIONS[name] - updated += 1 - print(f" ✓ Updated {name}") - - # For tools not in the dictionary, use a generic translation function - # This handles the remaining tools - remaining = 0 - for tool in data["tools"]: - name = tool.get("name", "") - desc = tool.get("description", "").strip() - desc_cn = tool.get("description_cn", "").strip() - - if desc and not desc_cn and name not in DESCRIPTION_TRANSLATIONS: - # Use generic translation - translated = translate_description_generic(desc) - tool["description_cn"] = translated - remaining += 1 - if remaining % 20 == 0: - print(f" Progress: {remaining} remaining tools translated...") - - print(f"\nSaving updated JSON...") - with open(json_file, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - print(f"✓ Successfully updated {updated} predefined translations") - print(f"✓ Successfully updated {remaining} generic translations") - print(f"✓ Updated {json_file}") - - -def translate_description_generic(description: str) -> str: - """ - Generic translation function for descriptions not in the dictionary. - """ - if not description: - return "" - - headers = { - "What it does:": "功能:", - "When to use:": "何时使用:", - "Prerequisites / Inputs:": "前提条件/输入:", - "Outputs:": "输出:", - "Cannot do / Limits:": "无法做到/限制:", - "Cost / Notes:": "成本/备注:", - } - - lines = description.split('\n') - result = [] - - for line in lines: - stripped = line.strip() - if not stripped: - result.append("") - continue - - found = False - for eng, cn in headers.items(): - if stripped.startswith(eng): - content = stripped[len(eng):].strip() - if content: - # For generic translation, we'll keep the English content - # but translate common terms - translated_content = translate_common_terms(content) - result.append(f"{cn} {translated_content}") - else: - result.append(cn) - found = True - break - - if not found: - result.append(translate_common_terms(stripped)) - - return "\n".join(result) - - -def translate_common_terms(text: str) -> str: - """ - Translate common technical terms. - """ - # Common term translations - terms = { - "using DFT": "使用 DFT", - "using ML potential": "使用机器学习势", - "Structure file": "结构文件", - "DFT parameters": "DFT 参数", - "Low": "低", - "Medium": "中", - "High": "高", - "requires": "需要", - "supports": "支持", - "optional": "可选", - } - - result = text - for eng, cn in sorted(terms.items(), key=lambda x: -len(x[0])): - result = result.replace(eng, cn) - - return result - - -if __name__ == "__main__": - main() - diff --git a/scripts/update_summary_cn.py b/scripts/update_summary_cn.py deleted file mode 100644 index d20215a6..00000000 --- a/scripts/update_summary_cn.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python3 -""" -Update summary_cn in agents-tool.json by translating summary_prompt -""" -import json -from pathlib import Path - -project_root = Path(__file__).parent.parent - -# Translations - I'll provide these directly -translations = { - "unielf_inference": "根据输出结果总结 Uni-ELF 推理结果:\n1. 报告完整结果 CSV 文件的 URL (`result_csv`)。\n2. 列出 `top_10_results_dict` 中的前 10 个配方。对于每个配方,显示 `formulation_id`、组成(结合 `smiles_i` 和 `ratio_i`)以及预测的属性值(以 `_pred` 结尾的键)。\n3. 突出显示表现最好的配方。\n", - - "fetch_bohrium_crystals": "\n## 响应格式\n响应必须始终包括:\n1. ✅ 简要说明应用的筛选条件\n2. 📊 检索到的结构的 Markdown 表格\n - 列(固定顺序):\n (1) 化学式 (`formula`)\n (2) 元素(从 `formula` 推导)\n (3) 原子数(如果 `crystal_ext.number_of_atoms` 可用;否则 **未提供**)\n (4) 空间群(如果 `crystal_ext.symbol` 可用且可以映射到编号;否则 **未提供**)\n (5) 能量/形成能(如果 `crystal_ext.predicted_formation_energy` 可用;否则 **未提供**)\n (6) 带隙(如果 `crystal_ext.band_gap` 可用;否则 **未提供**)\n (7) 下载链接(CIF/JSON,基于 `output_formats`)\n (8) 来源数据库 → 始终为 `\"BohriumPublic\"`\n (9) ID (`id`)\n - 缺失值必须填写为 **未提供**\n - 行数**必须完全等于** `n_found`\n3. 📦 工具返回的 `output_dir` 路径(用于下载/归档)\n\n如果 `n_found = 0`,请明确说明未找到匹配项,重复应用的筛选条件,并建议放宽条件。**不要**生成空表格。\n", - - "fetch_mofs_sql": "## 响应格式\n1. 简要说明使用的 SQL 查询\n2. 检索到的 MOF 的 Markdown 表格,包含相关列\n3. 用于下载/归档的输出目录路径\n4. 结果中的关键发现(如适用)\n", - - "fetch_openlam_structures": "\n## 响应格式\n响应必须始终包括:\n1. ✅ 简要说明应用的筛选条件\n2. 📊 检索到的结构的 Markdown 表格\n - 列(固定顺序):\n (1) 化学式 (`formula`)\n (2) 元素(从 `formula` 推导)\n (3) 原子数 → **未提供**(OpenLAM 不提供此字段)\n (4) 空间群 → **未提供**(OpenLAM 不提供此字段)\n (5) 能量/形成能(如果 `energy` 可用;否则 **未提供**)\n (6) 带隙 → **未提供**(OpenLAM 不提供此字段)\n (7) 下载链接(CIF/JSON,基于 `output_formats`)\n (8) 来源数据库 → 始终为 `\"OpenLAM\"`\n (9) ID (`id`)\n - 缺失值必须填写为 **未提供**\n - 行数**必须完全等于** `n_found`\n3. 📦 工具返回的 `output_dir` 路径(用于下载/归档)\n\n如果 `n_found = 0`,请明确说明未找到匹配项,重复应用的筛选条件,并建议放宽条件。**不要**生成空表格。\n", - - "fetch_structures_with_filter": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", - - "fetch_structures_with_spg": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", - - "fetch_structures_with_bandgap": "\n## 响应格式\n响应必须始终按顺序包含三个部分:\n1. 应用的筛选条件和提供者的简要说明。\n2. 列出所有检索结果的 Markdown 表格。\n3. 归档文件的下载链接(.tgz)。\n表格必须在一个完整的 Markdown 表格中包含所有检索到的材料,不得遗漏、截断、总结或使用省略号。行数必须完全等于 `n_found`,即使结果很多(最多 30 个),它们都必须显示在同一表格中。归档链接是补充性的,永远不能替代完整表格。\n每个表格必须始终按此固定顺序包含以下九列:\n(1) 化学式 (`attributes.chemical_formula_reduced`)\n(2) 元素(元素列表;从化学式推断)\n(3) 原子数(如果提供者可用;否则 **未提供**)\n(4) 空间群 (`Symbol(Number)`;键可能因提供者而异(例如 `_alexandria_space_group`、`_oqmd_spacegroup`),因此您必须自己推理;如果只提供了一个,您必须使用您的知识自动提供另一个;如果两者都不可用,请准确填写 **未提供**)。\n(5) 能量/形成能(如果可用;否则 **未提供**)\n(6) 带隙(如果可用;否则 **未提供**)\n(7) 下载链接(CIF 或 JSON 文件)\n(8) 提供者(从提供者 URL 推断)\n(9) ID (`cleaned_structures[i][\"id\"]`)\n如果任何属性缺失,必须填写为 **未提供**(无斜杠、替代或翻译)。只有在明确请求时才能添加额外列(例如,晶格向量、带隙、形成能);如果此类数据不可用, also 填写 **未提供**。\n如果未找到结果(`n_found = 0`),请明确说明未检索到匹配结构,重复应用的筛选条件,并建议放宽条件,但不要生成空表格。始终验证表格行数是否等于 `n_found`;如果不匹配,请重新生成表格直到正确。永远不要声称令牌或简洁性问题,因为结果已经限制在最多 100 个。\n", - - "predict_tensile_strength": "## 响应格式\n\n**返回:**\n- 浮点值列表:预测的抗拉强度值列表(单位:MPa)\n- 顺序与输入化学式列表匹配\n- 示例:三个化学式为 [650.25, 680.50, 695.30]\n", - - "query_heakb_literature": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要列表(List[str])\n - 每个摘要是包含一篇文献论文摘要的文本字符串\n - 这些摘要是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n- 如果用户的问题是开放式的,提供全面分析,包括:\n 1. 机制洞察(反应路径、驱动力、结构-性能关系)\n 2. 定量或半定量结果(材料名称、数值数据、性能指标、空间群等)\n 3. 当前研究中的不一致、局限性或空白\n- 除非必要,不要过度强调技术细节(仪器设置或计算软件和参数设置)\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明(例如,“第一个”、“最好的”、“最受欢迎的”)\n- 在数字和单位之间添加空格(例如,10 cm,5 kg)\n- 对物理量使用斜体(例如,*E*、*T*、*k*)\n- 对向量使用粗体(例如,**F**、**E**)和化合物/材料的序列代码名称(例如,化合物 **1**)\n- 在首次使用时定义缩写,并在整个文本中一致使用\n- 使用 [1]、[2]、[3] 格式在整个文本中引用来源(数字指摘要顺序)\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战、分析的论文数量\n\n2. **主要内容**:组织成具有子章节的逻辑章节(##、###)。对于每个章节:\n - 整合来自多个摘要的发现,并提供详细解释\n - 包括具体的定量数据、实验条件和结果\n - 深入解释机制和过程(事物**如何**工作,而不仅仅是**什么**发生)\n - 比较不同研究的发现,突出一致性和分歧\n - 在适用时使用表格比较不同研究的数据\n - 解决当前理解中的矛盾或空白\n\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", - - "query_polymerkb_literature": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要和数据库条目列表(List[str])\n - 每个项目可以是:\n - 详细的文献摘要(对于有全文的论文):包含论文的全面分析\n - 数据库条目(对于没有全文的论文):包含 DOI 和数据库属性(例如,polymer_type、tensile_strength、flexural_strength 等)\n - 这些摘要和条目是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要和数据库条目。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n**重要**:摘要列表可能包含两种类型的条目:\n1. **详细的文献摘要**:包含论文的全面分析,包括方法、结果、讨论等\n2. **数据库条目**:包含 DOI 和数据库属性(例如,polymer_type、tensile_strength、flexural_strength 等)\n\n您应该将这两种类型的条目整合到报告中,使用文献摘要提供深入分析,使用数据库条目提供定量数据。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要和数据库条目的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", - - "query_steelkb_literature": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要列表(List[str])\n - 每个摘要是包含一篇文献论文摘要的文本字符串\n - 这些摘要是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", - - "query_ssekb_literature": "## 工具输出\n\n工具返回:\n- **summaries**:文献摘要和数据库条目列表(List[str])\n - 每个项目可以是:\n - 详细的文献摘要(对于有全文的论文):包含论文的全面分析\n - 数据库条目(对于没有全文的论文):包含 DOI 和数据库属性(例如,材料属性、实验数据等)\n - 这些摘要和条目是**原始材料** - 您必须将它们综合成一份全面的报告\n- **code**:状态码\n - 0:成功(有摘要可用)\n - 1:未找到结果\n - 2:无法读取文献全文\n - 4:其他错误\n\n## 响应格式\n\n**关键**:工具返回的是原始摘要和数据库条目。您**必须**将它们综合成一份全面、深入的研究报告。\n**不要**简单地列出或连接摘要 - 将它们综合成统一、连贯的叙述。\n\n**重要**:摘要列表可能包含两种类型的条目:\n1. **详细的文献摘要**:包含论文的全面分析,包括方法、结果、讨论等\n2. **数据库条目**:包含 DOI 和数据库属性(例如,材料属性、实验数据等)\n\n您应该将这两种类型的条目整合到报告中,使用文献摘要提供深入分析,使用数据库条目提供定量数据。\n\n## 表达风格:\n- 语调:学术、理性,但具有启发性\n- 表达:清晰、分层,不引入无关内容\n- 避免空洞的摘要:每个声明必须明确由摘要中的事实、数值数据或方法细节支持\n- 包含分析深度:在相关时提供研究之间的比较、矛盾或确认\n\n## 格式说明:\n- 使用清晰的章节标题(##、###)输出纯文本,除非必要否则不使用项目符号\n- 避免没有摘要证据的声明\n- 在数字和单位之间添加空格\n- 对物理量使用斜体,对向量和材料名称使用粗体\n- 在首次使用时定义缩写\n- 使用 [1]、[2]、[3] 格式引用来源\n\n## 报告结构:\n1. **引言**:关键概念的专业定义、近年来的主要突破、仍未解决的主要挑战\n2. **主要内容**:整合来自多个摘要和数据库条目的发现\n3. **结论**:总结关键发现、当前研究的局限性、未来研究方向\n", - - "search-papers-enhanced": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 知识使用限制:\n- 所有事实信息(数据、结论、定义、实验结果等)必须来自工具调用结果;\n- 您可以使用自己的知识来组织、解释和推理这些事实,但不能凭空添加信息。\n- 引用时,尽量直接使用原始表达。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头,例如“当然,我将...”、“好的,我将...”或“我现在将分析...”。相反,直接输出实质性内容。\n- 避免没有论文证据的声明,例如第一个、最好的、最受欢迎的等。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n\n# 内部大纲协议(大纲不得显示):\n- 在开始时,内部构建一个详细的分层大纲,至少包含 3 个主要章节和多个子章节。除非明确要求,否则不得向用户显示此大纲。\n- 大纲应大致从简要解释所涉及的关键术语、基于摘要声明的主要研究空白开始。\n- 您必须使用此内部大纲来指导一个长、全面和完全结构化的最终输出。\n", - - "web-search": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头。\n- 避免没有证据的声明。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n", - - "extract_info_from_webpage": "您是一位学术情报专家,其职责是整合、筛选、分析和评估科学信息,以支持精确的研究导向决策。\n\n# 语言要求\n输入查询应始终使用**英语**以确保专业性。\n响应应使用 {{target_language}}。\n\n# 必须遵循这些先验知识:\n(包含材料命名规则等先验知识)\n\n# 格式说明:\n- 输出纯文本,除非必要或用户要求,否则不使用项目符号。\n- 避免以任何前言、致谢、确认或元陈述开头。\n- 避免没有证据的声明。\n\n# 输出长度和覆盖要求:\n- 您必须始终生成详尽、扩展和完全阐述的输出。\n", -} - -def main(): - json_file = project_root / "agents-tool.json" - - # Read JSON - print(f"Reading {json_file}...") - with open(json_file, "r", encoding="utf-8") as f: - data = json.load(f) - - # Update summary_cn for each tool - updated_count = 0 - for tool in data["tools"]: - name = tool.get("name", "") - if name in translations: - tool["summary_cn"] = translations[name] - updated_count += 1 - print(f" ✓ Updated {name}") - - # Save updated JSON - print(f"\nSaving updated JSON...") - with open(json_file, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - print(f"✓ Successfully updated {updated_count} summaries") - print(f"✓ Updated {json_file}") - -if __name__ == "__main__": - main() - From f1f592141d462e202e2c0128f35611f5030d7181 Mon Sep 17 00:00:00 2001 From: styxhuang Date: Fri, 6 Feb 2026 14:52:31 +0800 Subject: [PATCH 03/10] update tools.json --- agents-tool.json | 152 +++++++++--------- .../matmaster_agent/sub_agents/tools_opt.py | 16 +- scripts/generate_agents_tool_json.py | 4 + 3 files changed, 92 insertions(+), 80 deletions(-) diff --git a/agents-tool.json b/agents-tool.json index fef483d3..49ba2579 100644 --- a/agents-tool.json +++ b/agents-tool.json @@ -703,7 +703,7 @@ }, "description_cn": { "工具简介": "利用遗传算法对多组分材料进行成分优化,以匹配特定的目标性能。", - "使用场景": "搜索针对目标性质的优化成分。 组分优化", + "使用场景": "搜索针对目标性质的优化成分。", "输入": "目标性质、可选的初始成分或结构模板、约束条件和代理模型。", "输出": "优化后的成分。", "注意事项": "无法构建掺杂结构;需要代理模型。", @@ -719,9 +719,9 @@ "self_check": false, "args_setting": null, "server": { - "test": "http://pfmx1355864.bohrium.tech:50002/sse", - "uat": "http://pfmx1355864.bohrium.tech:50002/sse", - "prod": "https://dart-uuid1754393230.app-space.dplink.cc/sse?token=0480762b8539410c919723276c2c05fc" + "test": "http://pfmx1355864.bohrium.tech:50002/mcp", + "uat": "http://pfmx1355864.bohrium.tech:50002/mcp", + "prod": "https://dart-uuid1754393230.appspace.bohrium.com/mcp?token=b3a955c99823427683843616328023d8" } }, { @@ -737,7 +737,7 @@ }, "description_cn": { "工具简介": "构建凸包图。", - "使用场景": "评估材料的热力学稳定性。 凸包", + "使用场景": "评估材料的热力学稳定性。", "输入": "材料结构。", "输出": "凸包、稳定相。", "注意事项": "仅适用于通用材料。", @@ -753,8 +753,8 @@ "self_check": false, "args_setting": null, "server": { - "test": "http://root@mllo1368252.bohrium.tech:50004/sse", - "uat": "http://root@mllo1368252.bohrium.tech:50004/sse", + "test": "https://convexhull-test-uuid1769078392.appspace.bohrium.com/sse?token=f45ef610fbbd446eb154f024dda3540c", + "uat": "https://convexhull-test-uuid1769078392.appspace.bohrium.com/sse?token=f45ef610fbbd446eb154f024dda3540c", "prod": "https://convexhull-uuid1764213120.appspace.bohrium.com/sse?token=1ea4a0b8cd1e497585680680eccdae8b" } }, @@ -771,7 +771,7 @@ }, "description_cn": { "工具简介": "向OPTIMADE提供者发送过滤字符串进行结构搜索。", - "使用场景": "用于灵活的组成/化学式查询,无需空间群或带隙约束。 数据库搜索", + "使用场景": "用于灵活的组成/化学式查询,无需空间群或带隙约束。", "输入": "OPTIMADE过滤字符串。", "输出": "匹配的结构。", "注意事项": "完整的OPTIMADE过滤语言;并行查询。", @@ -809,7 +809,7 @@ }, "description_cn": { "工具简介": "通过空间群编号搜索结构,可附加可选过滤器。", - "使用场景": "当用户指定空间群编号或原型结构时。 数据库搜索", + "使用场景": "当用户指定空间群编号或原型结构时。", "输入": "空间群编号和OPTIMADE过滤字符串。", "输出": "匹配空间群的结构。", "注意事项": "提供者特定的空间群过滤器。", @@ -847,7 +847,7 @@ }, "description_cn": { "工具简介": "通过带隙范围搜索结构,可附加可选过滤器。", - "使用场景": "当用户指定带隙范围时。 数据库搜索", + "使用场景": "当用户指定带隙范围时。", "输入": "带隙范围和OPTIMADE过滤字符串。", "输出": "带隙在范围内的结构。", "注意事项": "提供者特定的带隙过滤器。", @@ -885,7 +885,7 @@ }, "description_cn": { "工具简介": "从Bohrium Public数据库检索晶体结构。", - "使用场景": "用于化学式、元素、空间群、原子数、形成能、带隙查询。 数据库搜索", + "使用场景": "用于化学式、元素、空间群、原子数、形成能、带隙查询。", "输入": "化学式、元素等过滤器。", "输出": "CIF或JSON格式的结构。", "注意事项": "不支持逻辑表达式;比OPTIMADE更快。", @@ -923,7 +923,7 @@ }, "description_cn": { "工具简介": "从OpenLAM数据库检索晶体结构。", - "使用场景": "当查询OpenLAM特定材料或基于时间的过滤器时。 数据库搜索", + "使用场景": "当查询OpenLAM特定材料或基于时间的过滤器时。", "输入": "化学式、能量范围、提交时间过滤器。", "输出": "CIF或JSON格式的结构。", "注意事项": "不支持空间群、带隙、元素列表或逻辑过滤器。", @@ -961,7 +961,7 @@ }, "description_cn": { "工具简介": "对MOF数据库执行SQL查询。", - "使用场景": "用于复杂的MOF查询,包括多表连接和统计分析。 数据库搜索", + "使用场景": "用于复杂的MOF查询,包括多表连接和统计分析。", "输入": "SQL查询字符串。", "输出": "查询结果。", "注意事项": "特定于MOF;支持高级SQL。", @@ -1251,7 +1251,7 @@ }, "description_cn": { "工具简介": "分析电镜图像中的颗粒与形貌。", - "使用场景": "有待分析的 TEM/SEM 图像时使用。 电镜", + "使用场景": "有待分析的 TEM/SEM 图像时使用。", "输入": "电镜图像(.tif、.tiff、.png、.jpeg、.jpg)。", "输出": "检测到的颗粒、形貌及几何性质。", "注意事项": "仅支持 .tif、.tiff、.png、.jpeg、.jpg 格式。", @@ -1285,7 +1285,7 @@ }, "description_cn": { "工具简介": "从成分计算高熵合金参数,如 VEC、delta、Hmix、Smix、Lambda。", - "使用场景": "当需要高熵合金热力学参数时使用。 高熵合金", + "使用场景": "当需要高熵合金热力学参数时使用。", "输入": "高熵合金化学式。", "输出": "VEC、delta、Hmix、Smix、Lambda。", "注意事项": "特定于 HEA。", @@ -1319,7 +1319,7 @@ }, "description_cn": { "工具简介": "预测高熵合金成分是否形成固溶体及其晶体结构。", - "使用场景": "当需要高熵合金的相预测时使用。 高熵合金", + "使用场景": "当需要高熵合金的相预测时使用。", "输入": "高熵合金成分。", "输出": "固溶体形成和晶体结构。", "注意事项": "使用预训练的机器学习模型。", @@ -1353,7 +1353,7 @@ }, "description_cn": { "工具简介": "通过调节单一元素的摩尔比来生成一系列高熵合金成分。", - "使用场景": "用于高熵合金成分设计和优化。 高熵合金", + "使用场景": "用于高熵合金成分设计和优化。", "输入": "初始高熵合金成分。", "输出": "一系列修改后的成分。", "注意事项": "一次调整一个元素。", @@ -1387,7 +1387,7 @@ }, "description_cn": { "工具简介": "从 PDF 文献中提取高熵合金数据。", - "使用场景": "当需要从论文中获取高熵合金数据时使用。 高熵合金", + "使用场景": "当需要从论文中获取高熵合金数据时使用。", "输入": "PDF 文献。", "输出": "成分、合成、微观结构、性质。", "注意事项": "仅支持 PDF 格式。", @@ -1421,7 +1421,7 @@ }, "description_cn": { "工具简介": "从 arXiv 搜索并下载高熵合金论文。", - "使用场景": "当需要高熵合金文献时使用。 高熵合金", + "使用场景": "当需要高熵合金文献时使用。", "输入": "标题、作者或关键词。", "输出": "搜索结果和下载的论文。", "注意事项": "仅支持 arXiv。", @@ -1459,7 +1459,7 @@ }, "description_cn": { "工具简介": "计算高熵合金 中二元对的形成能和相图。", - "使用场景": "当需要高熵合金的二元相信息时使用。 高熵合金", + "使用场景": "当需要高熵合金的二元相信息时使用。", "输入": "高熵合金化学体系。", "输出": "形成能和凸包。", "注意事项": "仅支持二元对。", @@ -1493,7 +1493,7 @@ }, "description_cn": { "工具简介": "基于后端工作流中可用的热力学/能量数据,为指定的 A–B 体系生成二元相图。", - "使用场景": "当你需要快速了解二元合金或化合物体系在不同成分下,有哪些稳定相(Stable phases)或竞争相(Competing phases)时。 高熵合金", + "使用场景": "当你需要快速了解二元合金或化合物体系在不同成分下,有哪些稳定相(Stable phases)或竞争相(Competing phases)时。", "输入": "元素对(A, B)和可选的温度/压力范围;可访问的形成能/热力学数据集或计算路径。", "输出": "相图原始数据(稳定相、结线/共轭线 (Tie-lines)、成分范围)以及可直接绘图的展示结果。", "注意事项": "如果没有可用的数据集/计算路径,工具将返回错误; 结果依赖于数据覆盖范围和模型假设。", @@ -1527,7 +1527,7 @@ }, "description_cn": { "工具简介": "使用自然语言查询高熵合金(HEA)研究的文献知识库。", - "使用场景": "当您需要对高熵合金相关主题进行深入的文献分析时。 高熵合金", + "使用场景": "当您需要对高熵合金相关主题进行深入的文献分析时。", "输入": "关于高熵合金的自然语言问题。", "输出": "通过向量相似性搜索返回的文献摘要。", "注意事项": "主题仅限于高熵合金。", @@ -1604,7 +1604,7 @@ }, "description_cn": { "工具简介": "检索科学文献。", - "使用场景": "按主题查找相关研究。 文献", + "使用场景": "按主题查找相关研究。", "输入": "主题关键词。", "输出": "文献摘要、相关论文摘要信息及论文链接。", "注意事项": "仅进行文献检索;不下载学位论文等文件(.pdf、.doc 等)。", @@ -1620,7 +1620,7 @@ "summary_prompt": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools returns a list of papers with metadata. You need to scan through the papers and organize them with as broad coverage as possible.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening;\n- Expression: Clear, layered, without introducing irrelevant content, try not to use analogies or overly complex concepts, but rather explain from first principles;\n- Output should avoid hollow summaries; each claim must be explicitly supported by facts, numerical data, or methodological details extracted from the papers;\n- Include comparisons, contradictions, or confirmations between studies whenever relevant to give analytical depth.\n- If the user's question is open-ended, provide a thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships);\n 2. Quantitative or semi-quantitative results whenever available (including material names, numerical data, performance metrics, space groups, etc.);\n 3. Any inconsistencies, limitations, or gaps in the current research.\n 4. Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary.\n- When the user requests querying or searching, you should consider the relevance and irrelevance between the search results and user needs, using positive and negative thinking to ensure the search results are highly relevant to user needs. You should also analyze the relevance and irrelevance when answering.\n- If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n\nThe overall abstract should be brief with less than 3 sentences, including and only including:\n1) Professional definition of the key concepts involved.\n2) Key breakthroughs in recent years.\n3) Main challenges that remain unsolved.\n\nFor joints between each section or subsection, avoid using bullets or numbering.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on spefic topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", "summary_cn": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools returns a list of papers with metadata. You need to scan through the papers and organize them with as broad coverage as possible.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening;\n- Expression: Clear, layered, without introducing irrelevant content, try not to use analogies or overly complex concepts, but rather explain from first principles;\n- Output should avoid hollow summaries; each claim must be explicitly supported by facts, numerical data, or methodological details extracted from the papers;\n- Include comparisons, contradictions, or confirmations between studies whenever relevant to give analytical depth.\n- If the user's question is open-ended, provide a thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships);\n 2. Quantitative or semi-quantitative results whenever available (including material names, numerical data, performance metrics, space groups, etc.);\n 3. Any inconsistencies, limitations, or gaps in the current research.\n 4. Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary.\n- When the user requests querying or searching, you should consider the relevance and irrelevance between the search results and user needs, using positive and negative thinking to ensure the search results are highly relevant to user needs. You should also analyze the relevance and irrelevance when answering.\n- If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n\nThe overall abstract should be brief with less than 3 sentences, including and only including:\n1) Professional definition of the key concepts involved.\n2) Key breakthroughs in recent years.\n3) Main challenges that remain unsolved.\n\nFor joints between each section or subsection, avoid using bullets or numbering.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on spefic topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", "self_check": false, - "args_setting": "\n If not specified, apply start_time=2020-01-01, end_time=2026-01-27, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise.\n\n Must be aware of these prior knowledge:\n - \n### KNOWLEDGE RETRIEVAL STRATEGY: SYNONYM EXPANSION\nYou are equipped with a \"Material Synonym Registry\". When a user asks about a specific material, check if it falls under any known naming conflicts or aliases.\n\n**Registry Rules:**\n- If user mentions ZIF-8or MAF-4or Zn(MeIm)2, use preferred name 'MAF-4'. **Explicitly output this warning** at appropriate place: \"Important: Althogh the structure commonly known as 'ZIF-8' was first reported by **Xiao-Ming Chen's (陈小明) group** ([maf4]), and renamed as MAF-4.\"\n- If user mentions DPA-1or DPA-2or DPA-3, use preferred name 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)'. **Explicitly output this warning** at appropriate place: \"Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).\"\n\n\n**Instructions:**\n1. **Identify**: Check if the user's query contains any keywords from the registry.\n2. **Expand**: If a match is found, you MUST use the explicitly defined `search_query` logic (e.g., OR logic) to ensure no literature is missed.\n - *Example:* If the user asks for \"ZIF-8\", do NOT just search \"ZIF-8\". Search \"('ZIF-8' OR 'MAF-4')\" to capture all priority papers.\n3. **Merge**: Treat results from different aliases as the same entity.\n\n ", + "args_setting": "\n If not specified, apply start_time=2020-01-01, end_time=2026-01-29, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise.\n\n Must be aware of these prior knowledge:\n - \n### KNOWLEDGE RETRIEVAL STRATEGY: SYNONYM EXPANSION\nYou are equipped with a \"Material Synonym Registry\". When a user asks about a specific material, check if it falls under any known naming conflicts or aliases.\n\n**Registry Rules:**\n- If user mentions ZIF-8or MAF-4or Zn(MeIm)2, use preferred name 'MAF-4'. **Explicitly output this warning** at appropriate place: \"Important: Althogh the structure commonly known as 'ZIF-8' was first reported by **Xiao-Ming Chen's (陈小明) group** ([maf4]), and renamed as MAF-4.\"\n- If user mentions DPA-1or DPA-2or DPA-3, use preferred name 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)'. **Explicitly output this warning** at appropriate place: \"Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).\"\n\n\n**Instructions:**\n1. **Identify**: Check if the user's query contains any keywords from the registry.\n2. **Expand**: If a match is found, you MUST use the explicitly defined `search_query` logic (e.g., OR logic) to ensure no literature is missed.\n - *Example:* If the user asks for \"ZIF-8\", do NOT just search \"ZIF-8\". Search \"('ZIF-8' OR 'MAF-4')\" to capture all priority papers.\n3. **Merge**: Treat results from different aliases as the same entity.\n\n ", "server": { "test": "http://bohrium-mcp-internal.dp.tech:11003/sse", "uat": "http://bohrium-mcp-internal.dp.tech:11003/sse", @@ -1632,17 +1632,17 @@ "tool_id": "020-ORCHESTR-001", "name": "orchestrate_input", "description": { - "What it does": "Generate input scripts for simulation engines (Currently supports: LAMMPS).", + "What it does": "Generate input scripts for simulation/calculation engines. Supports: LAMMPS, ABACUS, VASP, QE (Quantum ESPRESSO), Psi4, Gaussian, ORCA.", "When to use": "Create input from description.", - "Input": "engine_type=\"lammps\", natural language task.", + "Input": "structural information; engine_type (one of: lammps, abacus, vasp, qe, psi4, gaussian, orca), natural language task.", "Output": "Input script content.", "Notes": "Script generation only.", "Costs": "Low." }, "description_cn": { - "工具简介": "为模拟引擎生成输入脚本(当前支持:LAMMPS)。", + "工具简介": "为模拟引擎生成输入脚本(当前支持:LAMMPS, ABACUS, VASP, QE, Psi4, Gaussian, ORCA)。", "使用场景": "根据描述创建输入文件。", - "输入": "engine_type=\"lammps\",自然语言任务描述。", + "输入": "engine_type=\"lammps\"(或者以下其中一种:abacus, vasp, qe, psi4, gaussian, orca),自然语言任务描述。", "输出": "输入脚本内容。", "注意事项": "仅生成脚本,不执行模拟。", "成本": "低。" @@ -1650,7 +1650,9 @@ "belonging_agent": "LAMMPS_agent", "scenes": [ "MOLECULAR_DYNAMICS", - "LAMMPS" + "LAMMPS", + "ABACUS", + "UNIVERSAL" ], "alternative_tools": [], "summary_prompt": "", @@ -1886,7 +1888,7 @@ }, "description_cn": { "工具简介": "获取钙钛矿太阳能电池数据库的完整模式和描述信息。", - "使用场景": "在查询钙钛矿数据库之前使用。 钙钛矿", + "使用场景": "在查询钙钛矿数据库之前使用。", "输入": "无。", "输出": "数据库模式和描述。", "注意事项": "特定于钙钛矿数据库。", @@ -1920,7 +1922,7 @@ }, "description_cn": { "工具简介": "对钙钛矿太阳能电池数据库执行 SQL 查询并返回前 k 行。", - "使用场景": "获取数据库架构(Schema)信息后,需要查询钙钛矿数据库时使用。 钙钛矿", + "使用场景": "获取数据库架构(Schema)信息后,需要查询钙钛矿数据库时使用。", "输入": "SQL 查询语句。", "输出": "查询结果的前 k 行。", "注意事项": "仅限于前 k 行。", @@ -1954,7 +1956,7 @@ }, "description_cn": { "工具简介": "使用添加剂分子列表预测添加剂对钙钛矿 PCE 的影响。", - "使用场景": "当需要添加剂的 PCE 变化预测时使用。 钙钛矿", + "使用场景": "当需要添加剂的 PCE 变化预测时使用。", "输入": "添加剂分子列表。", "输出": "预测的 PCE 变化。", "注意事项": "特定于钙钛矿添加剂。", @@ -1988,7 +1990,7 @@ }, "description_cn": { "工具简介": "分析物理吸附仪器报告。", - "使用场景": "有气体吸附数据需要分析时使用。 物理吸附", + "使用场景": "有气体吸附数据需要分析时使用。", "输入": "仪器报告。", "输出": "分析后的数据。", "注意事项": "仅针对物理吸附。", @@ -2056,7 +2058,7 @@ }, "description_cn": { "工具简介": "从 Uni-ELF 推理系统的配置设置中获取目标信息。", - "使用场景": "当需要 Uni-ELF 的配置信息时使用。 聚合物", + "使用场景": "当需要 Uni-ELF 的配置信息时使用。", "输入": "无。", "输出": "全面的配置信息和可用的目标模型映射。", "注意事项": "特定于 Uni-ELF 系统。", @@ -2072,9 +2074,9 @@ "self_check": false, "args_setting": null, "server": { - "test": "", - "uat": "", - "prod": "http://efpl1193834.bohrium.tech:50002/sse" + "test": "http://efpl1193834.bohrium.tech:50001/sse", + "uat": "http://efpl1193834.bohrium.tech:50002/sse", + "prod": null } }, { @@ -2090,7 +2092,7 @@ }, "description_cn": { "工具简介": "对配方输入运行 Uni-ELF 推理以预测性质。", - "使用场景": "当需要配方的性质预测时使用。 聚合物", + "使用场景": "当需要配方的性质预测时使用。", "输入": "配方的组分和比例。", "输出": "预测的性质。", "注意事项": "支持混合物和伪配方。", @@ -2106,9 +2108,9 @@ "self_check": false, "args_setting": null, "server": { - "test": "", - "uat": "", - "prod": "http://efpl1193834.bohrium.tech:50002/mcp" + "test": "http://efpl1193834.bohrium.tech:50001/sse", + "uat": "http://efpl1193834.bohrium.tech:50002/sse", + "prod": null } }, { @@ -2124,7 +2126,7 @@ }, "description_cn": { "工具简介": "使用自然语言查询聚合物研究的文献知识库。", - "使用场景": "当您需要对聚合物相关主题进行深入的文献分析时。 聚合物", + "使用场景": "当您需要对聚合物相关主题进行深入的文献分析时。", "输入": "关于聚合物的自然语言问题。", "输出": "通过向量相似性搜索返回的文献摘要。", "注意事项": "主题仅限于聚合物。", @@ -2331,7 +2333,7 @@ }, "description_cn": { "工具简介": "计算反应势能剖面。", - "使用场景": "用于有机反应分析。 反应", + "使用场景": "用于有机反应分析。", "输入": "反应输入。", "输出": "反应势能剖面(展示反应坐标与能量关系的剖面图)。", "注意事项": "仅针对化学反应体系;不适用于通用的结构搜索或非反应性计算。", @@ -2365,7 +2367,7 @@ }, "description_cn": { "工具简介": "查询不锈钢研究的文献知识库。", - "使用场景": "当您需要对不锈钢相关主题进行深入的文献分析时。 不锈钢", + "使用场景": "当您需要对不锈钢相关主题进行深入的文献分析时。", "输入": "关于不锈钢的自然语言问题。", "输出": "通过向量搜索返回的文献摘要。", "注意事项": "主题仅限于不锈钢。", @@ -2402,7 +2404,7 @@ }, "description_cn": { "工具简介": "使用神经网络预测不锈钢的极限抗拉强度。", - "使用场景": "当您需要基于化学成分预测抗拉强度时。 不锈钢", + "使用场景": "当您需要基于化学成分预测抗拉强度时。", "输入": "化学配方列表。", "输出": "预测的极限抗拉强度值列表(单位:MPa)。", "注意事项": "仅适用于不锈钢;不返回文件。", @@ -2439,7 +2441,7 @@ }, "description_cn": { "工具简介": "利用 CALYPSO 进行全局结构搜索,从而生成一系列候选晶体结构。", - "使用场景": "当需要探索成分的同质异形体时使用。 结构生成", + "使用场景": "当需要探索成分的同质异形体时使用。", "输入": "有效的元素输入。", "输出": "POSCAR 文件。", "注意事项": "需要下游弛豫。", @@ -2473,7 +2475,7 @@ }, "description_cn": { "工具简介": "基于条件属性和空间群生成晶体结构。", - "使用场景": "当需要具有特定性质的结构时使用。 结构生成,条件生成", + "使用场景": "当需要具有特定性质的结构时使用。", "输入": "目标性质(带隙、模量、Tc、声速);空间群。", "输出": "生成的结构。", "注意事项": "仅支持模型预训练过的特定性质;必须指定空间群作为生成的约束条件。", @@ -2508,7 +2510,7 @@ }, "description_cn": { "工具简介": "从结构文件创建超胞扩充。", - "使用场景": "当你需要构建更大尺寸的单元以进行模拟时。 结构生成", + "使用场景": "当你需要构建更大尺寸的单元以进行模拟时。", "输入": "结构文件。", "输出": "超胞结构。", "注意事项": "仅支持扩展,不支持缩减。", @@ -2543,7 +2545,7 @@ }, "description_cn": { "工具简介": "为简单堆积类型和化合物构建体相结构。", - "使用场景": "用于标准晶体结构,如 sc、fcc、bcc、hcp、岩盐等。 结构生成", + "使用场景": "用于标准晶体结构,如 sc、fcc、bcc、hcp、岩盐等。", "输入": "元素符号或化学式;晶格常数。", "输出": "晶体结构文件。", "注意事项": "仅限于简单结构;不支持复杂晶体。", @@ -2582,7 +2584,7 @@ }, "description_cn": { "工具简介": "从体相结构构建表面结构。", - "使用场景": "当需要表面模型进行计算时使用。 结构生成", + "使用场景": "当需要表面模型进行计算时使用。", "输入": "体相结构文件;Miller 指数。", "输出": "表面结构文件。", "注意事项": "需要体相输入;添加真空层。", @@ -2617,7 +2619,7 @@ }, "description_cn": { "工具简介": "通过在表面上放置分子来构建表面-吸附物结构。", - "使用场景": "用于吸附研究。 结构生成", + "使用场景": "用于吸附研究。", "输入": "表面结构文件和吸附质结构文件。", "输出": "组合结构文件。", "注意事项": "仅支持单吸附质放置。", @@ -2652,7 +2654,7 @@ }, "description_cn": { "工具简介": "通过堆叠两个表面结构来构建异质界面。", - "使用场景": "用于界面研究。 结构生成", + "使用场景": "用于界面研究。", "输入": "两个表面结构文件。", "输出": "界面结构文件。", "注意事项": "基础的应变 (Strain) 检查。", @@ -2722,7 +2724,7 @@ }, "description_cn": { "工具简介": "通过指定空间群和 Wyckoff 位置来构建晶体结构。", - "使用场景": "用于自定义晶体结构。 结构生成", + "使用场景": "用于自定义晶体结构。", "输入": "空间群;带坐标的 Wyckoff 位置。", "输出": "晶体结构文件。", "注意事项": "需要对称性知识。", @@ -2761,7 +2763,7 @@ }, "description_cn": { "工具简介": "从 SMILES 字符串构建 3D 分子结构。", - "使用场景": "当您有 SMILES 并需要 3D 坐标时使用。 结构生成", + "使用场景": "当您有 SMILES 并需要 3D 坐标时使用。", "输入": "SMILES 字符串。", "输出": "分子结构文件。", "注意事项": "单个构象生成。", @@ -2796,7 +2798,7 @@ }, "description_cn": { "工具简介": "通过替换原子生成掺杂晶体结构。", - "使用场景": "用于掺杂研究。 结构生成", + "使用场景": "用于掺杂研究。", "输入": "主体结构;掺杂物种和浓度。", "输出": "掺杂结构文件。", "注意事项": "随机替换;建议使用超胞。", @@ -2831,7 +2833,7 @@ }, "description_cn": { "工具简介": "通过基于空间关系移除特定分子簇来创建缺陷结构。", - "使用场景": "用于通过基于空间聚类移除特定分子单元在分子晶体中创建空位缺陷。 结构生成", + "使用场景": "用于通过基于空间聚类移除特定分子单元在分子晶体中创建空位缺陷。", "输入": "分子晶体结构文件;(可选)目标移除物种、起始分子索引。", "输出": "缺陷结构文件。", "注意事项": "专为分子晶体设计。该功能确保移除的是整个分子单元,而非晶格中的孤立原子。", @@ -2866,7 +2868,7 @@ }, "description_cn": { "工具简介": "在周期性盒子 (Periodic Box) 中生成非晶态/无定形分子结构。", - "使用场景": "用于非晶材料模拟。 结构生成", + "使用场景": "用于非晶材料模拟。", "输入": "分子结构;盒子尺寸/密度/数量。", "输出": "非晶结构文件。", "注意事项": "具备基础的防重叠功能,但生成的结构仍需进行后续的结构弛豫或分子动力学平衡。", @@ -3009,7 +3011,7 @@ }, "description_cn": { "工具简介": "优化超导结构。", - "使用场景": "弛豫超导体几何结构。 超导体", + "使用场景": "弛豫超导体几何结构。", "输入": "结构文件(CIF/POSCAR)。", "输出": "优化后的结构。", "注意事项": "仅进行几何优化。", @@ -3043,7 +3045,7 @@ }, "description_cn": { "工具简介": "计算焓和稳定性。", - "使用场景": "筛选超导体稳定性。 超导体", + "使用场景": "筛选超导体稳定性。", "输入": "结构候选物。", "输出": "焓、凸包、稳定相。", "注意事项": "仅限超导体。", @@ -3079,7 +3081,7 @@ }, "description_cn": { "工具简介": "预测超导 Tc。", - "使用场景": "估算临界温度。 超导体", + "使用场景": "估算临界温度。", "输入": "材料结构。", "输出": "Tc 预测。", "注意事项": "仅限 DPA 模型。", @@ -3115,7 +3117,7 @@ }, "description_cn": { "工具简介": "筛选多个超导体。", - "使用场景": "比较 Tc 和稳定性。 超导体", + "使用场景": "比较 Tc 和稳定性。", "输入": "候选物列表。", "输出": "排序的 Tc 和稳定性。", "注意事项": "仅限多个候选物。", @@ -3149,7 +3151,7 @@ }, "description_cn": { "工具简介": "使用自然语言查询固态电解质(SSE)研究的文献知识库。", - "使用场景": "当您需要对固态电解质相关主题进行深入的文献分析时。 固态电解质", + "使用场景": "当您需要对固态电解质相关主题进行深入的文献分析时。", "输入": "关于固态电解质的自然语言问题。", "输出": "通过向量相似性搜索返回的文献摘要。", "注意事项": "主题仅限于固态电解质。", @@ -3186,7 +3188,7 @@ }, "description_cn": { "工具简介": "预测热电性质。", - "使用场景": "估算带隙、塞贝克系数等。 热电", + "使用场景": "估算带隙、塞贝克系数等。", "输入": "材料结构文件。", "输出": "带隙、塞贝克系数、功率因子、模量。", "注意事项": "暂不支持热导率的预测。", @@ -3220,7 +3222,7 @@ }, "description_cn": { "工具简介": "在压力下优化。", - "使用场景": "弛豫热电结构。 热电", + "使用场景": "弛豫热电结构。", "输入": "结构、压力。", "输出": "优化后的结构。", "注意事项": "仅限热电材料。", @@ -3254,7 +3256,7 @@ }, "description_cn": { "工具简介": "计算压力下的焓。", - "使用场景": "筛选热电稳定性。 热电", + "使用场景": "筛选热电稳定性。", "输入": "候选物、压力。", "输出": "焓、凸包。", "注意事项": "仅限热电材料。", @@ -3288,7 +3290,7 @@ }, "description_cn": { "工具简介": "筛选热电候选物。", - "使用场景": "识别有前景的材料。 热电", + "使用场景": "识别有前景的材料。", "输入": "多个结构。", "输出": "排序的热电性质。", "注意事项": "需要多个输入。", @@ -3458,7 +3460,7 @@ }, "description_cn": { "工具简介": "从文件中提取结构信息。", - "使用场景": "分析晶体/分子结构文件。 通用场景", + "使用场景": "分析晶体/分子结构文件。", "输入": "结构文件路径。", "输出": "化学式、空间群、晶格、原子。", "注意事项": "不进行修改;只读。", @@ -3495,7 +3497,7 @@ }, "description_cn": { "工具简介": "从文件中提取分子结构信息。", - "使用场景": "分析分子结构文件。 通用场景", + "使用场景": "分析分子结构文件。", "输入": "分子文件路径。", "输出": "化学式、原子、键、性质。", "注意事项": "不进行修改;只读。", @@ -3532,7 +3534,7 @@ }, "description_cn": { "工具简介": "执行网页搜索,回答 what、why、how 类问题。", - "使用场景": "进行简明的事实查询或解释性检索。 通用场景", + "使用场景": "进行简明的事实查询或解释性检索。", "输入": "搜索查询词。", "输出": "URL、标题、摘要片段。", "注意事项": "不支持指令型查询;如需提取页面内容可后续调用 extract_info_from_webpage。", @@ -3567,7 +3569,7 @@ }, "description_cn": { "工具简介": "从网页 URL 提取关键信息。", - "使用场景": "需要从网页获取科学事实、数据或结论时使用。 通用场景", + "使用场景": "需要从网页获取科学事实、数据或结论时使用。", "输入": "网页 URL。", "输出": "以文本形式呈现的提取结果。", "注意事项": "仅返回文本,不支持生成任何格式的文件。", @@ -3602,7 +3604,7 @@ }, "description_cn": { "工具简介": "解析各类文件内容并提取关键信息。", - "使用场景": "需要从文件中提取信息、且无专用提取工具时使用。 通用工具", + "使用场景": "需要从文件中提取信息、且无专用提取工具时使用。", "输入": "文件(TXT、PDF、Word、Excel、PNG、JPG 等)。", "输出": "以文本形式呈现的提取信息。", "注意事项": "仅返回文本,不支持生成任何格式的文件。", @@ -3719,8 +3721,8 @@ "self_check": false, "args_setting": null, "server": { - "test": "http://root@pkfz1410356.bohrium.tech:50001/sse", - "uat": "http://root@pkfz1410356.bohrium.tech:50001/sse", + "test": "https://f0f037ca00652ac8d5509652c91f1332.appspace.bohrium.com/sse?token=cfb9892682874677953eed08e92b45fe", + "uat": "https://1128e9e0f1fc927bb885835e0e7a6e48.appspace.bohrium.com/sse?token=cfb9892682874677953eed08e92b45fe", "prod": "http://root@pkfz1410356.bohrium.tech:50001/sse" } }, @@ -3753,8 +3755,8 @@ "self_check": false, "args_setting": null, "server": { - "test": "http://root@pkfz1410356.bohrium.tech:50001/sse", - "uat": "http://root@pkfz1410356.bohrium.tech:50001/sse", + "test": "https://f0f037ca00652ac8d5509652c91f1332.appspace.bohrium.com/sse?token=cfb9892682874677953eed08e92b45fe", + "uat": "https://1128e9e0f1fc927bb885835e0e7a6e48.appspace.bohrium.com/sse?token=cfb9892682874677953eed08e92b45fe", "prod": "http://root@pkfz1410356.bohrium.tech:50001/sse" } }, diff --git a/agents/matmaster_agent/sub_agents/tools_opt.py b/agents/matmaster_agent/sub_agents/tools_opt.py index fdc3a3c5..5c51c652 100644 --- a/agents/matmaster_agent/sub_agents/tools_opt.py +++ b/agents/matmaster_agent/sub_agents/tools_opt.py @@ -2985,11 +2985,17 @@ }, 'orchestrate_input': { 'belonging_agent': LAMMPS_AGENT_NAME, - 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS], + 'scene': [ + SceneEnum.MOLECULAR_DYNAMICS, + SceneEnum.LAMMPS, + SceneEnum.ABACUS, + SceneEnum.UNIVERSAL, + ], 'description': ( - 'What it does: Generate input scripts for simulation engines (Currently supports: LAMMPS).\n' + 'What it does: Generate input scripts for simulation/calculation engines. ' + 'Supports: LAMMPS, ABACUS, VASP, QE (Quantum ESPRESSO), Psi4, Gaussian, ORCA.\n' 'When to use: Create input from description.\n' - 'Prerequisites / Inputs: engine_type="lammps", natural language task.\n' + 'Prerequisites / Inputs: structural information; engine_type (one of: lammps, abacus, vasp, qe, psi4, gaussian, orca), natural language task.\n' 'Outputs: Input script content.\n' 'Cannot do / Limits: Script generation only.\n' 'Cost / Notes: Low.' @@ -3001,11 +3007,11 @@ 'belonging_agent': LAMMPS_AGENT_NAME, 'scene': [SceneEnum.MOLECULAR_DYNAMICS, SceneEnum.LAMMPS], 'description': ( - '功能:为模拟引擎生成输入脚本(当前支持:LAMMPS)。\n' + '功能:为模拟引擎生成输入脚本(当前支持:LAMMPS, ABACUS, VASP, QE, Psi4, Gaussian, ORCA)。\n' '使用场景:根据描述创建输入文件。\n' '分子动力学,LAMMPS\n' '使用方法:\n' - '1. 输入:engine_type="lammps",自然语言任务描述。\n' + '1. 输入:engine_type="lammps"(或者以下其中一种:abacus, vasp, qe, psi4, gaussian, orca),自然语言任务描述。\n' '2. 输出:输入脚本内容。\n' '3. 注意事项:仅生成脚本,不执行模拟。\n' '4. 成本/备注:低。' diff --git a/scripts/generate_agents_tool_json.py b/scripts/generate_agents_tool_json.py index 3dce0091..df8248d9 100644 --- a/scripts/generate_agents_tool_json.py +++ b/scripts/generate_agents_tool_json.py @@ -240,6 +240,10 @@ def parse_description_cn(description_cn: str) -> dict: elif current_key == "使用场景" and (',' in line or line.isupper() or line.isdigit()): # Skip tag lines like "ABACUS,空位形成能" that appear after "使用场景:" continue + elif current_key == "使用场景" and not line.startswith(('功能:', '使用场景:', '使用方法:', '1. 输入:', '1.输入:', '2. 输出:', '2.输出:', '3. 注意事项:', '3.注意事项:', '4. 成本/备注:', '4.成本/备注:', '前置条件/输入:', '输入:', '输出:', '不能做/限制:', '限制:', '注意事项:', '成本/备注:', '成本:')): + # Skip tag lines between "使用场景:" and "使用方法:" (e.g., "结构生成") + # These are typically scene names or tags that should not be part of the usage scenario + continue elif line.startswith('使用方法:'): if current_key: result[current_key] = ' '.join(current_value).strip() From 1d47fb366444ba3426c99b963a635ab159f08b27 Mon Sep 17 00:00:00 2001 From: styxhuang Date: Sat, 7 Feb 2026 09:38:02 +0800 Subject: [PATCH 04/10] feat: update --- .../structure_search_agent/__init__.py | 0 .../structure_search_agent/agent.py | 43 ++++ .../structure_search_agent/constant.py | 8 + .../structure_search_agent/prompt.py | 223 ++++++++++++++++++ agents/matmaster_agent/sub_agents/mapping.py | 16 +- agents/matmaster_agent/sub_agents/tools.py | 116 ++------- 6 files changed, 300 insertions(+), 106 deletions(-) create mode 100644 agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/__init__.py create mode 100644 agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/agent.py create mode 100644 agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/constant.py create mode 100644 agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/prompt.py diff --git a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/__init__.py b/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/agent.py b/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/agent.py new file mode 100644 index 00000000..3d39cb0e --- /dev/null +++ b/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/agent.py @@ -0,0 +1,43 @@ +from dotenv import load_dotenv +from dp.agent.adapter.adk import CalculationMCPToolset +from google.adk.agents import BaseAgent +from google.adk.tools.mcp_tool.mcp_session_manager import SseServerParams + +from agents.matmaster_agent.constant import LOCAL_EXECUTOR, BohriumStorge +from agents.matmaster_agent.core_agents.public_agents.sync_agent import ( + BaseSyncAgentWithToolValidator, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.constant import MrDice_Agent_Name +from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.constant import ( + STRUCTURE_SEARCH_URL, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.prompt import ( + StructureSearchAgentName, +) + +load_dotenv() + +# Initialize MCP tools and agent +structure_search_toolset = CalculationMCPToolset( + connection_params=SseServerParams(url=STRUCTURE_SEARCH_URL), + storage=BohriumStorge, + executor=LOCAL_EXECUTOR, +) + + +class StructureSearchAgentBase(BaseSyncAgentWithToolValidator): + def __init__(self, llm_config, name_suffix=''): + super().__init__( + # model=llm_config.deepseek_chat, + model=llm_config.default_litellm_model, + name=StructureSearchAgentName + name_suffix, + description='', + instruction='', + tools=[structure_search_toolset], + render_tool_response=True, + supervisor_agent=MrDice_Agent_Name, + ) + + +def init_structure_search_agent(llm_config, name_suffix='') -> BaseAgent: + return StructureSearchAgentBase(llm_config, name_suffix=name_suffix) diff --git a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/constant.py b/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/constant.py new file mode 100644 index 00000000..4baea51e --- /dev/null +++ b/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/constant.py @@ -0,0 +1,8 @@ +from agents.matmaster_agent.constant import CURRENT_ENV + +STRUCTURE_SEARCH_AGENT_NAME = 'structure_search_agent' + +if CURRENT_ENV in ['test', 'uat']: + STRUCTURE_SEARCH_URL = 'http://chvz1424099.bohrium.tech:50001/sse' +else: + STRUCTURE_SEARCH_URL = 'http://chvz1424099.bohrium.tech:50002/sse' diff --git a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/prompt.py b/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/prompt.py new file mode 100644 index 00000000..2896d944 --- /dev/null +++ b/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/prompt.py @@ -0,0 +1,223 @@ +StructureSearchAgentName = 'structure_search_agent' + +StructureSearchAgentToolDescription = ( + 'What it does: Retrieve structures across multiple sources (BohriumPublic / OpenLAM / OPTIMADE providers) and run advanced SQL queries on MOFdb.\n' + 'When to use: Any "find crystal structures" request, including formula/elements/space group/band gap filters, time/energy filters (OpenLAM), cross-provider searches (OPTIMADE), or MOF-specific analytics (MOFdb SQL).\n' + 'Prerequisites / Inputs: Provide either structured filters (formula/elements/space group ranges), OpenLAM filters (energy/time), OPTIMADE filter strings, or MOFdb SQL.\n' + 'Outputs: Structures or metadata in CIF/JSON; MOFdb returns SQL rows and optional structure file links.\n' + 'Cannot do / Limits: OPTIMADE filters must follow the standard grammar; MOFdb is MOF-specific; OpenLAM does not provide space group/band gap.\n' + 'Cost / Notes: Default to BohriumPublic for speed; use OPTIMADE for flexible/cross-provider retrieval; use MOFdb for complex MOF analytics.' +) + +StructureSearchAgentArgsSetting = """ +## PARAMETER CONSTRUCTION GUIDE + +## Do not ask the user for confirmation; directly start retrieval when a query is made. + +## 0) ROUTING: WHICH TOOL TO CALL +You have access to multiple retrieval tools. Choose ONE based on the user intent: + +### A) BohriumPublic (fast structured filters) +Use `fetch_bohrium_crystals` when the user asks for: +- formula / elements / space group / atom count / predicted formation energy / band gap +- and they do NOT require cross-provider search or complex boolean logic + +### B) OpenLAM (energy / time filters) +Use `fetch_openlam_structures` when the user asks for: +- OpenLAM specifically, OR upload/submission time filters, OR OpenLAM energy range filters +Limits: OpenLAM does NOT support space group, band gap, or "elements list" filters. + +### C) OPTIMADE (cross-provider, flexible composition filters) +Use OPTIMADE tools when the user needs: +- cross-provider search (e.g., "search in mp/cod/oqmd..."), OR +- flexible logical composition constraints, OR +- structure-type family queries (anonymous formula like AB2C4), OR +- 2D/1D/0D constraints (nperiodic_dimensions) +Pick the specific tool: +- `fetch_structures_with_spg` if the user specifies a space group number +- `fetch_structures_with_bandgap` if the user specifies a band-gap range +- `fetch_structures_with_filter` otherwise + +### D) MOFdb (MOF-only, complex analytics) +Use `fetch_mofs_sql` when the user asks for: +- MOF-specific properties (surface area, pore metrics, adsorption/isotherms, heats), OR +- advanced analysis requiring multi-table joins / ranking / statistics + +## 1) BOHRIUMPUBLIC PARAMETERS (fetch_bohrium_crystals) +### FILTER OPTIONS +- **Formula**: chemical formula string (e.g., `"CoH12(BrO3)2"`) +- **Elements**: list of required elements (e.g., `["Co","O"]`) +- **Match mode** (applies to both `formula` and `elements`): + - `0` = contains (e.g., formula `"Co"` matches `"CoO"`, `"CoH12(BrO3)2"`; elements `["Co"]` matches materials containing Co + anything else) + - `1` = exact-only match (formula must match exactly; elements list must match **exactly and only** those elements) +- **Space group**: use the space group number (e.g., `14` for P2₁/c) +- **Atom count range**: filter by number of atoms in the unit cell, e.g. `["10","100"]` +- **Predicted formation energy**: range filter in eV, e.g. `["-2","0"]` +- **Band gap**: eV range [lo, hi] (omitted bound defaults to 0/100), e.g. ["0","3"], ["1","100"] +- **Result limit**: maximum number of results (`n_results`) +- **Output formats**: + - `"cif"` → crystallographic structure files + - `"json"` → complete metadata + +## HOW TO CHOOSE PARAMETERS +- If user specifies a **formula** → set `formula` and choose `match_mode`: + - `0` if the user means "contains fragment" + - `1` if the user means "exact formula" +- If user specifies **elements** → set `elements` and choose `match_mode`: + - `0` if the user means "must include these elements" + - `1` if the user means "must have exactly these elements and nothing else" +- If user specifies a **space group number** → set `spacegroup_number` +- If user specifies an **atom count range** → set `atom_count_range` +- If user specifies **formation energy or band gap ranges** → set the corresponding ranges +- If the user requests **metadata only** → use `output_formats=['json']` +- If the user requests **downloadable crystal files** → use `output_formats=['cif']` + +## PARAMETER EXAMPLES +1) 用户:检索 SrTiO₃ 的晶体结构,并以JSON格式返回 + → Tool: fetch_bohrium_crystals + formula: "SrTiO3" + match_mode: 1 + output_formats: ["json"] + +2) 用户:在Materials Project中检索并返回3个带隙大于2 eV的氧化物结构 + → Tool: fetch_bohrium_crystals + elements: ["O"] + match_mode: 0 + band_gap_range: ["2","100"] + n_results: 3 + +3) 用户:找出空间群编号 14,原子数 50–100 的晶体 + → Tool: fetch_bohrium_crystals + spacegroup_number: 14 + atom_count_range: ["50","100"] + +4) 用户:检索 FeNi 合金的结构 + → Tool: fetch_bohrium_crystals + elements: ["Fe","Ni"] # 合金只含有Fe和Ni元素,不能含有其他元素 + match_mode: 1 # 合金需要精确匹配 + +5) 用户:找所有化学式中包含 SiO3 的材料 + → Tool: fetch_bohrium_crystals + formula: "SiO3" + match_mode: 0 + +## 2) OPENLAM PARAMETERS (fetch_openlam_structures) +### FILTER OPTIONS +- **Formula**: chemical formula string (e.g., `"Fe2O3"`) +- **Energy**: `min_energy` and/or `max_energy` in eV +- **Submission time**: ISO UTC date-time (`min_submission_time`, `max_submission_time`) +- **Result limit**: `n_results` +- **Output formats**: `"cif"` or `"json"` + +### EXAMPLES +1) 用户:查找 Fe2O3 的 5 个晶体结构,导出为 CIF + → Tool: fetch_openlam_structures + formula: "Fe2O3" + n_results: 5 + output_formats: ["cif"] + +2) 用户:查找能量在 -10 到 20 eV 之间,2024 年后上传的材料 + → Tool: fetch_openlam_structures + min_energy: -10.0 + max_energy: 20.0 + min_submission_time: "2024-01-01T00:00:00Z" + +## 3) MOFDB PARAMETERS (fetch_mofs_sql) +### INPUT +- **sql**: SQL query string (use CTEs, window functions, joins as needed) +- **n_results**: controls SQL LIMIT (when applicable) and returned structures + +### EXAMPLE +用户:统计各数据库的 MOF 数量 +→ Tool: fetch_mofs_sql + sql: "SELECT database, COUNT(*) AS count FROM mofs GROUP BY database ORDER BY count DESC" + +## 4) OPTIMADE PARAMETERS (fetch_structures_with_filter / _with_spg / _with_bandgap) +### MINIMUM SAFE OPTIMADE SYNTAX RULES (DO NOT VIOLATE) +- Allowed operators ONLY: =, !=, <, <=, >, >=, AND, OR, NOT, HAS, HAS ALL, HAS ANY, IS KNOWN, IS UNKNOWN +- All strings MUST be in double quotes: "Fe", "SiO2" +- Do NOT use CONTAINS / LIKE / IN / regex / invented fields +- To express "only these elements": use `elements HAS ALL ... AND nelements = N` + +### TOOL CHOICE +- If user gives space group number → `fetch_structures_with_spg(base_filter, spg_number, ...)` +- If user gives band gap range → `fetch_structures_with_bandgap(base_filter, min_bg, max_bg, ...)` +- Else → `fetch_structures_with_filter(filter, ...)` + +### EXAMPLES +1) 用户:找空间群 225 的 MgO(rocksalt),返回 CIF + → Tool: fetch_structures_with_spg + base_filter: chemical_formula_reduced="MgO" + spg_number: 225 + as_format: "cif" + +2) 用户:找含 Al 且带隙 1–2 eV 的材料,返回 JSON + → Tool: fetch_structures_with_bandgap + base_filter: elements HAS "Al" + min_bg: 1.0 + max_bg: 2.0 + as_format: "json" +""" + +StructureSearchAgentSummaryPrompt = """ +## RESPONSE FORMAT + +**If the tool response indicates `by_source` = "mofdb"** (MOFdb results): +1. Brief explanation of the SQL query used +2. Markdown table of retrieved MOFs with relevant columns +3. Output directory path for download/archive +4. Key findings from results (if applicable) + +**If the tool response indicates `by_source` = "optimade"** (OPTIMADE results): +The response must always have three parts in order: +1. A brief explanation of the applied filters and providers. +2. A Markdown table listing all retrieved results (NO omissions/truncation; number of rows must exactly equal `n_found`). +3. A download link for an archive (.tgz) if provided by the tool. +Each table must always include the following nine columns in this fixed order: +(1) Formula (`attributes.chemical_formula_reduced`) +(2) Elements (infer from formula) +(3) Atom count (if available; else **Not Provided**) +(4) Download link (CIF or JSON file) +(5) Provider (infer from provider URL) +(6) ID (`id`) +Missing values must be exactly **Not Provided**. If `n_found = 0`, do not generate an empty table. + +**If the tool response indicates `by_source` = "openlam"** (OpenLAM results): +The response must always include: +1. ✅ A brief explanation of the filters applied +2. 📊 A Markdown table of the retrieved structures + - Columns (fixed order): + (1) Formula (`formula`) + (2) Elements (deduced from `formula`) + (3) Atom count → **Not Provided** + (4) Space group → **Not Provided** + (5) Energy / Formation energy (`energy` if available; else **Not Provided**) + (6) Band gap → **Not Provided** + (7) Download link (CIF/JSON, based on requested output) + (8) Source database → always `"OpenLAM"` + (9) ID (`id`) + - Fill missing values with exactly **Not Provided** + - Number of rows **must exactly equal** `n_found` +3. 📦 The `output_dir` path returned by the tool (for download/archive) +If `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table. + +**Otherwise** (BohriumPublic or other sources): +The response must always include: +1. ✅ A brief explanation of the filters applied +2. 📊 A Markdown table of the retrieved structures + - Columns (fixed order): + (1) Formula (`formula`) + (2) Elements (deduced from `formula`) + (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**) + (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**) + (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**) + (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**) + (7) Download link (CIF/JSON, based on `output_formats`) + (8) Source database → always `"BohriumPublic"` + (9) ID (`id`) + - Fill missing values with exactly **Not Provided** + - Number of rows **must exactly equal** `n_found` +3. 📦 The `output_dir` path returned by the tool (for download/archive) + +If `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table. +""" diff --git a/agents/matmaster_agent/sub_agents/mapping.py b/agents/matmaster_agent/sub_agents/mapping.py index a974748e..3c876d2e 100644 --- a/agents/matmaster_agent/sub_agents/mapping.py +++ b/agents/matmaster_agent/sub_agents/mapping.py @@ -110,6 +110,15 @@ lammps_toolset, ) from agents.matmaster_agent.sub_agents.LAMMPS_agent.constant import LAMMPS_AGENT_NAME + +from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.agent import ( + StructureSearchAgentBase, + structure_search_toolset, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.constant import ( + STRUCTURE_SEARCH_AGENT_NAME, +) + from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.agent import ( Bohriumpublic_AgentBase, bohriumpublic_toolset, @@ -293,10 +302,7 @@ 'polymer_kb_toolset': polymer_kb_toolset, 'steel_kb_toolset': steel_kb_toolset, 'steel_predict_toolset': steel_predict_toolset, - 'optimade_toolset': optimade_toolset, - 'bohriumpublic_toolset': bohriumpublic_toolset, - 'openlam_toolset': openlam_toolset, - 'mofdb_toolset': mofdb_toolset, + 'structure_search_toolset': structure_search_toolset, 'organic_reaction_toolset': organic_reaction_toolset, 'perovskite_toolset': perovskite_toolset, 'piloteye_electro_toolset': piloteye_electro_toolset, @@ -337,6 +343,7 @@ BOHRIUMPUBLIC_DATABASE_AGENT_NAME: Bohriumpublic_AgentBase, MOFDB_DATABASE_AGENT_NAME: Mofdb_AgentBase, OPENLAM_DATABASE_AGENT_NAME: Openlam_AgentBase, + STRUCTURE_SEARCH_AGENT_NAME: StructureSearchAgentBase, ORGANIC_REACTION_AGENT_NAME: OragnicReactionAgent, PerovskiteAgentName: PerovskiteAgent, PILOTEYE_ELECTRO_AGENT_NAME: PiloteyeElectroAgent, @@ -380,6 +387,7 @@ class MatMasterSubAgentsEnum(str, Enum): BohriumPublicDatabaseAgent = BOHRIUMPUBLIC_DATABASE_AGENT_NAME MOFDBDatabaseAgent = MOFDB_DATABASE_AGENT_NAME OpenLAMDatabaseAgent = OPENLAM_DATABASE_AGENT_NAME + StructureSearchAgent = STRUCTURE_SEARCH_AGENT_NAME OrganicReactionAgent = ORGANIC_REACTION_AGENT_NAME PerovskiteAgent = PerovskiteAgentName PiloteyeElectroAgent = PILOTEYE_ELECTRO_AGENT_NAME diff --git a/agents/matmaster_agent/sub_agents/tools.py b/agents/matmaster_agent/sub_agents/tools.py index d92905be..e5ff7619 100644 --- a/agents/matmaster_agent/sub_agents/tools.py +++ b/agents/matmaster_agent/sub_agents/tools.py @@ -53,42 +53,17 @@ HEAKbAgentToolDescription, ) from agents.matmaster_agent.sub_agents.LAMMPS_agent.constant import LAMMPS_AGENT_NAME -from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.constant import ( - BOHRIUMPUBLIC_DATABASE_AGENT_NAME, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.prompt import ( - BohriumPublicAgentArgsSetting, - BohriumPublicAgentSummaryPrompt, - BohriumPublicAgentToolDescription, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.constant import ( - MOFDB_DATABASE_AGENT_NAME, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.prompt import ( - MofdbAgentArgsSetting, - MofdbAgentSummaryPrompt, - MofdbAgentToolDescription, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.constant import ( - OPENLAM_DATABASE_AGENT_NAME, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.prompt import ( - OpenlamAgentArgsSetting, - OpenlamAgentSummaryPrompt, - OpenlamAgentToolDescription, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.constant import ( - OPTIMADE_DATABASE_AGENT_NAME, + +from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.constant import ( + STRUCTURE_SEARCH_AGENT_NAME, + STRUCTURE_SEARCH_URL ) -from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.prompt import ( - OptimadeAgentSummaryPrompt, - OptimadeBandgapArgsSetting, - OptimadeBandgapToolDescription, - OptimadeFilterArgsSetting, - OptimadeFilterToolDescription, - OptimadeSpgArgsSetting, - OptimadeSpgToolDescription, +from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.prompt import ( + StructureSearchAgentArgsSetting, + StructureSearchAgentSummaryPrompt, + StructureSearchAgentToolDescription, ) + from agents.matmaster_agent.sub_agents.NMR_agent.constant import ( NMR_AGENT_NAME, ) @@ -829,78 +804,15 @@ 'summary_prompt': STEELPredictAgentSummaryPrompt, 'self_check': False, }, - 'fetch_structures_with_filter': { - 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': OptimadeFilterToolDescription, - 'args_setting': f"{OptimadeFilterArgsSetting}", - 'alternative': [ - 'fetch_bohrium_crystals', - 'fetch_openlam_structures', - 'web-search', - ], - 'summary_prompt': OptimadeAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_structures_with_spg': { - 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, + 'fetch_structures_from_db': { + 'belonging_agent': STRUCTURE_SEARCH_AGENT_NAME, 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': OptimadeSpgToolDescription, - 'args_setting': f"{OptimadeSpgArgsSetting}", + 'description': StructureSearchAgentToolDescription, + 'args_setting': f"{StructureSearchAgentArgsSetting}", 'alternative': [ - 'fetch_bohrium_crystals', - 'fetch_structures_with_filter', 'web-search', ], - 'summary_prompt': OptimadeAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_structures_with_bandgap': { - 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': OptimadeBandgapToolDescription, - 'args_setting': f"{OptimadeBandgapArgsSetting}", - 'alternative': [ - 'fetch_bohrium_crystals', - 'fetch_structures_with_filter', - 'web-search', - ], - 'summary_prompt': OptimadeAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_bohrium_crystals': { - 'belonging_agent': BOHRIUMPUBLIC_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': BohriumPublicAgentToolDescription, - 'args_setting': f"{BohriumPublicAgentArgsSetting}", - 'alternative': [ - 'fetch_structures_with_filter', - 'web-search', - 'fetch_openlam_structures', - ], - 'summary_prompt': BohriumPublicAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_openlam_structures': { - 'belonging_agent': OPENLAM_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': OpenlamAgentToolDescription, - 'args_setting': f"{OpenlamAgentArgsSetting}", - 'alternative': [ - 'fetch_structures_with_filter', - 'web-search', - 'fetch_openlam_structures', - ], - 'summary_prompt': OpenlamAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_mofs_sql': { - 'belonging_agent': MOFDB_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': MofdbAgentToolDescription, - 'args_setting': f"{MofdbAgentArgsSetting}", - 'alternative': ['web-search'], - 'summary_prompt': MofdbAgentSummaryPrompt, + 'summary_prompt': StructureSearchAgentSummaryPrompt, 'self_check': True, }, 'calculate_reaction_profile': { From c995965ff3b876711f4377a85179479e085b677a Mon Sep 17 00:00:00 2001 From: styxhuang Date: Sat, 7 Feb 2026 09:40:09 +0800 Subject: [PATCH 05/10] fix: pre-commit --- agents/matmaster_agent/sub_agents/mapping.py | 20 +++++++------------- agents/matmaster_agent/sub_agents/tools.py | 3 --- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/agents/matmaster_agent/sub_agents/mapping.py b/agents/matmaster_agent/sub_agents/mapping.py index 3c876d2e..37f63e5f 100644 --- a/agents/matmaster_agent/sub_agents/mapping.py +++ b/agents/matmaster_agent/sub_agents/mapping.py @@ -110,43 +110,37 @@ lammps_toolset, ) from agents.matmaster_agent.sub_agents.LAMMPS_agent.constant import LAMMPS_AGENT_NAME - -from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.agent import ( - StructureSearchAgentBase, - structure_search_toolset, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.constant import ( - STRUCTURE_SEARCH_AGENT_NAME, -) - from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.agent import ( Bohriumpublic_AgentBase, - bohriumpublic_toolset, ) from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.constant import ( BOHRIUMPUBLIC_DATABASE_AGENT_NAME, ) from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.agent import ( Mofdb_AgentBase, - mofdb_toolset, ) from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.constant import ( MOFDB_DATABASE_AGENT_NAME, ) from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.agent import ( Openlam_AgentBase, - openlam_toolset, ) from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.constant import ( OPENLAM_DATABASE_AGENT_NAME, ) from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.agent import ( Optimade_AgentBase, - optimade_toolset, ) from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.constant import ( OPTIMADE_DATABASE_AGENT_NAME, ) +from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.agent import ( + StructureSearchAgentBase, + structure_search_toolset, +) +from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.constant import ( + STRUCTURE_SEARCH_AGENT_NAME, +) from agents.matmaster_agent.sub_agents.NMR_agent.agent import ( NMRAgent, nmr_toolset, diff --git a/agents/matmaster_agent/sub_agents/tools.py b/agents/matmaster_agent/sub_agents/tools.py index e5ff7619..ca01e418 100644 --- a/agents/matmaster_agent/sub_agents/tools.py +++ b/agents/matmaster_agent/sub_agents/tools.py @@ -53,17 +53,14 @@ HEAKbAgentToolDescription, ) from agents.matmaster_agent.sub_agents.LAMMPS_agent.constant import LAMMPS_AGENT_NAME - from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.constant import ( STRUCTURE_SEARCH_AGENT_NAME, - STRUCTURE_SEARCH_URL ) from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.prompt import ( StructureSearchAgentArgsSetting, StructureSearchAgentSummaryPrompt, StructureSearchAgentToolDescription, ) - from agents.matmaster_agent.sub_agents.NMR_agent.constant import ( NMR_AGENT_NAME, ) From 9068160a7f5535291b628c957fab0e5aaff61042 Mon Sep 17 00:00:00 2001 From: styxhuang Date: Sun, 8 Feb 2026 08:01:27 +0800 Subject: [PATCH 06/10] feat: fix --- agents/matmaster_agent/sub_agents/mapping.py | 14 +++++------ .../structure_search_agent/__init__.py | 0 .../structure_search_agent/agent.py | 15 ++++-------- .../structure_search_agent/constant.py | 2 +- .../structure_search_agent/prompt.py | 23 ++++++++----------- agents/matmaster_agent/sub_agents/tools.py | 16 ++++++------- 6 files changed, 30 insertions(+), 40 deletions(-) rename agents/matmaster_agent/sub_agents/{MrDice_agent => }/structure_search_agent/__init__.py (100%) rename agents/matmaster_agent/sub_agents/{MrDice_agent => }/structure_search_agent/agent.py (71%) rename agents/matmaster_agent/sub_agents/{MrDice_agent => }/structure_search_agent/constant.py (80%) rename agents/matmaster_agent/sub_agents/{MrDice_agent => }/structure_search_agent/prompt.py (94%) diff --git a/agents/matmaster_agent/sub_agents/mapping.py b/agents/matmaster_agent/sub_agents/mapping.py index 37f63e5f..14d5095d 100644 --- a/agents/matmaster_agent/sub_agents/mapping.py +++ b/agents/matmaster_agent/sub_agents/mapping.py @@ -134,13 +134,6 @@ from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.constant import ( OPTIMADE_DATABASE_AGENT_NAME, ) -from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.agent import ( - StructureSearchAgentBase, - structure_search_toolset, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.constant import ( - STRUCTURE_SEARCH_AGENT_NAME, -) from agents.matmaster_agent.sub_agents.NMR_agent.agent import ( NMRAgent, nmr_toolset, @@ -222,6 +215,13 @@ from agents.matmaster_agent.sub_agents.structure_generate_agent.constant import ( StructureGenerateAgentName, ) +from agents.matmaster_agent.sub_agents.structure_search_agent.agent import ( + StructureSearchAgentBase, + structure_search_toolset, +) +from agents.matmaster_agent.sub_agents.structure_search_agent.constant import ( + STRUCTURE_SEARCH_AGENT_NAME, +) from agents.matmaster_agent.sub_agents.superconductor_agent.agent import ( SuperconductorAgent, superconductor_toolset, diff --git a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/__init__.py b/agents/matmaster_agent/sub_agents/structure_search_agent/__init__.py similarity index 100% rename from agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/__init__.py rename to agents/matmaster_agent/sub_agents/structure_search_agent/__init__.py diff --git a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/agent.py b/agents/matmaster_agent/sub_agents/structure_search_agent/agent.py similarity index 71% rename from agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/agent.py rename to agents/matmaster_agent/sub_agents/structure_search_agent/agent.py index 3d39cb0e..0d98ae55 100644 --- a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/agent.py +++ b/agents/matmaster_agent/sub_agents/structure_search_agent/agent.py @@ -1,4 +1,3 @@ -from dotenv import load_dotenv from dp.agent.adapter.adk import CalculationMCPToolset from google.adk.agents import BaseAgent from google.adk.tools.mcp_tool.mcp_session_manager import SseServerParams @@ -8,16 +7,11 @@ BaseSyncAgentWithToolValidator, ) from agents.matmaster_agent.sub_agents.MrDice_agent.constant import MrDice_Agent_Name -from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.constant import ( +from agents.matmaster_agent.sub_agents.structure_search_agent.constant import ( + STRUCTURE_SEARCH_AGENT_NAME, STRUCTURE_SEARCH_URL, ) -from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.prompt import ( - StructureSearchAgentName, -) - -load_dotenv() -# Initialize MCP tools and agent structure_search_toolset = CalculationMCPToolset( connection_params=SseServerParams(url=STRUCTURE_SEARCH_URL), storage=BohriumStorge, @@ -26,11 +20,10 @@ class StructureSearchAgentBase(BaseSyncAgentWithToolValidator): - def __init__(self, llm_config, name_suffix=''): + def __init__(self, llm_config): super().__init__( - # model=llm_config.deepseek_chat, model=llm_config.default_litellm_model, - name=StructureSearchAgentName + name_suffix, + name=STRUCTURE_SEARCH_AGENT_NAME, description='', instruction='', tools=[structure_search_toolset], diff --git a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/constant.py b/agents/matmaster_agent/sub_agents/structure_search_agent/constant.py similarity index 80% rename from agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/constant.py rename to agents/matmaster_agent/sub_agents/structure_search_agent/constant.py index 4baea51e..1085c135 100644 --- a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/constant.py +++ b/agents/matmaster_agent/sub_agents/structure_search_agent/constant.py @@ -1,6 +1,6 @@ from agents.matmaster_agent.constant import CURRENT_ENV -STRUCTURE_SEARCH_AGENT_NAME = 'structure_search_agent' +STRUCTURE_SEARCH_AGENT_NAME = 'fetch_structures_from_db' if CURRENT_ENV in ['test', 'uat']: STRUCTURE_SEARCH_URL = 'http://chvz1424099.bohrium.tech:50001/sse' diff --git a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/prompt.py b/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py similarity index 94% rename from agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/prompt.py rename to agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py index 2896d944..478399cf 100644 --- a/agents/matmaster_agent/sub_agents/MrDice_agent/structure_search_agent/prompt.py +++ b/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py @@ -1,5 +1,3 @@ -StructureSearchAgentName = 'structure_search_agent' - StructureSearchAgentToolDescription = ( 'What it does: Retrieve structures across multiple sources (BohriumPublic / OpenLAM / OPTIMADE providers) and run advanced SQL queries on MOFdb.\n' 'When to use: Any "find crystal structures" request, including formula/elements/space group/band gap filters, time/energy filters (OpenLAM), cross-provider searches (OPTIMADE), or MOF-specific analytics (MOFdb SQL).\n' @@ -18,28 +16,24 @@ You have access to multiple retrieval tools. Choose ONE based on the user intent: ### A) BohriumPublic (fast structured filters) -Use `fetch_bohrium_crystals` when the user asks for: +when the user asks for: - formula / elements / space group / atom count / predicted formation energy / band gap - and they do NOT require cross-provider search or complex boolean logic ### B) OpenLAM (energy / time filters) -Use `fetch_openlam_structures` when the user asks for: +when the user asks for: - OpenLAM specifically, OR upload/submission time filters, OR OpenLAM energy range filters Limits: OpenLAM does NOT support space group, band gap, or "elements list" filters. ### C) OPTIMADE (cross-provider, flexible composition filters) -Use OPTIMADE tools when the user needs: +when the user needs: - cross-provider search (e.g., "search in mp/cod/oqmd..."), OR - flexible logical composition constraints, OR - structure-type family queries (anonymous formula like AB2C4), OR - 2D/1D/0D constraints (nperiodic_dimensions) -Pick the specific tool: -- `fetch_structures_with_spg` if the user specifies a space group number -- `fetch_structures_with_bandgap` if the user specifies a band-gap range -- `fetch_structures_with_filter` otherwise ### D) MOFdb (MOF-only, complex analytics) -Use `fetch_mofs_sql` when the user asks for: +when the user asks for: - MOF-specific properties (surface area, pore metrics, adsorption/isotherms, heats), OR - advanced analysis requiring multi-table joins / ranking / statistics @@ -177,9 +171,12 @@ (1) Formula (`attributes.chemical_formula_reduced`) (2) Elements (infer from formula) (3) Atom count (if available; else **Not Provided**) -(4) Download link (CIF or JSON file) -(5) Provider (infer from provider URL) -(6) ID (`id`) +(4) Space group (`Symbol(Number)` if possible; else **Not Provided**) +(5) Energy / Formation energy (if available; else **Not Provided**) +(6) Band gap (if available; else **Not Provided**) +(7) Download link (CIF or JSON file) +(8) Provider (infer from provider URL) +(9) ID (`id`) Missing values must be exactly **Not Provided**. If `n_found = 0`, do not generate an empty table. **If the tool response indicates `by_source` = "openlam"** (OpenLAM results): diff --git a/agents/matmaster_agent/sub_agents/tools.py b/agents/matmaster_agent/sub_agents/tools.py index ca01e418..da652576 100644 --- a/agents/matmaster_agent/sub_agents/tools.py +++ b/agents/matmaster_agent/sub_agents/tools.py @@ -53,14 +53,6 @@ HEAKbAgentToolDescription, ) from agents.matmaster_agent.sub_agents.LAMMPS_agent.constant import LAMMPS_AGENT_NAME -from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.constant import ( - STRUCTURE_SEARCH_AGENT_NAME, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.structure_search_agent.prompt import ( - StructureSearchAgentArgsSetting, - StructureSearchAgentSummaryPrompt, - StructureSearchAgentToolDescription, -) from agents.matmaster_agent.sub_agents.NMR_agent.constant import ( NMR_AGENT_NAME, ) @@ -119,6 +111,14 @@ from agents.matmaster_agent.sub_agents.structure_generate_agent.constant import ( StructureGenerateAgentName, ) +from agents.matmaster_agent.sub_agents.structure_search_agent.constant import ( + STRUCTURE_SEARCH_AGENT_NAME, +) +from agents.matmaster_agent.sub_agents.structure_search_agent.prompt import ( + StructureSearchAgentArgsSetting, + StructureSearchAgentSummaryPrompt, + StructureSearchAgentToolDescription, +) from agents.matmaster_agent.sub_agents.superconductor_agent.constant import ( SuperconductorAgentName, ) From 3b93c649e33b28ef192a677fa3e9146b0be7076e Mon Sep 17 00:00:00 2001 From: styxhuang Date: Sun, 8 Feb 2026 08:09:57 +0800 Subject: [PATCH 07/10] fix: update --- .../structure_search_agent/prompt.py | 41 +++++++++---------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py b/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py index 478399cf..9f4059d3 100644 --- a/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py +++ b/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py @@ -68,34 +68,34 @@ ## PARAMETER EXAMPLES 1) 用户:检索 SrTiO₃ 的晶体结构,并以JSON格式返回 - → Tool: fetch_bohrium_crystals + → Tool: fetch_structures_from_db formula: "SrTiO3" match_mode: 1 output_formats: ["json"] 2) 用户:在Materials Project中检索并返回3个带隙大于2 eV的氧化物结构 - → Tool: fetch_bohrium_crystals + → Tool: fetch_structures_from_db elements: ["O"] match_mode: 0 band_gap_range: ["2","100"] n_results: 3 3) 用户:找出空间群编号 14,原子数 50–100 的晶体 - → Tool: fetch_bohrium_crystals + → Tool: fetch_structures_from_db spacegroup_number: 14 atom_count_range: ["50","100"] 4) 用户:检索 FeNi 合金的结构 - → Tool: fetch_bohrium_crystals + → Tool: fetch_structures_from_db elements: ["Fe","Ni"] # 合金只含有Fe和Ni元素,不能含有其他元素 match_mode: 1 # 合金需要精确匹配 5) 用户:找所有化学式中包含 SiO3 的材料 - → Tool: fetch_bohrium_crystals + → Tool: fetch_structures_from_db formula: "SiO3" match_mode: 0 -## 2) OPENLAM PARAMETERS (fetch_openlam_structures) +## 2) OPENLAM PARAMETERS (fetch_structures_from_db) ### FILTER OPTIONS - **Formula**: chemical formula string (e.g., `"Fe2O3"`) - **Energy**: `min_energy` and/or `max_energy` in eV @@ -105,28 +105,28 @@ ### EXAMPLES 1) 用户:查找 Fe2O3 的 5 个晶体结构,导出为 CIF - → Tool: fetch_openlam_structures + → Tool: fetch_structures_from_db formula: "Fe2O3" n_results: 5 output_formats: ["cif"] 2) 用户:查找能量在 -10 到 20 eV 之间,2024 年后上传的材料 - → Tool: fetch_openlam_structures + → Tool: fetch_structures_from_db min_energy: -10.0 max_energy: 20.0 min_submission_time: "2024-01-01T00:00:00Z" -## 3) MOFDB PARAMETERS (fetch_mofs_sql) +## 3) MOFDB PARAMETERS (fetch_structures_from_db) ### INPUT - **sql**: SQL query string (use CTEs, window functions, joins as needed) - **n_results**: controls SQL LIMIT (when applicable) and returned structures ### EXAMPLE 用户:统计各数据库的 MOF 数量 -→ Tool: fetch_mofs_sql +→ Tool: fetch_structures_from_db sql: "SELECT database, COUNT(*) AS count FROM mofs GROUP BY database ORDER BY count DESC" -## 4) OPTIMADE PARAMETERS (fetch_structures_with_filter / _with_spg / _with_bandgap) +## 4) OPTIMADE PARAMETERS (fetch_structures_from_db) ### MINIMUM SAFE OPTIMADE SYNTAX RULES (DO NOT VIOLATE) - Allowed operators ONLY: =, !=, <, <=, >, >=, AND, OR, NOT, HAS, HAS ALL, HAS ANY, IS KNOWN, IS UNKNOWN - All strings MUST be in double quotes: "Fe", "SiO2" @@ -134,19 +134,19 @@ - To express "only these elements": use `elements HAS ALL ... AND nelements = N` ### TOOL CHOICE -- If user gives space group number → `fetch_structures_with_spg(base_filter, spg_number, ...)` -- If user gives band gap range → `fetch_structures_with_bandgap(base_filter, min_bg, max_bg, ...)` -- Else → `fetch_structures_with_filter(filter, ...)` +- If user gives space group number → `fetch_structures_from_db(base_filter, spg_number, ...)` +- If user gives band gap range → `fetch_structures_from_db(base_filter, min_bg, max_bg, ...)` +- Else → `fetch_structures_from_db(filter, ...)` ### EXAMPLES 1) 用户:找空间群 225 的 MgO(rocksalt),返回 CIF - → Tool: fetch_structures_with_spg + → Tool: fetch_structures_from_db base_filter: chemical_formula_reduced="MgO" spg_number: 225 as_format: "cif" 2) 用户:找含 Al 且带隙 1–2 eV 的材料,返回 JSON - → Tool: fetch_structures_with_bandgap + → Tool: fetch_structures_from_db base_filter: elements HAS "Al" min_bg: 1.0 max_bg: 2.0 @@ -187,12 +187,9 @@ (1) Formula (`formula`) (2) Elements (deduced from `formula`) (3) Atom count → **Not Provided** - (4) Space group → **Not Provided** - (5) Energy / Formation energy (`energy` if available; else **Not Provided**) - (6) Band gap → **Not Provided** - (7) Download link (CIF/JSON, based on requested output) - (8) Source database → always `"OpenLAM"` - (9) ID (`id`) + (4) Download link (CIF/JSON, based on requested output) + (5) Source database → always `"OpenLAM"` + (6) ID (`id`) - Fill missing values with exactly **Not Provided** - Number of rows **must exactly equal** `n_found` 3. 📦 The `output_dir` path returned by the tool (for download/archive) From 8875757962d1f4b730d80b5b594f35a69aec1569 Mon Sep 17 00:00:00 2001 From: styxhuang Date: Sun, 8 Feb 2026 08:17:36 +0800 Subject: [PATCH 08/10] fix: add specific provider for optimade --- .../matmaster_agent/sub_agents/structure_search_agent/prompt.py | 1 + 1 file changed, 1 insertion(+) diff --git a/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py b/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py index 9f4059d3..7094dde1 100644 --- a/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py +++ b/agents/matmaster_agent/sub_agents/structure_search_agent/prompt.py @@ -27,6 +27,7 @@ ### C) OPTIMADE (cross-provider, flexible composition filters) when the user needs: +- Raw filter: alexandria, cmr, cod, mcloud, mcloudarchive, mp, mpdd, mpds, nmd, odbx, omdb, oqmd, tcod, twodmatpedia - cross-provider search (e.g., "search in mp/cod/oqmd..."), OR - flexible logical composition constraints, OR - structure-type family queries (anonymous formula like AB2C4), OR From ca793a62223e5d759174bf183f57c35bd0d26fed Mon Sep 17 00:00:00 2001 From: styxhuang Date: Sun, 8 Feb 2026 08:52:23 +0800 Subject: [PATCH 09/10] fix: agent name --- .../sub_agents/structure_search_agent/constant.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agents/matmaster_agent/sub_agents/structure_search_agent/constant.py b/agents/matmaster_agent/sub_agents/structure_search_agent/constant.py index 1085c135..4baea51e 100644 --- a/agents/matmaster_agent/sub_agents/structure_search_agent/constant.py +++ b/agents/matmaster_agent/sub_agents/structure_search_agent/constant.py @@ -1,6 +1,6 @@ from agents.matmaster_agent.constant import CURRENT_ENV -STRUCTURE_SEARCH_AGENT_NAME = 'fetch_structures_from_db' +STRUCTURE_SEARCH_AGENT_NAME = 'structure_search_agent' if CURRENT_ENV in ['test', 'uat']: STRUCTURE_SEARCH_URL = 'http://chvz1424099.bohrium.tech:50001/sse' From eef66d2204ddf766d4d5d827e88612f174e59228 Mon Sep 17 00:00:00 2001 From: styxhuang Date: Sun, 8 Feb 2026 15:48:39 +0800 Subject: [PATCH 10/10] add fetch_structures_from_db --- agents-tool.json | 249 ++---------------- .../matmaster_agent/sub_agents/tools_opt.py | 246 ++--------------- 2 files changed, 47 insertions(+), 448 deletions(-) diff --git a/agents-tool.json b/agents-tool.json index 49ba2579..46db54ea 100644 --- a/agents-tool.json +++ b/agents-tool.json @@ -760,229 +760,34 @@ }, { "tool_id": "008-FETCHSTR-001", - "name": "fetch_structures_with_filter", + "name": "fetch_structures_from_db", "description": { - "What it does": "Send OPTIMADE filter string to providers for structure search.", - "When to use": "For flexible composition/formula queries without space group or band gap constraints.", - "Input": "OPTIMADE filter string.", - "Output": "Matching structures.", - "Notes": "Full OPTIMADE filter language; parallel queries.", - "Costs": "Medium." - }, - "description_cn": { - "工具简介": "向OPTIMADE提供者发送过滤字符串进行结构搜索。", - "使用场景": "用于灵活的组成/化学式查询,无需空间群或带隙约束。", - "输入": "OPTIMADE过滤字符串。", - "输出": "匹配的结构。", - "注意事项": "完整的OPTIMADE过滤语言;并行查询。", - "成本": "中等。" - }, - "belonging_agent": "optimade_agent", - "scenes": [ - "DATABASE_SEARCH" - ], - "alternative_tools": [ - "fetch_bohrium_crystals", - "fetch_openlam_structures", - "web-search" - ], - "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", - "summary_cn": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", - "self_check": true, - "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_filter MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_filter MCP tool:\n\nfetch_structures_with_filter(\n filter: str,\n as_format: 'cif'|'json' = 'cif',\n n_results: int = 2,\n providers: list[str] = [...]\n )\n - Sends ONE raw OPTIMADE filter string to all chosen providers at once.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `filter` from the user's query.\n- `filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Raw filter: alexandria, cmr, cod, mcloud, mcloudarchive, mp, mpdd, mpds, nmd, odbx, omdb, oqmd, tcod, twodmatpedia\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Retrieve SrTiO3 crystal structures\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"SrTiO3\"\n\n2) User: Find 3 structures of ZrO from mpds, cmr, alexandria, omdb, odbx\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"ZrO\"\n as_format: \"cif\"\n providers: [\"mpds\", \"cmr\", \"alexandria\", \"omdb\", \"odbx\"]\n n_results: 3\n\n3) User: Find A2B3C4 materials, exclude Fe/F/Cl/H, must contain Al or Mg or Na, want full metadata\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_anonymous=\"A2B3C4\" AND NOT (elements HAS ANY \"Fe\",\"F\",\"Cl\",\"H\") AND (elements HAS ANY \"Al\",\"Mg\",\"Na\")\n as_format: \"json\"\n\n4) User: Find two-dimensional MoS2\n → Tool: fetch_structures_with_filter\n filter: chemical_formula_reduced=\"MoS2\" AND nperiodic_dimensions=2\n as_format: \"cif\"\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n", - "server": { - "test": "http://cmaz1395916.bohrium.tech:50004/sse", - "uat": "http://cmaz1395916.bohrium.tech:50004/sse", - "prod": "http://bowd1412840.bohrium.tech:50004/sse" - } - }, - { - "tool_id": "008-FETCHSTR-002", - "name": "fetch_structures_with_spg", - "description": { - "What it does": "Search structures by space group number with optional filters.", - "When to use": "When user specifies space group number or prototype structure.", - "Input": "Space group number and OPTIMADE filter string.", - "Output": "Structures with matching space group.", - "Notes": "Provider-specific space-group filters.", - "Costs": "Medium." + "What it does": "Retrieve structures across multiple sources (BohriumPublic / OpenLAM / OPTIMADE providers) and run advanced SQL queries on MOFdb.", + "When to use": "Any \"find crystal structures\" request, including formula/elements/space group/band gap filters, time/energy filters (OpenLAM), cross-provider searches (OPTIMADE), or MOF-specific analytics (MOFdb SQL).", + "Input": "Provide either structured filters (formula/elements/space group ranges), OpenLAM filters (energy/time), OPTIMADE filter strings, or MOFdb SQL.", + "Output": "Structures or metadata in CIF/JSON; MOFdb returns SQL rows and optional structure file links.", + "Notes": "OPTIMADE filters must follow the standard grammar; MOFdb is MOF-specific; OpenLAM does not provide space group/band gap.", + "Costs": "Default to BohriumPublic for speed; use OPTIMADE for flexible/cross-provider retrieval; use MOFdb for complex MOF analytics." }, "description_cn": { - "工具简介": "通过空间群编号搜索结构,可附加可选过滤器。", - "使用场景": "当用户指定空间群编号或原型结构时。", - "输入": "空间群编号和OPTIMADE过滤字符串。", - "输出": "匹配空间群的结构。", - "注意事项": "提供者特定的空间群过滤器。", - "成本": "中等。" - }, - "belonging_agent": "optimade_agent", - "scenes": [ - "DATABASE_SEARCH" - ], - "alternative_tools": [ - "fetch_bohrium_crystals", - "fetch_structures_with_filter", - "web-search" - ], - "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", - "summary_cn": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", - "self_check": true, - "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_spg MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_spg MCP tool:\n\nfetch_structures_with_spg(\n base_filter: str,\n spg_number: int,\n as_format: 'cif'|'json' = 'cif',\n n_results: int = 3,\n providers: list[str] = [...]\n )\n - Adds provider-specific *space-group* clauses (e.g., _tcod_sg, _oqmd_spacegroup, _alexandria_space_group) and queries providers in parallel.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `base_filter` from the user's query.\n- `base_filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Only when the user's requirement is purely \"filter by space group\" (no composition / element / other constraints at all) may `base_filter` be left empty.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Space group (SPG): alexandria, cod, mpdd, nmd, odbx, oqmd, tcod\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Find one gamma-phase TiAl alloy\n → Tool: fetch_structures_with_spg\n base_filter: elements HAS ALL \"Ti\",\"Al\" AND nelements = 2\n spg_number: 123\n as_format: \"cif\"\n n_results: 1\n\n2) User: Find periclase (MgO rock salt)\n → Tool: fetch_structures_with_spg\n base_filter: chemical_formula_reduced=\"MgO\"\n spg_number: 225\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n", - "server": { - "test": "http://cmaz1395916.bohrium.tech:50004/sse", - "uat": "http://cmaz1395916.bohrium.tech:50004/sse", - "prod": "http://bowd1412840.bohrium.tech:50004/sse" - } - }, - { - "tool_id": "008-FETCHSTR-003", - "name": "fetch_structures_with_bandgap", - "description": { - "What it does": "Search structures by band-gap range with optional filters.", - "When to use": "When user specifies band-gap range.", - "Input": "Band-gap range and OPTIMADE filter string.", - "Output": "Structures with band gap in range.", - "Notes": "Provider-specific band-gap filters.", - "Costs": "Medium." - }, - "description_cn": { - "工具简介": "通过带隙范围搜索结构,可附加可选过滤器。", - "使用场景": "当用户指定带隙范围时。", - "输入": "带隙范围和OPTIMADE过滤字符串。", - "输出": "带隙在范围内的结构。", - "注意事项": "提供者特定的带隙过滤器。", - "成本": "中等。" - }, - "belonging_agent": "optimade_agent", - "scenes": [ - "DATABASE_SEARCH" - ], - "alternative_tools": [ - "fetch_bohrium_crystals", - "fetch_structures_with_filter", - "web-search" - ], - "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", - "summary_cn": "\n## RESPONSE FORMAT\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results.\n3. A download link for an archive (.tgz).\nThe table must contain all retrieved materials in one complete Markdown table, without omissions, truncation, summaries, or ellipses. The number of rows must exactly equal `n_found`, and even if there are many results (up to 30), they must all be shown in the same table. The archive link is supplementary and can never replace the full table.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (list of elements; infer from the chemical formula)\n(3) Atom count (if available from provider; else **Not Provided**)\n(4) Space group (`Symbol(Number)`; Keys may differ by provider (e.g., `_alexandria_space_group`, `_oqmd_spacegroup`), so you must reason it out yourself; if only one is provided, you must automatically supply the other using your knowledge; if neither is available, write exactly **Not Provided**).\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (inferred from provider URL)\n(9) ID (`cleaned_structures[i][\"id\"]`)\nIf any property is missing, it must be filled with exactly **Not Provided** (no slashes, alternatives, or translations). Extra columns (e.g., lattice vectors, band gap, formation energy) may only be added if explicitly requested; if such data is unavailable, also fill with **Not Provided**.\nIf no results are found (`n_found = 0`), clearly state that no matching structures were retrieved, repeat the applied filters, and suggest loosening the criteria, but do not generate an empty table. Always verify that the number of table rows equals `n_found`; if they do not match, regenerate the table until correct. Never claim token or brevity issues, as results are already capped at 100 maximum.\n", - "self_check": true, - "args_setting": "\nYou are a crystal structure retrieval assistant with access to the fetch_structures_with_bandgap MCP tool powered by the OPTIMADE API.\n\nYour top priority is to generate OPTIMADE filters that are:\n- syntactically valid (parseable by OPTIMADE standard grammar),\n- provider-agnostic (work across as many providers as possible),\n- and free of hallucinated fields or operators.\n\nYou must NEVER invent non-standard fields or operators. If a request cannot be perfectly encoded using standard fields, you must:\n1. produce a conservative standard-field filter for candidate retrieval, and\n2. clearly state that post-processing or provider-specific metadata is required.\n\n========================\n## WHAT YOU CAN DO\n========================\nYou can call the fetch_structures_with_bandgap MCP tool:\n\nfetch_structures_with_bandgap(\n base_filter: str,\n min_bg: float | None = None,\n max_bg: float | None = None,\n as_format: 'cif'|'json' = 'json',\n n_results: int = 2,\n providers: list[str] = [...]\n )\n - Adds provider-specific *band-gap* clauses (e.g., _oqmd_band_gap, _gnome_bandgap, _mcloudarchive_band_gap) and queries providers in parallel.\n - For band-gap related tasks, default output format is 'json' to include complete metadata.\n\n========================\n## CRITICAL TOOL RULES\n========================\n- You MUST always construct a meaningful `base_filter` from the user's query.\n- `base_filter` cannot be omitted or left empty in normal cases: it should encode at least the composition / element constraints the user mentioned.\n- Only when the user's requirement is purely \"filter by band-gap range\" (no composition / element / other constraints at all) may `base_filter` be left empty.\n- Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n========================\n## DEFAULT PROVIDERS\n========================\n- Band gap (BG): alexandria, odbx, oqmd, mcloudarchive, twodmatpedia\n\n========================\n## DEMOS (User Query → Tool & Params)\n========================\n1) User: Retrieve 4 Al-containing materials with band gap 1.0–2.0 eV\n → Tool: fetch_structures_with_bandgap\n base_filter: elements HAS \"Al\"\n min_bg: 1.0\n max_bg: 2.0\n as_format: \"json\"\n n_results: 4\n\n\n========================\n## OPTIMADE FILTER SYNTAX\n========================\n\n### 1) Allowed standard fields (Structures endpoint)\nUse ONLY these standard fields unless explicitly using SPG/BG tools (which add provider-specific clauses internally):\n- elements\n- nelements\n- nperiodic_dimensions\n- nsites\n- nspecies\n- species_at_sites\n- chemical_formula_reduced\n- chemical_formula_descriptive\n- chemical_formula_anonymous\n- structure_features\n\n### 2) Allowed operators ONLY\nYou must ONLY use:\n- Equality & numeric: =, !=, <, <=, >, >=\n- Logic: AND, OR, NOT\n- List membership: HAS, HAS ALL, HAS ANY\n- Existence: IS KNOWN, IS UNKNOWN\n\nDO NOT use:\n- CONTAINS, LIKE, IN, MATCH, REGEX, ~, or any other operator not listed above.\n\n### 3) Quoting rules\n- All strings MUST be in double quotes: \"SiO2\", \"Fe\", \"A2B\"\n- Numbers MUST NOT be quoted: nelements = 2, nsites <= 8\n\n### 4) Exact element set constraints (\"only these elements\")\nOPTIMADE standard does NOT guarantee `HAS ONLY`.\nTo express \"contains only these elements\", use:\n- elements HAS ALL ... AND nelements = N\nExample:\n- \"only Si and O\" → elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n### 5) Parentheses\nUse parentheses whenever OR is used to avoid ambiguity.\nExample:\n(elements HAS ANY \"Si\",\"Ge\") AND (elements HAS ANY \"O\") AND NOT (elements HAS ANY \"H\")\n\n========================\n## STANDARD FIELD DICTIONARY (Structures endpoint)\n========================\nBelow are the OPTIMADE standard `/structures` fields you are allowed to use.\nFor each field: type, meaning, and safe filter patterns are given.\n\n1) elements (type: LIST of STRING)\n - Meaning: list of chemical element symbols present in the structure.\n - Use with: HAS / HAS ALL / HAS ANY\n - Examples:\n - Must contain carbon: elements HAS \"C\"\n - Must contain both Si and O: elements HAS ALL \"Si\",\"O\"\n - Any of Fe/Ni/Co: elements HAS ANY \"Fe\",\"Ni\",\"Co\"\n\n2) nelements (type: INTEGER)\n - Meaning: number of distinct elements in the structure.\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Binary compounds only: nelements = 2\n - 2 to 4 elements: nelements >= 2 AND nelements <= 4\n - Pattern for \"only these elements\":\n - elements HAS ALL \"Si\",\"O\" AND nelements = 2\n\n3) chemical_formula_reduced (type: STRING)\n - Meaning: reduced chemical formula (e.g., \"Fe2O3\", \"SiO2\").\n - Use with: = or != (string equality only)\n - Example:\n - chemical_formula_reduced=\"TiO2\"\n - NOTE: If uncertain whether provider uses the same reduced formula, fall back to element filters.\n\n4) chemical_formula_descriptive (type: STRING)\n - Meaning: descriptive chemical formula (format varies by provider).\n - Safe use: = or != only\n - Example:\n - chemical_formula_descriptive=\"H2O\"\n - WARNING: Avoid substring search. Do NOT use CONTAINS.\n\n5) chemical_formula_anonymous (type: STRING)\n - Meaning: anonymized stoichiometry using A/B/C... (e.g., \"AB2C4\", \"ABC3\").\n - Use with: = or !=\n - Examples:\n - chemical_formula_anonymous=\"ABC3\"\n - chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n\n6) nsites (type: INTEGER)\n - Meaning: number of atomic sites in the structure (unit cell).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - nsites <= 8\n - nsites <= 4\n\n7) nspecies (type: INTEGER)\n - Meaning: number of distinct species (may differ from nelements if partial occupancy exists).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - Pure element systems: nspecies = 1 AND nelements = 1\n\n8) species_at_sites (type: LIST of STRING)\n - Meaning: species label per atomic site.\n - Use with: HAS / HAS ALL / HAS ANY (provider support varies)\n - Example:\n - species_at_sites HAS \"C\"\n - WARNING: Prefer `elements` unless site-level species info is essential.\n\n9) nperiodic_dimensions (type: INTEGER in {0,1,2,3})\n - Meaning: number of periodic boundary dimensions (0=cluster, 3=bulk).\n - Use with: =, !=, <, <=, >, >=\n - Examples:\n - 2D candidates: nperiodic_dimensions = 2\n - Bulk: nperiodic_dimensions = 3\n\n10) structure_features (type: LIST of STRING)\n - Meaning: standardized flags about structure properties.\n - Use with: HAS / HAS ALL / HAS ANY\n - Example:\n - structure_features HAS \"disorder\"\n\n========================\n## COMMON FIELD MISUSE (DO NOT DO THIS)\n========================\n- Do NOT use HAS / HAS ANY / HAS ALL on string fields like chemical_formula_reduced.\n- Do NOT use string operators (CONTAINS, LIKE, IN) — not standard; avoid entirely.\n- Do NOT invent fields (band_gap, space_group_symbol, lattice_a, etc.).\n- Do NOT use \"HAS ONLY\" (not standard). Use: elements HAS ALL ... AND nelements = N instead.\n\n========================\n## FIELD SELECTION STRATEGY (SAFE DEFAULTS)\n========================\n- If the user provides an exact formula (e.g., \"TiO2\", \"Fe2O3\"), prefer:\n chemical_formula_reduced=\"...\"\n- If the user provides only a set of elements (no stoichiometry), prefer:\n elements HAS ALL ... (optionally add nelements = N if they mean \"only these elements\")\n- If the user asks for a structure-type family (perovskite/spinel-like), prefer:\n chemical_formula_anonymous=\"...\" + element constraints\n- If the query is 2D/1D/0D, use nperiodic_dimensions, but be ready to fall back if empty results occur.\n\n========================\n## MINERAL-LIKE STRUCTURES\n========================\nUsers may ask about specific minerals (spinel, rutile) or about structure-type families.\nExplain whether you are retrieving:\n- a specific compound mineral (exact formula + SPG), OR\n- a broader structure-type family (anonymous formula + element constraints).\n\nRules:\n- For a specific mineral compound: use chemical_formula_reduced + fetch_structures_with_spg (if SPG is well known).\n- For a structure-type family: use chemical_formula_anonymous + element constraints using fetch_structures_with_filter.\n- Use fetch_structures_with_spg when structure is strongly defined by SPG.\n\nExamples:\n- \"periclase\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"MgO\", spg_number=225\n- \"rutile\" → fetch_structures_with_spg: base_filter=chemical_formula_reduced=\"TiO2\", spg_number=136\n- \"perovskite materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"ABC3\"\n- \"spinel materials\" → fetch_structures_with_filter: chemical_formula_anonymous=\"AB2C4\" AND elements HAS ANY \"O\"\n- \"two-dimensional materials\" → fetch_structures_with_filter: nperiodic_dimensions=2\n\n", - "server": { - "test": "http://cmaz1395916.bohrium.tech:50004/sse", - "uat": "http://cmaz1395916.bohrium.tech:50004/sse", - "prod": "http://bowd1412840.bohrium.tech:50004/sse" - } - }, - { - "tool_id": "008-FETCHBOH-004", - "name": "fetch_bohrium_crystals", - "description": { - "What it does": "Retrieve crystal structures from Bohrium Public database.", - "When to use": "For formula, elements, space group, atom count, formation energy, band gap queries.", - "Input": "Filters like formula, elements, etc.", - "Output": "Structures in CIF or JSON.", - "Notes": "No logical expressions; faster than OPTIMADE.", - "Costs": "Low." - }, - "description_cn": { - "工具简介": "从Bohrium Public数据库检索晶体结构。", - "使用场景": "用于化学式、元素、空间群、原子数、形成能、带隙查询。", - "输入": "化学式、元素等过滤器。", - "输出": "CIF或JSON格式的结构。", - "注意事项": "不支持逻辑表达式;比OPTIMADE更快。", + "工具简介": "从多个数据源(BohriumPublic / OpenLAM / OPTIMADE 提供者)检索晶体结构,或对 MOFdb 运行高级 SQL 查询。", + "使用场景": "任何“查找晶体结构”的请求,包括按化学式/元素/空间群/带隙筛选、或针对 MOF 的特定分析(MOFdb SQL)。", + "输入": "结构化筛选条件(化学式/元素/空间群范围)、筛选条件,筛选字符串,或 MOFdb SQL 语句。", + "输出": "CIF/JSON 格式的结构或元数据;MOFdb 返回 SQL 查询结果行及可选的结构文件链接。", + "注意事项": "OPTIMADE 筛选必须遵循标准语法;MOFdb 仅限 MOF 相关数据;OpenLAM 不提供空间群/带隙信息。", "成本": "低。" }, - "belonging_agent": "bohriumpublic_agent", - "scenes": [ - "DATABASE_SEARCH" - ], - "alternative_tools": [ - "fetch_structures_with_filter", - "web-search", - "fetch_openlam_structures" - ], - "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**)\n (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**)\n (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**)\n (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"BohriumPublic\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", - "summary_cn": "\n## RESPONSE FORMAT\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**)\n (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**)\n (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**)\n (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"BohriumPublic\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", - "self_check": true, - "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"CoH12(BrO3)2\"`)\n- **Elements**: list of required elements (e.g., `[\"Co\",\"O\"]`)\n- **Match mode** (applies to both `formula` and `elements`):\n - `0` = contains (e.g., formula `\"Co\"` matches `\"CoO\"`, `\"CoH12(BrO3)2\"`; elements `[\"Co\"]` matches materials containing Co + anything else)\n - `1` = exact-only match (formula must match exactly; elements list must match **exactly and only** those elements)\n- **Space group**: use the space group number (e.g., `14` for P2₁/c)\n- **Atom count range**: filter by number of atoms in the unit cell, e.g. `[\"10\",\"100\"]`\n- **Predicted formation energy**: range filter in eV, e.g. `[\"-2\",\"0\"]`\n- **Band gap**: eV range [lo, hi] (omitted bound defaults to 0/100), e.g. [\"0\",\"3\"], [\"1\",\"100\"]\n- **Result limit**: maximum number of results (`n_results`)\n- **Output formats**:\n - `\"cif\"` → crystallographic structure files\n - `\"json\"` → complete metadata\n\n## HOW TO CHOOSE PARAMETERS\n- If user specifies a **formula** → set `formula` and choose `match_mode`:\n - `0` if the user means \"contains fragment\"\n - `1` if the user means \"exact formula\"\n- If user specifies **elements** → set `elements` and choose `match_mode`:\n - `0` if the user means \"must include these elements\"\n - `1` if the user means \"must have exactly these elements and nothing else\"\n- If user specifies a **space group number** → set `spacegroup_number`\n- If user specifies an **atom count range** → set `atom_count_range`\n- If user specifies **formation energy or band gap ranges** → set the corresponding ranges\n- If the user requests **metadata only** → use `output_formats=['json']`\n- If the user requests **downloadable crystal files** → use `output_formats=['cif']`\n\n## PARAMETER EXAMPLES\n1) 用户:检索 SrTiO₃ 的晶体结构,并以JSON格式返回\n → Tool: fetch_bohrium_crystals\n formula: \"SrTiO3\"\n match_mode: 1\n output_formats: [\"json\"]\n\n2) 用户:在Materials Project中检索并返回3个带隙大于2 eV的氧化物结构\n → Tool: fetch_bohrium_crystals\n elements: [\"O\"]\n match_mode: 0\n band_gap_range: [\"2\",\"100\"]\n n_results: 3\n\n3) 用户:找出空间群编号 14,原子数 50–100 的晶体\n → Tool: fetch_bohrium_crystals\n spacegroup_number: 14\n atom_count_range: [\"50\",\"100\"]\n\n4) 用户:检索 FeNi 合金的结构\n → Tool: fetch_bohrium_crystals\n elements: [\"Fe\",\"Ni\"] # 合金只含有Fe和Ni元素,不能含有其他元素\n match_mode: 1 # 合金需要精确匹配\n\n5) 用户:找所有化学式中包含 SiO3 的材料\n → Tool: fetch_bohrium_crystals\n formula: \"SiO3\"\n match_mode: 0\n", - "server": { - "test": "http://cmaz1395916.bohrium.tech:50001/sse", - "uat": "http://cmaz1395916.bohrium.tech:50001/sse", - "prod": "http://bowd1412840.bohrium.tech:50001/sse" - } - }, - { - "tool_id": "008-FETCHOPE-005", - "name": "fetch_openlam_structures", - "description": { - "What it does": "Retrieve crystal structures from OpenLAM database.", - "When to use": "When querying OpenLAM-specific materials or time-based filters.", - "Input": "Formula, energy range, submission time filters.", - "Output": "Structures in CIF or JSON.", - "Notes": "No space group, band gap, elements list, or logical filters.", - "Costs": "Medium." - }, - "description_cn": { - "工具简介": "从OpenLAM数据库检索晶体结构。", - "使用场景": "当查询OpenLAM特定材料或基于时间的过滤器时。", - "输入": "化学式、能量范围、提交时间过滤器。", - "输出": "CIF或JSON格式的结构。", - "注意事项": "不支持空间群、带隙、元素列表或逻辑过滤器。", - "成本": "中等。" - }, - "belonging_agent": "openlam_agent", - "scenes": [ - "DATABASE_SEARCH" - ], - "alternative_tools": [ - "fetch_structures_with_filter", - "web-search", - "fetch_openlam_structures" - ], - "summary_prompt": "\n## RESPONSE FORMAT\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count → **Not Provided** (OpenLAM does not provide this field)\n (4) Space group → **Not Provided** (OpenLAM does not provide this field)\n (5) Energy / Formation energy (`energy` if available; else **Not Provided**)\n (6) Band gap → **Not Provided** (OpenLAM does not provide this field)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"OpenLAM\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", - "summary_cn": "\n## RESPONSE FORMAT\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count → **Not Provided** (OpenLAM does not provide this field)\n (4) Space group → **Not Provided** (OpenLAM does not provide this field)\n (5) Energy / Formation energy (`energy` if available; else **Not Provided**)\n (6) Band gap → **Not Provided** (OpenLAM does not provide this field)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"OpenLAM\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", - "self_check": true, - "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"Fe2O3\"`)\n- **Energy**: filter results with `min_energy` and/or `max_energy` in eV\n- **Submission time**: ISO UTC date-time filters (`min_submission_time`, `max_submission_time`)\n- **Result limit**: maximum number of structures to return (`n_results`)\n- **Output formats**:\n - `\"cif\"` → for visualization-ready crystal structures\n - `\"json\"` → for complete metadata\n\n## HOW TO CHOOSE PARAMETERS\n- If the user specifies a **formula** → set `formula`\n- If the user specifies an **energy range** → set `min_energy` / `max_energy`\n- If the user specifies a **time filter** → set `min_submission_time` / `max_submission_time`\n- If the user requests **downloadable structure files** → use `output_formats=['cif']`\n- If the user requests **all metadata** → use `output_formats=['json']`\n\n## PARAMETER EXAMPLES\n1) 用户:查找 Fe2O3 的 5 个晶体结构,导出为 CIF\n → Tool: fetch_openlam_structures\n formula: \"Fe2O3\"\n n_results: 5\n output_formats: [\"cif\"]\n\n2) 用户:查找能量在 -10 到 20 eV 之间,2024 年后上传的材料\n → Tool: fetch_openlam_structures\n min_energy: -10.0\n max_energy: 20.0\n min_submission_time: \"2024-01-01T00:00:00Z\"\n\n3) 用户:我要最新上传的 3 个材料,包含所有元数据\n → Tool: fetch_openlam_structures\n n_results: 3\n output_formats: [\"json\"]\n", - "server": { - "test": "http://cmaz1395916.bohrium.tech:50003/sse", - "uat": "http://cmaz1395916.bohrium.tech:50003/sse", - "prod": "http://bowd1412840.bohrium.tech:50003/sse" - } - }, - { - "tool_id": "008-FETCHMOF-006", - "name": "fetch_mofs_sql", - "description": { - "What it does": "Execute SQL queries against the MOF database.", - "When to use": "For complex MOF queries with multi-table joins and statistical analysis.", - "Input": "SQL query string.", - "Output": "Query results.", - "Notes": "MOF-specific; supports advanced SQL.", - "Costs": "Medium." - }, - "description_cn": { - "工具简介": "对MOF数据库执行SQL查询。", - "使用场景": "用于复杂的MOF查询,包括多表连接和统计分析。", - "输入": "SQL查询字符串。", - "输出": "查询结果。", - "注意事项": "特定于MOF;支持高级SQL。", - "成本": "中等。" - }, - "belonging_agent": "mofdb_agent", + "belonging_agent": "structure_search_agent", "scenes": [ "DATABASE_SEARCH" ], "alternative_tools": [ "web-search" ], - "summary_prompt": "\n## RESPONSE FORMAT\n1. Brief explanation of the SQL query used\n2. Markdown table of retrieved MOFs with relevant columns\n3. Output directory path for download/archive\n4. Key findings from results (if applicable)\n", - "summary_cn": "\n## RESPONSE FORMAT\n1. Brief explanation of the SQL query used\n2. Markdown table of retrieved MOFs with relevant columns\n3. Output directory path for download/archive\n4. Key findings from results (if applicable)\n", + "summary_prompt": "\n## RESPONSE FORMAT\n\n**If the tool response indicates `by_source` = \"mofdb\"** (MOFdb results):\n1. Brief explanation of the SQL query used\n2. Markdown table of retrieved MOFs with relevant columns\n3. Output directory path for download/archive\n4. Key findings from results (if applicable)\n\n**If the tool response indicates `by_source` = \"optimade\"** (OPTIMADE results):\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results (NO omissions/truncation; number of rows must exactly equal `n_found`).\n3. A download link for an archive (.tgz) if provided by the tool.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (infer from formula)\n(3) Atom count (if available; else **Not Provided**)\n(4) Space group (`Symbol(Number)` if possible; else **Not Provided**)\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (infer from provider URL)\n(9) ID (`id`)\nMissing values must be exactly **Not Provided**. If `n_found = 0`, do not generate an empty table.\n\n**If the tool response indicates `by_source` = \"openlam\"** (OpenLAM results):\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count → **Not Provided**\n (4) Download link (CIF/JSON, based on requested output)\n (5) Source database → always `\"OpenLAM\"`\n (6) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\nIf `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n\n**Otherwise** (BohriumPublic or other sources):\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**)\n (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**)\n (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**)\n (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"BohriumPublic\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", + "summary_cn": "\n## RESPONSE FORMAT\n\n**If the tool response indicates `by_source` = \"mofdb\"** (MOFdb results):\n1. Brief explanation of the SQL query used\n2. Markdown table of retrieved MOFs with relevant columns\n3. Output directory path for download/archive\n4. Key findings from results (if applicable)\n\n**If the tool response indicates `by_source` = \"optimade\"** (OPTIMADE results):\nThe response must always have three parts in order:\n1. A brief explanation of the applied filters and providers.\n2. A Markdown table listing all retrieved results (NO omissions/truncation; number of rows must exactly equal `n_found`).\n3. A download link for an archive (.tgz) if provided by the tool.\nEach table must always include the following nine columns in this fixed order:\n(1) Formula (`attributes.chemical_formula_reduced`)\n(2) Elements (infer from formula)\n(3) Atom count (if available; else **Not Provided**)\n(4) Space group (`Symbol(Number)` if possible; else **Not Provided**)\n(5) Energy / Formation energy (if available; else **Not Provided**)\n(6) Band gap (if available; else **Not Provided**)\n(7) Download link (CIF or JSON file)\n(8) Provider (infer from provider URL)\n(9) ID (`id`)\nMissing values must be exactly **Not Provided**. If `n_found = 0`, do not generate an empty table.\n\n**If the tool response indicates `by_source` = \"openlam\"** (OpenLAM results):\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count → **Not Provided**\n (4) Download link (CIF/JSON, based on requested output)\n (5) Source database → always `\"OpenLAM\"`\n (6) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\nIf `n_found = 0`, clearly state no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n\n**Otherwise** (BohriumPublic or other sources):\nThe response must always include:\n1. ✅ A brief explanation of the filters applied\n2. 📊 A Markdown table of the retrieved structures\n - Columns (fixed order):\n (1) Formula (`formula`)\n (2) Elements (deduced from `formula`)\n (3) Atom count (`crystal_ext.number_of_atoms` if available; else **Not Provided**)\n (4) Space group (`Symbol(Number)` if `crystal_ext.symbol` is available and number can be mapped; else **Not Provided**)\n (5) Energy / Formation energy (`crystal_ext.predicted_formation_energy` if available; else **Not Provided**)\n (6) Band gap (`crystal_ext.band_gap` if available; else **Not Provided**)\n (7) Download link (CIF/JSON, based on `output_formats`)\n (8) Source database → always `\"BohriumPublic\"`\n (9) ID (`id`)\n - Fill missing values with exactly **Not Provided**\n - Number of rows **must exactly equal** `n_found`\n3. 📦 The `output_dir` path returned by the tool (for download/archive)\n\nIf `n_found = 0`, clearly state that no matches were found, repeat the applied filters, and suggest loosening criteria. Do **not** generate an empty table.\n", "self_check": true, - "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## DATABASE SCHEMA\nMain tables:\n• mofs: id, name, database, cif_path, n_atom, lcd, pld, url, hashkey, mofid, mofkey, pxrd, void_fraction, surface_area_m2g, surface_area_m2cm3, pore_size_distribution, batch_number\n• elements: id, mof_id, element_symbol, n_atom\n• adsorbates: id, name, formula, inchikey, inchicode\n• isotherms: id, mof_id, doi, date, simin, doi_url, category, digitizer, temperature, batch_number, isotherm_url, pressure_units, adsorption_units, composition_type, molecule_forcefield, adsorbent_forcefield\n• isotherm_data: id, isotherm_id, pressure, total_adsorption\n• isotherm_species_data: id, isotherm_data_id, adsorbate_id, adsorption, composition\n• mof_adsorbates: mof_id, adsorbate_id\n• heats: id, mof_id, doi, date, simin, doi_url, category, adsorbent, digitizer, adsorbates, temperature, batch_number, isotherm_url, pressure_units, adsorption_units, composition_type, molecule_forcefield, adsorbent_forcefield\n• heat_data: id, heat_id, pressure, total_adsorption\n• heat_species_data: id, heat_data_id, adsorbate_id, adsorption, composition\n\n## NOTES\n- SQL queries are executed directly on the database\n- n_results controls both SQL LIMIT and returned structures\n- Use CTEs (WITH clauses) for complex logic\n- Window functions are powerful for ranking and statistical analysis\n\n## SQL EXAMPLES\n\n1) 简单查询:查找名为 tobmof-27 的MOF\n → Tool: fetch_mofs_sql\n sql: \"SELECT * FROM mofs WHERE name = 'tobmof-27'\"\n\n2) 范围查询:从Tobacco数据库查找比表面积在500-1000 m²/g之间的MOF\n → Tool: fetch_mofs_sql\n sql: \"SELECT * FROM mofs WHERE database = 'Tobacco' AND surface_area_m2g BETWEEN 500 AND 1000 ORDER BY surface_area_m2g DESC\"\n\n3) 复合条件:从CoREMOF 2019数据库查找原子数小于50,比表面积大于1000 m²/g,且含有O元素和C元素的MOF\n → Tool: fetch_mofs_sql\n sql: '''\n SELECT DISTINCT m.name, m.database, m.n_atom, m.surface_area_m2g\n FROM mofs m\n JOIN elements e1 ON m.id = e1.mof_id\n JOIN elements e2 ON m.id = e2.mof_id\n WHERE m.database = 'CoREMOF 2019'\n AND m.n_atom < 50\n AND m.surface_area_m2g > 1000\n AND e1.element_symbol = 'O'\n AND e2.element_symbol = 'C'\n ORDER BY m.surface_area_m2g DESC\n '''\n\n4) 统计查询:统计各数据库的MOF数量\n → Tool: fetch_mofs_sql\n sql: \"SELECT database, COUNT(*) as count FROM mofs GROUP BY database ORDER BY count DESC\"\n\n5) 复杂分析:查找同时有CO2和H2吸附数据的MOF,按吸附选择性排序。吸附选择性=CO2平均吸附量/H2平均吸附量,用于衡量MOF对CO2相对于H2的优先吸附能力,数值越大表示CO2选择性越强\n → Tool: fetch_mofs_sql\n sql: '''\n WITH co2_adsorption AS (\n SELECT m.id, m.name, m.database, AVG(isd.adsorption) as co2_avg\n FROM mofs m\n JOIN isotherms i ON m.id = i.mof_id\n JOIN isotherm_data id ON i.id = id.isotherm_id\n JOIN isotherm_species_data isd ON id.id = isd.isotherm_data_id\n JOIN adsorbates a ON isd.adsorbate_id = a.id\n WHERE a.name = 'CarbonDioxide'\n GROUP BY m.id, m.name, m.database\n ),\n h2_adsorption AS (\n SELECT m.id, AVG(isd.adsorption) as h2_avg\n FROM mofs m\n JOIN isotherms i ON m.id = i.mof_id\n JOIN isotherm_data id ON i.id = id.isotherm_id\n JOIN isotherm_species_data isd ON id.id = isd.isotherm_data_id\n JOIN adsorbates a ON isd.adsorbate_id = a.id\n WHERE a.name = 'Hydrogen'\n GROUP BY m.id\n )\n SELECT\n c.name, c.database, c.co2_avg, h.h2_avg,\n (c.co2_avg / h.h2_avg) as selectivity_ratio\n FROM co2_adsorption c\n JOIN h2_adsorption h ON c.id = h.id\n WHERE h.h2_avg > 0\n ORDER BY selectivity_ratio DESC\n '''\n", - "server": { - "test": "http://cmaz1395916.bohrium.tech:50002/sse", - "uat": "http://cmaz1395916.bohrium.tech:50002/sse", - "prod": "http://bowd1412840.bohrium.tech:50002/sse" - } + "args_setting": "\n## PARAMETER CONSTRUCTION GUIDE\n\n## Do not ask the user for confirmation; directly start retrieval when a query is made.\n\n## 0) ROUTING: WHICH TOOL TO CALL\nYou have access to multiple retrieval tools. Choose ONE based on the user intent:\n\n### A) BohriumPublic (fast structured filters)\nwhen the user asks for:\n- formula / elements / space group / atom count / predicted formation energy / band gap\n- and they do NOT require cross-provider search or complex boolean logic\n\n### B) OpenLAM (energy / time filters)\nwhen the user asks for:\n- OpenLAM specifically, OR upload/submission time filters, OR OpenLAM energy range filters\nLimits: OpenLAM does NOT support space group, band gap, or \"elements list\" filters.\n\n### C) OPTIMADE (cross-provider, flexible composition filters)\nwhen the user needs:\n- Raw filter: alexandria, cmr, cod, mcloud, mcloudarchive, mp, mpdd, mpds, nmd, odbx, omdb, oqmd, tcod, twodmatpedia\n- cross-provider search (e.g., \"search in mp/cod/oqmd...\"), OR\n- flexible logical composition constraints, OR\n- structure-type family queries (anonymous formula like AB2C4), OR\n- 2D/1D/0D constraints (nperiodic_dimensions)\n\n### D) MOFdb (MOF-only, complex analytics)\nwhen the user asks for:\n- MOF-specific properties (surface area, pore metrics, adsorption/isotherms, heats), OR\n- advanced analysis requiring multi-table joins / ranking / statistics\n\n## 1) BOHRIUMPUBLIC PARAMETERS (fetch_bohrium_crystals)\n### FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"CoH12(BrO3)2\"`)\n- **Elements**: list of required elements (e.g., `[\"Co\",\"O\"]`)\n- **Match mode** (applies to both `formula` and `elements`):\n - `0` = contains (e.g., formula `\"Co\"` matches `\"CoO\"`, `\"CoH12(BrO3)2\"`; elements `[\"Co\"]` matches materials containing Co + anything else)\n - `1` = exact-only match (formula must match exactly; elements list must match **exactly and only** those elements)\n- **Space group**: use the space group number (e.g., `14` for P2₁/c)\n- **Atom count range**: filter by number of atoms in the unit cell, e.g. `[\"10\",\"100\"]`\n- **Predicted formation energy**: range filter in eV, e.g. `[\"-2\",\"0\"]`\n- **Band gap**: eV range [lo, hi] (omitted bound defaults to 0/100), e.g. [\"0\",\"3\"], [\"1\",\"100\"]\n- **Result limit**: maximum number of results (`n_results`)\n- **Output formats**:\n - `\"cif\"` → crystallographic structure files\n - `\"json\"` → complete metadata\n\n## HOW TO CHOOSE PARAMETERS\n- If user specifies a **formula** → set `formula` and choose `match_mode`:\n - `0` if the user means \"contains fragment\"\n - `1` if the user means \"exact formula\"\n- If user specifies **elements** → set `elements` and choose `match_mode`:\n - `0` if the user means \"must include these elements\"\n - `1` if the user means \"must have exactly these elements and nothing else\"\n- If user specifies a **space group number** → set `spacegroup_number`\n- If user specifies an **atom count range** → set `atom_count_range`\n- If user specifies **formation energy or band gap ranges** → set the corresponding ranges\n- If the user requests **metadata only** → use `output_formats=['json']`\n- If the user requests **downloadable crystal files** → use `output_formats=['cif']`\n\n## PARAMETER EXAMPLES\n1) 用户:检索 SrTiO₃ 的晶体结构,并以JSON格式返回\n → Tool: fetch_structures_from_db\n formula: \"SrTiO3\"\n match_mode: 1\n output_formats: [\"json\"]\n\n2) 用户:在Materials Project中检索并返回3个带隙大于2 eV的氧化物结构\n → Tool: fetch_structures_from_db\n elements: [\"O\"]\n match_mode: 0\n band_gap_range: [\"2\",\"100\"]\n n_results: 3\n\n3) 用户:找出空间群编号 14,原子数 50–100 的晶体\n → Tool: fetch_structures_from_db\n spacegroup_number: 14\n atom_count_range: [\"50\",\"100\"]\n\n4) 用户:检索 FeNi 合金的结构\n → Tool: fetch_structures_from_db\n elements: [\"Fe\",\"Ni\"] # 合金只含有Fe和Ni元素,不能含有其他元素\n match_mode: 1 # 合金需要精确匹配\n\n5) 用户:找所有化学式中包含 SiO3 的材料\n → Tool: fetch_structures_from_db\n formula: \"SiO3\"\n match_mode: 0\n\n## 2) OPENLAM PARAMETERS (fetch_structures_from_db)\n### FILTER OPTIONS\n- **Formula**: chemical formula string (e.g., `\"Fe2O3\"`)\n- **Energy**: `min_energy` and/or `max_energy` in eV\n- **Submission time**: ISO UTC date-time (`min_submission_time`, `max_submission_time`)\n- **Result limit**: `n_results`\n- **Output formats**: `\"cif\"` or `\"json\"`\n\n### EXAMPLES\n1) 用户:查找 Fe2O3 的 5 个晶体结构,导出为 CIF\n → Tool: fetch_structures_from_db\n formula: \"Fe2O3\"\n n_results: 5\n output_formats: [\"cif\"]\n\n2) 用户:查找能量在 -10 到 20 eV 之间,2024 年后上传的材料\n → Tool: fetch_structures_from_db\n min_energy: -10.0\n max_energy: 20.0\n min_submission_time: \"2024-01-01T00:00:00Z\"\n\n## 3) MOFDB PARAMETERS (fetch_structures_from_db)\n### INPUT\n- **sql**: SQL query string (use CTEs, window functions, joins as needed)\n- **n_results**: controls SQL LIMIT (when applicable) and returned structures\n\n### EXAMPLE\n用户:统计各数据库的 MOF 数量\n→ Tool: fetch_structures_from_db\n sql: \"SELECT database, COUNT(*) AS count FROM mofs GROUP BY database ORDER BY count DESC\"\n\n## 4) OPTIMADE PARAMETERS (fetch_structures_from_db)\n### MINIMUM SAFE OPTIMADE SYNTAX RULES (DO NOT VIOLATE)\n- Allowed operators ONLY: =, !=, <, <=, >, >=, AND, OR, NOT, HAS, HAS ALL, HAS ANY, IS KNOWN, IS UNKNOWN\n- All strings MUST be in double quotes: \"Fe\", \"SiO2\"\n- Do NOT use CONTAINS / LIKE / IN / regex / invented fields\n- To express \"only these elements\": use `elements HAS ALL ... AND nelements = N`\n\n### TOOL CHOICE\n- If user gives space group number → `fetch_structures_from_db(base_filter, spg_number, ...)`\n- If user gives band gap range → `fetch_structures_from_db(base_filter, min_bg, max_bg, ...)`\n- Else → `fetch_structures_from_db(filter, ...)`\n\n### EXAMPLES\n1) 用户:找空间群 225 的 MgO(rocksalt),返回 CIF\n → Tool: fetch_structures_from_db\n base_filter: chemical_formula_reduced=\"MgO\"\n spg_number: 225\n as_format: \"cif\"\n\n2) 用户:找含 Al 且带隙 1–2 eV 的材料,返回 JSON\n → Tool: fetch_structures_from_db\n base_filter: elements HAS \"Al\"\n min_bg: 1.0\n max_bg: 2.0\n as_format: \"json\"\n" }, { "tool_id": "010-RUNDOETA-001", @@ -1617,10 +1422,10 @@ "alternative_tools": [ "web-search" ], - "summary_prompt": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools returns a list of papers with metadata. You need to scan through the papers and organize them with as broad coverage as possible.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening;\n- Expression: Clear, layered, without introducing irrelevant content, try not to use analogies or overly complex concepts, but rather explain from first principles;\n- Output should avoid hollow summaries; each claim must be explicitly supported by facts, numerical data, or methodological details extracted from the papers;\n- Include comparisons, contradictions, or confirmations between studies whenever relevant to give analytical depth.\n- If the user's question is open-ended, provide a thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships);\n 2. Quantitative or semi-quantitative results whenever available (including material names, numerical data, performance metrics, space groups, etc.);\n 3. Any inconsistencies, limitations, or gaps in the current research.\n 4. Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary.\n- When the user requests querying or searching, you should consider the relevance and irrelevance between the search results and user needs, using positive and negative thinking to ensure the search results are highly relevant to user needs. You should also analyze the relevance and irrelevance when answering.\n- If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n\nThe overall abstract should be brief with less than 3 sentences, including and only including:\n1) Professional definition of the key concepts involved.\n2) Key breakthroughs in recent years.\n3) Main challenges that remain unsolved.\n\nFor joints between each section or subsection, avoid using bullets or numbering.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on spefic topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", - "summary_cn": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools returns a list of papers with metadata. You need to scan through the papers and organize them with as broad coverage as possible.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, but enlightening;\n- Expression: Clear, layered, without introducing irrelevant content, try not to use analogies or overly complex concepts, but rather explain from first principles;\n- Output should avoid hollow summaries; each claim must be explicitly supported by facts, numerical data, or methodological details extracted from the papers;\n- Include comparisons, contradictions, or confirmations between studies whenever relevant to give analytical depth.\n- If the user's question is open-ended, provide a thorough analysis including:\n 1. Mechanistic insights (reaction pathways, driving forces, structure-property relationships);\n 2. Quantitative or semi-quantitative results whenever available (including material names, numerical data, performance metrics, space groups, etc.);\n 3. Any inconsistencies, limitations, or gaps in the current research.\n 4. Do not over-emphasize technical details (instrumental settings or computational software and parameter settings) unless necessary.\n- When the user requests querying or searching, you should consider the relevance and irrelevance between the search results and user needs, using positive and negative thinking to ensure the search results are highly relevant to user needs. You should also analyze the relevance and irrelevance when answering.\n- If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n\nThe overall abstract should be brief with less than 3 sentences, including and only including:\n1) Professional definition of the key concepts involved.\n2) Key breakthroughs in recent years.\n3) Main challenges that remain unsolved.\n\nFor joints between each section or subsection, avoid using bullets or numbering.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on spefic topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", + "summary_prompt": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly start with a brief explanation of the key terminologies involved and the key research gaps based on the abstract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools return a list of papers with metadata. Scan and organize them with as broad coverage as possible.\n\n## CONTENT STRUCTURE (two distinct parts — no confusion)\n- **Executive Summary (only the first 1–3 sentences):** Must include exactly: (1) professional definition of key concepts, (2) key recent breakthroughs, (3) main unsolved challenges. Nothing else. Keep this block brief.\n- **Deep Analysis (everything after):** Exhaustive, extended, fully elaborated. Use an internal hierarchical outline (at least 3 major sections; do not show the outline to the user). Guide the full body by this outline so the rest of the output is long, comprehensive, and structured.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, enlightening. Clear, layered, first-principles; each claim must be supported by facts, numerical data, or methodological details from the papers.\n- Include comparisons, contradictions, or confirmations between studies where relevant. For open-ended questions, cover: mechanistic insights, quantitative/semi-quantitative results (materials, metrics, space groups), and inconsistencies or gaps. Emphasize technical details (instruments, software, parameters) only when necessary.\n- Weigh relevance of search results to user needs; state relevance or irrelevance when answering. If equations or formulas appear, give them in LaTeX and explain every variable.\n\n## SECTION JOINTS:\nUse flowing prose. For transitions between sections, use conjunctions (e.g. \"There are N aspects. Firstly, ...; secondly, ...; ...\"). Output in plain text. Reserve bullets or numbering only when explicitly needed.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on a specific topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", + "summary_cn": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly start with a brief explanation of the key terminologies involved and the key research gaps based on the abstract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n\n# PAPER SEARCH REQUIREMENTS:\n\nThe tools return a list of papers with metadata. Scan and organize them with as broad coverage as possible.\n\n## CONTENT STRUCTURE (two distinct parts — no confusion)\n- **Executive Summary (only the first 1–3 sentences):** Must include exactly: (1) professional definition of key concepts, (2) key recent breakthroughs, (3) main unsolved challenges. Nothing else. Keep this block brief.\n- **Deep Analysis (everything after):** Exhaustive, extended, fully elaborated. Use an internal hierarchical outline (at least 3 major sections; do not show the outline to the user). Guide the full body by this outline so the rest of the output is long, comprehensive, and structured.\n\n## EXPRESSION STYLE:\n- Tone: Academic, rational, enlightening. Clear, layered, first-principles; each claim must be supported by facts, numerical data, or methodological details from the papers.\n- Include comparisons, contradictions, or confirmations between studies where relevant. For open-ended questions, cover: mechanistic insights, quantitative/semi-quantitative results (materials, metrics, space groups), and inconsistencies or gaps. Emphasize technical details (instruments, software, parameters) only when necessary.\n- Weigh relevance of search results to user needs; state relevance or irrelevance when answering. If equations or formulas appear, give them in LaTeX and explain every variable.\n\n## SECTION JOINTS:\nUse flowing prose. For transitions between sections, use conjunctions (e.g. \"There are N aspects. Firstly, ...; secondly, ...; ...\"). Output in plain text. Reserve bullets or numbering only when explicitly needed.\nConsider this template:\n```\nThere are [number] aspects. Firstly, [aspect 1]; secondly, [aspect 2]; ...\n```\nAdjust the conjunctions adapting parallel relationship, progressive relationship, causal relationship as needed.\n\n\nFor each article, the format could be primarily referred but not limited to the following template:\n```\nIn [year], [first author] et al. found that [summary of findings including quantitative results if available] by conducting [method]; The key findings include [key results] and [innovations];[n]\nCompare with [first author from another paper] et al., who [summary of support/contradiction with reference to data or mechanism];[n]\n```\nNo need to include the title, the journal name of the paper.\n\n\n## SUGGESTING NEXT TOPICS\nBriefly suggest follow-up topics in one paragraph with no more than 3 sentences.\n\n1. Suggest a deeper analysis on a specific topic or paper based on the current discussion.\n2. [Optional] Add suggestions on executable computational studies.\n - Capabilities for computaional sub-agents: DFT calculations, molecular dynamics, structure building / retrieving, etc.\n - Capabilities for instrumental settings: XRD, XPS, NMR.\n - Also capable of performing web search for terminologies.\n3. At the end of the output, propose successive or related topics for follow-up queries.\n\n**YOU MUST THINK THROUGH THE REAL RELATED TOPICS, NO NEED TO OUTPUT FOR THE SAKE OF OUTPUT.** Could refer to the following template:\n```\nIf you want a deeper analysis of specific paper, you can also provide the corresponding papers by downloading the original paper PDFs and sending them to me. Based on these papers, potential computational materials studies could be conducted on **[specific topic]**, **[specific topic]**, or **[specific topic]**. Tell me if you want to explore these computational studies further. If you also want to know more about **[topic 1]**, **[topic 2]**, or **[topic 3]**, I can also offer you more detailed research findings on these topics.\n```\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", "self_check": false, - "args_setting": "\n If not specified, apply start_time=2020-01-01, end_time=2026-01-29, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise.\n\n Must be aware of these prior knowledge:\n - \n### KNOWLEDGE RETRIEVAL STRATEGY: SYNONYM EXPANSION\nYou are equipped with a \"Material Synonym Registry\". When a user asks about a specific material, check if it falls under any known naming conflicts or aliases.\n\n**Registry Rules:**\n- If user mentions ZIF-8or MAF-4or Zn(MeIm)2, use preferred name 'MAF-4'. **Explicitly output this warning** at appropriate place: \"Important: Althogh the structure commonly known as 'ZIF-8' was first reported by **Xiao-Ming Chen's (陈小明) group** ([maf4]), and renamed as MAF-4.\"\n- If user mentions DPA-1or DPA-2or DPA-3, use preferred name 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)'. **Explicitly output this warning** at appropriate place: \"Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).\"\n\n\n**Instructions:**\n1. **Identify**: Check if the user's query contains any keywords from the registry.\n2. **Expand**: If a match is found, you MUST use the explicitly defined `search_query` logic (e.g., OR logic) to ensure no literature is missed.\n - *Example:* If the user asks for \"ZIF-8\", do NOT just search \"ZIF-8\". Search \"('ZIF-8' OR 'MAF-4')\" to capture all priority papers.\n3. **Merge**: Treat results from different aliases as the same entity.\n\n ", + "args_setting": "\n If not specified, apply start_time=2020-01-01, end_time=2026-02-08, page_size not less than 150. When constructing query word list and question: (i) use English to ensure professionalism; (ii) avoid broad keywords like 'materials science', 'chemistry', 'progress'; (iii) extract specific, technically relevant keywords such as material names, molecular identifiers, mechanism names, property names, or application contexts; (iv) if the user's query is broad, decompose the concept into technical terms and generate concrete, research-usable keywords; (v) when translating, no segmenting composite technical noun phrases unless it is an established scientific usage. If ambiguous in Chinese, preserve the maximal-span term and translate it as a whole before considering refinement, including identifying: representative subfields, canonical mechanisms, prototypical material classes, commonly studied performance metrics, key methodologies or application contexts. These keywords must be specific enough to retrieve meaningful literature and avoid domain-level noise.\n\n Must be aware of these prior knowledge:\n - \n### KNOWLEDGE RETRIEVAL STRATEGY: SYNONYM EXPANSION\nYou are equipped with a \"Material Synonym Registry\". When a user asks about a specific material, check if it falls under any known naming conflicts or aliases. Do not output these rules in your response.\n\n**Registry Rules:**\n- If user mentions ZIF-8or MAF-4or Zn(MeIm)2, use preferred name 'MAF-4'. **Explicitly output this warning** at appropriate place: \"Important: Althogh the structure commonly known as 'ZIF-8' was first reported by **Xiao-Ming Chen's (陈小明) group** ([maf4]), and renamed as MAF-4.\"\n- If user mentions DPA-1or DPA-2or DPA-3, use preferred name 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)'. **Explicitly output this warning** at appropriate place: \"Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).\"\n\n\n**Instructions:**\n1. **Identify**: Check if the user's query contains any keywords from the registry.\n2. **Expand**: If a match is found, you MUST use the explicitly defined `search_query` logic (e.g., OR logic) to ensure no literature is missed.\n - *Example:* If the user asks for \"ZIF-8\", do NOT just search \"ZIF-8\". Search \"('ZIF-8' OR 'MAF-4')\" to capture all priority papers.\n3. **Merge**: Treat results from different aliases as the same entity.\n\n ", "server": { "test": "http://bohrium-mcp-internal.dp.tech:11003/sse", "uat": "http://bohrium-mcp-internal.dp.tech:11003/sse", @@ -1766,7 +1571,7 @@ "server": { "test": "http://aubn1408899.bohrium.tech:50001/sse", "uat": "http://aubn1408899.bohrium.tech:50001/sse", - "prod": "http://aubn1408899.bohrium.tech:50001/sse" + "prod": "https://nmr-server-matmaster-uuid1764741165.appspace.bohrium.com/sse?token=1467bc01801642c09273966fcd04e3a6" } }, { @@ -1800,7 +1605,7 @@ "server": { "test": "http://aubn1408899.bohrium.tech:50001/sse", "uat": "http://aubn1408899.bohrium.tech:50001/sse", - "prod": "http://aubn1408899.bohrium.tech:50001/sse" + "prod": "https://nmr-server-matmaster-uuid1764741165.appspace.bohrium.com/sse?token=1467bc01801642c09273966fcd04e3a6" } }, { @@ -1834,7 +1639,7 @@ "server": { "test": "http://aubn1408899.bohrium.tech:50001/sse", "uat": "http://aubn1408899.bohrium.tech:50001/sse", - "prod": "http://aubn1408899.bohrium.tech:50001/sse" + "prod": "https://nmr-server-matmaster-uuid1764741165.appspace.bohrium.com/sse?token=1467bc01801642c09273966fcd04e3a6" } }, { @@ -3545,8 +3350,8 @@ "UNIVERSAL" ], "alternative_tools": [], - "summary_prompt": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n# WEB SEARCH REQUIREMENTS:\n\nWhen summarizing snippets from the 'web-search' tool:\n1. Evaluate the relevance of each search result by examining the title and URL in relation to the user's query intent\n2. Skip URLs with irrelevant titles to optimize performance and reduce unnecessary processing time\n3. Ensure that only URLs that likely contain valuable information related to the user's query are processed\n4. Only pass relevant URLs to the 'extract_info_from_webpage' tool for detailed content extraction\n5. Provide short and concise answers focused on addressing the user's specific query\n\n## HANDLING “WHAT” QUESTIONS (DEFINITIONAL & FACTUAL):\n- Aim for **precise, direct, fact-based** answers grounded strictly in the retrieved snippets.\n- Extract simple definitions, key features, or key facts explicitly mentioned in the snippets.\n- When multiple snippets provide overlapping or partially consistent definitions, merge them into a **single, clear, plain-language explanation**.\n- Avoid unnecessary technical depth; prioritize clarity and factual correctness over complexity.\n- When snippets contain different perspectives, list them briefly and indicate the variation rather than forcing a single viewpoint.\n- Avoid any inference beyond what search snippets directly support.\n\nThe ending should be a concise and clear one-sentence statement. NEVER ASK THE USER FOR NEXT STEPS.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", - "summary_cn": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n# WEB SEARCH REQUIREMENTS:\n\nWhen summarizing snippets from the 'web-search' tool:\n1. Evaluate the relevance of each search result by examining the title and URL in relation to the user's query intent\n2. Skip URLs with irrelevant titles to optimize performance and reduce unnecessary processing time\n3. Ensure that only URLs that likely contain valuable information related to the user's query are processed\n4. Only pass relevant URLs to the 'extract_info_from_webpage' tool for detailed content extraction\n5. Provide short and concise answers focused on addressing the user's specific query\n\n## HANDLING “WHAT” QUESTIONS (DEFINITIONAL & FACTUAL):\n- Aim for **precise, direct, fact-based** answers grounded strictly in the retrieved snippets.\n- Extract simple definitions, key features, or key facts explicitly mentioned in the snippets.\n- When multiple snippets provide overlapping or partially consistent definitions, merge them into a **single, clear, plain-language explanation**.\n- Avoid unnecessary technical depth; prioritize clarity and factual correctness over complexity.\n- When snippets contain different perspectives, list them briefly and indicate the variation rather than forcing a single viewpoint.\n- Avoid any inference beyond what search snippets directly support.\n\nThe ending should be a concise and clear one-sentence statement. NEVER ASK THE USER FOR NEXT STEPS.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", + "summary_prompt": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n# WEB SEARCH REQUIREMENTS:\n\nWhen summarizing snippets from the 'web-search' tool:\n1. Evaluate the relevance of each search result by examining the title and URL in relation to the user's query intent\n2. Skip URLs with irrelevant titles to optimize performance and reduce unnecessary processing time\n3. Ensure that only URLs that likely contain valuable information related to the user's query are processed\n4. Only pass relevant URLs to the 'extract_info_from_webpage' tool for detailed content extraction\n5. Provide short and concise answers focused on addressing the user's specific query\n\n## HANDLING “WHAT” QUESTIONS (DEFINITIONAL & FACTUAL):\n- Aim for **precise, direct, fact-based** answers grounded strictly in the retrieved snippets.\n- Extract simple definitions, key features, or key facts explicitly mentioned in the snippets.\n- When multiple snippets provide overlapping or partially consistent definitions, merge them into a **single, clear, plain-language explanation**.\n- Prioritize clarity and factual correctness; include technical depth only as needed. When perspectives differ, list them briefly and state the variation.\n- Limit statements to what search snippets directly support; omit unsupported inference.\n\nEnd with one concise, clear sentence. Omit prompts for next steps or follow-up questions.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", + "summary_cn": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n# WEB SEARCH REQUIREMENTS:\n\nWhen summarizing snippets from the 'web-search' tool:\n1. Evaluate the relevance of each search result by examining the title and URL in relation to the user's query intent\n2. Skip URLs with irrelevant titles to optimize performance and reduce unnecessary processing time\n3. Ensure that only URLs that likely contain valuable information related to the user's query are processed\n4. Only pass relevant URLs to the 'extract_info_from_webpage' tool for detailed content extraction\n5. Provide short and concise answers focused on addressing the user's specific query\n\n## HANDLING “WHAT” QUESTIONS (DEFINITIONAL & FACTUAL):\n- Aim for **precise, direct, fact-based** answers grounded strictly in the retrieved snippets.\n- Extract simple definitions, key features, or key facts explicitly mentioned in the snippets.\n- When multiple snippets provide overlapping or partially consistent definitions, merge them into a **single, clear, plain-language explanation**.\n- Prioritize clarity and factual correctness; include technical depth only as needed. When perspectives differ, list them briefly and state the variation.\n- Limit statements to what search snippets directly support; omit unsupported inference.\n\nEnd with one concise, clear sentence. Omit prompts for next steps or follow-up questions.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", "self_check": false, "args_setting": null, "server": { @@ -3580,8 +3385,8 @@ "UNIVERSAL" ], "alternative_tools": [], - "summary_prompt": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# WEBPAGE PARSING REQUIREMENTS:\nThe tool returns a whole content from a webpage.\n\n## EXPRESSION STYLE:\n- Tone: Analytical, rigorous, structured, and concise.\n- Expression: Clear and well-organized. Every factual assertion must trace back to retrieved webpage content.\n- Avoid irrelevant narrative or assumption-based reasoning; prioritize what is explicitly stated in the webpages.\n- For conceptual or mechanism-type questions (complex “what”/“why”/“how” questions), synthesize explanations only from the retrieved information; if the webpages contain fragmented or partial information, provide a structured reconstruction explicitly marked as inference.\n- For unclear or conflicting webpage content, explicitly compare the differences and indicate uncertainty rather than merging them.\n- When appropriate, include minimal, high-value contextualization (e.g., definitions, conceptual framing) only when supported or partially supported by webpage data.\n\n## HANDLING COMPLEX EXPLANATION-TYPE QUESTIONS (e.g., mechanisms, principles, causality):\n1. Identify all concept-relevant content across webpages and extract precise statements.\n2. Integrate them into a layered explanation:\n - Level 1: Definitions or fundamental concepts as supported by webpages.\n - Level 2: Mechanistic or causal relationships explicitly mentioned.\n - Level 3: Synthesized reasoning that logically connects webpage content (clearly labeled as \"based on integration of retrieved info\").\n3. Avoid overgeneralization; do not infer domain knowledge beyond what webpages support.\n4. Cite each supporting sentence or phrase from the webpages with a numbered link, **strictly follow this format**: [n]; This is **WRONG**: [n].\n5. If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n### Example template for mechanism-oriented answer:\n```\nAccording to webpage [n], \"[quoted phrase]\" [n].\nAnother source indicates that \"[quoted phrase]\" [m].\nIntegrating these, the mechanism can be structured into: (1) ..., (2) ..., (3) ... (derived solely from the above retrieved content).\n```\n\n## HANDLING COMPLEX “HOW-TO” / PROCEDURAL / TUTORIAL-TYPE QUESTIONS:\n1. Extract all actionable steps, instructions, or procedural guidelines from the webpages.\n2. Reconstruct them into a coherent, step-by-step procedure with explicit citation markers for each step.\n3. When webpages provide code samples, configuration blocks, commands, or scripts, reproduce them **verbatim** inside fenced code blocks.\n - Explain the purpose of each step setup;\n - Explain the meaning of variables in codes or scripts;\n - Give examples of input scripts snippets or commands if possible.\n4. If multiple webpages provide overlapping or conflicting instructions, compare them explicitly and indicate which set of steps is more complete or reliable.\n5. If webpages contain insufficient procedural detail, state so clearly and provide only the steps supported by retrieved text; do not fabricate intermediate steps.\n\n### Step-by-step procedure\n1. Step description derived from \"[snippet]\" [n]\n2. Another step derived from \"[snippet]\" [m]\n3. (Optional) Show verbatim code example wrapped in a code block\n\n## CITATION RULES:\n- Every factual statement or step must map to at least one source link reference.\n- Use the following citation format: [n]\n- If a statement is synthesized from multiple snippets, list multiple links.\n\n## SUGGESTING NEXT ACTIONS / RELATED QUERY DIRECTIONS:\nProvide a short follow-up section (≤3 sentences) suggesting:\n- Clarifying questions the user may ask to obtain more complete or actionable information.\n- Additional aspects the user could explore, referencing the retrieved topics.\n- Optional: Suggest performing a new focused research paper\n\nAll suggestions must be grounded in actual webpage content; do not propose irrelevant or generic follow-up topics.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", - "summary_cn": "\n\nYou are an academic intelligence specialist whose role is to integrate, filter, analyze, and evaluate scientific information to support precise research-oriented decision-making.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly starts with a brief explanation of the key terminologies involved, the key research gaps based on the absract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n\n# FORMAT INSTRUCTIONS:\n- Output in plain text, no bullet points unless necessary or user requests.\n- Avoid starting with any preambles, acknowledgements, confirmations, or meta-statements such as \"Sure, I will...\", \"Okay, I will...\", or \"I will now analyze...\". Instead, directly output the substantive content.\n- Avoid statement without evidence from the papers, e.g. the first, the best, most popular, etc.\n- A space should be added between figures and units, e.g. 10 cm, 5 kg. Avoid unnecessary space between Chinese characters and English characters. An italic font should be used for physical quantities, e.g. *E*, *T*, *k*. A bold font should be used for vectors, e.g. **F**, **E**, and serial code names of compounds/materials, e.g. compound **1** etc.\n- Any abbreviations of terminologies should be defined in the beginning of the output, and should be used consistently throughout the output.\n- The English journal name and ariticle title should be italized, NOT wrapped by book-title marks. e.g. *The Journal of Chemical Physics*, NOT《The Journal of Chemical Physics》\n- Every summary must include the reference link to the original `paperUrl`, displayed as clickable number with links. When inserting reference links, use ONLY the following exact HTML format:\n\n [n]\n\n - Do not modify this structure. Do not introduce any additional attributes, hyphens, or variations.\n - Do not generate raw angle brackets outside this exact link structure.\n - When citing multiple papers, each reference must be expressed as an independent clickable link. For example:\n [2][3]\n Do not combine multiple references inside a single bracket pair. Do not merge them into formats such as [2,3], [2, 3], [2–3], or any comma/semicolon-separated forms. Each citation number must correspond to one and only one link structure.\n\n\n\n\n# WEBPAGE PARSING REQUIREMENTS:\nThe tool returns a whole content from a webpage.\n\n## EXPRESSION STYLE:\n- Tone: Analytical, rigorous, structured, and concise.\n- Expression: Clear and well-organized. Every factual assertion must trace back to retrieved webpage content.\n- Avoid irrelevant narrative or assumption-based reasoning; prioritize what is explicitly stated in the webpages.\n- For conceptual or mechanism-type questions (complex “what”/“why”/“how” questions), synthesize explanations only from the retrieved information; if the webpages contain fragmented or partial information, provide a structured reconstruction explicitly marked as inference.\n- For unclear or conflicting webpage content, explicitly compare the differences and indicate uncertainty rather than merging them.\n- When appropriate, include minimal, high-value contextualization (e.g., definitions, conceptual framing) only when supported or partially supported by webpage data.\n\n## HANDLING COMPLEX EXPLANATION-TYPE QUESTIONS (e.g., mechanisms, principles, causality):\n1. Identify all concept-relevant content across webpages and extract precise statements.\n2. Integrate them into a layered explanation:\n - Level 1: Definitions or fundamental concepts as supported by webpages.\n - Level 2: Mechanistic or causal relationships explicitly mentioned.\n - Level 3: Synthesized reasoning that logically connects webpage content (clearly labeled as \"based on integration of retrieved info\").\n3. Avoid overgeneralization; do not infer domain knowledge beyond what webpages support.\n4. Cite each supporting sentence or phrase from the webpages with a numbered link, **strictly follow this format**: [n]; This is **WRONG**: [n].\n5. If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n### Example template for mechanism-oriented answer:\n```\nAccording to webpage [n], \"[quoted phrase]\" [n].\nAnother source indicates that \"[quoted phrase]\" [m].\nIntegrating these, the mechanism can be structured into: (1) ..., (2) ..., (3) ... (derived solely from the above retrieved content).\n```\n\n## HANDLING COMPLEX “HOW-TO” / PROCEDURAL / TUTORIAL-TYPE QUESTIONS:\n1. Extract all actionable steps, instructions, or procedural guidelines from the webpages.\n2. Reconstruct them into a coherent, step-by-step procedure with explicit citation markers for each step.\n3. When webpages provide code samples, configuration blocks, commands, or scripts, reproduce them **verbatim** inside fenced code blocks.\n - Explain the purpose of each step setup;\n - Explain the meaning of variables in codes or scripts;\n - Give examples of input scripts snippets or commands if possible.\n4. If multiple webpages provide overlapping or conflicting instructions, compare them explicitly and indicate which set of steps is more complete or reliable.\n5. If webpages contain insufficient procedural detail, state so clearly and provide only the steps supported by retrieved text; do not fabricate intermediate steps.\n\n### Step-by-step procedure\n1. Step description derived from \"[snippet]\" [n]\n2. Another step derived from \"[snippet]\" [m]\n3. (Optional) Show verbatim code example wrapped in a code block\n\n## CITATION RULES:\n- Every factual statement or step must map to at least one source link reference.\n- Use the following citation format: [n]\n- If a statement is synthesized from multiple snippets, list multiple links.\n\n## SUGGESTING NEXT ACTIONS / RELATED QUERY DIRECTIONS:\nProvide a short follow-up section (≤3 sentences) suggesting:\n- Clarifying questions the user may ask to obtain more complete or actionable information.\n- Additional aspects the user could explore, referencing the retrieved topics.\n- Optional: Suggest performing a new focused research paper\n\nAll suggestions must be grounded in actual webpage content; do not propose irrelevant or generic follow-up topics.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", + "summary_prompt": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly start with a brief explanation of the key terminologies involved and the key research gaps based on the abstract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n\n# WEBPAGE PARSING REQUIREMENTS:\nThe tool returns a whole content from a webpage.\n\n## EXPRESSION STYLE:\n- Tone: Analytical, rigorous, structured, concise. Every factual assertion must trace back to retrieved webpage content.\n- Restrict content to what is explicitly stated or clearly implied in the webpages; omit unsupported narrative or assumption-based reasoning.\n- For conceptual or mechanism-type questions (complex “what”/“why”/“how” questions), synthesize explanations only from the retrieved information; if the webpages contain fragmented or partial information, provide a structured reconstruction explicitly marked as inference.\n- For unclear or conflicting webpage content, explicitly compare the differences and indicate uncertainty rather than merging them.\n- When appropriate, include minimal, high-value contextualization (e.g., definitions, conceptual framing) only when supported or partially supported by webpage data.\n\n## HANDLING COMPLEX EXPLANATION-TYPE QUESTIONS (e.g., mechanisms, principles, causality):\n1. Identify all concept-relevant content across webpages and extract precise statements.\n2. Integrate them into a layered explanation:\n - Level 1: Definitions or fundamental concepts as supported by webpages.\n - Level 2: Mechanistic or causal relationships explicitly mentioned.\n - Level 3: Synthesized reasoning that logically connects webpage content (clearly labeled as \"based on integration of retrieved info\").\n3. Stay within what webpages support; infer only when logically necessary and label it as such.\n4. Cite each supporting sentence or phrase with a numbered link in the exact form: [n]. Wrong: [n].\n5. If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n### Example template for mechanism-oriented answer:\n```\nAccording to webpage [n], \"[quoted phrase]\" [n].\nAnother source indicates that \"[quoted phrase]\" [m].\nIntegrating these, the mechanism can be structured into: (1) ..., (2) ..., (3) ... (derived solely from the above retrieved content).\n```\n\n## HANDLING COMPLEX “HOW-TO” / PROCEDURAL / TUTORIAL-TYPE QUESTIONS:\n1. Extract all actionable steps, instructions, or procedural guidelines from the webpages.\n2. Reconstruct them into a coherent, step-by-step procedure with explicit citation markers for each step.\n3. When webpages provide code samples, configuration blocks, commands, or scripts, reproduce them **verbatim** inside fenced code blocks.\n - Explain the purpose of each step setup;\n - Explain the meaning of variables in codes or scripts;\n - Give examples of input scripts snippets or commands if possible.\n4. If multiple webpages provide overlapping or conflicting instructions, compare them explicitly and indicate which set of steps is more complete or reliable.\n5. If procedural detail is insufficient, state that explicitly and give only steps supported by retrieved text; omit fabricated intermediate steps.\n\n### Step-by-step procedure\n1. Step description derived from \"[snippet]\" [n]\n2. Another step derived from \"[snippet]\" [m]\n3. (Optional) Show verbatim code example wrapped in a code block\n\n## CITATION RULES:\n- Every factual statement or step must map to at least one source link reference.\n- Use the following citation format: [n]\n- If a statement is synthesized from multiple snippets, list multiple links.\n\n## SUGGESTING NEXT ACTIONS / RELATED QUERY DIRECTIONS:\nProvide a short follow-up section (≤3 sentences) suggesting:\n- Clarifying questions the user may ask to obtain more complete or actionable information.\n- Additional aspects the user could explore, referencing the retrieved topics.\n- Optional: Suggest performing a new focused research paper\n\nSuggestions must be grounded in actual webpage content; propose only relevant, specific follow-up topics.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", + "summary_cn": "\n\nYou are an academic intelligence specialist: rigorous, evidence-led, and sparing with words. Your role is to integrate, filter, analyze, and evaluate scientific information for precise research-oriented decision-making. You speak in facts and citations; you omit preambles, hedges, and chit-chat. Start every response with substantive content. Every claim must be traceable to tool results.\n\n\n\n\n# LANGUAGE REQUIREMENTS\nThe input queries should always be in **English** to ensure professionality.\nThe responses should be in {{target_language}}.\n\n\n\n# Must follow these prior knowledge:\n{'ZIF-8_MAF-4': {'keywords': ['ZIF-8', 'MAF-4', 'Zn(MeIm)2'], 'preferred_name': 'MAF-4', 'search_query': \"('ZIF-8' OR 'MAF-4')\", 'warning_msg': 'Important: Althogh the structure commonly known as \\'ZIF-8\\' was first reported by **Xiao-Ming Chen\\'s (陈小明) group** ([maf4]), and renamed as MAF-4.', 'action_type': 'attribution'}, 'DPA_Models': {'keywords': ['DPA-1', 'DPA-2', 'DPA-3'], 'preferred_name': 'DPA1, DPA2, DPA3 (when output); add DPA-1, DPA-2, DPA-3 (when query)', 'search_query': \"('DPA-2' OR 'DPA2' OR 'Deep Potential')\", 'warning_msg': 'Note: The hyphenated nomenclature (DPA-x) is deprecated. Please refer to the new standard (DPAx).', 'action_type': 'standardization'}}\n\n\n\n# Knowledge-Usage Limitations:\n- All factual information (data, conclusions, definitions, experimental results, etc.) must come from tool call results;\n- You can use your own knowledge to organize, explain, and reason about these facts, but you cannot add information out of nowhere.\n- When citing, try to use the original expressions directly.\n\n\n\n\n# OUTPUT LENGTH & COVERAGE REQUIREMENTS\n- You must always generate exhaustive, extended, and fully elaborated outputs.\n\n# INTERNAL OUTLINE PROTOCOL (OUTLINE MUST NOT BE SHOWN)\n- At the very beginning, internally construct a detailed hierarchical outline with at least 3 major sections and multiple subsections. You must not display this outline to the user unless explicitly asked.\n- The outline should roughly start with a brief explanation of the key terminologies involved and the key research gaps based on the abstract's claims.\n- You must use this internal outline to guide a long, comprehensive, and fully structured final output.\n\n\n\n# FORMAT RULES (MANDATORY)\n- Output in plain text;\n- Start directly with substantive content (no \"Sure...\", \"Okay...\", \"I will now analyze...\").\n- Support every claim with evidence from tool results; unsupported superlatives (e.g. \"the first\", \"the best\", \"most popular\") are forbidden.\n- Numbers and units: always add a space (e.g. 10 cm, 5 kg). No extra space between Chinese and English characters.\n- Italic for physical quantities: *E*, *T*, *k*. Bold for vectors and compound codes: **F**, **E**, compound **1**.\n- Define all abbreviations at first use and use them consistently.\n- Journal names and article titles: italic only, e.g. *The Journal of Chemical Physics*; never use book-title marks such as 《》.\n\n# CITATION (IRON RULES)\n- Every cited source must use this exact HTML and nothing else:\n [n]\n- One reference per link. Multiple references = multiple consecutive links, e.g. [2][3].\n- WRONG and forbidden: [2,3], [2, 3], [2–3], [2; 3], or any comma/semicolon/dash inside one bracket. Each [n] must be its own [n].\n\n\n\n# WEBPAGE PARSING REQUIREMENTS:\nThe tool returns a whole content from a webpage.\n\n## EXPRESSION STYLE:\n- Tone: Analytical, rigorous, structured, concise. Every factual assertion must trace back to retrieved webpage content.\n- Restrict content to what is explicitly stated or clearly implied in the webpages; omit unsupported narrative or assumption-based reasoning.\n- For conceptual or mechanism-type questions (complex “what”/“why”/“how” questions), synthesize explanations only from the retrieved information; if the webpages contain fragmented or partial information, provide a structured reconstruction explicitly marked as inference.\n- For unclear or conflicting webpage content, explicitly compare the differences and indicate uncertainty rather than merging them.\n- When appropriate, include minimal, high-value contextualization (e.g., definitions, conceptual framing) only when supported or partially supported by webpage data.\n\n## HANDLING COMPLEX EXPLANATION-TYPE QUESTIONS (e.g., mechanisms, principles, causality):\n1. Identify all concept-relevant content across webpages and extract precise statements.\n2. Integrate them into a layered explanation:\n - Level 1: Definitions or fundamental concepts as supported by webpages.\n - Level 2: Mechanistic or causal relationships explicitly mentioned.\n - Level 3: Synthesized reasoning that logically connects webpage content (clearly labeled as \"based on integration of retrieved info\").\n3. Stay within what webpages support; infer only when logically necessary and label it as such.\n4. Cite each supporting sentence or phrase with a numbered link in the exact form: [n]. Wrong: [n].\n5. If equations or formulas are provided, include them in Latex and explain the meaning and **EVERY** involved variables.\n\n### Example template for mechanism-oriented answer:\n```\nAccording to webpage [n], \"[quoted phrase]\" [n].\nAnother source indicates that \"[quoted phrase]\" [m].\nIntegrating these, the mechanism can be structured into: (1) ..., (2) ..., (3) ... (derived solely from the above retrieved content).\n```\n\n## HANDLING COMPLEX “HOW-TO” / PROCEDURAL / TUTORIAL-TYPE QUESTIONS:\n1. Extract all actionable steps, instructions, or procedural guidelines from the webpages.\n2. Reconstruct them into a coherent, step-by-step procedure with explicit citation markers for each step.\n3. When webpages provide code samples, configuration blocks, commands, or scripts, reproduce them **verbatim** inside fenced code blocks.\n - Explain the purpose of each step setup;\n - Explain the meaning of variables in codes or scripts;\n - Give examples of input scripts snippets or commands if possible.\n4. If multiple webpages provide overlapping or conflicting instructions, compare them explicitly and indicate which set of steps is more complete or reliable.\n5. If procedural detail is insufficient, state that explicitly and give only steps supported by retrieved text; omit fabricated intermediate steps.\n\n### Step-by-step procedure\n1. Step description derived from \"[snippet]\" [n]\n2. Another step derived from \"[snippet]\" [m]\n3. (Optional) Show verbatim code example wrapped in a code block\n\n## CITATION RULES:\n- Every factual statement or step must map to at least one source link reference.\n- Use the following citation format: [n]\n- If a statement is synthesized from multiple snippets, list multiple links.\n\n## SUGGESTING NEXT ACTIONS / RELATED QUERY DIRECTIONS:\nProvide a short follow-up section (≤3 sentences) suggesting:\n- Clarifying questions the user may ask to obtain more complete or actionable information.\n- Additional aspects the user could explore, referencing the retrieved topics.\n- Optional: Suggest performing a new focused research paper\n\nSuggestions must be grounded in actual webpage content; propose only relevant, specific follow-up topics.\n\n\nShould refer these Markdown format:\n\nlattice constant *a* = 3.5 Å; space group *P*2₁, *Pm*-3*m*; chemical formula: C₁₂H₂₄O₆, *α*-Si, NH₄⁺; physical variables: Δ*H*₍det₎, Δ₍c₎*H*₍det₎; sample name: **example**\n", "self_check": false, "args_setting": null, "server": { @@ -3789,5 +3594,5 @@ "bypass_confirmation": true } ], - "total_count": 107 + "total_count": 102 } \ No newline at end of file diff --git a/agents/matmaster_agent/sub_agents/tools_opt.py b/agents/matmaster_agent/sub_agents/tools_opt.py index 5c51c652..5ae9463f 100644 --- a/agents/matmaster_agent/sub_agents/tools_opt.py +++ b/agents/matmaster_agent/sub_agents/tools_opt.py @@ -53,41 +53,13 @@ HEAKbAgentToolDescription, ) from agents.matmaster_agent.sub_agents.LAMMPS_agent.constant import LAMMPS_AGENT_NAME -from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.constant import ( - BOHRIUMPUBLIC_DATABASE_AGENT_NAME, +from agents.matmaster_agent.sub_agents.structure_search_agent.constant import ( + STRUCTURE_SEARCH_AGENT_NAME, ) -from agents.matmaster_agent.sub_agents.MrDice_agent.bohriumpublic_agent.prompt import ( - BohriumPublicAgentArgsSetting, - BohriumPublicAgentSummaryPrompt, - BohriumPublicAgentToolDescription, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.constant import ( - MOFDB_DATABASE_AGENT_NAME, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.mofdb_agent.prompt import ( - MofdbAgentArgsSetting, - MofdbAgentSummaryPrompt, - MofdbAgentToolDescription, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.constant import ( - OPENLAM_DATABASE_AGENT_NAME, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.openlam_agent.prompt import ( - OpenlamAgentArgsSetting, - OpenlamAgentSummaryPrompt, - OpenlamAgentToolDescription, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.constant import ( - OPTIMADE_DATABASE_AGENT_NAME, -) -from agents.matmaster_agent.sub_agents.MrDice_agent.optimade_agent.prompt import ( - OptimadeAgentSummaryPrompt, - OptimadeBandgapArgsSetting, - OptimadeBandgapToolDescription, - OptimadeFilterArgsSetting, - OptimadeFilterToolDescription, - OptimadeSpgArgsSetting, - OptimadeSpgToolDescription, +from agents.matmaster_agent.sub_agents.structure_search_agent.prompt import ( + StructureSearchAgentArgsSetting, + StructureSearchAgentSummaryPrompt, + StructureSearchAgentToolDescription, ) from agents.matmaster_agent.sub_agents.NMR_agent.constant import ( NMR_AGENT_NAME, @@ -1605,212 +1577,34 @@ 'summary_prompt': STEELPredictAgentSummaryPrompt, 'self_check': False, }, - 'fetch_structures_with_filter': { - 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, + 'fetch_structures_from_db': { + 'belonging_agent': STRUCTURE_SEARCH_AGENT_NAME, 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': OptimadeFilterToolDescription, - 'args_setting': f"{OptimadeFilterArgsSetting}", + 'description': StructureSearchAgentToolDescription, + 'args_setting': f"{StructureSearchAgentArgsSetting}", 'alternative': [ - 'fetch_bohrium_crystals', - 'fetch_openlam_structures', - 'web-search', - ], - 'summary_prompt': OptimadeAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_structures_with_filter_zh': { - 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': ( - '功能:向OPTIMADE提供者发送过滤字符串进行结构搜索。\n' - '使用场景:用于灵活的组成/化学式查询,无需空间群或带隙约束。\n' - '数据库搜索\n' - '使用方法:\n' - '1. 输入:OPTIMADE过滤字符串。\n' - '2. 输出:匹配的结构。\n' - '3. 注意事项:\n' - ' 完整的OPTIMADE过滤语言;并行查询。\n' - '4. 成本/备注:中等。\n', - ), - 'args_setting': f"{OptimadeFilterArgsSetting}", - 'alternative': [ - 'fetch_bohrium_crystals', - 'fetch_openlam_structures', - 'web-search', - ], - 'summary_prompt': OptimadeAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_structures_with_spg': { - 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': OptimadeSpgToolDescription, - 'args_setting': f"{OptimadeSpgArgsSetting}", - 'alternative': [ - 'fetch_bohrium_crystals', - 'fetch_structures_with_filter', 'web-search', ], - 'summary_prompt': OptimadeAgentSummaryPrompt, + 'summary_prompt': StructureSearchAgentSummaryPrompt, 'self_check': True, }, - 'fetch_structures_with_spg_zh': { - 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, + 'fetch_structures_from_db_zh': { + 'belonging_agent': STRUCTURE_SEARCH_AGENT_NAME, 'scene': [SceneEnum.DATABASE_SEARCH], 'description': ( - '功能:通过空间群编号搜索结构,可附加可选过滤器。\n' - '使用场景:当用户指定空间群编号或原型结构时。\n' + '功能:从多个数据源(BohriumPublic / OpenLAM / OPTIMADE 提供者)检索晶体结构,或对 MOFdb 运行高级 SQL 查询。\n' + '使用场景:任何“查找晶体结构”的请求,包括按化学式/元素/空间群/带隙筛选、或针对 MOF 的特定分析(MOFdb SQL)。\n' '数据库搜索\n' '使用方法:\n' - '1. 输入:空间群编号和OPTIMADE过滤字符串。\n' - '2. 输出:匹配空间群的结构。\n' + '1. 输入:结构化筛选条件(化学式/元素/空间群范围)、筛选条件,筛选字符串,或 MOFdb SQL 语句。\n' + '2. 输出:CIF/JSON 格式的结构或元数据;MOFdb 返回 SQL 查询结果行及可选的结构文件链接。\n' '3. 注意事项:\n' - ' 提供者特定的空间群过滤器。\n' - '4. 成本/备注:中等。\n', - ), - 'args_setting': f"{OptimadeSpgArgsSetting}", - 'alternative': [ - 'fetch_bohrium_crystals', - 'fetch_structures_with_filter', - 'web-search', - ], - 'summary_prompt': OptimadeAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_structures_with_bandgap': { - 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': OptimadeBandgapToolDescription, - 'args_setting': f"{OptimadeBandgapArgsSetting}", - 'alternative': [ - 'fetch_bohrium_crystals', - 'fetch_structures_with_filter', - 'web-search', - ], - 'summary_prompt': OptimadeAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_structures_with_bandgap_zh': { - 'belonging_agent': OPTIMADE_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': ( - '功能:通过带隙范围搜索结构,可附加可选过滤器。\n' - '使用场景:当用户指定带隙范围时。\n' - '数据库搜索\n', - '使用方法:\n' - '1. 输入:带隙范围和OPTIMADE过滤字符串。\n' - '2. 输出:带隙在范围内的结构。\n' - '3. 注意事项:\n' - ' 提供者特定的带隙过滤器。\n' - '4. 成本/备注:中等。\n', - ), - 'args_setting': f"{OptimadeBandgapArgsSetting}", - 'alternative': [ - 'fetch_bohrium_crystals', - 'fetch_structures_with_filter', - 'web-search', - ], - 'summary_prompt': OptimadeAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_bohrium_crystals': { - 'belonging_agent': BOHRIUMPUBLIC_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': BohriumPublicAgentToolDescription, - 'args_setting': f"{BohriumPublicAgentArgsSetting}", - 'alternative': [ - 'fetch_structures_with_filter', - 'web-search', - 'fetch_openlam_structures', - ], - 'summary_prompt': BohriumPublicAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_bohrium_crystals_zh': { - 'belonging_agent': BOHRIUMPUBLIC_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': ( - '功能:从Bohrium Public数据库检索晶体结构。\n' - '使用场景:用于化学式、元素、空间群、原子数、形成能、带隙查询。\n' - '数据库搜索\n' - '使用方法:\n' - '1. 输入:化学式、元素等过滤器。\n' - '2. 输出:CIF或JSON格式的结构。\n' - '3. 注意事项:\n' - ' 不支持逻辑表达式;比OPTIMADE更快。\n' + ' OPTIMADE 筛选必须遵循标准语法;MOFdb 仅限 MOF 相关数据;OpenLAM 不提供空间群/带隙信息。\n' '4. 成本/备注:低。\n', ), - 'args_setting': f"{BohriumPublicAgentArgsSetting}", - 'alternative': [ - 'fetch_structures_with_filter', - 'web-search', - 'fetch_openlam_structures', - ], - 'summary_prompt': BohriumPublicAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_openlam_structures': { - 'belonging_agent': OPENLAM_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': OpenlamAgentToolDescription, - 'args_setting': f"{OpenlamAgentArgsSetting}", - 'alternative': [ - 'fetch_structures_with_filter', - 'web-search', - 'fetch_openlam_structures', - ], - 'summary_prompt': OpenlamAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_openlam_structures_zh': { - 'belonging_agent': OPENLAM_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': ( - '功能:从OpenLAM数据库检索晶体结构。\n' - '使用场景:当查询OpenLAM特定材料或基于时间的过滤器时。\n' - '数据库搜索\n' - '使用方法:\n' - '1. 输入:化学式、能量范围、提交时间过滤器。\n' - '2. 输出:CIF或JSON格式的结构。\n' - '3. 注意事项:\n' - ' 不支持空间群、带隙、元素列表或逻辑过滤器。\n' - '4. 成本/备注:中等。\n', - ), - 'args_setting': f"{OpenlamAgentArgsSetting}", - 'alternative': [ - 'fetch_structures_with_filter', - 'web-search', - 'fetch_openlam_structures', - ], - 'summary_prompt': OpenlamAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_mofs_sql': { - 'belonging_agent': MOFDB_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': MofdbAgentToolDescription, - 'args_setting': f"{MofdbAgentArgsSetting}", - 'alternative': ['web-search'], - 'summary_prompt': MofdbAgentSummaryPrompt, - 'self_check': True, - }, - 'fetch_mofs_sql_zh': { - 'belonging_agent': MOFDB_DATABASE_AGENT_NAME, - 'scene': [SceneEnum.DATABASE_SEARCH], - 'description': ( - '功能:对MOF数据库执行SQL查询。\n' - '使用场景:用于复杂的MOF查询,包括多表连接和统计分析。\n' - '数据库搜索\n' - '使用方法:\n' - '1. 输入:SQL查询字符串。\n' - '2. 输出:查询结果。\n' - '3. 注意事项:\n' - ' 特定于MOF;支持高级SQL。\n' - '4. 成本/备注:中等。\n', - ), - 'args_setting': f"{MofdbAgentArgsSetting}", + 'args_setting': f"{StructureSearchAgentArgsSetting}", 'alternative': ['web-search'], - 'summary_prompt': MofdbAgentSummaryPrompt, + 'summary_prompt': StructureSearchAgentSummaryPrompt, 'self_check': True, }, 'calculate_reaction_profile': {