2.8 KiB
AI Agent execution using Temporal
Work in progress.
This demo shows a multi-turn conversation with an AI agent running inside a Temporal workflow. The goal is to collect information towards a goal. There's a simple DSL input for collecting information (currently set up to use mock functions to search for events, book flights around those events then generate an invoice for those flights, see send_message.py). The AI will respond with clarifications and ask for any missing information to that goal. It uses a local LLM via Ollama.
Setup
- Install Ollama and the Qwen2.5 14B model (
ollama run qwen2.5:14b). (note this model is about 9GB to download). - Install and run Temporal. Follow the instructions in the Temporal documentation to install and run the Temporal server.
- Install the dependencies:
poetry install
Running the example
From the /scripts directory:
-
Run the worker:
poetry run python run_worker.py -
In another terminal run the client with a prompt.
Example:
poetry run python send_message.py 'Can you find events in march in oceania?' -
View the worker's output for the response.
-
Give followup prompts by signaling the workflow.
Example:
poetry run python send_message.py 'I want to fly from San Francisco'NOTE: The workflow will pause on the 'confirm' step until the user sends a 'confirm' signal. Use
poetry run python get_tool_data.pyquery to see the current state of the workflow.You can send a 'confirm' signal using
poetry run python send_confirm.py -
Get the conversation history summary by querying the workflow.
Example:
poetry run python get_history.py -
To end the chat session, run
poetry run python end_chat.py
The chat session will end if it has collected enough information to complete the task or if the user explicitly ends the chat session.
Run query get_tool_data to see the data the tool has collected so far.
API
poetry run uvicorn api.main:app --reloadto start the API server.- Access the API at
/docsto see the available endpoints.
TODO
- The LLM prompts move through 3 mock tools (FindEvents, SearchFlights, CreateInvoice) but I should make them contact real APIs.
- Might need to abstract the json example in the prompt generator to be part of a ToolDefinition (prevent overfitting to the example).
- I need to build a chat interface so it's not cli-controlled. Also want to show some 'behind the scenes' of the agents being used as they run.
- What happens if I don't want to confirm a step, but instead want to correct it? TODO figure out
- What happens if I am at confirmation step and want to end the chat (do I need some sort of signal router?)