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.