On the coronary heart of each profitable AI Agent lies one important ability: prompting (or “immediate engineering”). It’s the methodology of instructing LLMs to carry out duties by rigorously designing the enter textual content.
Immediate engineering is the evolution of the inputs for the primary text-to-text NLP fashions (2018). On the time, builders usually targeted extra on the modeling facet and have engineering. After the creation of enormous GPT fashions (2022), all of us began utilizing largely pre-trained instruments, so the main target has shifted on the enter formatting. Therefore, the “immediate engineering” self-discipline was born, and now (2025) it has matured into a mix of artwork and science, as NLP is blurring the road between code and immediate.
Several types of prompting strategies create various kinds of Brokers. Every methodology enhances a particular ability: logic, planning, reminiscence, accuracy, and Instrument integration. Let’s see all of them with a quite simple instance.
## setup
import ollama
llm = "qwen2.5"
## query
q = "What's 30 multiplied by 10?"
Most important strategies
1) “Common” prompting – simply ask a query and get an easy reply. Additionally known as “Zero-Shot” prompting particularly when the mannequin is given a process with none prior examples of methods to resolve it. This primary approach is designed for One-Step Brokers that execute the duty with out intermediate reasoning, particularly early fashions.

response = ollama.chat(mannequin=llm, messages=[
{'role':'user', 'content':q}
])
print(response['message']['content'])

2) ReAct (Cause+Act) – a mixture of reasoning and motion. The mannequin not solely thinks by means of an issue but additionally takes motion based mostly on its reasoning. So, it’s extra interactive because the mannequin alternates between reasoning steps and actions, refining its strategy iteratively. Principally, it’s a loop of thought-action-observation. Used for extra sophisticated duties, like looking out the online and making selections based mostly on the findings, and usually designed for Multi-Step Brokers that carry out a collection of reasoning steps and actions to reach at a closing outcome. They’ll break down complicated duties into smaller, extra manageable elements that progressively construct upon each other.
Personally, I actually like ReAct Brokers as I discover them extra much like people as a result of they “f*ck round and discover out” identical to us.

immediate = '''
To resolve the duty, you should plan ahead to proceed in a collection of steps, in a cycle of 'Thought:', 'Motion:', and 'Remark:' sequences.
At every step, within the 'Thought:' sequence, you must first clarify your reasoning in direction of fixing the duty, then the instruments that you just need to use.
Then within the 'Motion:' sequence, you shold use certainly one of your instruments.
Throughout every intermediate step, you should utilize 'Remark:' area to avoid wasting no matter vital data you'll use as enter for the subsequent step.
'''
response = ollama.chat(mannequin=llm, messages=[
{'role':'user', 'content':q+" "+prompt}
])
print(response['message']['content'])

3) Chain-of-Thought (CoT) – a reasoning sample that includes producing the method to succeed in a conclusion. The mannequin is pushed to “assume out loud” by explicitly laying out the logical steps that result in the ultimate reply. Principally, it’s a plan with out suggestions. CoT is probably the most used for superior duties, like fixing a math drawback that may want step-by-step reasoning, and usually designed for Multi-Step Brokers.

immediate = '''Let’s assume step-by-step.'''
response = ollama.chat(mannequin=llm, messages=[
{'role':'user', 'content':q+" "+prompt}
])
print(response['message']['content'])

CoT extensions
From the Chain-of-Approach derived a number of different new prompting approaches.
4) Reflexion prompting that provides an iterative self-check or self-correction part on high of the preliminary CoT reasoning, the place the mannequin evaluations and critiques its personal outputs (recognizing errors, figuring out gaps, suggesting enhancements).
cot_answer = response['message']['content']
response = ollama.chat(mannequin=llm, messages=[
{'role':'user', 'content': f'''Here was your original answer:nn{cot_answer}nn
Now reflect on whether it was correct or if it was the best approach.
If not, correct your reasoning and answer.'''}
])
print(response['message']['content'])

5) Tree-of-Ideas (ToT) that generalizes CoT right into a tree, exploring a number of reasoning chains concurrently.
num_branches = 3
immediate = f'''
You'll consider a number of reasoning paths (thought branches). For every path, write your reasoning and closing reply.
After exploring {num_branches} completely different ideas, decide one of the best closing reply and clarify why.
'''
response = ollama.chat(mannequin=llm, messages=[
{'role':'user', 'content': f"Task: {q} n{prompt}"}
])
print(response['message']['content'])

6) Graph‑of‑Ideas (GoT) that generalizes CoT right into a graph, contemplating additionally interconnected branches.
class GoT:
def __init__(self, query):
self.query = query
self.nodes = {} # node_id: textual content
self.edges = [] # (from_node, to_node, relation)
self.counter = 1
def add_node(self, textual content):
node_id = f"Thought{self.counter}"
self.nodes[node_id] = textual content
self.counter += 1
return node_id
def add_edge(self, from_node, to_node, relation):
self.edges.append((from_node, to_node, relation))
def present(self):
print("n--- Present Ideas ---")
for node_id, textual content in self.nodes.objects():
print(f"{node_id}: {textual content}n")
print("--- Connections ---")
for f, t, r in self.edges:
print(f"{f} --[{r}]--> {t}")
print("n")
def expand_thought(self, node_id):
immediate = f"""
You might be reasoning in regards to the process: {self.query}
Here's a earlier thought node ({node_id}):"""{self.nodes[node_id]}"""
Please present a refinement, an alternate viewpoint, or a associated thought that connects to this node.
Label your new thought clearly, and clarify its relation to the earlier one.
"""
response = ollama.chat(mannequin=llm, messages=[{'role':'user', 'content':prompt}])
return response['message']['content']
## Begin Graph
g = GoT(q)
## Get preliminary thought
response = ollama.chat(mannequin=llm, messages=[
{'role':'user', 'content':q}
])
n1 = g.add_node(response['message']['content'])
## Increase preliminary thought with some refinements
refinements = 1
for _ in vary(refinements):
enlargement = g.expand_thought(n1)
n_new = g.add_node(enlargement)
g.add_edge(n1, n_new, "enlargement")
g.present()
## Remaining Reply
immediate = f'''
Listed below are the reasoning ideas up to now:
{chr(10).be a part of([f"{k}: {v}" for k,v in g.nodes.items()])}
Based mostly on these, choose one of the best reasoning and closing reply for the duty: {q}
Clarify your alternative.
'''
response = ollama.chat(mannequin=llm, messages=[
{'role':'user', 'content':q}
])
print(response['message']['content'])

7) Program‑of‑Ideas (PoT) that focuses on programming, the place the reasoning occurs by way of executable code snippets.
import re
def extract_python_code(textual content):
match = re.search(r"```python(.*?)```", textual content, re.DOTALL)
if match:
return match.group(1).strip()
return None
def sandbox_exec(code):
## Create a minimal sandbox with security limitation
allowed_builtins = {'abs', 'min', 'max', 'pow', 'spherical'}
safe_globals = {ok: __builtins__.__dict__[k] for ok in allowed_builtins if ok in __builtins__.__dict__}
safe_locals = {}
exec(code, safe_globals, safe_locals)
return safe_locals.get('outcome', None)
immediate = '''
Write a brief Python program that calculates the reply and assigns it to a variable named 'outcome'.
Return solely the code enclosed in triple backticks with 'python' (```python ... ```).
'''
response = ollama.chat(mannequin=llm, messages=[
{'role':'user', 'content': f"Task: {q} n{prompt}"}
])
print(response['message']['content'])
sandbox_exec(code=extract_python_code(textual content=response['message']['content']))

Conclusion
This text has been a tutorial to recap all the main prompting strategies for AI Brokers. There’s no single “greatest” prompting approach because it relies upon closely on the duty and the complexity of the reasoning wanted.
For instance, easy duties, like summarization and translation, are easiy carried out with a Zero-Shot/Common prompting, whereas CoT works effectively for math and logic duties. Alternatively, Brokers with Instruments are usually created with ReAct mode. Furthermore, Reflexion is most acceptable when studying from errors or iterations improves outcomes, like gaming.
When it comes to versatility for complicated duties, PoT is the true winner as a result of it’s solely based mostly on code era and execution. In reality, PoT Brokers are getting nearer to exchange people in a number of workplace taks.
I imagine that, within the close to future, prompting gained’t simply be about “what you say to the mannequin”, however about orchestrating an interactive loop between human intent, machine reasoning, and exterior motion.
Full code for this text: GitHub
I hope you loved it! Be happy to contact me for questions and suggestions or simply to share your fascinating tasks.
👉 Let’s Join 👈

(All photos are by the writer except in any other case famous)