PyGai连接器API
仅有两个API接口,请求提示语(统称为请求数据),回传图文再处理(统称为回传数据)。API数据结构用JSend标准。
- 请求数据结构体内data字段如下:
name | type | required | memo |
---|---|---|---|
id | int | Y | 唯一编号 |
type | string | Y | 生成类型,gentxt:生成文本,genimg:生成图像 |
text | string | Y | 提示语文本 |
files | list |
Y | 附加文件,URL数组,若无则可赋空数组 |
instId | int | N | 指令编号 |
instName | string | N | 指令名称 |
instText | string | N | 指令文本 |
config | dict | N | 生成参数 |
上述字段中config的结构机比较复杂,建议用Gai应用端复制参数后粘贴到PyGaiUi服务端。
- 回传数据结构体内data字段如下:
name | type | required | memo |
---|---|---|---|
id | string | Y | 唯一编号, 默认空字符串 |
text | string | Y | 生成的文本 |
files | list |
Y | 生成的文件,URL数组,若无则可赋空数组 |
cronId | string | Y | 应用端定时任务编号 |
histId | string | Y | 应用端日志编号 |
promptId | string | Y | 提示语编号 |
上述字段中promptId,若应用端定时任务提示语来源是http,则此为请求数据的id,可实现请求提示语和生成内容的关联。
下文皆以PyGai连接器为例,若API接口兼容,则可以用任一语言实现。
T1-请求提示语
从PyGai连接器,获取一个提示语。
- Url:
- GET
- {{host}}/aiprompt/output/
- Header:
- Authorization: Bearer {{token}}
- Params:
- id=? ; int, optional gaiPrompt.id
- intervalId=? ; int, optional gaiPrompt.intervalId
- topicId=? ; int, optional gaiPrompt.topicId
- dirId=? ; int, optional gaiPrompt.dirId
响应数据,成功数据,文本提示语(系统指令:无)
- Status: 200
- Body:
{
"status": "success",
"data": {
"id": 1,
"type": "gentxt",
"text": "命题作文:今朝有酒今朝醉,明日愁来明日忧.体裁不限,请写一篇字数不少于500字的作文.",
"files": []
}
}
T2-回传图文数据
把Gai应用端生成的图文数据回传到PyGai连接器。
- Url:
- POST
- {{host}}/aicontent/input/
- Header:
- Authorization: Bearer {{token}}
- Content-Type: application/json
- Params:
- writetofile=? ; bool, optional, true if exist else false
请求数据,示例
{
"status": "success",
"data": {
"id": "",
"text": "窗外的雨丝斜斜地飘着,敲打着窗棂,发出淅淅沥沥的声响。我望着窗外,思绪也随着雨丝飘忽不定。......",
"cronId": "_CRON_每日作文之今朝有酒今朝醉",
"histId": "L-GTXT-1731317840133187",
"promptId": "2",
"files": [
"http://localhost:8080/genimgs/139473250698292130.png"
]
}
}
响应数据,成功数据,无内容无需客户端处理
- Status: 200
- Body:
{
"status": "success",
"data": {
}
}
T3-图文数据再处理
回传图文数据,成功之后数据再处理逻辑。
from gai.publish import publish
contentId:int = 1
publishId = publish(contentId)
T4-重置数量
从PyGai连接器,获取一个提示语(仅可获取非禁用且无回传数据编号和时间的提示词),产生内容回传数据成功后,会记录回传数据编号和时间,且此提示词可用数量减1,若为0时则禁用。 通过此API,则可以清理掉提示词回传数据的编号和时间,以便定时任务轮询执行。
- Url:
- GET
- {{host}}/aiprompt/reset/
- Header:
- Authorization: Bearer {{token}}
响应数据,成功数据。
- Status: 200
- Body:
{
"status": "success",
"data": {
}
}
T5-Get JsonWebToken
To display the current session's JSON Web Token, use the provided token endpoint: http://127.0.0.1:5050/admin/ .
- Url:
- POST
- {{host}}/signin
- Header:
- Content-Type: application/x-www-form-urlencoded
- Body:
- username: {{email}}
- password: {{passwd}}
响应数据,成功数据。
- Status: 200
- Body:
{
"status": "success",
"data": {
"jwt": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9..."
}
}
PyGaiCustomize
Customize可实现用自已的逻辑替代系统逻辑,实现干净的代码分离和功能扩展。
项目结构如下:
应用路径: ~\Projects\pygai\
扩展路径: ~\Projects\pygaiext\
示例,回传图文数据再处理:
# ~\Projects\pygai\gai\content.py
from gai.publish import publish
contentId:int = 1
publishId = publish(contentId)
系统逻辑可见,通过扩展方法extMethod('gai/publish', 'publishHandler')
,查找扩展路径下文件gai\publish.py
内是否存在方法publishHandler
,则找到则启用。
# ~\Projects\pygai\gai\publish.py
def publish(contentId:int, reWrite:bool=False) -> None|int:
extPublishHandler = extMethod('gai/publish', 'publishHandler')
return extPublishHandler(contentId, reWrite) if extPublishHandler else publishHandler(contentId, reWrite)
def publishHandler(contentId:int, reWrite:bool=False) -> None|int:
''' default, content publish'''
pass
# ~\Projects\pygaiext\gai\publish.py
def publishHandler(contentId:int, reWrite:bool=False) -> None|int:
''' customize, content publish'''
# print(f'pygaiext/gai/publish.py, publishHandler, contendId:{contentId}, reWrite:{reWrite}')
pass
系统可扩展方法:
promptHandler, pygai\gai\prompt.py.
resetHandler, pygai\gai\prompt.py.
contentHandler, pygai\gai\content.py
publishHandler, pygai\gai\publish.py.