Observed since 21 Oct, 09:48 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
ai4industry
A14 - 基于 Agent 的流程工业建模数据智能优选与闭环寻优系统(本地进程 + Web UI)
A14 是基于 Agent 的流程工业建模数据智能优选与闭环寻优系统:面向流程工业数据分析师、建模/算法工程师与高校科研人员,提供数据上传 → 系统辨识建模 → 闭环寻优 → 智能报告的一体化本地 Web 工作台。
ai4industry 是 A14 的 PyPI 发布形态(本地进程 + Web UI,Harness 模式):pip install 后运行一条命令,浏览器即开即用,无需安装 Node.js / Electron / 任何打包工具。
# 基础安装(轻量,不含重型建模依赖)
pip install ai4industry
# 需要状态空间(ss)族建模时追加重型依赖(约 100MB+)
pip install 'ai4industry[full]'
可选依赖组(按需追加,互不冲突):
| extras | 用途 | 安装命令 |
|---|---|---|
full | 状态空间(ss)族建模(约 100MB+) | pip install 'ai4industry[full]' |
industrial | 工业连接器(OPC UA / Modbus TCP 只读采集) | pip install 'ai4industry[industrial]' |
database | 数据库直连(MySQL / PostgreSQL / TimescaleDB 只读查询;SQLite 走标准库零依赖) | pip install 'ai4industry[database]' |
tsdb | 时序数据库(TDengine WebSocket / InfluxDB 2.x) | pip install 'ai4industry[tsdb]' |
test | 开发/测试(pytest / httpx) | pip install 'ai4industry[test]' |
装好驱动后重启服务,「技能·连接器」页对应数据库类型的驱动状态会自动翻为「已就绪」。
要求 Python >= 3.10(Windows / macOS / Linux 均可)。
ai4industry
启动后自动完成:
127.0.0.1 空闲端口(默认 8000,被占用自动 +1,探测 ≤100 次);http://127.0.0.1:8000/;Ctrl+C 优雅退出,数据全部保留。常用参数:
ai4industry --no-browser # 不自动打开浏览器(无头/远程场景)
ai4industry --port 9000 # 指定起始端口
ai4industry --data-dir D:/a14-data # 指定用户数据目录
| 平台 | 默认用户数据目录 |
|---|---|
| Windows | %LOCALAPPDATA%\ai4industry |
| macOS | ~/Library/Application Support/ai4industry |
| Linux | ~/.local/share/ai4industry |
运行时数据(a14_agent.db、uploads/、outputs/、logs/)全部落在用户数据目录:升级包、重装、覆盖安装均不触碰用户数据;包安装目录(site-packages)只读,绝无运行时写入。
自定义数据目录(优先级:--data-dir 参数 > A14_DATA_DIR 环境变量 > 平台默认目录):
A14_DATA_DIR=D:/a14-data ai4industry
PyPI 公开版默认以 社区版(COMMUNITY) 运行:完整功能、零拦截、无需激活。License 校验仅用于企业定制版(详见项目仓库)。
app 顶层包的包冲突? ai4industry 安装后在 Python 中导入顶层包名为 app(与项目既有代码/测试一致)。若同环境存在其它同样暴露 app 顶层包的包,两者会互相覆盖。建议在独立 venv 中安装使用,这与所有 Python 包的最佳实践一致。python -m uvicorn app.main:app 启动? 不推荐。请始终使用 ai4industry 命令或等价的 python -m app 启动——它们会注入正确的数据目录环境变量并自动开浏览器;裸 uvicorn 不注入安装态环境,数据会落在当前目录而非用户数据目录。ai4industry 提示“不是内部或外部命令 / 无法识别”? 命令脚本位于
Python 的 Scripts 目录(如 C:\Python314\Scripts\ai4industry.exe);该目录
不在 PATH 时终端找不到命令。三种解决方式(任选其一):
① 改用等价命令 python -m app(推荐:无需改 PATH,任何环境都可用,参数完全一致);
② 用绝对路径执行(python -c "import sys; print(sys.prefix)" 可查 Python 安装位置,命令在其下 Scripts\ 子目录);
③ 将 Python 的 Scripts 目录加入 PATH 后重开终端。--no-browser 跳过自动打开。logs/backend.log(控制台亦输出)。仓库开发态(uvicorn app.main:app / 运行测试)不注入任何安装态环境变量,行为与改造前完全一致(零回归红线);仅 ai4industry 命令(console script)进入安装态路径策略。
参见项目仓库 LICENSE(Apache-2.0)。本 PyPI 包仅分发开源社区版;企业版功能(License 校验体系)不随公开版分发。
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
alembicEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | alembic<2.0.0,>=1.19.0 | runtime |
cryptographyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | cryptography>=42.0.0 | runtime |
fastapiEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | fastapi>=0.110.0 | runtime |
filelockEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | filelock>=3.13.0 | runtime |
keyringEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | keyring<26.0.0,>=25.0.0 | runtime |
langgraph-checkpoint-sqliteEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | langgraph-checkpoint-sqlite<4,>=3.1.1 | runtime |
langgraphEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | langgraph<1.3,>=1.0.0 | runtime |
matplotlibEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | matplotlib>=3.8.0 | runtime |
numpyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | numpy>=1.26.0 | runtime |
openaiEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | openai>=1.30.0 | runtime |
openpyxlEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | openpyxl>=3.1.0 | runtime |
pandasEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pandas>=2.2.0 | runtime |
platformdirsEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | platformdirs>=4.0.0 | runtime |
pydantic-settingsEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pydantic-settings>=2.0.0 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.0.0 | runtime |
pypdfEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pypdf>=4.0.0 | runtime |
python-docxEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | python-docx>=0.8.11 | runtime |
python-multipartEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | python-multipart>=0.0.9 | runtime |
python-pptxEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | python-pptx>=0.6.21 | runtime |
redisEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | redis>=5.0.0 | runtime |
reportlabEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | reportlab>=4.0.0 | runtime |
scikit-learnEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | scikit-learn>=1.4.0 | runtime |
scipyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | scipy>=1.12.0 | runtime |
sqlalchemyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | sqlalchemy>=2.0.0 | runtime |
statsmodelsEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | statsmodels>=0.14.0 | runtime |
uvicornEnvironment{
"extras": "standard",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | uvicorn[standard]>=0.29.0 | runtime |
watchdogEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | watchdog<7.0.0,>=6.0.0 | runtime |
psycopg2-binaryEnvironment{
"extras": "",
"marker": "extra == \"database\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | psycopg2-binary>=2.9; extra == "database" | runtime |
pymysqlEnvironment{
"extras": "",
"marker": "extra == \"database\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pymysql>=1.1; extra == "database" | runtime |
casadiEnvironment{
"extras": "",
"marker": "extra == \"full\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | casadi>=3.6.0; extra == "full" | runtime |
controlEnvironment{
"extras": "",
"marker": "extra == \"full\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | control==0.10.2; extra == "full" | runtime |
sippy-unipiEnvironment{
"extras": "",
"marker": "extra == \"full\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | sippy-unipi==1.0.1; extra == "full" | runtime |
asyncuaEnvironment{
"extras": "",
"marker": "extra == \"industrial\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | asyncua>=1.9.0; extra == "industrial" | runtime |
pymodbusEnvironment{
"extras": "",
"marker": "extra == \"industrial\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pymodbus>=3.6.0; extra == "industrial" | runtime |
optunaEnvironment{
"extras": "",
"marker": "extra == \"optuna\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | optuna>=4.9.0; extra == "optuna" | runtime |
httpxEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.27.0; extra == "test" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest>=8.0.0; extra == "test" | runtime |
influxdb-clientEnvironment{
"extras": "",
"marker": "extra == \"tsdb\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | influxdb-client>=1.40; extra == "tsdb" | runtime |
taos-ws-pyEnvironment{
"extras": "",
"marker": "extra == \"tsdb\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | taos-ws-py>=3.7.0; extra == "tsdb" | runtime |
bdist_wheel · 2,757.08 KB · Python py3
sdist · 13,740.35 KB · Python source
Observed since 21 Oct, 09:48 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:1277c186820c3abfeb23bb52b7c12e86dca9980d031a100f3170674457e684e2