Name | zipagent JSON |
Version |
0.1.8
JSON |
| download |
home_page | None |
Summary | 轻量级的 AI Agent 框架 |
upload_time | 2025-09-18 05:18:51 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.10 |
license | MIT |
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"/>
<img src="https://readme-typing-svg.herokuapp.com?font=Fira+Code&size=45&duration=3000&pause=1000&color=2E86AB¢er=true&vCenter=true&width=300&height=60&lines=ZipAgent" alt="ZipAgent Title"/>
</p>
[](https://badge.fury.io/py/zipagent)
[](https://pepy.tech/project/zipagent)
[](https://pypi.org/project/zipagent/)
[](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 \n <img src=\"https://readme-typing-svg.herokuapp.com?font=Fira+Code&size=45&duration=3000&pause=1000&color=2E86AB¢er=true&vCenter=true&width=300&height=60&lines=ZipAgent\" alt=\"ZipAgent Title\"/>\n</p>\n\n[](https://badge.fury.io/py/zipagent)\n[](https://pepy.tech/project/zipagent)\n[](https://pypi.org/project/zipagent/)\n[](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"
}