bohr-agent-sdk


Namebohr-agent-sdk JSON
Version 0.1.19 PyPI version JSON
download
home_pagehttps://github.com/dptech-corp/bohr-agent-sdk/
SummarySDK for scientific agents
upload_time2025-07-15 06:46:36
maintainerNone
docs_urlNone
authorDP Technology
requires_python>=3.10
licenseMIT
keywords agent sdk ai for science
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Bohrium Science Agent SDK

这是DP Tech的Bohrium Science Agent SDK,提供了一个命令行工具dp-agent,用于管理科学计算任务。同时提供了Python SDK用于开发自定义的科学计算应用。

## 安装

```bash
pip install bohr-agent-sdk -i https://pypi.org/simple --upgrade
```

## CLI 使用方法

安装后,您可以使用以下命令:

### 获取资源

```bash
# 获取基础代码结构
dp-agent fetch scaffolding --type=calculation/device

# 获取配置文件
dp-agent fetch config
```

`fetch config` 命令会下载 .env 配置文件并替换部分动态变量,如 MQTT_DEVICE_ID。
注意:出于安全考虑,此功能仅在内网环境可用。其他环境需要手动配置。

### 运行命令

```bash
# 运行实验环境
dp-agent run tool device

# 运行云环境
dp-agent run tool cloud

# 运行计算环境
dp-agent run tool calculation

# 运行代理
dp-agent run agent

# 调试模式
dp-agent run debug
```

## SDK 快速入门

Bohrium Science Agent SDK 提供了两种主要的开发模式:实验室模式(Lab)和云模式(Cloud)。

### 基础结构

安装完成并运行 `dp-agent fetch scaffolding` 后,您将获得以下基础项目结构:

```
your-project/
├── lab/                # 实验室模式相关代码
│   ├── __init__.py
│   └── tescan_device.py  # 设备控制示例
├── cloud/              # 云模式相关代码
│   └── __init__.py
└── main.py            # 主程序入口
```

### 实验室模式开发

实验室模式主要用于控制本地实验设备。以下是一个基于 Tescan 设备的示例:

```python
from typing import Dict, TypedDict
from dp.agent.device.device import Device, action, BaseParams, SuccessResult

class TakePictureParams(BaseParams):
    """拍照参数"""
    horizontal_width: str

class PictureData(TypedDict):
    """照片数据"""
    image_id: str

class PictureResult(SuccessResult):
    """拍照结果"""
    data: PictureData

class MyDevice(Device):
    device_name = "my_device"
    
    @action("take_picture")
    def take_picture(self, params: TakePictureParams) -> PictureResult:
        """拍照动作
        
        Args:
            params: 拍照参数
                - horizontal_width: 图片水平宽度
        """
        hw = params.get("horizontal_width", "default")
        return PictureResult(
            message=f"Picture taken with {self.device_name}",
            data={"image_id": "image_123"}
        )
```

### 云端开发

云模式基于 MCP (Message Control Protocol) 实现,用于处理远程设备控制和任务调度。register_mcp_tools 通过 python 的自省和反射机制实现了设备控制的自动注册,无需重复实现操作定义。
以下展示如何创建设备并注册到 MCP 服务器:

```python
"""
Example of using the bohr-agent-sdk cloud functionality.
"""
import signal
import sys
from dp.agent.cloud import mcp, get_mqtt_cloud_instance
from dp.agent.device.device import TescanDevice, register_mcp_tools

def signal_handler(sig, frame):
    """Handle SIGINT signal to gracefully shutdown."""
    print("Shutting down...")
    get_mqtt_cloud_instance().stop()
    sys.exit(0)

def main():
    """Start the cloud services."""
    print("Starting Tescan Device Twin Cloud Services...")
    
    # Register signal handler
    signal.signal(signal.SIGINT, signal_handler)
    
    # Create device instance
    device = TescanDevice(mcp, device)
    
    # Register device tools
    register_mcp_tools(device)
    
    # Start MCP server
    print("Starting MCP server...")
    mcp.run(transport="sse")

if __name__ == "__main__":
    main()
```


### 配置说明

在 `.env` 文件中配置必要的环境变量:

```
MQTT_INSTANCE_ID=your_instance_id
MQTT_ENDPOINT=your_endpoint
MQTT_DEVICE_ID=your_device_id
MQTT_GROUP_ID=your_group_id
MQTT_AK=your_access_key
MQTT_SK=your_secret_key
```

### 主要功能

- 设备控制接口(Lab模式)
  - 设备初始化
  - 命令执行
  - 状态监控
  
- 云端任务处理(Cloud模式)
  - 任务队列管理
  - 计算资源调度
  - 结果回传

更详细的API文档请参考代码中的注释。

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/dptech-corp/bohr-agent-sdk/",
    "name": "bohr-agent-sdk",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "liupeng <liupeng@dp.tech>, zjgemi <liuxzj@dp.tech>",
    "keywords": "agent SDK, AI for science",
    "author": "DP Technology",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/b0/eb/615568a0d4fb04206ac3aa4e7a0349473052201fd1dd4862578fe63830b1/bohr_agent_sdk-0.1.19.tar.gz",
    "platform": null,
    "description": "# Bohrium Science Agent SDK\n\n\u8fd9\u662fDP Tech\u7684Bohrium Science Agent SDK\uff0c\u63d0\u4f9b\u4e86\u4e00\u4e2a\u547d\u4ee4\u884c\u5de5\u5177dp-agent\uff0c\u7528\u4e8e\u7ba1\u7406\u79d1\u5b66\u8ba1\u7b97\u4efb\u52a1\u3002\u540c\u65f6\u63d0\u4f9b\u4e86Python SDK\u7528\u4e8e\u5f00\u53d1\u81ea\u5b9a\u4e49\u7684\u79d1\u5b66\u8ba1\u7b97\u5e94\u7528\u3002\n\n## \u5b89\u88c5\n\n```bash\npip install bohr-agent-sdk -i https://pypi.org/simple --upgrade\n```\n\n## CLI \u4f7f\u7528\u65b9\u6cd5\n\n\u5b89\u88c5\u540e\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff1a\n\n### \u83b7\u53d6\u8d44\u6e90\n\n```bash\n# \u83b7\u53d6\u57fa\u7840\u4ee3\u7801\u7ed3\u6784\ndp-agent fetch scaffolding --type=calculation/device\n\n# \u83b7\u53d6\u914d\u7f6e\u6587\u4ef6\ndp-agent fetch config\n```\n\n`fetch config` \u547d\u4ee4\u4f1a\u4e0b\u8f7d .env \u914d\u7f6e\u6587\u4ef6\u5e76\u66ff\u6362\u90e8\u5206\u52a8\u6001\u53d8\u91cf\uff0c\u5982 MQTT_DEVICE_ID\u3002\n\u6ce8\u610f\uff1a\u51fa\u4e8e\u5b89\u5168\u8003\u8651\uff0c\u6b64\u529f\u80fd\u4ec5\u5728\u5185\u7f51\u73af\u5883\u53ef\u7528\u3002\u5176\u4ed6\u73af\u5883\u9700\u8981\u624b\u52a8\u914d\u7f6e\u3002\n\n### \u8fd0\u884c\u547d\u4ee4\n\n```bash\n# \u8fd0\u884c\u5b9e\u9a8c\u73af\u5883\ndp-agent run tool device\n\n# \u8fd0\u884c\u4e91\u73af\u5883\ndp-agent run tool cloud\n\n# \u8fd0\u884c\u8ba1\u7b97\u73af\u5883\ndp-agent run tool calculation\n\n# \u8fd0\u884c\u4ee3\u7406\ndp-agent run agent\n\n# \u8c03\u8bd5\u6a21\u5f0f\ndp-agent run debug\n```\n\n## SDK \u5feb\u901f\u5165\u95e8\n\nBohrium Science Agent SDK \u63d0\u4f9b\u4e86\u4e24\u79cd\u4e3b\u8981\u7684\u5f00\u53d1\u6a21\u5f0f\uff1a\u5b9e\u9a8c\u5ba4\u6a21\u5f0f\uff08Lab\uff09\u548c\u4e91\u6a21\u5f0f\uff08Cloud\uff09\u3002\n\n### \u57fa\u7840\u7ed3\u6784\n\n\u5b89\u88c5\u5b8c\u6210\u5e76\u8fd0\u884c `dp-agent fetch scaffolding` \u540e\uff0c\u60a8\u5c06\u83b7\u5f97\u4ee5\u4e0b\u57fa\u7840\u9879\u76ee\u7ed3\u6784\uff1a\n\n```\nyour-project/\n\u251c\u2500\u2500 lab/                # \u5b9e\u9a8c\u5ba4\u6a21\u5f0f\u76f8\u5173\u4ee3\u7801\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u2514\u2500\u2500 tescan_device.py  # \u8bbe\u5907\u63a7\u5236\u793a\u4f8b\n\u251c\u2500\u2500 cloud/              # \u4e91\u6a21\u5f0f\u76f8\u5173\u4ee3\u7801\n\u2502   \u2514\u2500\u2500 __init__.py\n\u2514\u2500\u2500 main.py            # \u4e3b\u7a0b\u5e8f\u5165\u53e3\n```\n\n### \u5b9e\u9a8c\u5ba4\u6a21\u5f0f\u5f00\u53d1\n\n\u5b9e\u9a8c\u5ba4\u6a21\u5f0f\u4e3b\u8981\u7528\u4e8e\u63a7\u5236\u672c\u5730\u5b9e\u9a8c\u8bbe\u5907\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u57fa\u4e8e Tescan \u8bbe\u5907\u7684\u793a\u4f8b\uff1a\n\n```python\nfrom typing import Dict, TypedDict\nfrom dp.agent.device.device import Device, action, BaseParams, SuccessResult\n\nclass TakePictureParams(BaseParams):\n    \"\"\"\u62cd\u7167\u53c2\u6570\"\"\"\n    horizontal_width: str\n\nclass PictureData(TypedDict):\n    \"\"\"\u7167\u7247\u6570\u636e\"\"\"\n    image_id: str\n\nclass PictureResult(SuccessResult):\n    \"\"\"\u62cd\u7167\u7ed3\u679c\"\"\"\n    data: PictureData\n\nclass MyDevice(Device):\n    device_name = \"my_device\"\n    \n    @action(\"take_picture\")\n    def take_picture(self, params: TakePictureParams) -> PictureResult:\n        \"\"\"\u62cd\u7167\u52a8\u4f5c\n        \n        Args:\n            params: \u62cd\u7167\u53c2\u6570\n                - horizontal_width: \u56fe\u7247\u6c34\u5e73\u5bbd\u5ea6\n        \"\"\"\n        hw = params.get(\"horizontal_width\", \"default\")\n        return PictureResult(\n            message=f\"Picture taken with {self.device_name}\",\n            data={\"image_id\": \"image_123\"}\n        )\n```\n\n### \u4e91\u7aef\u5f00\u53d1\n\n\u4e91\u6a21\u5f0f\u57fa\u4e8e MCP (Message Control Protocol) \u5b9e\u73b0\uff0c\u7528\u4e8e\u5904\u7406\u8fdc\u7a0b\u8bbe\u5907\u63a7\u5236\u548c\u4efb\u52a1\u8c03\u5ea6\u3002register_mcp_tools \u901a\u8fc7 python \u7684\u81ea\u7701\u548c\u53cd\u5c04\u673a\u5236\u5b9e\u73b0\u4e86\u8bbe\u5907\u63a7\u5236\u7684\u81ea\u52a8\u6ce8\u518c\uff0c\u65e0\u9700\u91cd\u590d\u5b9e\u73b0\u64cd\u4f5c\u5b9a\u4e49\u3002\n\u4ee5\u4e0b\u5c55\u793a\u5982\u4f55\u521b\u5efa\u8bbe\u5907\u5e76\u6ce8\u518c\u5230 MCP \u670d\u52a1\u5668\uff1a\n\n```python\n\"\"\"\nExample of using the bohr-agent-sdk cloud functionality.\n\"\"\"\nimport signal\nimport sys\nfrom dp.agent.cloud import mcp, get_mqtt_cloud_instance\nfrom dp.agent.device.device import TescanDevice, register_mcp_tools\n\ndef signal_handler(sig, frame):\n    \"\"\"Handle SIGINT signal to gracefully shutdown.\"\"\"\n    print(\"Shutting down...\")\n    get_mqtt_cloud_instance().stop()\n    sys.exit(0)\n\ndef main():\n    \"\"\"Start the cloud services.\"\"\"\n    print(\"Starting Tescan Device Twin Cloud Services...\")\n    \n    # Register signal handler\n    signal.signal(signal.SIGINT, signal_handler)\n    \n    # Create device instance\n    device = TescanDevice(mcp, device)\n    \n    # Register device tools\n    register_mcp_tools(device)\n    \n    # Start MCP server\n    print(\"Starting MCP server...\")\n    mcp.run(transport=\"sse\")\n\nif __name__ == \"__main__\":\n    main()\n```\n\n\n### \u914d\u7f6e\u8bf4\u660e\n\n\u5728 `.env` \u6587\u4ef6\u4e2d\u914d\u7f6e\u5fc5\u8981\u7684\u73af\u5883\u53d8\u91cf\uff1a\n\n```\nMQTT_INSTANCE_ID=your_instance_id\nMQTT_ENDPOINT=your_endpoint\nMQTT_DEVICE_ID=your_device_id\nMQTT_GROUP_ID=your_group_id\nMQTT_AK=your_access_key\nMQTT_SK=your_secret_key\n```\n\n### \u4e3b\u8981\u529f\u80fd\n\n- \u8bbe\u5907\u63a7\u5236\u63a5\u53e3\uff08Lab\u6a21\u5f0f\uff09\n  - \u8bbe\u5907\u521d\u59cb\u5316\n  - \u547d\u4ee4\u6267\u884c\n  - \u72b6\u6001\u76d1\u63a7\n  \n- \u4e91\u7aef\u4efb\u52a1\u5904\u7406\uff08Cloud\u6a21\u5f0f\uff09\n  - \u4efb\u52a1\u961f\u5217\u7ba1\u7406\n  - \u8ba1\u7b97\u8d44\u6e90\u8c03\u5ea6\n  - \u7ed3\u679c\u56de\u4f20\n\n\u66f4\u8be6\u7ec6\u7684API\u6587\u6863\u8bf7\u53c2\u8003\u4ee3\u7801\u4e2d\u7684\u6ce8\u91ca\u3002\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "SDK for scientific agents",
    "version": "0.1.19",
    "project_urls": {
        "Bug Reports": "https://github.com/dptech-corp/bohr-agent-sdk/issues",
        "Homepage": "https://github.com/dptech-corp/bohr-agent-sdk",
        "repository": "https://github.com/dptech-corp/bohr-agent-sdk"
    },
    "split_keywords": [
        "agent sdk",
        " ai for science"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "89e4a90a9d730452001ce9f583223529fa68d9ad80ac5fc9003ae0b9ddf1317d",
                "md5": "7ea3c638d8c9658005e8f93962b9f909",
                "sha256": "5154a95064b16fac3d8672fa610d65c75f88eb6d863408b965b68d573490feb0"
            },
            "downloads": -1,
            "filename": "bohr_agent_sdk-0.1.19-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7ea3c638d8c9658005e8f93962b9f909",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 47291,
            "upload_time": "2025-07-15T06:46:34",
            "upload_time_iso_8601": "2025-07-15T06:46:34.639099Z",
            "url": "https://files.pythonhosted.org/packages/89/e4/a90a9d730452001ce9f583223529fa68d9ad80ac5fc9003ae0b9ddf1317d/bohr_agent_sdk-0.1.19-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b0eb615568a0d4fb04206ac3aa4e7a0349473052201fd1dd4862578fe63830b1",
                "md5": "13fc0c52a48748921025bbe3190123d5",
                "sha256": "a856bd07cfb9eea596af061bac19e4d45fa8989daa0abe485311180a6ca2e521"
            },
            "downloads": -1,
            "filename": "bohr_agent_sdk-0.1.19.tar.gz",
            "has_sig": false,
            "md5_digest": "13fc0c52a48748921025bbe3190123d5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 38193,
            "upload_time": "2025-07-15T06:46:36",
            "upload_time_iso_8601": "2025-07-15T06:46:36.079685Z",
            "url": "https://files.pythonhosted.org/packages/b0/eb/615568a0d4fb04206ac3aa4e7a0349473052201fd1dd4862578fe63830b1/bohr_agent_sdk-0.1.19.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-15 06:46:36",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "dptech-corp",
    "github_project": "bohr-agent-sdk",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "bohr-agent-sdk"
}
        
Elapsed time: 0.51860s