Skip to content

Commit 5c06cd6

Browse files
yao531441pre-commit-ci[bot]
authored andcommitted
Refine Readme for WorkflowExecAgeent (opea-project#2161)
Signed-off-by: Yao, Qing <qing.yao@intel.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Signed-off-by: alexsin368 <alex.sin@intel.com>
1 parent cdb4e03 commit 5c06cd6

File tree

2 files changed

+206
-147
lines changed

2 files changed

+206
-147
lines changed

WorkflowExecAgent/README.md

Lines changed: 28 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,44 @@
11
# Workflow Executor Agent
22

3-
## Quick Start: Key Configuration Variables
3+
## Table of Contents
44

5-
Before proceeding, here are some key configuration variables needed for the workflow executor agent.
6-
7-
- **SDK_BASE_URL**: The URL to your platform workflow serving API.
8-
9-
Example: `http://<your-server-ip>:5000/`
10-
11-
This is where the agent will send workflow execution requests.
12-
13-
- **SERVING_TOKEN**: The authentication bearer token which is used in the `RequestHandler` class as `api_key`. This is used for authenticating API requests. 3rd party platforms can design their serving workflow API this way for user authentication.
14-
15-
More details can be found in the code [handle_requests.py](tools/utils/handle_requests.py#L23)
16-
17-
> **How to get these values:**
18-
>
19-
> - If you are using the provided example workflow API, refer to the test [README.md](tests/README.md)
20-
> - For your own platform, refer to your API documentation or administrator for the correct values. If you are a platform provider you may refer to [Workflow Building Platform](#workflow-building-platform) section for prerequisites on setting up a serving workflow.
21-
22-
For more info on using these variables, refer to the [Microservice Setup](#microservice-setup) section below on using the [Example Workflow API](tests/example_workflow/) for a working example.
23-
24-
Set these variables in your environment before starting the service.
5+
1. [Overview](#overview)
6+
2. [Deployment Options](#deployment-options)
7+
3. [Roadmap](#roadmap)
258

269
## Overview
2710

28-
GenAI Workflow Executor Example showcases the capability to handle data/AI workflow operations via LangChain agents to execute custom-defined workflow-based tools. These workflow tools can be interfaced from any 3rd-party tools in the market (no-code/low-code/IDE) such as Alteryx, RapidMiner, Power BI, Intel Data Insight Automation which allows users to create complex data/AI workflow operations for different use-cases.
11+
GenAI Workflow Executor Example showcases the capability to handle data/AI workflow operations via LangChain agents to execute custom-defined workflow-based tools. These workflow tools can be interfaced from any 3rd-party tools in the market (no-code/low-code/IDE) such as Alteryx, RapidMiner, Power BI, and Intel Data Insight Automation, which allows users to create complex data/AI workflow operations for different use-cases.
2912

3013
### Definitions
3114

32-
Before we begin, here are the definitions to some terms for clarity:
33-
34-
- servable/serving workflow - A workflow made ready to be executed through API. It should be able to accept parameter injection for workflow scheduling and have a way to retrieve the final output data. It should also have a unique workflow ID for referencing. For platform providers guide to create their own servable workflows compatible with this example, refer to [Workflow Building Platform](#workflow-building-platform)
35-
36-
- SDK Class - Performs requests to interface with a 3rd-party API to perform workflow operations on the servable workflow. Found in `tools/sdk.py`.
37-
38-
- workflow ID - A unique ID for the servable workflow.
39-
40-
- workflow instance - An instance created from the servable workflow. It is represented as a `Workflow` class created using `DataInsightAutomationSDK.create_workflow()` under `tools/sdk.py`. Contains methods to `start`, `get_status` and `get_results` from the workflow.
41-
42-
### Workflow Executor
15+
Before we begin, here are the definitions for some terms for clarity:
4316

44-
Strategy - This example demonstrates a single React-LangGraph with a `Workflow Executor` tool to ingest a user prompt to execute workflows and return an agent reasoning response based on the workflow output data.
17+
- **Servable/Serving Workflow**: A workflow made ready to be executed through an API. It should be able to accept parameter injection for workflow scheduling and have a way to retrieve the final output data. It should also have a unique workflow ID for referencing.
18+
- **SDK Class**: Performs requests to interface with a 3rd-party API to perform workflow operations on the servable workflow. Found in `tools/sdk.py`.
19+
- **Workflow ID**: A unique ID for the servable workflow.
20+
- **Workflow Instance**: An instance created from the servable workflow. It is represented as a `Workflow` class created using `DataInsightAutomationSDK.create_workflow()` under `tools/sdk.py`. It contains methods to `start`, `get_status`, and `get_results` from the workflow.
4521

46-
First the LLM extracts the relevant information from the user query based on the schema of the tool in `tools/tools.yaml`. Then the agent sends this `AgentState` to the `Workflow Executor` tool.
22+
### Workflow Executor Strategy
4723

48-
`Workflow Executor` tool requires a SDK class to call the servable workflow API. In the code, `DataInsightAutomationSDK` is the example class as seen under `tools/sdk.py` to interface with several high-level API's. There are 3 steps to this tool implementation:
24+
This example demonstrates a single ReAct-LangGraph with a `Workflow Executor` tool to ingest a user prompt, execute workflows, and return an agent-reasoned response based on the workflow output data.
4925

50-
1. Starts the workflow with workflow parameters and workflow id extracted from the user query.
26+
First, the LLM extracts the relevant information from the user query based on the schema of the tool in `tools/tools.yaml`. Then the agent sends this `AgentState` to the `Workflow Executor` tool.
5127

52-
2. Periodically checks the workflow status for completion or failure. This may be through a database which stores the current status of the workflow
28+
The `Workflow Executor` tool requires an SDK class to call the servable workflow API. In the code, `DataInsightAutomationSDK` is the example class (as seen under `tools/sdk.py`) to interface with several high-level APIs. There are 3 steps to this tool implementation:
5329

54-
3. Retrieves the output data from the workflow through a storage service.
30+
1. Starts the workflow with workflow parameters and a workflow ID extracted from the user query.
31+
2. Periodically checks the workflow status for completion or failure. This may be through a database which stores the current status of the workflow.
32+
3. Retrieves the output data from the workflow through a storage service.
5533

5634
The `AgentState` is sent back to the LLM for reasoning. Based on the output data, the LLM generates a response to answer the user's input prompt.
5735

58-
Below shows an illustration of this flow:
36+
Below is an illustration of this flow:
5937

6038
![image](https://github.com/user-attachments/assets/cb135042-1505-4aef-8822-c78c2f72aa2a)
6139

6240
### Workflow Serving for Agent
6341

64-
#### Workflow Building Platform
65-
6642
The first step is to prepare a servable workflow using a platform with the capabilities to do so.
6743

6844
As an example, here we have a Churn Prediction use-case workflow as the serving workflow for the agent execution. It is created through Intel Data Insight Automation platform. The image below shows a snapshot of the Churn Prediction workflow.
@@ -92,116 +68,21 @@ When the workflow is configured as desired, transform this into a servable workf
9268
> [!NOTE]
9369
> Remember to create a unique workflow ID along with the servable workflow.
9470
95-
#### Using Servable Workflow
96-
97-
Once we have our servable workflow ready, the serving workflow API can be prepared to accept requests from the SDK class. Refer to [Start Agent Microservice](#start-agent-microservice) on how to do this.
98-
99-
To start prompting the agent microservice, we will use the following command for this churn prediction use-case:
100-
101-
```sh
102-
curl http://${ip_address}:9090/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
103-
"query": "I have a data with gender Female, tenure 55, MonthlyAvgCharges 103.7. Predict if this entry will churn. My workflow id is '${workflow_id}'."
104-
}'
105-
```
106-
107-
The user has to provide a `workflow_id` and workflow `params` in the query. Notice that the `query` string includes all the workflow `params` which the user has defined in the workflow. The LLM will extract these parameters into a dictionary format for the workflow `Serving Parameters` as shown below:
108-
109-
```python
110-
params = {"gender": "Female", "tenure": 55, "MonthlyAvgCharges": 103.7}
111-
```
112-
113-
These parameters will be passed into the `Workflow Executor` tool to start the workflow execution of specified `workflow_id`. Thus, everything will be handled via the microservice.
114-
115-
And finally here are the results from the microservice logs:
116-
117-
![image](https://github.com/user-attachments/assets/969fefb7-543d-427f-a56c-dc70e474ae60)
118-
119-
## Microservice Setup
120-
121-
### Start Agent Microservice
122-
123-
For an out-of-box experience there is an example workflow serving API service prepared for users under [Example Workflow API](tests/example_workflow/) to interface with the SDK. This section will guide users on setting up this service as well. Users may modify the logic, add your own database etc for your own use-case.
71+
## Deployment Options
12472

125-
There are 3 services needed for the setup:
73+
The table below lists currently available deployment options. They outline in detail the implementation of this example on selected hardware.
12674

127-
1. Agent microservice
128-
129-
2. LLM inference service - specified as `llm_endpoint_url`.
130-
131-
3. workflow serving API service - specified as `SDK_BASE_URL`
132-
133-
Workflow Executor will have a single docker image. First, build the agent docker image.
134-
135-
```sh
136-
git clone https://github.com/opea-project/GenAIExamples.git
137-
cd GenAIExamples//WorkflowExecAgent/docker_image_build/
138-
docker compose -f build.yaml build --no-cache
139-
```
140-
141-
Configure `GenAIExamples/WorkflowExecAgent/docker_compose/.env` file with the following. Replace the variables according to your usecase.
142-
143-
```sh
144-
export wf_api_port=5000 # workflow serving API port to use
145-
export SDK_BASE_URL=http://$(hostname -I | awk '{print $1}'):${wf_api_port}/ # The workflow server will use this example workflow API url
146-
export SERVING_TOKEN=${SERVING_TOKEN} # Authentication token. For example_workflow test, can be empty as no authentication required.
147-
export ip_address=$(hostname -I | awk '{print $1}')
148-
export HF_TOKEN=${HF_TOKEN}
149-
export llm_engine=${llm_engine}
150-
export llm_endpoint_url=${llm_endpoint_url}
151-
export WORKDIR=${WORKDIR}
152-
export TOOLSET_PATH=$WORKDIR/GenAIExamples/WorkflowExecAgent/tools/
153-
export http_proxy=${http_proxy}
154-
export https_proxy=${https_proxy}
155-
156-
# LLM variables
157-
export model="mistralai/Mistral-7B-Instruct-v0.3"
158-
export recursion_limit=${recursion_limit}
159-
export temperature=0
160-
export max_new_tokens=1000
161-
```
162-
163-
Launch service by running the docker compose command.
164-
165-
```sh
166-
cd $WORKDIR/GenAIExamples/WorkflowExecAgent/docker_compose
167-
docker compose -f compose.yaml up -d
168-
```
169-
170-
To launch the example workflow API server, open a new terminal and run the following:
171-
172-
```sh
173-
cd $WORKDIR/GenAIExamples/WorkflowExecAgent/tests/example_workflow
174-
. launch_workflow_service.sh
175-
```
176-
177-
`launch_workflow_service.sh` will setup all the packages locally and launch the uvicorn server to host the API on port 5000. For a Dockerfile method, please refer to `Dockerfile.example_workflow_api` file.
178-
179-
### Validate service
180-
181-
The agent microservice logs can be viewed using:
182-
183-
```sh
184-
docker logs workflowexec-agent-endpoint
185-
```
186-
187-
You should be able to see "HTTP server setup successful" upon successful startup.
188-
189-
You can validate the service using the following command:
190-
191-
```sh
192-
curl http://${ip_address}:9090/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{
193-
"query": "I have a data with gender Female, tenure 55, MonthlyCharges 103.7, TotalCharges 1840.75. Predict if this entry will churn. My workflow id is '${workflow_id}'."
194-
}'
195-
```
196-
197-
Update the `query` with the workflow parameters, workflow id, etc based on the workflow context.
198-
199-
## Roadmap
200-
201-
Phase II: Agent memory integration to enable capability to store tool intermediate results, such as workflow instance key.
75+
| Category | Deployment Option | Description |
76+
| ---------------------- | ----------------- | --------------------------------------------------------------------------------- |
77+
| On-premise Deployments | Docker compose | [WorkflowExecAgent deployment on Xeon](./docker_compose/intel/cpu/xeon/README.md) |
78+
| | Kubernetes | Work-in-progress |
20279

20380
## Validated Configurations
20481

20582
| **Deploy Method** | **Hardware** |
20683
| ----------------- | ------------ |
20784
| Docker Compose | Intel Xeon |
85+
86+
## Roadmap
87+
88+
Phase II: Agent memory integration to enable the capability to store tool intermediate results, such as a workflow instance key.

0 commit comments

Comments
 (0)