zipagent


Namezipagent JSON
Version 0.1.8 PyPI version JSON
download
home_pageNone
Summary轻量级的 AI Agent 框架
upload_time2025-09-18 05:18:51
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords agent ai assistant framework llm
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <div align="center">

⭐ **如果这个项目对你有帮助,请给我们一个 Star!** ⭐

<p align="center">
  <img src="docs/assets/logo.jpg" alt="ZipAgent Logo" width="120"/>
  &nbsp;&nbsp;&nbsp;&nbsp;
  <img src="https://readme-typing-svg.herokuapp.com?font=Fira+Code&size=45&duration=3000&pause=1000&color=2E86AB&center=true&vCenter=true&width=300&height=60&lines=ZipAgent" alt="ZipAgent Title"/>
</p>

[![PyPI version](https://badge.fury.io/py/zipagent.svg)](https://badge.fury.io/py/zipagent)
[![Downloads](https://pepy.tech/badge/zipagent)](https://pepy.tech/project/zipagent)
[![Python version](https://img.shields.io/pypi/pyversions/zipagent.svg)](https://pypi.org/project/zipagent/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

[📚 文档](https://jiayuxu0.github.io/zipagent) | [🚀 快速开始](#-快速开始) | [💬 讨论](https://github.com/JiayuXu0/ZipAgent/discussions) | [🐛 问题反馈](https://github.com/JiayuXu0/ZipAgent/issues) | [🌍 English](README_EN.md)

</div>

ZipAgent 是一个现代化的 Python AI Agent 框架,专注于简洁、高效和易扩展。**仅用 700 行核心代码实现 Agent 引擎、工具系统、对话管理的完整智能体框架,让你快速构建专属的 AI 助手。**

## 🎯 应用场景

<table>
<tr>
<td align="center">
  <img src="docs/assets/icon_chatbot.png" width="60px" alt="智能客服"/>
  <br/><b>智能客服</b><br/>
  <small>自动回答常见问题<br/>处理订单查询</small>
</td>
<td align="center">
  <img src="docs/assets/icon_code.png" width="60px" alt="代码助手"/>
  <br/><b>代码助手</b><br/>
  <small>代码review和生成<br/>bug修复建议</small>
</td>
<td align="center">
  <img src="docs/assets/icon_data.png" width="60px" alt="数据分析"/>
  <br/><b>数据分析</b><br/>
  <small>自动生成报表<br/>数据洞察发现</small>
</td>
</tr>
<tr>
<td align="center">
  <img src="docs/assets/icon_content.png" width="60px" alt="内容生成"/>
  <br/><b>内容生成</b><br/>
  <small>文章写作助手<br/>营销文案生成</small>
</td>
<td align="center">
  <img src="docs/assets/icon_automation.png" width="60px" alt="工作流自动化"/>
  <br/><b>工作流自动化</b><br/>
  <small>任务调度执行<br/>流程自动化</small>
</td>
<td align="center">
  <img src="docs/assets/icon_qa.png" width="60px" alt="知识问答"/>
  <br/><b>知识问答</b><br/>
  <small>企业知识库<br/>智能问答系统</small>
</td>
</tr>
</table>

## ✨ 核心特性

- **🎯 简洁 API**: 极简设计,几行代码构建 AI Agent
- **🔧 工具系统**: 强大的 `@function_tool` 装饰器,轻松扩展 AI 能力
- **🌊 流式输出**: 完整的流式处理支持,提供实时交互体验
- **📝 上下文管理**: 自动管理对话历史和上下文状态
- **🔗 MCP 集成**: 原生支持 Model Context Protocol,集成外部工具
- **⚡ 现代化**: 基于 Python 3.10+,支持异步编程
- **🧪 高质量**: 120+ 测试用例,78% 代码覆盖率

## 🚀 快速开始

### 安装

```bash
pip install zipagent
```

### 5分钟上手

```python
from zipagent import Agent, Runner, function_tool

# 1. 定义工具
@function_tool
def calculate(expression: str) -> str:
    """计算数学表达式"""
    return str(eval(expression))

# 2. 创建 Agent
agent = Agent(
    name="MathAssistant",
    instructions="你是一个数学助手",
    tools=[calculate]
)

# 3. 开始对话
result = Runner.run(agent, "计算 23 + 45")
print(result.content)  # "23 + 45 的计算结果是 68"
```

## 📚 功能展示

### 🌊 流式输出

```python
from zipagent import StreamEventType

# 实时流式响应
for event in Runner.run_stream(agent, "解释什么是人工智能"):
    if event.type == StreamEventType.ANSWER_DELTA:
        print(event.content, end="", flush=True)  # 打字机效果
    elif event.type == StreamEventType.TOOL_CALL:
        print(f"🔧 调用工具: {event.tool_name}")
```

### 📝 上下文管理

```python
from zipagent import Context

# 多轮对话
context = Context()

result1 = Runner.run(agent, "我叫小明", context=context)
result2 = Runner.run(agent, "我叫什么名字?", context=context)
print(result2.content)  # "你叫小明"

# 对话统计
print(f"对话轮数: {context.turn_count}")
print(f"Token 使用: {context.usage}")
```

### 🔗 MCP 工具集成

```python
from zipagent import MCPTool

# 连接外部 MCP 工具
async def demo():
    # 连接高德地图工具
    amap_tools = await MCPTool.connect(
        command="npx",
        args=["-y", "@amap/amap-maps-mcp-server"],
        env={"AMAP_MAPS_API_KEY": "your_key"}
    )
    
    # 混合使用本地工具和 MCP 工具
    agent = Agent(
        name="MapAssistant",
        instructions="你是一个地图助手",
        tools=[calculate, amap_tools]  # 统一接口!
    )
    
    result = Runner.run(agent, "北京今天天气怎么样?")
    print(result.content)
```

## 🔧 高级功能

### 异常处理

```python
from zipagent import ToolExecutionError, MaxTurnsError

try:
    result = Runner.run(agent, "计算 10 / 0", max_turns=3)
except ToolExecutionError as e:
    print(f"工具执行失败: {e.details['tool_name']}")
except MaxTurnsError as e:
    print(f"达到最大轮次: {e.details['max_turns']}")
```

### 自定义模型

```python
from zipagent import OpenAIModel

# 自定义模型配置
model = OpenAIModel(
    model="gpt-4",
    api_key="your_api_key",
    base_url="https://api.openai.com/v1"
)

agent = Agent(
    name="CustomAgent",
    instructions="你是一个助手",
    tools=[calculate],
    model=model
)
```

## 🎯 使用场景

- **💬 聊天机器人**: 客服、问答、闲聊机器人
- **🔧 智能助手**: 代码助手、写作助手、数据分析助手  
- **🌐 工具集成**: 集成 API、数据库、第三方服务
- **📊 工作流自动化**: 复杂的多步骤任务自动化
- **🔍 知识问答**: 基于知识库的智能问答系统

## 📖 完整示例

查看 `examples/` 目录获取更多示例:

- [`basic_demo.py`](examples/basic_demo.py) - 基础功能演示
- [`stream_demo.py`](examples/stream_demo.py) - 流式输出演示
- [`mcp_demo.py`](examples/mcp_demo.py) - MCP 工具集成演示

```bash
# 运行示例
python examples/basic_demo.py
python examples/stream_demo.py
python examples/mcp_demo.py
```

## 🏗️ 项目架构

```
ZipAgent/
├── src/zipagent/           # 核心框架
│   ├── agent.py            # Agent 核心类
│   ├── context.py          # 上下文管理
│   ├── model.py            # LLM 模型抽象
│   ├── runner.py           # 执行引擎
│   ├── tool.py             # 工具系统
│   ├── stream.py           # 流式处理
│   ├── mcp_tool.py         # MCP 工具集成
│   └── exceptions.py       # 异常系统
├── examples/               # 使用示例
├── tests/                  # 测试套件(120+ 测试)
└── docs/                   # 文档
```


## 🛠️ 开发

### 本地开发环境

```bash
# 克隆项目
git clone https://github.com/JiayuXu0/ZipAgent.git
cd ZipAgent

# 使用 uv 管理依赖(推荐)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync

# 运行测试
uv run pytest

# 代码检查
uv run ruff check --fix
uv run pyright
```

### 贡献指南

我们欢迎各种形式的贡献!

1. 🐛 **报告 Bug**: 提交 [Issue](https://github.com/JiayuXu0/ZipAgent/issues)
2. 💡 **功能建议**: 讨论新功能想法
3. 📝 **文档改进**: 完善文档和示例
4. 🔧 **代码贡献**: 提交 Pull Request

## 📄 许可证

MIT License - 详见 [LICENSE](LICENSE) 文件

## 🤝 致谢

感谢所有贡献者和社区支持!

- OpenAI - 提供强大的 LLM API
- MCP 社区 - Model Context Protocol 标准
- Python 生态 - 优秀的开发工具链
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "zipagent",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "Jiayu Xu <420249001@qq.com>",
    "keywords": "agent, ai, assistant, framework, llm",
    "author": null,
    "author_email": "Jiayu Xu <420249001@qq.com>",
    "download_url": "https://files.pythonhosted.org/packages/42/bf/c653f91c2f39e311e0985dc8e532d537bf3d9ee5ea162d4de6690ae8c25e/zipagent-0.1.8.tar.gz",
    "platform": null,
    "description": "<div align=\"center\">\n\n\u2b50 **\u5982\u679c\u8fd9\u4e2a\u9879\u76ee\u5bf9\u4f60\u6709\u5e2e\u52a9\uff0c\u8bf7\u7ed9\u6211\u4eec\u4e00\u4e2a Star\uff01** \u2b50\n\n<p align=\"center\">\n  <img src=\"docs/assets/logo.jpg\" alt=\"ZipAgent Logo\" width=\"120\"/>\n  &nbsp;&nbsp;&nbsp;&nbsp;\n  <img src=\"https://readme-typing-svg.herokuapp.com?font=Fira+Code&size=45&duration=3000&pause=1000&color=2E86AB&center=true&vCenter=true&width=300&height=60&lines=ZipAgent\" alt=\"ZipAgent Title\"/>\n</p>\n\n[![PyPI version](https://badge.fury.io/py/zipagent.svg)](https://badge.fury.io/py/zipagent)\n[![Downloads](https://pepy.tech/badge/zipagent)](https://pepy.tech/project/zipagent)\n[![Python version](https://img.shields.io/pypi/pyversions/zipagent.svg)](https://pypi.org/project/zipagent/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[\ud83d\udcda \u6587\u6863](https://jiayuxu0.github.io/zipagent) | [\ud83d\ude80 \u5feb\u901f\u5f00\u59cb](#-\u5feb\u901f\u5f00\u59cb) | [\ud83d\udcac \u8ba8\u8bba](https://github.com/JiayuXu0/ZipAgent/discussions) | [\ud83d\udc1b \u95ee\u9898\u53cd\u9988](https://github.com/JiayuXu0/ZipAgent/issues) | [\ud83c\udf0d English](README_EN.md)\n\n</div>\n\nZipAgent \u662f\u4e00\u4e2a\u73b0\u4ee3\u5316\u7684 Python AI Agent \u6846\u67b6\uff0c\u4e13\u6ce8\u4e8e\u7b80\u6d01\u3001\u9ad8\u6548\u548c\u6613\u6269\u5c55\u3002**\u4ec5\u7528 700 \u884c\u6838\u5fc3\u4ee3\u7801\u5b9e\u73b0 Agent \u5f15\u64ce\u3001\u5de5\u5177\u7cfb\u7edf\u3001\u5bf9\u8bdd\u7ba1\u7406\u7684\u5b8c\u6574\u667a\u80fd\u4f53\u6846\u67b6\uff0c\u8ba9\u4f60\u5feb\u901f\u6784\u5efa\u4e13\u5c5e\u7684 AI \u52a9\u624b\u3002**\n\n## \ud83c\udfaf \u5e94\u7528\u573a\u666f\n\n<table>\n<tr>\n<td align=\"center\">\n  <img src=\"docs/assets/icon_chatbot.png\" width=\"60px\" alt=\"\u667a\u80fd\u5ba2\u670d\"/>\n  <br/><b>\u667a\u80fd\u5ba2\u670d</b><br/>\n  <small>\u81ea\u52a8\u56de\u7b54\u5e38\u89c1\u95ee\u9898<br/>\u5904\u7406\u8ba2\u5355\u67e5\u8be2</small>\n</td>\n<td align=\"center\">\n  <img src=\"docs/assets/icon_code.png\" width=\"60px\" alt=\"\u4ee3\u7801\u52a9\u624b\"/>\n  <br/><b>\u4ee3\u7801\u52a9\u624b</b><br/>\n  <small>\u4ee3\u7801review\u548c\u751f\u6210<br/>bug\u4fee\u590d\u5efa\u8bae</small>\n</td>\n<td align=\"center\">\n  <img src=\"docs/assets/icon_data.png\" width=\"60px\" alt=\"\u6570\u636e\u5206\u6790\"/>\n  <br/><b>\u6570\u636e\u5206\u6790</b><br/>\n  <small>\u81ea\u52a8\u751f\u6210\u62a5\u8868<br/>\u6570\u636e\u6d1e\u5bdf\u53d1\u73b0</small>\n</td>\n</tr>\n<tr>\n<td align=\"center\">\n  <img src=\"docs/assets/icon_content.png\" width=\"60px\" alt=\"\u5185\u5bb9\u751f\u6210\"/>\n  <br/><b>\u5185\u5bb9\u751f\u6210</b><br/>\n  <small>\u6587\u7ae0\u5199\u4f5c\u52a9\u624b<br/>\u8425\u9500\u6587\u6848\u751f\u6210</small>\n</td>\n<td align=\"center\">\n  <img src=\"docs/assets/icon_automation.png\" width=\"60px\" alt=\"\u5de5\u4f5c\u6d41\u81ea\u52a8\u5316\"/>\n  <br/><b>\u5de5\u4f5c\u6d41\u81ea\u52a8\u5316</b><br/>\n  <small>\u4efb\u52a1\u8c03\u5ea6\u6267\u884c<br/>\u6d41\u7a0b\u81ea\u52a8\u5316</small>\n</td>\n<td align=\"center\">\n  <img src=\"docs/assets/icon_qa.png\" width=\"60px\" alt=\"\u77e5\u8bc6\u95ee\u7b54\"/>\n  <br/><b>\u77e5\u8bc6\u95ee\u7b54</b><br/>\n  <small>\u4f01\u4e1a\u77e5\u8bc6\u5e93<br/>\u667a\u80fd\u95ee\u7b54\u7cfb\u7edf</small>\n</td>\n</tr>\n</table>\n\n## \u2728 \u6838\u5fc3\u7279\u6027\n\n- **\ud83c\udfaf \u7b80\u6d01 API**: \u6781\u7b80\u8bbe\u8ba1\uff0c\u51e0\u884c\u4ee3\u7801\u6784\u5efa AI Agent\n- **\ud83d\udd27 \u5de5\u5177\u7cfb\u7edf**: \u5f3a\u5927\u7684 `@function_tool` \u88c5\u9970\u5668\uff0c\u8f7b\u677e\u6269\u5c55 AI \u80fd\u529b\n- **\ud83c\udf0a \u6d41\u5f0f\u8f93\u51fa**: \u5b8c\u6574\u7684\u6d41\u5f0f\u5904\u7406\u652f\u6301\uff0c\u63d0\u4f9b\u5b9e\u65f6\u4ea4\u4e92\u4f53\u9a8c\n- **\ud83d\udcdd \u4e0a\u4e0b\u6587\u7ba1\u7406**: \u81ea\u52a8\u7ba1\u7406\u5bf9\u8bdd\u5386\u53f2\u548c\u4e0a\u4e0b\u6587\u72b6\u6001\n- **\ud83d\udd17 MCP \u96c6\u6210**: \u539f\u751f\u652f\u6301 Model Context Protocol\uff0c\u96c6\u6210\u5916\u90e8\u5de5\u5177\n- **\u26a1 \u73b0\u4ee3\u5316**: \u57fa\u4e8e Python 3.10+\uff0c\u652f\u6301\u5f02\u6b65\u7f16\u7a0b\n- **\ud83e\uddea \u9ad8\u8d28\u91cf**: 120+ \u6d4b\u8bd5\u7528\u4f8b\uff0c78% \u4ee3\u7801\u8986\u76d6\u7387\n\n## \ud83d\ude80 \u5feb\u901f\u5f00\u59cb\n\n### \u5b89\u88c5\n\n```bash\npip install zipagent\n```\n\n### 5\u5206\u949f\u4e0a\u624b\n\n```python\nfrom zipagent import Agent, Runner, function_tool\n\n# 1. \u5b9a\u4e49\u5de5\u5177\n@function_tool\ndef calculate(expression: str) -> str:\n    \"\"\"\u8ba1\u7b97\u6570\u5b66\u8868\u8fbe\u5f0f\"\"\"\n    return str(eval(expression))\n\n# 2. \u521b\u5efa Agent\nagent = Agent(\n    name=\"MathAssistant\",\n    instructions=\"\u4f60\u662f\u4e00\u4e2a\u6570\u5b66\u52a9\u624b\",\n    tools=[calculate]\n)\n\n# 3. \u5f00\u59cb\u5bf9\u8bdd\nresult = Runner.run(agent, \"\u8ba1\u7b97 23 + 45\")\nprint(result.content)  # \"23 + 45 \u7684\u8ba1\u7b97\u7ed3\u679c\u662f 68\"\n```\n\n## \ud83d\udcda \u529f\u80fd\u5c55\u793a\n\n### \ud83c\udf0a \u6d41\u5f0f\u8f93\u51fa\n\n```python\nfrom zipagent import StreamEventType\n\n# \u5b9e\u65f6\u6d41\u5f0f\u54cd\u5e94\nfor event in Runner.run_stream(agent, \"\u89e3\u91ca\u4ec0\u4e48\u662f\u4eba\u5de5\u667a\u80fd\"):\n    if event.type == StreamEventType.ANSWER_DELTA:\n        print(event.content, end=\"\", flush=True)  # \u6253\u5b57\u673a\u6548\u679c\n    elif event.type == StreamEventType.TOOL_CALL:\n        print(f\"\ud83d\udd27 \u8c03\u7528\u5de5\u5177: {event.tool_name}\")\n```\n\n### \ud83d\udcdd \u4e0a\u4e0b\u6587\u7ba1\u7406\n\n```python\nfrom zipagent import Context\n\n# \u591a\u8f6e\u5bf9\u8bdd\ncontext = Context()\n\nresult1 = Runner.run(agent, \"\u6211\u53eb\u5c0f\u660e\", context=context)\nresult2 = Runner.run(agent, \"\u6211\u53eb\u4ec0\u4e48\u540d\u5b57\uff1f\", context=context)\nprint(result2.content)  # \"\u4f60\u53eb\u5c0f\u660e\"\n\n# \u5bf9\u8bdd\u7edf\u8ba1\nprint(f\"\u5bf9\u8bdd\u8f6e\u6570: {context.turn_count}\")\nprint(f\"Token \u4f7f\u7528: {context.usage}\")\n```\n\n### \ud83d\udd17 MCP \u5de5\u5177\u96c6\u6210\n\n```python\nfrom zipagent import MCPTool\n\n# \u8fde\u63a5\u5916\u90e8 MCP \u5de5\u5177\nasync def demo():\n    # \u8fde\u63a5\u9ad8\u5fb7\u5730\u56fe\u5de5\u5177\n    amap_tools = await MCPTool.connect(\n        command=\"npx\",\n        args=[\"-y\", \"@amap/amap-maps-mcp-server\"],\n        env={\"AMAP_MAPS_API_KEY\": \"your_key\"}\n    )\n    \n    # \u6df7\u5408\u4f7f\u7528\u672c\u5730\u5de5\u5177\u548c MCP \u5de5\u5177\n    agent = Agent(\n        name=\"MapAssistant\",\n        instructions=\"\u4f60\u662f\u4e00\u4e2a\u5730\u56fe\u52a9\u624b\",\n        tools=[calculate, amap_tools]  # \u7edf\u4e00\u63a5\u53e3\uff01\n    )\n    \n    result = Runner.run(agent, \"\u5317\u4eac\u4eca\u5929\u5929\u6c14\u600e\u4e48\u6837\uff1f\")\n    print(result.content)\n```\n\n## \ud83d\udd27 \u9ad8\u7ea7\u529f\u80fd\n\n### \u5f02\u5e38\u5904\u7406\n\n```python\nfrom zipagent import ToolExecutionError, MaxTurnsError\n\ntry:\n    result = Runner.run(agent, \"\u8ba1\u7b97 10 / 0\", max_turns=3)\nexcept ToolExecutionError as e:\n    print(f\"\u5de5\u5177\u6267\u884c\u5931\u8d25: {e.details['tool_name']}\")\nexcept MaxTurnsError as e:\n    print(f\"\u8fbe\u5230\u6700\u5927\u8f6e\u6b21: {e.details['max_turns']}\")\n```\n\n### \u81ea\u5b9a\u4e49\u6a21\u578b\n\n```python\nfrom zipagent import OpenAIModel\n\n# \u81ea\u5b9a\u4e49\u6a21\u578b\u914d\u7f6e\nmodel = OpenAIModel(\n    model=\"gpt-4\",\n    api_key=\"your_api_key\",\n    base_url=\"https://api.openai.com/v1\"\n)\n\nagent = Agent(\n    name=\"CustomAgent\",\n    instructions=\"\u4f60\u662f\u4e00\u4e2a\u52a9\u624b\",\n    tools=[calculate],\n    model=model\n)\n```\n\n## \ud83c\udfaf \u4f7f\u7528\u573a\u666f\n\n- **\ud83d\udcac \u804a\u5929\u673a\u5668\u4eba**: \u5ba2\u670d\u3001\u95ee\u7b54\u3001\u95f2\u804a\u673a\u5668\u4eba\n- **\ud83d\udd27 \u667a\u80fd\u52a9\u624b**: \u4ee3\u7801\u52a9\u624b\u3001\u5199\u4f5c\u52a9\u624b\u3001\u6570\u636e\u5206\u6790\u52a9\u624b  \n- **\ud83c\udf10 \u5de5\u5177\u96c6\u6210**: \u96c6\u6210 API\u3001\u6570\u636e\u5e93\u3001\u7b2c\u4e09\u65b9\u670d\u52a1\n- **\ud83d\udcca \u5de5\u4f5c\u6d41\u81ea\u52a8\u5316**: \u590d\u6742\u7684\u591a\u6b65\u9aa4\u4efb\u52a1\u81ea\u52a8\u5316\n- **\ud83d\udd0d \u77e5\u8bc6\u95ee\u7b54**: \u57fa\u4e8e\u77e5\u8bc6\u5e93\u7684\u667a\u80fd\u95ee\u7b54\u7cfb\u7edf\n\n## \ud83d\udcd6 \u5b8c\u6574\u793a\u4f8b\n\n\u67e5\u770b `examples/` \u76ee\u5f55\u83b7\u53d6\u66f4\u591a\u793a\u4f8b\uff1a\n\n- [`basic_demo.py`](examples/basic_demo.py) - \u57fa\u7840\u529f\u80fd\u6f14\u793a\n- [`stream_demo.py`](examples/stream_demo.py) - \u6d41\u5f0f\u8f93\u51fa\u6f14\u793a\n- [`mcp_demo.py`](examples/mcp_demo.py) - MCP \u5de5\u5177\u96c6\u6210\u6f14\u793a\n\n```bash\n# \u8fd0\u884c\u793a\u4f8b\npython examples/basic_demo.py\npython examples/stream_demo.py\npython examples/mcp_demo.py\n```\n\n## \ud83c\udfd7\ufe0f \u9879\u76ee\u67b6\u6784\n\n```\nZipAgent/\n\u251c\u2500\u2500 src/zipagent/           # \u6838\u5fc3\u6846\u67b6\n\u2502   \u251c\u2500\u2500 agent.py            # Agent \u6838\u5fc3\u7c7b\n\u2502   \u251c\u2500\u2500 context.py          # \u4e0a\u4e0b\u6587\u7ba1\u7406\n\u2502   \u251c\u2500\u2500 model.py            # LLM \u6a21\u578b\u62bd\u8c61\n\u2502   \u251c\u2500\u2500 runner.py           # \u6267\u884c\u5f15\u64ce\n\u2502   \u251c\u2500\u2500 tool.py             # \u5de5\u5177\u7cfb\u7edf\n\u2502   \u251c\u2500\u2500 stream.py           # \u6d41\u5f0f\u5904\u7406\n\u2502   \u251c\u2500\u2500 mcp_tool.py         # MCP \u5de5\u5177\u96c6\u6210\n\u2502   \u2514\u2500\u2500 exceptions.py       # \u5f02\u5e38\u7cfb\u7edf\n\u251c\u2500\u2500 examples/               # \u4f7f\u7528\u793a\u4f8b\n\u251c\u2500\u2500 tests/                  # \u6d4b\u8bd5\u5957\u4ef6\uff08120+ \u6d4b\u8bd5\uff09\n\u2514\u2500\u2500 docs/                   # \u6587\u6863\n```\n\n\n## \ud83d\udee0\ufe0f \u5f00\u53d1\n\n### \u672c\u5730\u5f00\u53d1\u73af\u5883\n\n```bash\n# \u514b\u9686\u9879\u76ee\ngit clone https://github.com/JiayuXu0/ZipAgent.git\ncd ZipAgent\n\n# \u4f7f\u7528 uv \u7ba1\u7406\u4f9d\u8d56\uff08\u63a8\u8350\uff09\ncurl -LsSf https://astral.sh/uv/install.sh | sh\nuv sync\n\n# \u8fd0\u884c\u6d4b\u8bd5\nuv run pytest\n\n# \u4ee3\u7801\u68c0\u67e5\nuv run ruff check --fix\nuv run pyright\n```\n\n### \u8d21\u732e\u6307\u5357\n\n\u6211\u4eec\u6b22\u8fce\u5404\u79cd\u5f62\u5f0f\u7684\u8d21\u732e\uff01\n\n1. \ud83d\udc1b **\u62a5\u544a Bug**: \u63d0\u4ea4 [Issue](https://github.com/JiayuXu0/ZipAgent/issues)\n2. \ud83d\udca1 **\u529f\u80fd\u5efa\u8bae**: \u8ba8\u8bba\u65b0\u529f\u80fd\u60f3\u6cd5\n3. \ud83d\udcdd **\u6587\u6863\u6539\u8fdb**: \u5b8c\u5584\u6587\u6863\u548c\u793a\u4f8b\n4. \ud83d\udd27 **\u4ee3\u7801\u8d21\u732e**: \u63d0\u4ea4 Pull Request\n\n## \ud83d\udcc4 \u8bb8\u53ef\u8bc1\n\nMIT License - \u8be6\u89c1 [LICENSE](LICENSE) \u6587\u4ef6\n\n## \ud83e\udd1d \u81f4\u8c22\n\n\u611f\u8c22\u6240\u6709\u8d21\u732e\u8005\u548c\u793e\u533a\u652f\u6301\uff01\n\n- OpenAI - \u63d0\u4f9b\u5f3a\u5927\u7684 LLM API\n- MCP \u793e\u533a - Model Context Protocol \u6807\u51c6\n- Python \u751f\u6001 - \u4f18\u79c0\u7684\u5f00\u53d1\u5de5\u5177\u94fe",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "\u8f7b\u91cf\u7ea7\u7684 AI Agent \u6846\u67b6",
    "version": "0.1.8",
    "project_urls": {
        "Homepage": "https://github.com/JiayuXu0/ZipAgent",
        "Issues": "https://github.com/JiayuXu0/ZipAgent/issues",
        "Repository": "https://github.com/JiayuXu0/ZipAgent.git"
    },
    "split_keywords": [
        "agent",
        " ai",
        " assistant",
        " framework",
        " llm"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "041bec2e87b120297fd375b11b5e133fbb982afbb5c9e90ed5ae91341c4550b4",
                "md5": "bc1a30489911939ce9d933d9155969f3",
                "sha256": "a945bef82852219386157e9aff603b4e025da59ce6048129dcf86b7f47b2dede"
            },
            "downloads": -1,
            "filename": "zipagent-0.1.8-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bc1a30489911939ce9d933d9155969f3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 25409,
            "upload_time": "2025-09-18T05:18:50",
            "upload_time_iso_8601": "2025-09-18T05:18:50.085203Z",
            "url": "https://files.pythonhosted.org/packages/04/1b/ec2e87b120297fd375b11b5e133fbb982afbb5c9e90ed5ae91341c4550b4/zipagent-0.1.8-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "42bfc653f91c2f39e311e0985dc8e532d537bf3d9ee5ea162d4de6690ae8c25e",
                "md5": "6abccbc20daf4f6a25b383900ea5a259",
                "sha256": "13051e2a9ee438d23b759bd57eb5e6ed67b13e34a8b5b72935a554e7a7e19063"
            },
            "downloads": -1,
            "filename": "zipagent-0.1.8.tar.gz",
            "has_sig": false,
            "md5_digest": "6abccbc20daf4f6a25b383900ea5a259",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 36753,
            "upload_time": "2025-09-18T05:18:51",
            "upload_time_iso_8601": "2025-09-18T05:18:51.413425Z",
            "url": "https://files.pythonhosted.org/packages/42/bf/c653f91c2f39e311e0985dc8e532d537bf3d9ee5ea162d4de6690ae8c25e/zipagent-0.1.8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-18 05:18:51",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "JiayuXu0",
    "github_project": "ZipAgent",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "zipagent"
}
        
Elapsed time: 1.22830s