# aimanager_hjy
AI服务管理包 - 统一的AI模型调用接口
## 简介
`aimanager_hjy` 是一个统一的AI服务管理包,提供标准化的AI模型调用接口。它是 `ai_runner_hjy` 的升级版本,采用更规范的命名和更完善的功能。
## 主要功能
- **统一AI调用接口**: 通过 `run_route()` 方法调用各种AI服务
- **配置管理**: 支持多种配置方式(环境变量、配置文件、数据库)
- **文件上传**: 集成OSS存储,支持文件上传和管理
- **数据库连接**: 内置MySQL连接管理
- **错误处理**: 完善的错误处理和重试机制
- **日志记录**: 集成loguru日志系统
## 安装
```bash
pip install aimanager_hjy
```
## 快速开始
### 基本使用
```python
from aimanager_hjy import AIManager
# 初始化AI管理器
ai_manager = AIManager()
# 调用AI服务
result = ai_manager.run_route("dogvoice.analysis.s2", {
"audio_url": "https://example.com/audio.mp3",
"user_id": "user_123"
})
print(result)
```
### 配置管理
```python
from aimanager_hjy import get_config
# 获取配置
config = get_config()
print(config.database.host)
print(config.oss.bucket)
```
### 文件上传
```python
from aimanager_hjy import upload_file
# 上传文件到OSS
file_url = upload_file("audio.mp3", "audio/")
print(f"文件已上传到: {file_url}")
```
## 配置说明
### 环境变量配置
```bash
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_NAME=dogvoice
DB_USER=root
DB_PASSWORD=password
# OSS配置
OSS_ACCESS_KEY_ID=your_access_key
OSS_ACCESS_KEY_SECRET=your_secret_key
OSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com
OSS_BUCKET=your_bucket
# AI服务配置
AI_SERVICE_URL=http://localhost:8000
AI_SERVICE_TIMEOUT=30
```
### 配置文件
创建 `config.yaml` 文件:
```yaml
database:
host: localhost
port: 3306
name: dogvoice
user: root
password: password
oss:
access_key_id: your_access_key
access_key_secret: your_secret_key
endpoint: oss-cn-hangzhou.aliyuncs.com
bucket: your_bucket
ai_service:
url: http://localhost:8000
timeout: 30
retry_count: 3
```
## API参考
### AIManager类
#### `__init__(config_path: str = None)`
初始化AI管理器
#### `run_route(route_name: str, params: dict = None) -> dict`
调用AI服务路由
- `route_name`: 路由名称,如 "dogvoice.analysis.s2"
- `params`: 参数字典
#### `run_once(route_name: str, params: dict = None) -> dict`
执行一次性AI调用
#### `run(route_name: str, params: dict = None) -> dict`
执行AI调用(别名)
### 工具函数
#### `get_config() -> AppConfig`
获取应用配置
#### `get_db_connection() -> Connection`
获取数据库连接
#### `upload_file(file_path: str, prefix: str = "") -> str`
上传文件到OSS
#### `validate_required_fields(data: dict, required_fields: list) -> bool`
验证必需字段
## 迁移指南
### 从 ai_runner_hjy 迁移
```python
# 旧代码
from ai_runner_hjy import AIRunner, run_route
runner = AIRunner()
result = run_route("dogvoice.analysis.s2", params)
# 新代码
from aimanager_hjy import AIManager, run_route
manager = AIManager()
result = run_route("dogvoice.analysis.s2", params)
```
## 开发
### 安装开发依赖
```bash
pip install -e .[dev]
```
### 运行测试
```bash
pytest
```
### 代码格式化
```bash
black aimanager_hjy/
isort aimanager_hjy/
```
## 许可证
MIT License
## 更新日志
### v0.1.0
- 初始版本
- 基于 ai_runner_hjy 重构
- 统一命名规范
- 完善文档和示例
Raw data
{
"_id": null,
"home_page": "https://github.com/hjy/aimanager_hjy",
"name": "aimanager-hjy",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": null,
"author": "hjy",
"author_email": "hjy@example.com",
"download_url": "https://files.pythonhosted.org/packages/82/f1/d50b42a6d64ab037cf9f425b8f292a3b0de6ff1db85441a1923db14c9f8f/aimanager_hjy-0.3.0.tar.gz",
"platform": null,
"description": "# aimanager_hjy\n\nAI\u670d\u52a1\u7ba1\u7406\u5305 - \u7edf\u4e00\u7684AI\u6a21\u578b\u8c03\u7528\u63a5\u53e3\n\n## \u7b80\u4ecb\n\n`aimanager_hjy` \u662f\u4e00\u4e2a\u7edf\u4e00\u7684AI\u670d\u52a1\u7ba1\u7406\u5305\uff0c\u63d0\u4f9b\u6807\u51c6\u5316\u7684AI\u6a21\u578b\u8c03\u7528\u63a5\u53e3\u3002\u5b83\u662f `ai_runner_hjy` \u7684\u5347\u7ea7\u7248\u672c\uff0c\u91c7\u7528\u66f4\u89c4\u8303\u7684\u547d\u540d\u548c\u66f4\u5b8c\u5584\u7684\u529f\u80fd\u3002\n\n## \u4e3b\u8981\u529f\u80fd\n\n- **\u7edf\u4e00AI\u8c03\u7528\u63a5\u53e3**: \u901a\u8fc7 `run_route()` \u65b9\u6cd5\u8c03\u7528\u5404\u79cdAI\u670d\u52a1\n- **\u914d\u7f6e\u7ba1\u7406**: \u652f\u6301\u591a\u79cd\u914d\u7f6e\u65b9\u5f0f\uff08\u73af\u5883\u53d8\u91cf\u3001\u914d\u7f6e\u6587\u4ef6\u3001\u6570\u636e\u5e93\uff09\n- **\u6587\u4ef6\u4e0a\u4f20**: \u96c6\u6210OSS\u5b58\u50a8\uff0c\u652f\u6301\u6587\u4ef6\u4e0a\u4f20\u548c\u7ba1\u7406\n- **\u6570\u636e\u5e93\u8fde\u63a5**: \u5185\u7f6eMySQL\u8fde\u63a5\u7ba1\u7406\n- **\u9519\u8bef\u5904\u7406**: \u5b8c\u5584\u7684\u9519\u8bef\u5904\u7406\u548c\u91cd\u8bd5\u673a\u5236\n- **\u65e5\u5fd7\u8bb0\u5f55**: \u96c6\u6210loguru\u65e5\u5fd7\u7cfb\u7edf\n\n## \u5b89\u88c5\n\n```bash\npip install aimanager_hjy\n```\n\n## \u5feb\u901f\u5f00\u59cb\n\n### \u57fa\u672c\u4f7f\u7528\n\n```python\nfrom aimanager_hjy import AIManager\n\n# \u521d\u59cb\u5316AI\u7ba1\u7406\u5668\nai_manager = AIManager()\n\n# \u8c03\u7528AI\u670d\u52a1\nresult = ai_manager.run_route(\"dogvoice.analysis.s2\", {\n \"audio_url\": \"https://example.com/audio.mp3\",\n \"user_id\": \"user_123\"\n})\n\nprint(result)\n```\n\n### \u914d\u7f6e\u7ba1\u7406\n\n```python\nfrom aimanager_hjy import get_config\n\n# \u83b7\u53d6\u914d\u7f6e\nconfig = get_config()\nprint(config.database.host)\nprint(config.oss.bucket)\n```\n\n### \u6587\u4ef6\u4e0a\u4f20\n\n```python\nfrom aimanager_hjy import upload_file\n\n# \u4e0a\u4f20\u6587\u4ef6\u5230OSS\nfile_url = upload_file(\"audio.mp3\", \"audio/\")\nprint(f\"\u6587\u4ef6\u5df2\u4e0a\u4f20\u5230: {file_url}\")\n```\n\n## \u914d\u7f6e\u8bf4\u660e\n\n### \u73af\u5883\u53d8\u91cf\u914d\u7f6e\n\n```bash\n# \u6570\u636e\u5e93\u914d\u7f6e\nDB_HOST=localhost\nDB_PORT=3306\nDB_NAME=dogvoice\nDB_USER=root\nDB_PASSWORD=password\n\n# OSS\u914d\u7f6e\nOSS_ACCESS_KEY_ID=your_access_key\nOSS_ACCESS_KEY_SECRET=your_secret_key\nOSS_ENDPOINT=oss-cn-hangzhou.aliyuncs.com\nOSS_BUCKET=your_bucket\n\n# AI\u670d\u52a1\u914d\u7f6e\nAI_SERVICE_URL=http://localhost:8000\nAI_SERVICE_TIMEOUT=30\n```\n\n### \u914d\u7f6e\u6587\u4ef6\n\n\u521b\u5efa `config.yaml` \u6587\u4ef6\uff1a\n\n```yaml\ndatabase:\n host: localhost\n port: 3306\n name: dogvoice\n user: root\n password: password\n\noss:\n access_key_id: your_access_key\n access_key_secret: your_secret_key\n endpoint: oss-cn-hangzhou.aliyuncs.com\n bucket: your_bucket\n\nai_service:\n url: http://localhost:8000\n timeout: 30\n retry_count: 3\n```\n\n## API\u53c2\u8003\n\n### AIManager\u7c7b\n\n#### `__init__(config_path: str = None)`\n\u521d\u59cb\u5316AI\u7ba1\u7406\u5668\n\n#### `run_route(route_name: str, params: dict = None) -> dict`\n\u8c03\u7528AI\u670d\u52a1\u8def\u7531\n\n- `route_name`: \u8def\u7531\u540d\u79f0\uff0c\u5982 \"dogvoice.analysis.s2\"\n- `params`: \u53c2\u6570\u5b57\u5178\n\n#### `run_once(route_name: str, params: dict = None) -> dict`\n\u6267\u884c\u4e00\u6b21\u6027AI\u8c03\u7528\n\n#### `run(route_name: str, params: dict = None) -> dict`\n\u6267\u884cAI\u8c03\u7528\uff08\u522b\u540d\uff09\n\n### \u5de5\u5177\u51fd\u6570\n\n#### `get_config() -> AppConfig`\n\u83b7\u53d6\u5e94\u7528\u914d\u7f6e\n\n#### `get_db_connection() -> Connection`\n\u83b7\u53d6\u6570\u636e\u5e93\u8fde\u63a5\n\n#### `upload_file(file_path: str, prefix: str = \"\") -> str`\n\u4e0a\u4f20\u6587\u4ef6\u5230OSS\n\n#### `validate_required_fields(data: dict, required_fields: list) -> bool`\n\u9a8c\u8bc1\u5fc5\u9700\u5b57\u6bb5\n\n## \u8fc1\u79fb\u6307\u5357\n\n### \u4ece ai_runner_hjy \u8fc1\u79fb\n\n```python\n# \u65e7\u4ee3\u7801\nfrom ai_runner_hjy import AIRunner, run_route\n\nrunner = AIRunner()\nresult = run_route(\"dogvoice.analysis.s2\", params)\n\n# \u65b0\u4ee3\u7801\nfrom aimanager_hjy import AIManager, run_route\n\nmanager = AIManager()\nresult = run_route(\"dogvoice.analysis.s2\", params)\n```\n\n## \u5f00\u53d1\n\n### \u5b89\u88c5\u5f00\u53d1\u4f9d\u8d56\n\n```bash\npip install -e .[dev]\n```\n\n### \u8fd0\u884c\u6d4b\u8bd5\n\n```bash\npytest\n```\n\n### \u4ee3\u7801\u683c\u5f0f\u5316\n\n```bash\nblack aimanager_hjy/\nisort aimanager_hjy/\n```\n\n## \u8bb8\u53ef\u8bc1\n\nMIT License\n\n## \u66f4\u65b0\u65e5\u5fd7\n\n### v0.1.0\n- \u521d\u59cb\u7248\u672c\n- \u57fa\u4e8e ai_runner_hjy \u91cd\u6784\n- \u7edf\u4e00\u547d\u540d\u89c4\u8303\n- \u5b8c\u5584\u6587\u6863\u548c\u793a\u4f8b\n",
"bugtrack_url": null,
"license": null,
"summary": "AI\u670d\u52a1\u7ba1\u7406\u5305 - \u7edf\u4e00\u7684AI\u6a21\u578b\u8c03\u7528\u63a5\u53e3",
"version": "0.3.0",
"project_urls": {
"Homepage": "https://github.com/hjy/aimanager_hjy"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "2a5cc5dd0027440c6ccc7d88ae7021b2063b5cf696d7152056f71be8ec57bbc4",
"md5": "4aeb8d99715eea26244e3f4574adde18",
"sha256": "d4b463256bfdc87aa65f444694b620c5b07da4d0c580bdbe1af898a6cd42bb16"
},
"downloads": -1,
"filename": "aimanager_hjy-0.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4aeb8d99715eea26244e3f4574adde18",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 14317,
"upload_time": "2025-08-18T01:16:21",
"upload_time_iso_8601": "2025-08-18T01:16:21.861136Z",
"url": "https://files.pythonhosted.org/packages/2a/5c/c5dd0027440c6ccc7d88ae7021b2063b5cf696d7152056f71be8ec57bbc4/aimanager_hjy-0.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "82f1d50b42a6d64ab037cf9f425b8f292a3b0de6ff1db85441a1923db14c9f8f",
"md5": "7eed283554d92a94de8b0104c4a9854b",
"sha256": "a6d34eb3f0115487382a441e01e86537903854eac5e603b7f53cfe3d844b5a61"
},
"downloads": -1,
"filename": "aimanager_hjy-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "7eed283554d92a94de8b0104c4a9854b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 12728,
"upload_time": "2025-08-18T01:16:23",
"upload_time_iso_8601": "2025-08-18T01:16:23.564571Z",
"url": "https://files.pythonhosted.org/packages/82/f1/d50b42a6d64ab037cf9f425b8f292a3b0de6ff1db85441a1923db14c9f8f/aimanager_hjy-0.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-18 01:16:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hjy",
"github_project": "aimanager_hjy",
"github_not_found": true,
"lcname": "aimanager-hjy"
}