Agentic AI 与普通 LLM 应用的分水岭在于自主性:它不只回答一次问题,而是围绕一个目标持续观察、规划、行动、反思,直到达成或判定失败。专业落地要回答三个问题:自主到什么程度、由谁掌舵、出错如何兜底。
级别越高,收益越大,风险也越大。生产系统常见做法是能力给到 L2–L3,审批权留在人手里。
Agentic AI 的核心是一个带终止条件的循环。关键工程点是:状态外置(可持久化、可恢复)、步骤上限(防死循环)、反思触发(失败后修正而非重试)。
import os, json
from dataclasses import dataclass, field, asdict
from openai import OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
@dataclass
class State:
goal: str
plan: list = field(default_factory=list)
history: list = field(default_factory=list)
step: int = 0
def save(self, path="state.json"):
with open(path, "w", encoding="utf-8") as f:
json.dump(asdict(self), f, ensure_ascii=False, indent=2)
@classmethod
def load(cls, path="state.json"):
with open(path, encoding="utf-8") as f:
return cls(**json.load(f))状态可序列化,意味着 Agent 可中断、可恢复、可审计——这是从 Demo 走向生产的第一步。
工具是 Agent 的手脚,必须显式注册、参数校验、超时隔离。
import subprocess, shlex
TOOLS = {}
def tool(name, desc):
def deco(fn):
TOOLS[name] = {"fn": fn, "desc": desc}
return fn
return deco
@tool("calc", "计算数学表达式,输入 expression")
def calc(expression: str) -> str:
allowed = set("0123456789+-*/(). ")
if not set(expression) <= allowed:
return "错误:仅允许数字与四则运算"
return str(eval(expression, {"__builtins__": {}}, {}))
@tool("run_test", "运行指定测试文件,输入 path")
def run_test(path: str) -> str:
if not path.startswith("tests/"):
return "拒绝:只允许运行 tests/ 下文件"
p = subprocess.run(["pytest", "-q", path],
capture_output=True, text=True, timeout=60)
return p.stdout[-1500:] or p.stderr[-1500:]白名单、路径前缀校验、超时,三者缺一不可。让 LLM 直接生成 shell 命令执行是事故高发区。
SYS = """你是任务型 Agent。每轮输出 JSON:
{"thought":"...","action":"工具名或final","input":"...","done":bool}
规则:优先复用历史结果;连续两次相同动作必须反思换策略;不确定就调用工具验证。"""
def agent(state: State, max_steps=8):
while state.step < max_steps:
ctx = {
"goal": state.goal,
"plan": state.plan,
"history": state.history[-10:],
}
r = client.chat.completions.create(
model="gpt-4o", temperature=0,
response_format={"type": "json_object"},
messages=[{"role": "system", "content": SYS},
{"role": "user", "content": json.dumps(ctx, ensure_ascii=False)}],
)
d = json.loads(r.choices[0].message.content)
state.step += 1
if d["action"] == "final" or d["done"]:
state.save()
return d["input"]
fn = TOOLS.get(d["action"], {}).get("fn")
try:
obs = fn(d["input"]) if fn else f"未知工具 {d['action']}"
except Exception as e:
obs = f"工具异常:{e}"
state.history.append({"thought": d["thought"],
"action": d["action"],
"input": d["input"],
"obs": obs})
state.save()
return "达到步数上限,未完成"
# 使用
s = State(goal="计算 (23*17+5)/4 并验证结果是否为整数")
print(agent(s))反思机制体现在规则里:重复动作强制换策略,把“撞墙重试”变成“失败后调整”。
复杂任务可拆分为角色协作,用消息总线解耦:
class Bus:
def __init__(self):
self.queues = {}
def register(self, name):
self.queues[name] = []
def send(self, to, msg):
self.queues[to].append(msg)
def recv(self, name):
return self.queues[name].pop(0) if self.queues[name] else None
bus = Bus()
for role in ["planner", "coder", "reviewer"]:
bus.register(role)
bus.send("coder", {"task": "实现 calculate_discount"})
bus.send("reviewer", {"task": "审查 coder 的产出"})多智能体的价值不在“人多”,而在职责隔离:写代码的与审代码的不是同一个上下文,能有效降低同源盲区。
Agentic AI 的专业含义,是在受控边界内让系统自主推进目标。自主性带来效率,控制回路带来可靠性,护栏带来安全性。三者缺一,系统就只能停留在演示阶段。真正的工程能力,体现在把“自由发挥”约束成“可交付的自主”。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。