feat: 安装第三方依赖
This commit is contained in:
parent
6438efee40
commit
705ac89d1c
@ -36,7 +36,19 @@ argument-hint: "需要 prompt 参数(画图提示词),可选 model(模
|
|||||||
"model": {
|
"model": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "画图模型选择(可选):即梦4.5(jimeng-4.5) / 即梦4.6(jimeng-4.6) / 即梦5.0(jimeng-5.0) / 豆包4.5(doubao-seedream-4.5) / 豆包4.0(doubao-seedream-4.0) / 豆包文生图(doubao-seedream-3.0-t2i) / 豆包图生图(doubao-seededit-3.0-i2i) / 造相基础版(Z-Image) / 造相蒸馏版(Z-Image-Turbo) / 造相图片编辑(Qwen-Image-Edit-2511),默认: 空(none)。",
|
"description": "画图模型选择(可选):即梦4.5(jimeng-4.5) / 即梦4.6(jimeng-4.6) / 即梦5.0(jimeng-5.0) / 豆包4.5(doubao-seedream-4.5) / 豆包4.0(doubao-seedream-4.0) / 豆包文生图(doubao-seedream-3.0-t2i) / 豆包图生图(doubao-seededit-3.0-i2i) / 造相基础版(Z-Image) / 造相蒸馏版(Z-Image-Turbo) / 造相图片编辑(Qwen-Image-Edit-2511),默认: 空(none)。",
|
||||||
"enum": ["none", "jimeng-4.5", "jimeng-4.6", "jimeng-5.0", "doubao-seedream-4.5", "doubao-seedream-4.0", "doubao-seedream-3.0-t2i", "doubao-seededit-3.0-i2i", "Z-Image", "Z-Image-Turbo", "Qwen-Image-Edit-2511"],
|
"enum": [
|
||||||
|
"none",
|
||||||
|
"jimeng-4.5",
|
||||||
|
"jimeng-4.6",
|
||||||
|
"jimeng-5.0",
|
||||||
|
"doubao-seedream-4.5",
|
||||||
|
"doubao-seedream-4.0",
|
||||||
|
"doubao-seedream-3.0-t2i",
|
||||||
|
"doubao-seededit-3.0-i2i",
|
||||||
|
"Z-Image",
|
||||||
|
"Z-Image-Turbo",
|
||||||
|
"Qwen-Image-Edit-2511"
|
||||||
|
],
|
||||||
"default": "none"
|
"default": "none"
|
||||||
},
|
},
|
||||||
"negative_prompt": {
|
"negative_prompt": {
|
||||||
@ -68,12 +80,21 @@ argument-hint: "需要 prompt 参数(画图提示词),可选 model(模
|
|||||||
- `MYSQL_USER`:MySQL 数据库用户名。
|
- `MYSQL_USER`:MySQL 数据库用户名。
|
||||||
- `MYSQL_PASSWORD`:MySQL 数据库密码。
|
- `MYSQL_PASSWORD`:MySQL 数据库密码。
|
||||||
|
|
||||||
|
## 依赖安装
|
||||||
|
|
||||||
|
- 在执行 `text-to-image/scripts/text_to_image.py` 之前,必须先安装依赖。
|
||||||
|
- 建议优先执行安装脚本:`python3 skills/text-to-image/scripts/bootstrap.py`
|
||||||
|
- 该脚本会自动执行:`python3 -m pip install -r skills/text-to-image/scripts/requirements.txt`
|
||||||
|
- 如果不使用安装脚本,也可以直接执行:`python3 -m pip install -r skills/text-to-image/scripts/requirements.txt`
|
||||||
|
- 如果环境里已经安装过这些依赖,重复安装通常不会报错,只会做已满足检查。
|
||||||
|
|
||||||
## 执行步骤
|
## 执行步骤
|
||||||
|
|
||||||
1. 当用户输入绘图相关内容时触发该技能。
|
1. 当用户输入绘图相关内容时触发该技能。
|
||||||
2. 从用户输入中提取 prompt(画图提示词),不对提示词做总结或修改。可选提取 model、negative_prompt、ratio、resolution 参数。
|
2. 从用户输入中提取 prompt(画图提示词),不对提示词做总结或修改。可选提取 model、negative_prompt、ratio、resolution 参数。
|
||||||
3. 将参数组装为 JSON 字符串,在仓库根目录下执行本地脚本:`python3 text-to-image/scripts/text_to_image.py '<JSON参数>'`。
|
3. 在执行脚本前,先安装依赖:`python3 skills/text-to-image/scripts/bootstrap.py`,或直接执行 `python3 -m pip install -r skills/text-to-image/scripts/requirements.txt`。
|
||||||
4. 脚本内部执行逻辑:
|
4. 将参数组装为 JSON 字符串,在仓库根目录下执行本地脚本:`python3 text-to-image/scripts/text_to_image.py '<JSON参数>'`。
|
||||||
|
5. 脚本内部执行逻辑:
|
||||||
- 连接 MySQL 数据库(数据库名 = `ROBOT_CODE`)。
|
- 连接 MySQL 数据库(数据库名 = `ROBOT_CODE`)。
|
||||||
- 查询 `global_settings` 表获取全局绘图配置(`image_ai_enabled`、`image_ai_settings`)。
|
- 查询 `global_settings` 表获取全局绘图配置(`image_ai_enabled`、`image_ai_settings`)。
|
||||||
- 如果 `ROBOT_FROM_WX_ID` 以 `@chatroom` 结尾,查询 `chat_room_settings` 表(`WHERE chat_room_id = ?`)覆盖全局配置;否则查询 `friend_settings` 表(`WHERE wechat_id = ?`)覆盖全局配置。
|
- 如果 `ROBOT_FROM_WX_ID` 以 `@chatroom` 结尾,查询 `chat_room_settings` 表(`WHERE chat_room_id = ?`)覆盖全局配置;否则查询 `friend_settings` 表(`WHERE wechat_id = ?`)覆盖全局配置。
|
||||||
@ -81,9 +102,9 @@ argument-hint: "需要 prompt 参数(画图提示词),可选 model(模
|
|||||||
- 解析 `image_ai_settings` JSON,根据选择的模型提取对应配置(JiMeng / DouBao / Z-Image)。
|
- 解析 `image_ai_settings` JSON,根据选择的模型提取对应配置(JiMeng / DouBao / Z-Image)。
|
||||||
- 调用对应的绘图 API 生成图片。
|
- 调用对应的绘图 API 生成图片。
|
||||||
- 输出图片 URL。
|
- 输出图片 URL。
|
||||||
5. 如果脚本执行失败,回复兜底文案:`AI 绘图暂时不可用,请稍后再试。`
|
6. 如果脚本执行失败,回复兜底文案:`AI 绘图暂时不可用,请稍后再试。`
|
||||||
|
|
||||||
## 回复要求
|
## 回复要求
|
||||||
|
|
||||||
- 成功时,脚本输出 `<wechat-robot-image-url>图片URL</wechat-robot-image-url>` 格式,直接发送图片,不要额外追加解释文字。
|
- 成功时,脚本输出 `<wechat-robot-image-url>图片URL</wechat-robot-image-url>` 格式,直接发送图片,不要额外追加解释文字。
|
||||||
- 失败时,使用固定兜底文案回复。
|
- 失败时,使用固定兜底文案回复。
|
||||||
|
|||||||
38
skills/text-to-image/scripts/bootstrap.py
Normal file
38
skills/text-to-image/scripts/bootstrap.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
script_dir = Path(__file__).resolve().parent
|
||||||
|
requirements_file = script_dir / "requirements.txt"
|
||||||
|
|
||||||
|
if not requirements_file.is_file():
|
||||||
|
sys.stderr.write(f"未找到依赖文件: {requirements_file}\n")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
command = [
|
||||||
|
sys.executable,
|
||||||
|
"-m",
|
||||||
|
"pip",
|
||||||
|
"install",
|
||||||
|
"-r",
|
||||||
|
str(requirements_file),
|
||||||
|
]
|
||||||
|
|
||||||
|
try:
|
||||||
|
subprocess.run(command, check=True)
|
||||||
|
except subprocess.CalledProcessError as exc:
|
||||||
|
sys.stderr.write(f"安装依赖失败,退出码: {exc.returncode}\n")
|
||||||
|
return exc.returncode or 1
|
||||||
|
|
||||||
|
sys.stdout.write("依赖安装完成\n")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
1
skills/text-to-image/scripts/requirements.txt
Normal file
1
skills/text-to-image/scripts/requirements.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
pymysql>=1.1,<2
|
||||||
@ -5,29 +5,10 @@ from __future__ import annotations
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
# Dependency bootstrap
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
def _ensure_package(pip_name: str, import_name: str | None = None) -> None:
|
|
||||||
"""Install *pip_name* if it cannot be imported."""
|
|
||||||
try:
|
|
||||||
__import__(import_name or pip_name)
|
|
||||||
except ImportError:
|
|
||||||
subprocess.check_call(
|
|
||||||
[sys.executable, "-m", "pip", "install", pip_name, "-q"],
|
|
||||||
stdout=subprocess.DEVNULL,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
_ensure_package("pymysql")
|
|
||||||
|
|
||||||
import pymysql # type: ignore # noqa: E402
|
import pymysql # type: ignore # noqa: E402
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user