【第1节】Agent如何工作的?


1. 核心:感知,决策,行动,反馈
2. 过程:用户提问-》Agent思考行动(React 思考方式,Reasoning+Acting 的迭代式决策逻辑)-》根据意图选择工具-》执行工具-》结果加工-》输出答案;
3. Agent React 思考方式:是当前前沿多智能体系统的核心决策机制,指智能体通过 “观察 - 推理 - 行动 - 反馈” 的闭环流程,实现复杂任务的自主拆解、动态调整与高效执行。Agent React 思考方式的突破,使 AI 从 “信息提供方” 升级为 “任务执行方”。

【第2节】Agent架构组件


1. Tool(工具)
核心作用:单个功能模块,比如查天气、查汇率。每个工具专注做一件事。
特色说明:强调工具是 “解决单一任务” 的执行单元,每个工具只负责一个具体功能,不做通用推理。
2. AgentType(代理类型)
核心作用:决定 Agent 如何 “思考” 和 “推理”,常见的有 ReAct(反应式推理)。
特色说明:直接点明这是定义 Agent 的 “思考方式”,即它的推理逻辑和决策模式。
3. LLM(大模型)
核心作用:Agent 的大脑,负责理解和推理,常用模型如 qwen-turbo。
特色说明:标注 “内容”,突出大模型是整个智能代理的核心认知引擎,负责理解指令、生成逻辑、驱动决策。
4. initialize_agent(初始化代理)
核心作用:把大脑(LLM)和工具们组合起来,生成一个能跑的智能助手。
特色说明:标注 “组”,强调它是 “组装器” 的角色,将大模型与各类工具整合,形成完整可用的智能代理系统。

【第3节】LangChain与LangGraph区别


1. LangChain:大模型应用开发工具集 / 框架,提供海量组件(如数据加载、提示词、工具调用、记忆等);
2. LangGraph:基于 LangChain 构建的有状态多智能体工作流框架,专注于复杂、循环、多步骤的智能体流程编排
3. 若仅需实现简单功能(如 RAG 问答、单轮工具调用、基础对话),直接用 LangChain 即可,轻量高效;
4. 若需实现复杂流程(如多轮推理、循环重试、多智能体协作),基于 LangChain 组件,用 LangGraph 编排流程;
5. 核心区别:LangChain 是 “组件库”,覆盖大模型应用全链路;LangGraph 是 “流程编排引擎”,专注复杂闭环工作流,依赖 LangChain;
6. LangGraph 通过节点角色划分和状态共享实现多智能体交互。def researcher_agent(state):
    # 调用工具获取数据,更新状态
    state["research_data"] = call_search_tool(state["query"])
    return state

def analyst_agent(state):
    # 分析数据,生成结论,更新状态
    state["analysis_result"] = analyze_data(state["research_data"])
    return state

# 定义多智能体协作流程
graph.add_node("researcher", researcher_agent)
graph.add_node("analyst", analyst_agent)
graph.add_edge("researcher", "analyst")

【第6节】记忆对话的Memory的类型


1. ConversationBufferMemory:描述:存储按顺序的对话历史;适用场景:简单对话
2. ConversationBufferWindowMemory:描述:存储固定大小的对话窗口,保留最近 N 条对话;适用场景:长对话,保留最新的对话
3. ChatMessageHistory:描述:记录对话的每条消息(更细粒度的历史);适用场景:复杂聊天场景
4. EntityMemory:描述:记录和处理实体信息(如人物、地点等);适用场景:需要记住实体的场景
5. MapMemory:描述:存储键值对,适用于状态管理,适用场景:需要键值对存储的场景
6. CustomMemory:描述:自定义的记忆类型;适用场景:特定需求


【第7节】Prompt 设计原则和优化方法


一、 设计原则
清晰明确:界定任务目标、输出格式、约束条件,无歧义表述。
指令前置:核心指令置于开头,优先引导模型聚焦任务。
上下文适配:提供必要的背景信息、领域知识或对话历史。
格式约束:明确输出格式,降低后续处理成本。
简洁性:剔除无关信息,避免注意力分散。
可验证性:要求输出附带依据、来源或推理过程。
二、 优化方法
迭代式优化:测试 - 反馈 - 调整,循环提升 Prompt 质量。
角色设定:赋予模型专业角色,锚定知识范围与语言风格。
Few-Shot 提示:嵌入输入 - 输出示例,传递任务逻辑。
任务拆解:拆分复杂任务为简单子任务,分步引导完成。
约束强化:明确禁止项与边界条件,限定内容范围、长度、合规要求。
关键词强调:标注核心关键词,引导模型重点关注。

【第8节】ReAct Agent 概念


一、 定义
ReAct Agent 是一种基于大语言模型的智能体框架,通过交替执行推理(Reasoning)和行动(Acting)的循环(TAO 循环)来完成任务。其核心设计源自 2023 年 ICLR 会议论文《ReAct: Synergizing Reasoning and Acting in Language Models》。
二、 核心原理与设计
1. TAO 循环机制
思考(Thought):分析问题并规划行动路径。
行动(Action):调用工具(如搜索引擎、API 等)执行具体操作。
观察(Observation):评估行动结果并反馈至下一轮循环,直至任务完成。
2. 优势
结合内部推理与外部工具,减少模型幻觉。
具备动态决策能力,支持多工具协同和实时环境适应。

【第9节】ReAct Agent 图解

ReAct (Reasoning + Acting) 是目前最经典的智能体模式。它的逻辑很像人类解决陌生问题:思考 -> 行动 -> 观察 -> 再思考
ReAct范式

核心Prompt设计

ReAct的灵魂在于Prompt,你必须教会它“按格式说话”:

REACT_PROMPT = """
尽你所能回答以下问题。你可以使用以下工具:
[Search]: 用于搜索未知信息

请严格遵循以下格式:
Question: 需要回答的问题
Thought: 你现在的思考过程
Action: [Search]
Action Input: 搜索的关键词
Observation: 工具返回的结果
... (重复 Thought/Action/Observation)
Final Answer: 最终答案
"""

它不是一次性把事做完,而是像走迷宫一样,一步步试探。

核心代码逻辑

这就是ReAct的“引擎”部分,一个简单的while循环就能实现:

def react_agent(question):
    prompt = REACT_PROMPT + f"\nQuestion: {question}"
    
    while True:
        # 1. 让LLM思考并决定行动
        response = get_completion(prompt)
        
        # 2. 如果LLM决定结束,直接返回
        if "Final Answer:" in response:
            return response.split("Final Answer:")[-1]
        
        # 3. 解析LLM想调用的工具和参数
        action, action_input = parse_action(response) # 简单的正则提取
        
        # 4. 执行工具(Hands)
        observation = search(action_input)
        
        # 5. 将执行结果反馈给LLM(闭环关键!)
        prompt += f"\n{response}\nObservation: {observation}"

点评: ReAct最强的地方在于容错。如果第一步搜错了,LLM看到Observation不对,会在下一轮Thought里自我纠正。

【第10节】MCP 解析

MCP 的本质是通过客户端将用户的 Prompt 与可用工具列表一并发送给 LLM。LLM 在理解意图后,会返回需要调用的工具名称及其对应参数。随后,MCP 客户端通过定义好的统一接口调用对应工具,完成实际执行。

用户输入 Query
        │
        ▼
MCP 客户端构造请求(Prompt + 工具列表)
        │
        ▼
       LLM
        │
        ▼
解析 Prompt,返回工具名 + 参数
        │
        ▼
MCP 客户端通过统一接口调用对应工具
        │
        ▼
     工具执行并返回结果复制

以官方的client 代码举例,通过self.session.list_tools()方法获取所有的tool,然后构建一个Claudi api call,让大语言模型去判断是否调用工具

 """Process a query using Claude and available tools"""
    messages = [
        {
            "role": "user",
            "content": query
        }
    ]

    response = await self.session.list_tools()
    available_tools = [{
        "name": tool.name,
        "description": tool.description,
        "input_schema": tool.inputSchema
    } for tool in response.tools]

    # Initial Claude API call
    response = self.anthropic.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=1000,
        messages=messages,
        tools=available_tools
    )

接下来如果返回内容中content的类型是tool_use,则获取tool的名称及入参,然后调用call_tool方法(mcp库提供),进行方法调用,并获得最终的结果

 assistant_message_content = []
    for content in response.content:
        if content.type == 'text':
            final_text.append(content.text)
            assistant_message_content.append(content)
        elif content.type == 'tool_use':
            tool_name = content.name
            tool_args = content.input

            # Execute tool call
            result = await self.session.call_tool(tool_name, tool_args)
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐