mars-agent


Namemars-agent JSON
Version 0.1.0 PyPI version JSON
download
home_pagehttps://github.com/Shy2593666979/Mars-Agent
SummaryMars Agent - 基于主副代理架构的AI代理系统,支持MCP协议和流式处理
upload_time2025-08-11 09:28:27
maintainerNone
docs_urlNone
authorMingGuang Tian
requires_python>=3.11
licenseApache-2.0
keywords ai agent mcp streaming llm chatbot
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Mars Agent 架构设计

> GitHub仓库:https://github.com/Shy2593666979/Mars-Agent

## 🎯 架构概述

Mars Agent 提供两种不同的Agent执行策略,满足不同的使用场景:

1. **MarsAgent**: 并发执行策略 - 将每个MCP服务器和插件集合当作独立Agent并发执行
2. **MarsPlanAgent**: 规划执行策略 - 先制定执行计划,再按计划逐步调用工具

### 📋 MarsAgent 架构 (并发执行)

```
┌─────────────────────────────────────────────────────────────┐
│                    🏠 MarsAgent (主控制器)                    │
│  ┌─────────────────────────────────────────────────────────┐ │
│  │ • 并发调度多个Agent                                      │ │
│  │ • 汇总所有Agent结果                                      │ │
│  │ • 统一模型调用和回复                                      │ │
│  │ • 流式事件管理                                          │ │
│  └─────────────────────────────────────────────────────────┘ │
│                           ⬆                                  │
│                    📡 事件汇聚 (Event Aggregation)             │
│    ⬆              ⬆              ⬆              ⬆            │
│ ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐           │
│ │🔧 Plugin│  │🛠️ MCP-A │  │🛠️ MCP-B │  │🛠️ MCP-C │           │
│ │ Agent   │  │ Agent   │  │ Agent   │  │ Agent   │           │
│ │• 插件集合│  │• 地图服务│  │• 办公服务│  │• 其他...│           │
│ │• 工具执行│  │• 工具执行│  │• 工具执行│  │• 工具执行│           │
│ └─────────┘  └─────────┘  └─────────┘  └─────────┘           │
│        并发执行 (Concurrent Execution)                       │
└─────────────────────────────────────────────────────────────┘
```

### 📋 MarsPlanAgent 架构 (规划执行)

```
┌─────────────────────────────────────────────────────────────┐
│                  🧠 MarsPlanAgent (规划控制器)                 │
│  ┌─────────────────────────────────────────────────────────┐ │
│  │ Step 1: 🔍 收集所有可用工具                              │ │
│  │ Step 2: 🤖 LLM制定执行计划                               │ │
│  │ Step 3: ⚡ 按计划逐步执行                                │ │
│  │ Step 4: 📊 汇总结果并回复                                │ │
│  └─────────────────────────────────────────────────────────┘ │
│                                                             │
│  📋 Planning Phase (计划阶段)                                │
│  ┌─────────────────────────────────────────────────────────┐ │
│  │ 🛠️ 所有MCP工具 + 🔧 插件工具 → 🤖 LLM → 📝 执行计划     │ │
│  └─────────────────────────────────────────────────────────┘ │
│                           ⬇                                  │
│  ⚡ Execution Phase (执行阶段)                                │
│  ┌─────────────────────────────────────────────────────────┐ │
│  │ 📝 Plan Step 1 → 🔧 Tool Call → ✅ Result              │ │
│  │ 📝 Plan Step 2 → 🔧 Tool Call → ✅ Result              │ │
│  │ 📝 Plan Step N → 🔧 Tool Call → ✅ Result              │ │
│  └─────────────────────────────────────────────────────────┘ │
│                     Sequential Execution                     │
└─────────────────────────────────────────────────────────────┘
```

## 🏗️ 核心差异对比

| 特性 | MarsAgent (并发执行) | MarsPlanAgent (规划执行) |
|------|---------------------|------------------------|
| **执行策略** | 并发执行所有Agent | 先规划后按步骤执行 |
| **Agent划分** | 每个MCP服务器 + 插件集合 | 统一工具池 |
| **适用场景** | 独立任务、快速响应 | 复杂流程、依赖任务 |
| **执行效率** | 高并发,速度快 | 有序执行,逻辑清晰 |
| **工具协调** | 无协调,独立执行 | 智能协调,步骤优化 |

## 🔄 执行流程对比

### MarsAgent 执行流程

```mermaid
sequenceDiagram
    participant User
    participant MarsAgent as 🏠 MarsAgent
    participant PluginAgent as 🔧 Plugin Agent
    participant MCPAgent1 as 🛠️ MCP Agent A
    participant MCPAgent2 as 🛠️ MCP Agent B
    participant Model as 🤖 LLM Model

    User->>MarsAgent: 发送消息
    
    par 并发执行所有Agent
        MarsAgent->>PluginAgent: 执行插件工具
        PluginAgent-->>MarsAgent: 返回结果A
    and
        MarsAgent->>MCPAgent1: 执行MCP工具
        MCPAgent1-->>MarsAgent: 返回结果B
    and
        MarsAgent->>MCPAgent2: 执行MCP工具  
        MCPAgent2-->>MarsAgent: 返回结果C
    end
    
    MarsAgent->>MarsAgent: 汇总所有Agent结果
    MarsAgent->>Model: 调用模型生成回复
    Model-->>User: 返回最终回复
```

### MarsPlanAgent 执行流程

```mermaid
sequenceDiagram
    participant User
    participant PlanAgent as 🧠 MarsPlanAgent
    participant ToolPool as 🛠️ 工具池
    participant Model as 🤖 LLM Model

    User->>PlanAgent: 发送消息
    
    PlanAgent->>ToolPool: 收集所有可用工具
    ToolPool-->>PlanAgent: 返回工具列表
    
    PlanAgent->>Model: 制定执行计划
    Model-->>PlanAgent: 返回执行计划
    
    loop 按计划逐步执行
        PlanAgent->>ToolPool: 执行计划步骤N
        ToolPool-->>PlanAgent: 返回步骤结果
    end
    
    PlanAgent->>PlanAgent: 汇总所有步骤结果
    PlanAgent->>Model: 调用模型生成回复
    Model-->>User: 返回最终回复
```

## 🎨 设计优势

### MarsAgent 优势
- **高并发**: 多Agent并发执行,响应速度快
- **资源隔离**: 每个MCP服务独立Agent,故障隔离
- **扩展性强**: 新增MCP服务即新增Agent
- **适合独立任务**: 无依赖关系的工具调用

### MarsPlanAgent 优势
- **智能规划**: LLM制定最优执行计划
- **步骤协调**: 处理有依赖关系的复杂任务
- **逻辑清晰**: 按计划有序执行,便于调试
- **适合复杂流程**: 多步骤、有依赖的任务场景

## 📦 安装

```bash
pip install git+https://github.com/Shy2593666979/Mars-Agent

# 或者

pip install mars-agent
```

## 📝 使用示例

### MarsAgent (并发执行) 示例

```python
import asyncio
from datetime import datetime

from mars_agent import MarsAgent
from mars_agent.schema import MarsModelConfig, MCPSSEConfig, MarsResponseChunk

# 定义自定义函数
def get_current_time():
    """获取当前时间"""
    return datetime.now().strftime('%Y-%m-%d %H:%M:%S')

def test_weather(location: str):
    """查询指定地点的天气信息"""
    return f"The weather in {location} is sunny, 25°C"

async def main():
    # 初始化MarsAgent
    agent = MarsAgent(
        # 工具调用模型配置(可选配置,若不指定tool call模型,默认工具调用和对话模型使用同一个)
        tool_call_model_config=MarsModelConfig(
            model="qwen-plus",
            api_key="your-api-key",
            base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
        ),
        # 对话模型配置
        model_config=MarsModelConfig(
            model="qwen-plus", 
            api_key="your-api-key",
            base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
        ),
        # 自定义函数(将作为一个Plugin Agent)
        functions=[get_current_time, test_weather],
        # MCP服务器配置(每个MCP服务器将作为一个独立Agent)
        mcp_configs=[
            MCPSSEConfig(
                server_name="地图服务",
                url="https://your-mcp-server.com/sse",
            ),
            MCPSSEConfig(
                server_name="办公服务",
                url="https://your-office-server.com/sse",
                personal_config={
                    "app_id": "your-app-id", 
                    "app_secret": "your-app-secret"
                }
            )
        ]
    )

    # 并发执行 - 所有Agent同时工作
    print("=== 并发执行示例 ===")
    async for chunk in agent.astream("你好,请问北京的天气怎么样?现在几点了?"):
        if isinstance(chunk, MarsResponseChunk):
            print(chunk.data.content, end="")

if __name__ == "__main__":
    asyncio.run(main())
```

### MarsPlanAgent (规划执行) 示例

```python
from mars_agent import MarsPlanAgent
from mars_agent.schema import MarsModelConfig, MCPSSEConfig, MarsProgressChunk

async def plan_agent_example():
    # 初始化MarsPlanAgent
    plan_agent = MarsPlanAgent(
        tool_call_model_config=MarsModelConfig(
            model="qwen-plus",
            api_key="your-api-key", 
            base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
        ),
        model_config=MarsModelConfig(
            model="qwen-plus",
            api_key="your-api-key",
            base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
        ),
        mcp_configs=[
            MCPSSEConfig(
                server_name="地图服务",
                url="https://your-mcp-server.com/sse"
            ),
            MCPSSEConfig(
                server_name="网页抓取",
                url="https://your-fetch-server.com/sse"
            )
        ]
    )

    # 规划执行 - 先制定计划,再逐步执行
    print("=== 规划执行示例 ===")
    async for chunk in plan_agent.astream("帮我查询北京到上海的路线,然后抓取相关的交通信息网页"):
        if isinstance(chunk, MarsProgressChunk):
            print(f"执行进度: {chunk}")
        elif isinstance(chunk, MarsResponseChunk):
            print(chunk.data.accumulated)
```

### MCP配置选项

```python
from mars_agent.schema import MCPSSEConfig, MCPStdioConfig

# SSE方式连接MCP服务器
sse_config = MCPSSEConfig(
    server_name="服务器名称",
    url="https://your-server.com/sse",
    personal_config={
        "api_key": "your-api-key",
        "other_param": "value"
    }
)

# Stdio方式连接MCP服务器
stdio_config = MCPStdioConfig(
    server_name="本地服务",
    command="python",
    args=["-m", "your_mcp_server"],
    env={"API_KEY": "your-api-key"}
)
```

### 响应类型处理

```python
from mars_agent import MarsResponseChunk
from mars_agent.schema import MarsProgressChunk

async for chunk in agent.astream("你的问题"):
    # 进度事件 (MarsPlanAgent特有)
    if isinstance(chunk, MarsProgressChunk):
        print(f"执行进度: {chunk.message}")
    
    # 响应内容
    elif isinstance(chunk, MarsResponseChunk):
        print(f"回复: {chunk.data.content}")
    
    # 其他事件类型
    else:
        print(f"事件: {chunk}")
```

### 选择使用建议

#### 使用 MarsAgent 的场景
- 需要快速并发执行多个独立工具
- 工具之间无依赖关系
- 追求响应速度
- 简单的多工具调用场景

#### 使用 MarsPlanAgent 的场景
- 需要处理复杂的多步骤任务
- 工具调用之间有依赖关系
- 需要智能规划执行顺序
- 追求执行逻辑的清晰性

### 事件类型

主Agent会产生以下类型的事件:

- **`MarsProgressChunk`**: 进度事件,显示各个阶段的执行状态(MarsPlanAgent特有)
- **`MarsResponseChunk`**: 响应块事件,流式模型回复内容
- **`heartbeat`**: 心跳事件,保持连接活跃  
- **`error`**: 错误事件,工具执行或模型调用错误

### 配置选项

#### 模型配置

```python
from mars_agent.schema import MarsModelConfig

# 基本配置
model_config = MarsModelConfig(
    model="qwen-plus",
    api_key="your-api-key",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

# 高级配置
advanced_config = MarsModelConfig(
    model="gpt-4",
    api_key="your-openai-key", 
    base_url="https://api.openai.com/v1",
    temperature=0.7
)
```

#### 主Agent高级配置

```python
agent = MarsAgent(
    model_config=model_config,
    tool_call_model_config=tool_call_config,  # 可使用不同的模型进行工具调用
    functions=[your_functions],
    mcp_configs=[mcp_configs],
    mcp_as_agent=False,  # 是否将MCP作为Agent单独使用,这里默认为True
)
```

---

**设计理念**: 通过并发执行和规划执行两种策略,为不同复杂度的任务提供最优的解决方案。


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Shy2593666979/Mars-Agent",
    "name": "mars-agent",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "ai, agent, mcp, streaming, llm, chatbot",
    "author": "MingGuang Tian",
    "author_email": "MingGuang Tian <2593666979@qq.com>",
    "download_url": "https://files.pythonhosted.org/packages/0a/5d/20abb0f67fe6c9a4d28060172c971b52520e2abefdc5ecddd12ab0445bc6/mars_agent-0.1.0.tar.gz",
    "platform": null,
    "description": "# Mars Agent \u67b6\u6784\u8bbe\u8ba1\r\n\r\n> GitHub\u4ed3\u5e93\uff1ahttps://github.com/Shy2593666979/Mars-Agent\r\n\r\n## \ud83c\udfaf \u67b6\u6784\u6982\u8ff0\r\n\r\nMars Agent \u63d0\u4f9b\u4e24\u79cd\u4e0d\u540c\u7684Agent\u6267\u884c\u7b56\u7565\uff0c\u6ee1\u8db3\u4e0d\u540c\u7684\u4f7f\u7528\u573a\u666f\uff1a\r\n\r\n1. **MarsAgent**: \u5e76\u53d1\u6267\u884c\u7b56\u7565 - \u5c06\u6bcf\u4e2aMCP\u670d\u52a1\u5668\u548c\u63d2\u4ef6\u96c6\u5408\u5f53\u4f5c\u72ec\u7acbAgent\u5e76\u53d1\u6267\u884c\r\n2. **MarsPlanAgent**: \u89c4\u5212\u6267\u884c\u7b56\u7565 - \u5148\u5236\u5b9a\u6267\u884c\u8ba1\u5212\uff0c\u518d\u6309\u8ba1\u5212\u9010\u6b65\u8c03\u7528\u5de5\u5177\r\n\r\n### \ud83d\udccb MarsAgent \u67b6\u6784 (\u5e76\u53d1\u6267\u884c)\r\n\r\n```\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502                    \ud83c\udfe0 MarsAgent (\u4e3b\u63a7\u5236\u5668)                    \u2502\r\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\r\n\u2502  \u2502 \u2022 \u5e76\u53d1\u8c03\u5ea6\u591a\u4e2aAgent                                      \u2502 \u2502\r\n\u2502  \u2502 \u2022 \u6c47\u603b\u6240\u6709Agent\u7ed3\u679c                                      \u2502 \u2502\r\n\u2502  \u2502 \u2022 \u7edf\u4e00\u6a21\u578b\u8c03\u7528\u548c\u56de\u590d                                      \u2502 \u2502\r\n\u2502  \u2502 \u2022 \u6d41\u5f0f\u4e8b\u4ef6\u7ba1\u7406                                          \u2502 \u2502\r\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\r\n\u2502                           \u2b06                                  \u2502\r\n\u2502                    \ud83d\udce1 \u4e8b\u4ef6\u6c47\u805a (Event Aggregation)             \u2502\r\n\u2502    \u2b06              \u2b06              \u2b06              \u2b06            \u2502\r\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510           \u2502\r\n\u2502 \u2502\ud83d\udd27 Plugin\u2502  \u2502\ud83d\udee0\ufe0f MCP-A \u2502  \u2502\ud83d\udee0\ufe0f MCP-B \u2502  \u2502\ud83d\udee0\ufe0f MCP-C \u2502           \u2502\r\n\u2502 \u2502 Agent   \u2502  \u2502 Agent   \u2502  \u2502 Agent   \u2502  \u2502 Agent   \u2502           \u2502\r\n\u2502 \u2502\u2022 \u63d2\u4ef6\u96c6\u5408\u2502  \u2502\u2022 \u5730\u56fe\u670d\u52a1\u2502  \u2502\u2022 \u529e\u516c\u670d\u52a1\u2502  \u2502\u2022 \u5176\u4ed6...\u2502           \u2502\r\n\u2502 \u2502\u2022 \u5de5\u5177\u6267\u884c\u2502  \u2502\u2022 \u5de5\u5177\u6267\u884c\u2502  \u2502\u2022 \u5de5\u5177\u6267\u884c\u2502  \u2502\u2022 \u5de5\u5177\u6267\u884c\u2502           \u2502\r\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518           \u2502\r\n\u2502        \u5e76\u53d1\u6267\u884c (Concurrent Execution)                       \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n```\r\n\r\n### \ud83d\udccb MarsPlanAgent \u67b6\u6784 (\u89c4\u5212\u6267\u884c)\r\n\r\n```\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502                  \ud83e\udde0 MarsPlanAgent (\u89c4\u5212\u63a7\u5236\u5668)                 \u2502\r\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\r\n\u2502  \u2502 Step 1: \ud83d\udd0d \u6536\u96c6\u6240\u6709\u53ef\u7528\u5de5\u5177                              \u2502 \u2502\r\n\u2502  \u2502 Step 2: \ud83e\udd16 LLM\u5236\u5b9a\u6267\u884c\u8ba1\u5212                               \u2502 \u2502\r\n\u2502  \u2502 Step 3: \u26a1 \u6309\u8ba1\u5212\u9010\u6b65\u6267\u884c                                \u2502 \u2502\r\n\u2502  \u2502 Step 4: \ud83d\udcca \u6c47\u603b\u7ed3\u679c\u5e76\u56de\u590d                                \u2502 \u2502\r\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\r\n\u2502                                                             \u2502\r\n\u2502  \ud83d\udccb Planning Phase (\u8ba1\u5212\u9636\u6bb5)                                \u2502\r\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\r\n\u2502  \u2502 \ud83d\udee0\ufe0f \u6240\u6709MCP\u5de5\u5177 + \ud83d\udd27 \u63d2\u4ef6\u5de5\u5177 \u2192 \ud83e\udd16 LLM \u2192 \ud83d\udcdd \u6267\u884c\u8ba1\u5212     \u2502 \u2502\r\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\r\n\u2502                           \u2b07                                  \u2502\r\n\u2502  \u26a1 Execution Phase (\u6267\u884c\u9636\u6bb5)                                \u2502\r\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\r\n\u2502  \u2502 \ud83d\udcdd Plan Step 1 \u2192 \ud83d\udd27 Tool Call \u2192 \u2705 Result              \u2502 \u2502\r\n\u2502  \u2502 \ud83d\udcdd Plan Step 2 \u2192 \ud83d\udd27 Tool Call \u2192 \u2705 Result              \u2502 \u2502\r\n\u2502  \u2502 \ud83d\udcdd Plan Step N \u2192 \ud83d\udd27 Tool Call \u2192 \u2705 Result              \u2502 \u2502\r\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\r\n\u2502                     Sequential Execution                     \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n```\r\n\r\n## \ud83c\udfd7\ufe0f \u6838\u5fc3\u5dee\u5f02\u5bf9\u6bd4\r\n\r\n| \u7279\u6027 | MarsAgent (\u5e76\u53d1\u6267\u884c) | MarsPlanAgent (\u89c4\u5212\u6267\u884c) |\r\n|------|---------------------|------------------------|\r\n| **\u6267\u884c\u7b56\u7565** | \u5e76\u53d1\u6267\u884c\u6240\u6709Agent | \u5148\u89c4\u5212\u540e\u6309\u6b65\u9aa4\u6267\u884c |\r\n| **Agent\u5212\u5206** | \u6bcf\u4e2aMCP\u670d\u52a1\u5668 + \u63d2\u4ef6\u96c6\u5408 | \u7edf\u4e00\u5de5\u5177\u6c60 |\r\n| **\u9002\u7528\u573a\u666f** | \u72ec\u7acb\u4efb\u52a1\u3001\u5feb\u901f\u54cd\u5e94 | \u590d\u6742\u6d41\u7a0b\u3001\u4f9d\u8d56\u4efb\u52a1 |\r\n| **\u6267\u884c\u6548\u7387** | \u9ad8\u5e76\u53d1\uff0c\u901f\u5ea6\u5feb | \u6709\u5e8f\u6267\u884c\uff0c\u903b\u8f91\u6e05\u6670 |\r\n| **\u5de5\u5177\u534f\u8c03** | \u65e0\u534f\u8c03\uff0c\u72ec\u7acb\u6267\u884c | \u667a\u80fd\u534f\u8c03\uff0c\u6b65\u9aa4\u4f18\u5316 |\r\n\r\n## \ud83d\udd04 \u6267\u884c\u6d41\u7a0b\u5bf9\u6bd4\r\n\r\n### MarsAgent \u6267\u884c\u6d41\u7a0b\r\n\r\n```mermaid\r\nsequenceDiagram\r\n    participant User\r\n    participant MarsAgent as \ud83c\udfe0 MarsAgent\r\n    participant PluginAgent as \ud83d\udd27 Plugin Agent\r\n    participant MCPAgent1 as \ud83d\udee0\ufe0f MCP Agent A\r\n    participant MCPAgent2 as \ud83d\udee0\ufe0f MCP Agent B\r\n    participant Model as \ud83e\udd16 LLM Model\r\n\r\n    User->>MarsAgent: \u53d1\u9001\u6d88\u606f\r\n    \r\n    par \u5e76\u53d1\u6267\u884c\u6240\u6709Agent\r\n        MarsAgent->>PluginAgent: \u6267\u884c\u63d2\u4ef6\u5de5\u5177\r\n        PluginAgent-->>MarsAgent: \u8fd4\u56de\u7ed3\u679cA\r\n    and\r\n        MarsAgent->>MCPAgent1: \u6267\u884cMCP\u5de5\u5177\r\n        MCPAgent1-->>MarsAgent: \u8fd4\u56de\u7ed3\u679cB\r\n    and\r\n        MarsAgent->>MCPAgent2: \u6267\u884cMCP\u5de5\u5177  \r\n        MCPAgent2-->>MarsAgent: \u8fd4\u56de\u7ed3\u679cC\r\n    end\r\n    \r\n    MarsAgent->>MarsAgent: \u6c47\u603b\u6240\u6709Agent\u7ed3\u679c\r\n    MarsAgent->>Model: \u8c03\u7528\u6a21\u578b\u751f\u6210\u56de\u590d\r\n    Model-->>User: \u8fd4\u56de\u6700\u7ec8\u56de\u590d\r\n```\r\n\r\n### MarsPlanAgent \u6267\u884c\u6d41\u7a0b\r\n\r\n```mermaid\r\nsequenceDiagram\r\n    participant User\r\n    participant PlanAgent as \ud83e\udde0 MarsPlanAgent\r\n    participant ToolPool as \ud83d\udee0\ufe0f \u5de5\u5177\u6c60\r\n    participant Model as \ud83e\udd16 LLM Model\r\n\r\n    User->>PlanAgent: \u53d1\u9001\u6d88\u606f\r\n    \r\n    PlanAgent->>ToolPool: \u6536\u96c6\u6240\u6709\u53ef\u7528\u5de5\u5177\r\n    ToolPool-->>PlanAgent: \u8fd4\u56de\u5de5\u5177\u5217\u8868\r\n    \r\n    PlanAgent->>Model: \u5236\u5b9a\u6267\u884c\u8ba1\u5212\r\n    Model-->>PlanAgent: \u8fd4\u56de\u6267\u884c\u8ba1\u5212\r\n    \r\n    loop \u6309\u8ba1\u5212\u9010\u6b65\u6267\u884c\r\n        PlanAgent->>ToolPool: \u6267\u884c\u8ba1\u5212\u6b65\u9aa4N\r\n        ToolPool-->>PlanAgent: \u8fd4\u56de\u6b65\u9aa4\u7ed3\u679c\r\n    end\r\n    \r\n    PlanAgent->>PlanAgent: \u6c47\u603b\u6240\u6709\u6b65\u9aa4\u7ed3\u679c\r\n    PlanAgent->>Model: \u8c03\u7528\u6a21\u578b\u751f\u6210\u56de\u590d\r\n    Model-->>User: \u8fd4\u56de\u6700\u7ec8\u56de\u590d\r\n```\r\n\r\n## \ud83c\udfa8 \u8bbe\u8ba1\u4f18\u52bf\r\n\r\n### MarsAgent \u4f18\u52bf\r\n- **\u9ad8\u5e76\u53d1**: \u591aAgent\u5e76\u53d1\u6267\u884c\uff0c\u54cd\u5e94\u901f\u5ea6\u5feb\r\n- **\u8d44\u6e90\u9694\u79bb**: \u6bcf\u4e2aMCP\u670d\u52a1\u72ec\u7acbAgent\uff0c\u6545\u969c\u9694\u79bb\r\n- **\u6269\u5c55\u6027\u5f3a**: \u65b0\u589eMCP\u670d\u52a1\u5373\u65b0\u589eAgent\r\n- **\u9002\u5408\u72ec\u7acb\u4efb\u52a1**: \u65e0\u4f9d\u8d56\u5173\u7cfb\u7684\u5de5\u5177\u8c03\u7528\r\n\r\n### MarsPlanAgent \u4f18\u52bf\r\n- **\u667a\u80fd\u89c4\u5212**: LLM\u5236\u5b9a\u6700\u4f18\u6267\u884c\u8ba1\u5212\r\n- **\u6b65\u9aa4\u534f\u8c03**: \u5904\u7406\u6709\u4f9d\u8d56\u5173\u7cfb\u7684\u590d\u6742\u4efb\u52a1\r\n- **\u903b\u8f91\u6e05\u6670**: \u6309\u8ba1\u5212\u6709\u5e8f\u6267\u884c\uff0c\u4fbf\u4e8e\u8c03\u8bd5\r\n- **\u9002\u5408\u590d\u6742\u6d41\u7a0b**: \u591a\u6b65\u9aa4\u3001\u6709\u4f9d\u8d56\u7684\u4efb\u52a1\u573a\u666f\r\n\r\n## \ud83d\udce6 \u5b89\u88c5\r\n\r\n```bash\r\npip install git+https://github.com/Shy2593666979/Mars-Agent\r\n\r\n# \u6216\u8005\r\n\r\npip install mars-agent\r\n```\r\n\r\n## \ud83d\udcdd \u4f7f\u7528\u793a\u4f8b\r\n\r\n### MarsAgent (\u5e76\u53d1\u6267\u884c) \u793a\u4f8b\r\n\r\n```python\r\nimport asyncio\r\nfrom datetime import datetime\r\n\r\nfrom mars_agent import MarsAgent\r\nfrom mars_agent.schema import MarsModelConfig, MCPSSEConfig, MarsResponseChunk\r\n\r\n# \u5b9a\u4e49\u81ea\u5b9a\u4e49\u51fd\u6570\r\ndef get_current_time():\r\n    \"\"\"\u83b7\u53d6\u5f53\u524d\u65f6\u95f4\"\"\"\r\n    return datetime.now().strftime('%Y-%m-%d %H:%M:%S')\r\n\r\ndef test_weather(location: str):\r\n    \"\"\"\u67e5\u8be2\u6307\u5b9a\u5730\u70b9\u7684\u5929\u6c14\u4fe1\u606f\"\"\"\r\n    return f\"The weather in {location} is sunny, 25\u00b0C\"\r\n\r\nasync def main():\r\n    # \u521d\u59cb\u5316MarsAgent\r\n    agent = MarsAgent(\r\n        # \u5de5\u5177\u8c03\u7528\u6a21\u578b\u914d\u7f6e\uff08\u53ef\u9009\u914d\u7f6e\uff0c\u82e5\u4e0d\u6307\u5b9atool call\u6a21\u578b\uff0c\u9ed8\u8ba4\u5de5\u5177\u8c03\u7528\u548c\u5bf9\u8bdd\u6a21\u578b\u4f7f\u7528\u540c\u4e00\u4e2a\uff09\r\n        tool_call_model_config=MarsModelConfig(\r\n            model=\"qwen-plus\",\r\n            api_key=\"your-api-key\",\r\n            base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\"\r\n        ),\r\n        # \u5bf9\u8bdd\u6a21\u578b\u914d\u7f6e\r\n        model_config=MarsModelConfig(\r\n            model=\"qwen-plus\", \r\n            api_key=\"your-api-key\",\r\n            base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\"\r\n        ),\r\n        # \u81ea\u5b9a\u4e49\u51fd\u6570\uff08\u5c06\u4f5c\u4e3a\u4e00\u4e2aPlugin Agent\uff09\r\n        functions=[get_current_time, test_weather],\r\n        # MCP\u670d\u52a1\u5668\u914d\u7f6e\uff08\u6bcf\u4e2aMCP\u670d\u52a1\u5668\u5c06\u4f5c\u4e3a\u4e00\u4e2a\u72ec\u7acbAgent\uff09\r\n        mcp_configs=[\r\n            MCPSSEConfig(\r\n                server_name=\"\u5730\u56fe\u670d\u52a1\",\r\n                url=\"https://your-mcp-server.com/sse\",\r\n            ),\r\n            MCPSSEConfig(\r\n                server_name=\"\u529e\u516c\u670d\u52a1\",\r\n                url=\"https://your-office-server.com/sse\",\r\n                personal_config={\r\n                    \"app_id\": \"your-app-id\", \r\n                    \"app_secret\": \"your-app-secret\"\r\n                }\r\n            )\r\n        ]\r\n    )\r\n\r\n    # \u5e76\u53d1\u6267\u884c - \u6240\u6709Agent\u540c\u65f6\u5de5\u4f5c\r\n    print(\"=== \u5e76\u53d1\u6267\u884c\u793a\u4f8b ===\")\r\n    async for chunk in agent.astream(\"\u4f60\u597d\uff0c\u8bf7\u95ee\u5317\u4eac\u7684\u5929\u6c14\u600e\u4e48\u6837\uff1f\u73b0\u5728\u51e0\u70b9\u4e86\uff1f\"):\r\n        if isinstance(chunk, MarsResponseChunk):\r\n            print(chunk.data.content, end=\"\")\r\n\r\nif __name__ == \"__main__\":\r\n    asyncio.run(main())\r\n```\r\n\r\n### MarsPlanAgent (\u89c4\u5212\u6267\u884c) \u793a\u4f8b\r\n\r\n```python\r\nfrom mars_agent import MarsPlanAgent\r\nfrom mars_agent.schema import MarsModelConfig, MCPSSEConfig, MarsProgressChunk\r\n\r\nasync def plan_agent_example():\r\n    # \u521d\u59cb\u5316MarsPlanAgent\r\n    plan_agent = MarsPlanAgent(\r\n        tool_call_model_config=MarsModelConfig(\r\n            model=\"qwen-plus\",\r\n            api_key=\"your-api-key\", \r\n            base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\"\r\n        ),\r\n        model_config=MarsModelConfig(\r\n            model=\"qwen-plus\",\r\n            api_key=\"your-api-key\",\r\n            base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\"\r\n        ),\r\n        mcp_configs=[\r\n            MCPSSEConfig(\r\n                server_name=\"\u5730\u56fe\u670d\u52a1\",\r\n                url=\"https://your-mcp-server.com/sse\"\r\n            ),\r\n            MCPSSEConfig(\r\n                server_name=\"\u7f51\u9875\u6293\u53d6\",\r\n                url=\"https://your-fetch-server.com/sse\"\r\n            )\r\n        ]\r\n    )\r\n\r\n    # \u89c4\u5212\u6267\u884c - \u5148\u5236\u5b9a\u8ba1\u5212\uff0c\u518d\u9010\u6b65\u6267\u884c\r\n    print(\"=== \u89c4\u5212\u6267\u884c\u793a\u4f8b ===\")\r\n    async for chunk in plan_agent.astream(\"\u5e2e\u6211\u67e5\u8be2\u5317\u4eac\u5230\u4e0a\u6d77\u7684\u8def\u7ebf\uff0c\u7136\u540e\u6293\u53d6\u76f8\u5173\u7684\u4ea4\u901a\u4fe1\u606f\u7f51\u9875\"):\r\n        if isinstance(chunk, MarsProgressChunk):\r\n            print(f\"\u6267\u884c\u8fdb\u5ea6: {chunk}\")\r\n        elif isinstance(chunk, MarsResponseChunk):\r\n            print(chunk.data.accumulated)\r\n```\r\n\r\n### MCP\u914d\u7f6e\u9009\u9879\r\n\r\n```python\r\nfrom mars_agent.schema import MCPSSEConfig, MCPStdioConfig\r\n\r\n# SSE\u65b9\u5f0f\u8fde\u63a5MCP\u670d\u52a1\u5668\r\nsse_config = MCPSSEConfig(\r\n    server_name=\"\u670d\u52a1\u5668\u540d\u79f0\",\r\n    url=\"https://your-server.com/sse\",\r\n    personal_config={\r\n        \"api_key\": \"your-api-key\",\r\n        \"other_param\": \"value\"\r\n    }\r\n)\r\n\r\n# Stdio\u65b9\u5f0f\u8fde\u63a5MCP\u670d\u52a1\u5668\r\nstdio_config = MCPStdioConfig(\r\n    server_name=\"\u672c\u5730\u670d\u52a1\",\r\n    command=\"python\",\r\n    args=[\"-m\", \"your_mcp_server\"],\r\n    env={\"API_KEY\": \"your-api-key\"}\r\n)\r\n```\r\n\r\n### \u54cd\u5e94\u7c7b\u578b\u5904\u7406\r\n\r\n```python\r\nfrom mars_agent import MarsResponseChunk\r\nfrom mars_agent.schema import MarsProgressChunk\r\n\r\nasync for chunk in agent.astream(\"\u4f60\u7684\u95ee\u9898\"):\r\n    # \u8fdb\u5ea6\u4e8b\u4ef6 (MarsPlanAgent\u7279\u6709)\r\n    if isinstance(chunk, MarsProgressChunk):\r\n        print(f\"\u6267\u884c\u8fdb\u5ea6: {chunk.message}\")\r\n    \r\n    # \u54cd\u5e94\u5185\u5bb9\r\n    elif isinstance(chunk, MarsResponseChunk):\r\n        print(f\"\u56de\u590d: {chunk.data.content}\")\r\n    \r\n    # \u5176\u4ed6\u4e8b\u4ef6\u7c7b\u578b\r\n    else:\r\n        print(f\"\u4e8b\u4ef6: {chunk}\")\r\n```\r\n\r\n### \u9009\u62e9\u4f7f\u7528\u5efa\u8bae\r\n\r\n#### \u4f7f\u7528 MarsAgent \u7684\u573a\u666f\r\n- \u9700\u8981\u5feb\u901f\u5e76\u53d1\u6267\u884c\u591a\u4e2a\u72ec\u7acb\u5de5\u5177\r\n- \u5de5\u5177\u4e4b\u95f4\u65e0\u4f9d\u8d56\u5173\u7cfb\r\n- \u8ffd\u6c42\u54cd\u5e94\u901f\u5ea6\r\n- \u7b80\u5355\u7684\u591a\u5de5\u5177\u8c03\u7528\u573a\u666f\r\n\r\n#### \u4f7f\u7528 MarsPlanAgent \u7684\u573a\u666f\r\n- \u9700\u8981\u5904\u7406\u590d\u6742\u7684\u591a\u6b65\u9aa4\u4efb\u52a1\r\n- \u5de5\u5177\u8c03\u7528\u4e4b\u95f4\u6709\u4f9d\u8d56\u5173\u7cfb\r\n- \u9700\u8981\u667a\u80fd\u89c4\u5212\u6267\u884c\u987a\u5e8f\r\n- \u8ffd\u6c42\u6267\u884c\u903b\u8f91\u7684\u6e05\u6670\u6027\r\n\r\n### \u4e8b\u4ef6\u7c7b\u578b\r\n\r\n\u4e3bAgent\u4f1a\u4ea7\u751f\u4ee5\u4e0b\u7c7b\u578b\u7684\u4e8b\u4ef6\uff1a\r\n\r\n- **`MarsProgressChunk`**: \u8fdb\u5ea6\u4e8b\u4ef6\uff0c\u663e\u793a\u5404\u4e2a\u9636\u6bb5\u7684\u6267\u884c\u72b6\u6001\uff08MarsPlanAgent\u7279\u6709\uff09\r\n- **`MarsResponseChunk`**: \u54cd\u5e94\u5757\u4e8b\u4ef6\uff0c\u6d41\u5f0f\u6a21\u578b\u56de\u590d\u5185\u5bb9\r\n- **`heartbeat`**: \u5fc3\u8df3\u4e8b\u4ef6\uff0c\u4fdd\u6301\u8fde\u63a5\u6d3b\u8dc3  \r\n- **`error`**: \u9519\u8bef\u4e8b\u4ef6\uff0c\u5de5\u5177\u6267\u884c\u6216\u6a21\u578b\u8c03\u7528\u9519\u8bef\r\n\r\n### \u914d\u7f6e\u9009\u9879\r\n\r\n#### \u6a21\u578b\u914d\u7f6e\r\n\r\n```python\r\nfrom mars_agent.schema import MarsModelConfig\r\n\r\n# \u57fa\u672c\u914d\u7f6e\r\nmodel_config = MarsModelConfig(\r\n    model=\"qwen-plus\",\r\n    api_key=\"your-api-key\",\r\n    base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\"\r\n)\r\n\r\n# \u9ad8\u7ea7\u914d\u7f6e\r\nadvanced_config = MarsModelConfig(\r\n    model=\"gpt-4\",\r\n    api_key=\"your-openai-key\", \r\n    base_url=\"https://api.openai.com/v1\",\r\n    temperature=0.7\r\n)\r\n```\r\n\r\n#### \u4e3bAgent\u9ad8\u7ea7\u914d\u7f6e\r\n\r\n```python\r\nagent = MarsAgent(\r\n    model_config=model_config,\r\n    tool_call_model_config=tool_call_config,  # \u53ef\u4f7f\u7528\u4e0d\u540c\u7684\u6a21\u578b\u8fdb\u884c\u5de5\u5177\u8c03\u7528\r\n    functions=[your_functions],\r\n    mcp_configs=[mcp_configs],\r\n    mcp_as_agent=False,  # \u662f\u5426\u5c06MCP\u4f5c\u4e3aAgent\u5355\u72ec\u4f7f\u7528\uff0c\u8fd9\u91cc\u9ed8\u8ba4\u4e3aTrue\r\n)\r\n```\r\n\r\n---\r\n\r\n**\u8bbe\u8ba1\u7406\u5ff5**: \u901a\u8fc7\u5e76\u53d1\u6267\u884c\u548c\u89c4\u5212\u6267\u884c\u4e24\u79cd\u7b56\u7565\uff0c\u4e3a\u4e0d\u540c\u590d\u6742\u5ea6\u7684\u4efb\u52a1\u63d0\u4f9b\u6700\u4f18\u7684\u89e3\u51b3\u65b9\u6848\u3002\r\n\r\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Mars Agent - \u57fa\u4e8e\u4e3b\u526f\u4ee3\u7406\u67b6\u6784\u7684AI\u4ee3\u7406\u7cfb\u7edf\uff0c\u652f\u6301MCP\u534f\u8bae\u548c\u6d41\u5f0f\u5904\u7406",
    "version": "0.1.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/Shy2593666979/Mars-Agent/issues",
        "Documentation": "https://github.com/Shy2593666979/Mars-Agent#readme",
        "Homepage": "https://github.com/Shy2593666979/Mars-Agent",
        "Repository": "https://github.com/Shy2593666979/Mars-Agent"
    },
    "split_keywords": [
        "ai",
        " agent",
        " mcp",
        " streaming",
        " llm",
        " chatbot"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0a5d20abb0f67fe6c9a4d28060172c971b52520e2abefdc5ecddd12ab0445bc6",
                "md5": "75e206475e253d173c193df395795aca",
                "sha256": "87ea0e8615ac4761136e0edcec6229efff8b1e049c079f9af0f8cf19ed046d72"
            },
            "downloads": -1,
            "filename": "mars_agent-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "75e206475e253d173c193df395795aca",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 48723,
            "upload_time": "2025-08-11T09:28:27",
            "upload_time_iso_8601": "2025-08-11T09:28:27.121388Z",
            "url": "https://files.pythonhosted.org/packages/0a/5d/20abb0f67fe6c9a4d28060172c971b52520e2abefdc5ecddd12ab0445bc6/mars_agent-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-11 09:28:27",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Shy2593666979",
    "github_project": "Mars-Agent",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "mars-agent"
}
        
Elapsed time: 1.08701s