mcp,生成数据代码
This commit is contained in:
167
prompts/material_synthesis.py
Executable file
167
prompts/material_synthesis.py
Executable file
@@ -0,0 +1,167 @@
|
||||
from typing import Dict, List, Optional
|
||||
import mcp.types as types
|
||||
from mcp.server.lowlevel import Server
|
||||
|
||||
|
||||
def create_messages(
|
||||
properties: Dict[str, str] = None,
|
||||
batch_size: int = 2,
|
||||
) -> list[types.PromptMessage]:
|
||||
"""
|
||||
创建用于材料生成和合成的提示词消息。
|
||||
|
||||
Args:
|
||||
properties: 材料性质及其值的字典,例如 {"dft_band_gap": "2.0"}
|
||||
batch_size: 生成材料的数量,默认为2
|
||||
|
||||
Returns:
|
||||
提示词消息列表
|
||||
"""
|
||||
messages = []
|
||||
|
||||
# 系统消息,定义助手的角色和任务
|
||||
system_message = """你是一位专业的材料科学家,擅长材料生成和合成方案设计。
|
||||
你的任务是:
|
||||
1. 根据用户提供的材料性质要求,使用mars_toolkit中的generate_materials工具生成符合要求的材料
|
||||
2. 系统地分析生成的材料的四要素:成分、结构、工艺和性能
|
||||
3. 为生成的材料设计科学合理的合成方案
|
||||
4. 使用mermaid语法绘制材料的合成流程图
|
||||
|
||||
请确保你的回答包含以下内容:
|
||||
- 对用户需求的理解和分析
|
||||
- 使用generate_material工具生成的材料结构
|
||||
- 生成材料的四要素详细分析:
|
||||
* 成分(Composition):详细的化学成分、元素比例、化学计量比
|
||||
* 结构(Structure):晶体结构、空间群、晶格参数、原子位置、配位环境
|
||||
* 工艺(Processing):可行的合成路线、工艺参数、关键控制因素
|
||||
* 性能(Properties):预期的物理、化学、机械性能及其与结构的关系
|
||||
- 详细的合成方案,包括:
|
||||
* 原料选择及纯度要求
|
||||
* 精确的反应条件(温度、压力、时间、气氛)
|
||||
* 分步骤的合成流程及每步的理论依据
|
||||
* 可能的挑战及解决方案
|
||||
* 表征方法建议
|
||||
- 使用mermaid语法绘制的合成流程图,清晰展示从原料到最终产品的全过程
|
||||
"""
|
||||
|
||||
messages.append(
|
||||
types.PromptMessage(
|
||||
role="system",
|
||||
content=types.TextContent(type="text", text=system_message),
|
||||
)
|
||||
)
|
||||
|
||||
# 构建主提示词
|
||||
if properties and len(properties) > 0:
|
||||
properties_text = "\n".join([f"- {key}: {value}" for key, value in properties.items()])
|
||||
prompt = f"""请根据以下材料性质要求,生成{batch_size}个合适的材料并设计其合成方案:
|
||||
|
||||
{properties_text}
|
||||
|
||||
请按照以下步骤进行:
|
||||
|
||||
1. 使用mars_toolkit中的generate_material工具生成材料,参数设置为batch_size={batch_size}
|
||||
2. 对生成的每种材料进行系统的四要素分析:
|
||||
- 成分:详细分析元素组成、化学计量比及其理论依据
|
||||
- 结构:分析晶体结构、空间群、晶格参数、原子排布及其稳定性
|
||||
- 工艺:探讨可行的合成路线、工艺参数及其科学依据
|
||||
- 性能:预测材料可能具有的物理、化学、机械性能及其应用前景
|
||||
|
||||
3. 为每种材料设计详细的合成方案,包括:
|
||||
- 原料选择及纯度要求
|
||||
- 精确的反应条件参数(温度、压力、时间、气氛等)
|
||||
- 分步骤的合成流程及每步的理论依据
|
||||
- 可能遇到的挑战及解决方案
|
||||
- 推荐的表征方法
|
||||
|
||||
4. 使用mermaid语法绘制材料的合成流程图,清晰展示从原料到最终产品的全过程,包括关键工艺参数。"""
|
||||
else:
|
||||
prompt = f"""请生成{batch_size}种具有创新性的新型材料并设计其合成方案。
|
||||
|
||||
请按照以下步骤进行:
|
||||
|
||||
1. 使用mars_toolkit中的generate_material工具生成材料,参数设置为batch_size={batch_size}
|
||||
2. 对生成的每种材料进行系统的四要素分析:
|
||||
- 成分:详细分析元素组成、化学计量比及其理论依据
|
||||
- 结构:分析晶体结构、空间群、晶格参数、原子排布及其稳定性
|
||||
- 工艺:探讨可行的合成路线、工艺参数及其科学依据
|
||||
- 性能:预测材料可能具有的物理、化学、机械性能及其应用前景
|
||||
|
||||
3. 为每种材料设计详细的合成方案,包括:
|
||||
- 原料选择及纯度要求
|
||||
- 精确的反应条件参数(温度、压力、时间、气氛等)
|
||||
- 分步骤的合成流程及每步的理论依据
|
||||
- 可能遇到的挑战及解决方案
|
||||
- 推荐的表征方法
|
||||
|
||||
4. 使用mermaid语法绘制材料的合成流程图,清晰展示从原料到最终产品的全过程,包括关键工艺参数。"""
|
||||
|
||||
messages.append(
|
||||
types.PromptMessage(
|
||||
role="user",
|
||||
content=types.TextContent(type="text", text=prompt)
|
||||
)
|
||||
)
|
||||
|
||||
return messages
|
||||
|
||||
|
||||
def register_prompt_handlers(app: Server):
|
||||
"""
|
||||
注册提示词处理器到MCP服务器。
|
||||
|
||||
Args:
|
||||
app: MCP服务器实例
|
||||
"""
|
||||
@app.list_prompts()
|
||||
async def list_prompts() -> list[types.Prompt]:
|
||||
return [
|
||||
types.Prompt(
|
||||
name="material_synthesis",
|
||||
description="基于材料四要素(成分、结构、工艺、性能)生成材料并设计合成方案,使用mermaid绘制合成流程图",
|
||||
arguments=[
|
||||
types.PromptArgument(
|
||||
name="properties",
|
||||
description="材料性质及其值的JSON字符串,例如 {\"dft_band_gap\": \"2.0\"}",
|
||||
required=False,
|
||||
),
|
||||
types.PromptArgument(
|
||||
name="batch_size",
|
||||
description="生成材料的数量,默认为2",
|
||||
required=False,
|
||||
),
|
||||
],
|
||||
)
|
||||
]
|
||||
|
||||
@app.get_prompt()
|
||||
async def get_prompt(
|
||||
name: str, arguments: dict[str, str] | None = None
|
||||
) -> types.GetPromptResult:
|
||||
if name != "material_synthesis":
|
||||
raise ValueError(f"未知的提示词: {name}")
|
||||
|
||||
if arguments is None:
|
||||
arguments = {}
|
||||
|
||||
# 解析properties参数
|
||||
properties = {}
|
||||
if "properties" in arguments and arguments["properties"]:
|
||||
try:
|
||||
import json
|
||||
properties = json.loads(arguments["properties"])
|
||||
except json.JSONDecodeError:
|
||||
properties = {}
|
||||
|
||||
# 解析batch_size参数
|
||||
batch_size = 2 # 默认值
|
||||
if "batch_size" in arguments and arguments["batch_size"]:
|
||||
try:
|
||||
batch_size = int(arguments["batch_size"])
|
||||
except ValueError:
|
||||
pass # 使用默认值
|
||||
|
||||
return types.GetPromptResult(
|
||||
messages=create_messages(properties=properties, batch_size=batch_size),
|
||||
description="基于材料四要素(成分、结构、工艺、性能)生成材料并设计合成方案,使用mermaid绘制合成流程图",
|
||||
)
|
||||
Reference in New Issue
Block a user