跪拜 Guibai
← All articles
Agent · AI Programming · AIGC

Calling an LLM Once Doesn't Make It an Agent

By 深海恶霸Grace ·
Read original on juejin.cn ↗ Google Translate ↗ Alt translation

Teams that label every LLM wrapper an Agent skip the engineering that prevents runaway loops, enforces permissions, and recovers from failure — the parts that actually determine whether an autonomous system ships or collapses.

Summary

A single LLM API call wrapped in a function named `review_agent` is still just a model service call, not an autonomous runtime unit. An Agent is defined by a goal-driven loop: the model inspects state, selects tools, executes actions, reads results, and decides the next step until a stopping condition is met. Skills are reusable operation manuals — packaged steps, scripts, and references — that an Agent can load, but they contain no decision loop of their own. A Subagent is a separately configured Agent delegated by a main Agent, with its own tools, context, and independent loop. The Harness is the outer control layer that provides sandboxing, permissions, state persistence, retries, human-in-the-loop gates, and failure recovery — everything that lets an Agent run safely in production. Confusing these layers leads teams to overclaim capability or underinvest in the runtime infrastructure that makes autonomous systems reliable.

Takeaways
Calling an LLM API once and returning text is an LLM application, not an Agent.
An Agent requires a sustained goal, tool execution, result feedback, and model-driven next-step decisions in a loop.
Skills are packaged workflows, scripts, and references; they are capability packs for Agents, not Agents themselves.
A Subagent is an independently configured Agent with its own tools and loop, explicitly delegated by a main Agent.
A Harness is the outer runtime that manages sandboxing, permissions, state, retries, human approval, and recovery.
LangChain's `create_agent` provides an Agent runtime loop; production systems still need a Harness around it.
Five questions determine Agent status: sustained goal, model-chosen next steps, real tool execution, result feedback into the model, and clear delegation or handoff for multi-agent setups.
Conclusions

The term “Agent” has become a prestige label applied to anything that touches an LLM, which obscures genuine architectural differences and inflates expectations.

A function named `review_agent` that calls `llm.invoke()` once is architecturally identical to calling a payment API — the name changes nothing.

The gap between a demo and a production Agent is almost entirely in the Harness: sandboxing, state recovery, permission boundaries, and human-in-the-loop gates.

Skills are often mistaken for Agents because they are packaged alongside code, but they lack the decision loop that defines autonomous runtime behavior.

The confusion mirrors an earlier pattern where executives flattened LLMs into “just a search engine,” skipping the system layers that make them useful.

Concepts & terms
Agent
A runtime unit that pursues a goal by looping: the model inspects state, selects tools, executes actions, reads results, and decides the next step until a stopping condition is met.
Skills
Reusable, packaged operation manuals containing steps, scripts, references, and templates for a specific task domain. They are loaded by an Agent but contain no decision loop of their own.
Subagent
An independently configured Agent with its own tools, context, and loop, explicitly delegated by a main Agent to handle a bounded task and return structured results or take over the conversation.
Harness
The outer control layer that provides sandboxing, permissions, state persistence, retries, human-in-the-loop approval gates, logging, and failure recovery — the production infrastructure an Agent runs inside.
Agent runtime
The loop that connects model calls, tool calls, and result feedback. Libraries like LangChain's `create_agent` provide this runtime, but it is distinct from the full production Harness.
Source: juejin.cn ↗ Google Translate ↗ Backup ↗