Show HN: Agentflow – Run Complex LLM Workflows from Simple JSON (github.com)
Agentflow lets you run complex LLM workflows from a simple JSON file. This can be as little as a list of tasks. Tasks can include variables, so you can reuse workflows for different outputs by providing different variable values. They can also include custom functions, so you can go beyond text generation to do anything you want to write a function for.
Someone might say: "Why not just use ChatGPT?" Among other reasons, I'd say that you can't template a workflow with ChatGPT, trigger it with different variable values, easily add in custom functions, or force the use of custom functions for steps in the workflow.
Someone might also say: "Then why not use Auto-GPT or BabyAGI?" Among other reasons, I'd say you can't if you want consistency because these tools operate autonomously, creating and executing their own tasks. Agentflow, on the other and, lets you define a step-by-step workflow to give you more control.
I'd like to do more with this, including adding more custom functions, and more examples, and more ways to trigger workflows (such as in response to events). But first, I want to make sure I'm not wasting my time! For starters, if something like this already exists, please tell me.
23 comments
[ 1.7 ms ] story [ 52.1 ms ] threadLet's use an example, like this: https://github.com/simonmesmith/agentflow/blob/main/agentflo...
This is a workflow for coming up with a product idea and illustrating it with an image.
This workflow has 9 steps, starting with brainstorming ideas, and ending with saving an HTML file containing the product name, description, and image.
It also has two variables, {market} for the target market, and {price_point} for the price point.
To run this workflow, you simply enter this in the command line: python -m run --flow=example_with_variables --variables 'market=college students' 'price_point=$50'
You don't need to write any code with LangChain.
You simply specify your workflow in a JSON file, and execute it.
Does that help to clarify?
Also, can you clarify what you mean by "You don't need to write any code with LangChain."?
In Agentflow, you write functions by inheriting from the BaseFunction class. You need to provide the definition in JSON that GPT-3.5/4 uses to understand how to call a function, and also the function logic itself. This just means creating a get_definition() function that returns a JSON Schema object, and an execute() function that performs your logic and returns a string. Once you have those, you can then just use the function in your workflow by adding "function_call": "your_function". The application does the rest. Here's the create_image function, for example, which uses the Dall-e API: https://github.com/simonmesmith/agentflow/blob/main/agentflo...
What I mean by "you don't need to write any code with LangChain" is that you don't need to write any Python at all to use Agentflow, unless you want to create a new function. Creating workflows just involves creating JSON files. It's not like LangChain, for which you'd have to chain together multiple prompts in Python.
Does that help clarify?
PS: You'll notice heavy documentation in the link above. I want to experiment with automatically generating documentation using Sphinx, so I documented everything with Sphinx formatting. It might be overkill.
The main issue right now is that I’m relying on the OpenAI API’s function-calling capabilities to enable the use of functions in workflows.
If we switch to other LLMs, we’ll need to create some additional wrapping around them to allow such function calling. (As far as I know. If any open source LLMs already have function calling built in, let me know.)
LangChain (which I’m not using due to personally finding it overcomplicated and too obfuscating) does have function calling, but it uses approaches like REACT (if I remember correctly) that aren’t as reliable as OpenAI’s approach.
0: https://github.com/go-skynet/LocalAI 1: https://github.com/lm-sys/FastChat/
Edit: idk if any of this support function calling tho
And if you want to talk to a bunch of APIs: https://news.ycombinator.com/item?id=37020783
But I think there are some key differences. I’m not sure if Magic Loop is open source, for example, so I don’t know how they’re currently building their workflows.
Automating API calls is neat, too, but I get a bit anxious with too much automation when you want to run a workflow with consistent results. My gut says you want to have the functions here pretty locked down and tested, rather than rely on automating API calls. But maybe I’ll be proven wrong.
I did a similar, rudimentary, version where I save the JSON in DynamoDB and the tasks indicate how to transform tabular (Excel, CSV) data. From renaming columns, adding columns, and transposing columns into new rows.