DAG编排规划

首先我们看一个基础AWEL编排入门的例子, 例子中的核心功能是一个Http请求的输入输出的处理。 所以整个编排的节点只有两步。

  • Http请求
  • 处理Http响应结果

画板

在DB-GPT当中,对于一些基础依赖的算子已经做了封装,可以直接引用。

  1. from dbgpt._private.pydantic import BaseModel, Field
  2. from dbgpt.core.awel import DAG, HttpTrigger, MapOperator

自定义算子

定义一个Http请求体, 接收两个参数。nameage

  1. class TriggerReqBody(BaseModel):
  2. name: str = Field(..., description="User name")
  3. age: int = Field(18, description="User age")

定义一个Reqeust处理算子 RequestHandleOperator, 此算子集成基础MapOperator算子, RequestHandleOperator算子做的事情也比较简单,就是解析请求体,然后解析出nameage字段,然后拼接成一句话。如:

Hello, zhangsan, your age is 18

  1. class RequestHandleOperator(MapOperator[TriggerReqBody, str]):
  2. def __init__(self, **kwargs):
  3. super().__init__(**kwargs)
  4. async def map(self, input_value: TriggerReqBody) -> str:
  5. print(f"Receive input value: {input_value}")
  6. return f"Hello, {input_value.name}, your age is {input_value.age}"

DAG编排

写好上述算子之后,即可拼接为一个DAG编排。此DAG总共有两个节点,第一个节点是HttpTrigger, 主要是处理Http请求(此算子是DB-GPT内置算子),第二个节点就是我们刚刚定义的处理请求体的RequestHandleOperator算子。 下面DAG代码即可讲两个节点进行拼接。

  1. with DAG("simple_dag_example") as dag:
  2. trigger = HttpTrigger("/examples/hello", request_body=TriggerReqBody)
  3. map_node = RequestHandleOperator()
  4. trigger >> map_node

访问验证

在访问验证之前,首先需要启动项目,python dbgpt/app/dbgpt_server.py

  1. % curl -X GET http://127.0.0.1:5000/api/v1/awel/trigger/examples/hello\?name\=zhangsan
  2. "Hello, zhangsan, your age is 18"

当然我们为了用户可以更方便测试,提供了一个测试环境。此测试环境可以在不启动dbgpt_server的前提下,进行测试。 在simple_dag_example 下面添加如下代码,然后直接运行simple_dag_example.py脚本,即可在不启动项目的前提下,直接运行测试脚本。

  1. if __name__ == "__main__":
  2. if dag.leaf_nodes[0].dev_mode:
  3. # Development mode, you can run the dag locally for debugging.
  4. from dbgpt.core.awel import setup_dev_environment
  5. setup_dev_environment([dag], port=5555)
  6. else:
  7. # Production mode, DB-GPT will automatically load and execute the current file after startup.
  8. pass
  1. % curl -X GET http://127.0.0.1:5555/api/v1/awel/trigger/examples/hello\?name\=zhangsan
  2. "Hello, zhangsan, your age is 18"