A LLM prompting framework for LLM agents
Project description
offers a unified framework for explicitly constructing a complex human "thought process" from simple natural language prompts.
The user puts together chains of nodes, like stacking LEGO pieces. The chains of nodes can be designed to explicitly enforce a naturally structured "thought process".
Different arrangements of nodes could represent different functionalities, allowing the user to integrate various functionalities to build multifunctional agents.
A basic agent could be implemented as simple as a list of prompts for the subtasks and therefore could be designed and tuned by someone without any programming experience.
Contents
- Installation
- Getting Started
- Node Components
- Using AgentKit without Programming Experience
- Citing AgnetKit
Installation
To install the cutting edge version from the main branch of this repo, run:
git clone https://github.com/holmeswww/AgentKit && cd AgentKit
pip install -e .
Getting Started
The basic building block in AgentKit is a node, containing a natural language prompt for a specific subtask. The nodes are linked together by the dependency specifications, which specify the order of evaluation. Different arrangements of nodes can represent different different logic and throught processes.
At inference time, AgentKit evaluates all nodes in specified order as a directed acyclic graph (DAG).
from agentkit import Graph, BaseNode
import agentkit.llm_api
LLM_API_FUNCTION = agentkit.llm_api.get_query("gpt-4")
graph = Graph()
subtask1 = "What are the pros and cons for using LLM Agents for Game AI?"
node1 = BaseNode(subtask1, subtask1, graph, LLM_API_FUNCTION, agentkit.compose_prompt.BaseComposePrompt())
graph.add_node(node1)
subtask2 = "Give me an outline for an essay titled 'LLM Agents for Games'."
node2 = BaseNode(subtask2, subtask2, graph, LLM_API_FUNCTION, agentkit.compose_prompt.BaseComposePrompt())
graph.add_node(node2)
subtask3 = "Now, write a full essay on the topic 'LLM Agents for Games'."
node3 = BaseNode(subtask3, subtask3, graph, LLM_API_FUNCTION, agentkit.compose_prompt.BaseComposePrompt())
graph.add_node(node3)
graph.add_edge(subtask1, subtask2)
graph.add_edge(subtask1, subtask3)
graph.add_edge(subtask2, subtask3)
result = graph.evaluate() # outputs a dictionary of prompt, answer pairs
LLM_API_FUNCTION
can be any LLM API function that takes msg:list
and shrink_idx:int
, and outputs llm_result:str
and usage:dict
. Where msg
is a prompt (OpenAI format by default), and shrink_idx:int
is an index at which the LLM should reduce the length of the prompt in case of overflow.
AgentKit tracks token usage of each node through the LLM_API_FUNCTION
with:
usage = {
'prompt': $prompt token counts,
'completion': $completion token counts,
}
Using AgentKit without Programming Experience
First, follow the installation guide to install AgentKit.
Node Components
Inside each node (as shown to the left of the figure), AgentKit runs a built-in flow that preprocesses the input (Compose), queryies the LLM with a preprocessed input and prompt $q_v$, and optionally postprocesses the output of the LLM (After-query).
To support advanced capabilities such as branching, AgentKit offers API to dynamically modify the DAG at inference time (as shown to the right of the figure). Nodes/edges could be dynamically added or removed based on the LLM response at some ancestor nodes.
Citing AgentKit
TBD
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.