Show HN: Agents Made Simple (github.com)

5 points by galgia ↗ HN
I have built many AI agents, and all frameworks felt so bloated, slow, and unpredictable. Therefore, I hacked together a minimal library that works with JSON/dict/kwargs definitions for each step, allowing you a simpler way to define reproducible agents. It supports concurrency for up to 1000 calls/min, giving you speed and predictability in your workflows.

Install

  pip install flashlearn
Input is a list of dictionaries

Simply take user inputs, API responses, and calculations from other tools and feed them to FlashLearn.

  user_inputs = [{"query": "When was python launched?"}]
Skill is just a simple dictionary

A skill is an LLM’s ability to perform a task, containing all the necessary information. You can create your own, use predefined samples, or generate them automatically from example data.

  ConvertToGoogleQueries = {
    "skill_class": "GeneralSkill",
    "system_prompt": "Exactly populate the provided function definition",
    "function_definition": {
      "type": "function",
      "function": {
        "name": "ConvertToGoogleQueries",
        "description": "Convert the given question into between 1 and n google queries to answer the given question.",
        "strict": True,
        "parameters": {
          "type": "object",
          "properties": {
            "google_queries": {
              "type": "array",
              "items": {"type": "string"}
            }
          },
          "required": ["google_queries"],
          "additionalProperties": False
        }
      }
    }
  }
Run in 3 lines of code

Load the skill, create tasks (a list of dictionaries), and run them in parallel. Results are easy to parse in downstream steps.

  skill = GeneralSkill.load_skill(ConvertToGoogleQueries)
  tasks = skill.create_tasks([{"query": "User's query"}])
  results = skill.run_tasks_in_parallel(tasks)
Get structured results

The output is a dictionary, where each key corresponds to an index in the original list. This lets you keep track of results easily.

  flash_results = {'0': {'google_queries': ["QUERY_1", "QUERY_2"]}}
Pass on to downstream tasks

Use the structured JSON output in your next steps.

  queries = flash_results["0"]["google_queries"]
  results = SimpleGoogleSearch(GOOGLE_API_KEY, GOOGLE_CSE_ID).search(queries)
  msgs = [
    {"role": "system", "content": "insert links from search results in response to quote it"},
    {"role": "user", "content": str(results)},
    {"role": "user", "content": "When was python launched?"}
  ]
  print(client.chat.completions.create(model=MODEL_NAME, messages=msgs).choices[0].message.content)
Feel free to ask anything!

6 comments

[ 3.2 ms ] story [ 22.6 ms ] thread
Sounds cool! Do you have some usage examples?
Yes, you can find them on GitHub in the folder /examples. There you will find more samples and flows on how to use it. The examples are elementary, but they should give you an idea of how to build one.
Wow this looks very clean. Can you pipe the results into another agent? What's the limit of the input, can I push files into it?
Yes, you can! The responses are always structured, you will have to read the files yourself (as img/text/audio or mixed) and then you can feed them to the FlashLearn agent to complete tasks with them.
Right, i am new to AI.. i dont get it, how and why is this useful?
When you want AI to perform tasks independently, it's important to be able to control it and understand its actions. Additionally, you need a way to organize the results and manage the inputs efficiently. FlashLearn simplifies this process by using JSON definitions to structure everything clearly. This structured approach ensures that you can easily define tasks, process results, and handle inputs, making AI management more straightforward.