构建生产级 AI Agent 系统的4大主流技术:反思、工具、规划与多智能体协作

简介: 本文深入解析Agentic AI四大核心设计模式:Reflection(自我反思)、Tool Use(工具调用)、Planning(任务规划)与Multi-Agent协作。它们共同赋予AI思考、行动、校验与协同能力,突破单轮问答局限,构建真正可落地的自主智能系统。

多数人对AI Agent的理解还停留在"聊天机器人的升级版",这个思路在一段时间里这么理解其实也没什问题,比如问一个问题,拿到一个回答。但很快就能看出来单轮提示-响应的交互根本没有任何的意义,而真正有意义的跃迁发生在AI开始具备这些能力的时候:思考、规划、行动、观察、循环往复,这和我们处理复杂问题的方式几乎一致。

这就是Agentic AI的内核,而要构建这样的系统就必须理解支撑它运转的几种核心设计模式。

本文拆解当下重塑AI系统构建方式的4种核心 Agentic 模式,分析每种模式的工作机制、适用场景,以及如何将它们组合出真正可用的系统。

为什么 Agentic 模式现在如此重要?

传统大语言模型(LLM)聪明但脆弱。面对一个查询,它能一次性给出响应,却无法自我纠正、反复迭代或制定执行计划。这类模型不具备像人那样的外部交互能力,无法浏览网页,无法生成缩略图、写脚本、剪视频再把成品发布到 YouTube 频道,更不用说并行完成这些操作。

Agentic 模式就是针对这些局限的解法。

它把一个静态的语言模型改造成动态推理引擎:将复杂任务拆解为多个简单子任务,再由多 Agent 协作逐一完成。在这个过程中,Agent 可以调用外部工具、校验自身输出、与其他 Agent 协同工作——单轮提示根本不可能覆盖这些场景。

模式1:Reflection 让 Agent 学会自我审视

在报社工作,主编让你写一篇特稿。写完之后交稿前你会自己通读一遍,排查事实错误、找出论证薄弱的地方、核实信源、修改结论,这一轮自审就是"反思"。

LLM 可以做同样的事,审视自己生成的内容在返回结果之前迭代改进。

最简单的形态下,Reflection 是一个两步循环。第一步,Agent 生成初始输出(代码、文章、研究报告等);第二步,同一个 Agent 或另一个专职"评审"Agent 对输出进行分析,识别缺陷和可改进之处。这个循环可以反复执行,直到输出质量达到预设阈值。

Figure: Reflection based Agentic Pattern

代码示例:

  # Agent生成响应,批评它,然后改进它。  

# 安装: pip install ollama  
# 需要: Ollama在本地运行 → https://ollama.com  
#            先拉取模型: ollama pull llama3.2  

import ollama  

MODEL = "llama3.2"  

def generate(prompt: str) -> str:  
    response = ollama.chat(  
        model=MODEL,  
        messages=[{"role": "user", "content": prompt}]  
    )  
    return response["message"]["content"]  

def reflect_and_improve(task: str, iterations: int = 2) -> str:  
    print(f"📝 Task: {task}\n")  

    # 步骤1: 生成初始回答  
    draft = generate(task)  
    print(f"--- Draft ---\n{draft}\n")  

    for i in range(iterations):  
        # 步骤2: 批评草稿  
        critique_prompt = f"""  
You are a strict reviewer. Here is a task and a draft response.  

Task: {task}  
Draft: {draft}  

Identify weaknesses or errors in the draft, then write an improved version.  
"""  
        draft = generate(critique_prompt)  
        print(f"--- Iteration {i + 1} ---\n{draft}\n")  

    return draft  

if __name__ == "__main__":  
    final = reflect_and_improve(  
        task="Explain what a Large Language Model is in 3 sentences."  
    )  
     print(f"✅ Final Answer:\n{final}")

典型应用场景包括:代码生成中的"生成-测试-定位Bug-重新生成"循环;创意写作中对语调和清晰度的反复打磨;数据分析中对逻辑缺陷的自查与修正;数学推理中逐步验证并修复中间步骤的错误。

模式2:Tool Use,给 Agent 装上手脚

工具使用让 Agent 能够与训练数据之外的真实世界交互。

Tool Use(也叫 Function Calling)的基本流程是这样的:Agent 收到任务后判断是否需要借助外部工具;如果需要,生成一个结构化的工具调用请求;工具执行后返回结果;Agent 将结果纳入推理链继续处理。

Figure: Tool-Use Agentic Pattern

代码示例:

  # 模式2: 工具使用  
# Agent决定何时调用外部工具(搜索、计算器、天气)  
# 并将其结果纳入最终回答。  

# 安装: pip install ollama requests  
# 需要: Ollama在本地运行 → https://ollama.com  
#            先拉取模型: ollama pull llama3.2  

import ollama  
import requests  
import json  

MODEL = "llama3.2"  

# ── 定义的工具 ──────────────────────────────────────────────────────────────  

def get_weather(city: str) -> str:  
    """Fetch current weather for a city using the free Open-Meteo API."""  
    # 步骤1: 将城市名称地理编码为经纬度  
    geo = requests.get(  
        "https://geocoding-api.open-meteo.com/v1/search",  
        params={"name": city, "count": 1}  
    ).json()  

    if not geo.get("results"):  
        return f"Could not find location for '{city}'."  

    lat = geo["results"][0]["latitude"]  
    lon = geo["results"][0]["longitude"]  

    # 步骤2: 获取天气  
    weather = requests.get(  
        "https://api.open-meteo.com/v1/forecast",  
        params={  
            "latitude": lat,  
            "longitude": lon,  
            "current_weather": True  
        }  
    ).json()  

    current = weather["current_weather"]  
    return (  
        f"Weather in {city}: {current['temperature']}°C, "  
        f"wind speed {current['windspeed']} km/h."  
    )  

def calculator(expression: str) -> str:  
    """Safely evaluate a basic math expression."""  
    try:  
        result = eval(expression, {"__builtins__": {}})  
        return f"Result of '{expression}' = {result}"  
    except Exception as e:  
        return f"Error evaluating expression: {e}"  

# 工具注册表 - 将工具名称映射到函数  
TOOLS = {  
    "get_weather": get_weather,  
    "calculator": calculator,  
}  

# 发送给模型的工具描述,让它知道有哪些可用工具  
TOOL_DESCRIPTIONS = """  
You have access to the following tools. Call a tool by responding with JSON in this exact format:  
{"tool": "<tool_name>", "args": {"<arg>": "<value>"}}  

Available tools:  
1. get_weather(city: str) — Returns the current weather for a city.  
2. calculator(expression: str) — Evaluates a math expression like "12 * 9".  

If you don't need a tool, just answer directly in plain text.  
Only call ONE tool per response.  
"""  

# ── Agent循环 ─────────────────────────────────────────────────────────────────  

def run_tool_agent(user_query: str) -> str:  
    print(f"🧠 Query: {user_query}\n")  

    messages = [  
        {"role": "system", "content": TOOL_DESCRIPTIONS},  
        {"role": "user",   "content": user_query}  
    ]  

    for step in range(5):  # 最多5步  
        response = ollama.chat(model=MODEL, messages=messages)  
        reply = response["message"]["content"].strip()  

        # 尝试从模型的响应中解析工具调用  
        try:  
            call = json.loads(reply)  
            tool_name = call.get("tool")  
            args      = call.get("args", {})  

            if tool_name in TOOLS:  
                print(f"🔧 Calling tool: {tool_name}({args})")  
                tool_result = TOOLS[tool_name](**args)  
                print(f"📦 Tool result: {tool_result}\n")  

                # 将结果反馈给模型  
                messages.append({"role": "assistant", "content": reply})  
                messages.append({"role": "user",      "content": f"Tool result: {tool_result}\nNow answer the original question."})  
                continue  

        except (json.JSONDecodeError, TypeError):  
            pass  

        # 没有工具调用 - 这是最终答案  
        print(f"✅ Final Answer:\n{reply}")  
        return reply  

    return "Agent did not reach a conclusion."  

if __name__ == "__main__":  
     run_tool_agent("What is the weather in Tokyo? Also what is 144 divided by 12?")

适用场景很广:研究类 Agent 从多源浏览和综合网络内容;个人助理 Agent 管理待办、邮件或在应用中下单;金融 Agent 拉取股票与市场实时行情;新闻提取 Agent 从多个渠道聚合最新信息。

模式3:Planning,行动之前先想清楚

假设有人接到开发一个应用的任务,上来就开始写代码,没有任何规划。这种做法显然令人不安。

好的工程师先拆解问题,列出可执行的步骤序列,然后逐步推进。Agent 也应该如此。Planning 模式赋予 Agent 的正是这种"先想后做"的能力。

Planning 有两种主要变体。

第一种是 ReAct(Reason + Act)。这是目前最流行的规划方式,Agent 在"推理—行动—观察"三个环节之间交替循环:先思考下一步该做什么,然后执行动作(调用工具或完成某个步骤),接着观察执行结果,再进入下一轮推理,直到任务完成。

Figure: ReAct based Planning Pattern

第二种是 Plan-and-Execute。与 ReAct 那种"边走边拆"的风格不同,Plan-and-Execute 要求 Agent 在动手之前一次性生成完整的执行计划,然后按顺序逐步执行。

Phase 1 — Planning:"Here are the 5 steps I'll take to complete this task: …"

Phase 2 — Execution:Step 1 → [execute] → resultStep 2 → [execute] → result…Step 5 → Final output

代码示例:

  # 模式3: 规划 (ReAct — 推理 + 行动)  
# Agent推理下一步该做什么,行动(使用工具),  
# 观察结果,然后再次推理——直到任务完成。  

# 安装: pip install ollama requests  
# 需要: Ollama在本地运行 → https://ollama.com  
#            先拉取模型: ollama pull llama3.2  

import ollama  
import requests  
import re  

MODEL = "llama3.2"  

# ── 模拟工具 ─────────────────────────────────────────────────────────────────  

def search_web(query: str) -> str:  
    """Simulated web search (replace with real search API in production)."""  
    mock_db = {  
        "transformer architecture":  
            "Transformers use self-attention mechanisms to process sequences in parallel.",  
        "who invented transformers":  
            "The Transformer architecture was introduced by Vaswani et al. in the paper "  
            "'Attention Is All You Need' (2017) at Google Brain.",  
        "applications of transformers":  
            "Transformers are used in NLP (BERT, GPT), computer vision (ViT), "  
            "speech recognition, and drug discovery.",  
    }  
    for key, value in mock_db.items():  
        if key in query.lower():  
            return value  
    return f"No results found for '{query}'."  

def summarize(text: str) -> str:  
    """Use the LLM itself to summarize a piece of text."""  
    response = ollama.chat(  
        model=MODEL,  
        messages=[{"role": "user", "content": f"Summarize this in one sentence:\n{text}"}]  
    )  
    return response["message"]["content"].strip()  

TOOLS = {  
    "search_web": search_web,  
    "summarize":  summarize,  
}  

# ── ReAct系统提示词 ────────────────────────────────────────────────────────  

REACT_PROMPT = """You are a reasoning agent. Solve tasks step by step using this loop:  

Thought: Think about what to do next.  
Action: <tool_name>(<argument>)  
Observation: [result of the action]  
... repeat as needed ...  
Final Answer: <your complete answer>  

Available tools:  
- search_web(query) — Search for information on a topic.  
- summarize(text)   — Summarize a block of text into one sentence.  

Always start with a Thought. End with Final Answer when done.  
"""  

# ── ReAct Agent循环 ───────────────────────────────────────────────────────────  

def parse_action(text: str):  
    """Extract tool name and argument from 'Action: tool_name(argument)'"""  
    match = re.search(r"Action:\s*(\w+)\((.+?)\)", text, re.DOTALL)  
    if match:  
        return match.group(1).strip(), match.group(2).strip().strip('"').strip("'")  
    return None, None  

def run_react_agent(task: str) -> str:  
    print(f"🎯 Task: {task}\n")  

    messages = [  
        {"role": "system", "content": REACT_PROMPT},  
        {"role": "user",   "content": f"Task: {task}"}  
    ]  

    for step in range(8):  # 最多8个ReAct步骤  
        response = ollama.chat(model=MODEL, messages=messages)  
        reply    = response["message"]["content"].strip()  

        print(f"[Step {step + 1}]\n{reply}\n")  

        # 检查Agent是否已达到最终答案  
        if "Final Answer:" in reply:  
            final = reply.split("Final Answer:")[-1].strip()  
            print(f"✅ Final Answer:\n{final}")  
            return final  

        # 解析并执行动作  
        tool_name, argument = parse_action(reply)  

        if tool_name and tool_name in TOOLS:  
            observation = TOOLS[tool_name](argument)  
            print(f"🔭 Observation: {observation}\n")  

            # 将交互追加到消息历史  
            messages.append({"role": "assistant", "content": reply})  
            messages.append({"role": "user",      "content": f"Observation: {observation}"})  
        else:  
            # 未找到有效动作 - 要求Agent继续  
            messages.append({"role": "assistant", "content": reply})  
            messages.append({"role": "user",      "content": "Continue your reasoning."})  

    return "Agent reached maximum steps without a final answer."  

if __name__ == "__main__":  
    run_react_agent(  
        "Who invented the Transformer architecture and what are its main applications?"  
     )

Planning 模式的适用场景集中在几类任务上:涉及多个相互依赖步骤的研究任务,需要在执行前完成规划;软件开发中,需要先做架构设计再进入编码阶段的工作流程;业务流程自动化中,在关键决策节点反复推理和修正的场景。

模式4:多 Agent 协作,分工、专精、协同

没有谁能精通所有领域。团队存在的意义在于每个成员各有专长,协作产出任何个体都无法独立完成的成果。

AI Agent 遵循同样的逻辑。多个具备不同专长的 Agent 各司其职,协作完成单一 Agent 难以应对的复杂任务。

这一模式有几种架构上的变体。

第一种:Orchestrator + SubAgents。一个中央编排器接收任务、完成分解,然后将子任务分配给多个专业子 Agent 并行处理,最后汇总所有结果。

第二种:Peer Agents(对等辩论/协作)。多个 Agent 独立处理同一任务,之后对比各自的结论,这个类似于研究者之间通过辩论逼近真相的过程。在对精度要求极高的任务中,这种模式尤其有价值。

第三种:Sequential Pipeline(顺序流水线)。把它想象成一个专业分工团队在同一任务上依次接力。Agent A 产出结果交给 Agent B,Agent B 加工后交给 Agent C,直到最终输出。

[Data Collector] → [Analyst] → [Fact Checker] → [Writer] → Final Report

代码示例:

  # 模式4: 多Agent协作  
# 一个编排器Agent分解任务并将子任务委派给  
# 专业化Agent(研究员、分析师、写手)。  
# 每个Agent都有一个专注的角色和系统提示词。  

# 安装: pip install ollama  
# 需要: Ollama在本地运行 → https://ollama.com  
#            先拉取模型: ollama pull llama3.2  

import ollama  

MODEL = "llama3.2"  

# ── 基础Agent ─────────────────────────────────────────────────────────────────  

def run_agent(system_prompt: str, user_message: str) -> str:  
    """Run a single agent with a given role and task."""  
    response = ollama.chat(  
        model=MODEL,  
        messages=[  
            {"role": "system", "content": system_prompt},  
            {"role": "user",   "content": user_message}  
        ]  
    )  
    return response["message"]["content"].strip()  

# ── 专业化Agent ─────────────────────────────────────────────────────────  

def researcher_agent(topic: str) -> str:  
    """Gathers key facts and background on a topic."""  
    system = (  
        "You are a research specialist. When given a topic, provide 4–5 key facts, "  
        "background context, and important figures or milestones. Be concise and factual."  
    )  
    print("🔍 Researcher Agent working...")  
    result = run_agent(system, f"Research this topic: {topic}")  
    print(f"   Done.\n")  
    return result  

def analyst_agent(research: str) -> str:  
    """Identifies trends, insights, and implications from research."""  
    system = (  
        "You are a data analyst and critical thinker. Given research notes, "  
        "extract 3 key insights or trends and explain their implications. "  
        "Be analytical and structured."  
    )  
    print("📊 Analyst Agent working...")  
    result = run_agent(system, f"Analyze these research notes:\n{research}")  
    print(f"   Done.\n")  
    return result  

def writer_agent(topic: str, research: str, analysis: str) -> str:  
    """Writes a polished short article from research and analysis."""  
    system = (  
        "You are a professional tech writer. Given a topic, research notes, and analysis, "  
        "write a clear, engaging 150-word summary suitable for a technical blog. "  
        "Use simple language and a logical structure."  
    )  
    print("✍️  Writer Agent working...")  
    result = run_agent(  
        system,  
        f"Topic: {topic}\n\nResearch:\n{research}\n\nAnalysis:\n{analysis}\n\nWrite the blog summary."  
    )  
    print(f"   Done.\n")  
    return result  

# ── 编排器 ───────────────────────────────────────────────────────────────  

def orchestrator(topic: str) -> str:  
    """  
    Central orchestrator that:  
    1. Delegates research to the Researcher Agent  
    2. Sends research to the Analyst Agent  
    3. Passes both outputs to the Writer Agent  
    4. Returns the final polished output  
    """  
    print(f"🎬 Orchestrator: Starting pipeline for topic → '{topic}'\n")  
    print("=" * 55)  

    # 步骤1: 研究  
    research = researcher_agent(topic)  

    # 步骤2: 分析  
    analysis = analyst_agent(research)  

    # 步骤3: 写作  
    final_article = writer_agent(topic, research, analysis)  

    print("=" * 55)  
    print(f"\n✅ Final Output:\n\n{final_article}")  
    return final_article  

if __name__ == "__main__":  
     orchestrator("The rise of Agentic AI systems in 2024")

多 Agent 协作的落地场景十分多样:软件项目中由架构师、编码者、审查者、测试者组成 Agent 团队;金融分析中由数据采集、量化分析、叙述撰写等 Agent 分工配合;内容创作流水线中由研究、写作、编辑、SEO 各环节的 Agent 接力完成;客户支持系统中由分诊、专家处理、升级等 Agent 协同响应。

模式之间如何组合

四种模式并非互斥。在实际生产系统中,最成熟的方案往往将它们分层叠加。

以一个 AI 竞争情报平台为例:

每种模式各自弥补一类短板——Reflection 提升输出质量,Tool Use 拓展交互能力,Planning 应对多步骤复杂任务,Multi-Agent 解决规模和专业分工的问题。四层叠合,一个简单的 LLM 就变成了可以上生产的自主系统。

总结

单轮提示的时代正在过去。取而代之的是具备思考、行动、自检和协作能力的 AI——与一支配合默契的工程团队所做的事情,本质上没有区别。

Reflection、Tool Use、Planning、Multi-Agent Collaboration,这四种模式构成了这次转移的基础构件,理解它们的意义不停留在理论层面;它直接决定了最终产出的是一个演示用的原型,还是一个能在生产环境中持续运行的系统。

https://avoid.overfit.cn/post/9e1443a3841e498d912f10040cceef60

by Rishabh Mathur

目录
相关文章
|
12小时前
|
分布式计算 运维 Kubernetes
别再手搓集群了:用 Terraform + Helm 把数据平台“养成宠物”变“放养牛群”
别再手搓集群了:用 Terraform + Helm 把数据平台“养成宠物”变“放养牛群”
35 5
|
12小时前
|
人工智能 Kubernetes Java
新人第一天别再“放养”了:一套 First-Day 体验,把上手速度直接拉满
新人第一天别再“放养”了:一套 First-Day 体验,把上手速度直接拉满
39 4
|
15小时前
|
人工智能 自然语言处理 监控
企业如何应用BI系统(2026年3月)
在数字化转型深水区,瓴羊Quick BI以“智能小Q”为核心,实现自然语言分析、自动归因与智能推荐,支持多源数据接入、移动端协同及行业定制化方案,助力企业从报表展示迈向全域数据智能决策,真正让BI融入业务血脉。(239字)
|
10小时前
|
测试技术 API 持续交付
【Git】实际项目中 Git 的最佳实践
本文系统总结Git在实际项目中的八大最佳实践:涵盖分支策略(Git Flow/TBD)、Conventional Commits提交规范、PR代码审查要点、核心分支保护、冲突预防与解决、敏感信息管理、高效命令技巧(stash/bisect/reflog)及团队协作规范,助力提升协作效率与代码质量。
|
9小时前
|
人工智能 安全 JavaScript
别再折腾Docker了!Mac上安装OpenClaw其实只要3分钟?
Mac安装OpenClaw只需3分钟!本文提供一键脚本(推荐)和手动安装两种方式,支持macOS 12+,含环境配置、模型对接及微信/飞书等渠道集成。新手更建议云端部署——阿里云轻量服务器38元/年,安全稳定、操作傻瓜化,附官方教程链接。
|
9小时前
|
前端开发
前端开发 之 15个炫酷按钮特效上【附完整源码】
本篇文章内容展示了灯光效果按钮、拉链式展开按钮、毛玻璃式按钮等众多炫酷按钮特效,并给出了完整代码及注释
22 2
|
9小时前
|
人工智能 安全 JavaScript
10分钟搞定!Mac电脑本地部署OpenClaw,AI代理秒启动!
本文详解Mac本地部署OpenClaw AI代理的两种方式:一键脚本(5分钟完成)和手动安装(适合开发者)。涵盖系统要求、环境配置、模型对接及网关启动全流程,并强烈建议新手选择阿里云轻量服务器(38元/年)云端部署,更安全、稳定、易操作。
|
9小时前
|
机器学习/深度学习 数据采集 自动驾驶
斑马线目标检测数据集分享(适用于YOLO系列深度学习分类检测任务)
本数据集含1000张真实道路图像(700训练/200验证/100测试),专为斑马线目标检测构建,YOLO格式标注,覆盖多场景、多视角、多光照及遮挡/磨损等挑战,适用于YOLO系列等模型训练,助力自动驾驶与智能交通研发。(239字)
20 2
|
9小时前
|
人工智能 安全 JavaScript
告别报错!2026 OpenClaw for Mac 最稳安装指南(亲测M1/M2/M3全通)
2026 OpenClaw for Mac 最稳安装指南!支持M1/M2/M3芯片,macOS 12+系统。提供一键脚本(5分钟完成)和手动安装两种方式,并详解环境配置、模型对接与网关启动。新手强烈推荐阿里云轻量服务器一键部署(38元/年),更安全、省心、低成本。
|
10小时前
|
人工智能 API 数据安全/隐私保护
把AI当员工培养!OpenClaw从阿里云/本地部署到独当一面(12个核心技巧+百炼API配置及避坑指南)
“安装好OpenClaw,却发现它答非所问、做一半就卡住?”——这是2026年无数用户的共同困惑。很多人把AI当成“即插即用的工具”,期望配置完成后就能变身全能助手,却忽略了核心逻辑:OpenClaw不是玩具,而是需要像培养新员工一样耐心调教的智能体。它能学习、会进化、可定制,但前提是你要告诉它“是谁、做什么、怎么干”。
35 1

热门文章

最新文章