mmens · Agent 101
越简单越接近本质

Agent 最小原理

Agent 的核心,只有一个 Loop。

模型负责决定下一步,代码负责执行工具。工具结果再回到模型,直到它不再调用工具。

看它循环一次

查一次天气,要问模型两次

第一次模型要工具,第二次模型读到工具结果后才回答。

while True
1 · USER

用户目标

北京今天天气怎么样?

2 · MODEL

模型决定

调用 get_weather(北京)

3 · CODE

程序执行

真正调用天气函数

4 · TOOL RESULT

结果回填

北京:晴,24℃

LOOP:把结果加入 messages,回到「模型决定」
模型第二次返回最终文字,没有 tool call → 结束
第 1 轮 · 输入
messages 加入用户问题。

最小代码

Loop 就是 while True

省略不同模型厂商的 HTTP 格式后,Agent 的核心就是这些。

def agent(question):
    messages = [user(question)]

    while True:
        reply = model(messages, tools=SCHEMAS)

        if not reply.tool_calls:
            return reply.text        # 结束

        messages.append(reply)
        for call in reply.tool_calls:
            result = TOOLS[call.name](**call.args)
            result_msg = tool_result(call.id, result)
            messages.append(result_msg)

        # 回到 while 开头,带着结果再问模型

模型只提议;TOOLS 里的普通代码才真正执行。

FlowLens

围栏卡在这三个位置

它守的是 Agent 与模型之间的通信,不是本地执行器。

1
发给模型前

检查 messages;工具结果也要等下一个 Loop 回来才看得到。 on_request

2
模型返回途中

扫描或还原模型返回的内容。 create_transform

3
工具意图交给 Agent 前

按工具名和参数阻断或改写。 on_tool_use

事后:on_response + capture 记录请求、原始响应和安全事件,但不能撤销。

边界:本地 shell、文件副作用、stdout 和 stdio MCP 不在这条链路里;真正执行前还要靠 mens permissions 或沙箱。