Hello Agents
Hello Agents
🤖 《从零开始构建智能体》
从基础理论到实践应用,系统掌握智能体系统的设计与实现。
涵盖 Agent 原理 · 经典范式 · 框架开发 · 综合案例全流程

✨ 你将收获

📖

完全免费开源

Datawhale 开源社区出品,所有内容完全免费,与社区共同成长

🔍

理解核心原理

深入理解 Agent 概念、发展历史与经典范式,建立扎实理论基础

🏗️

动手实现

掌握主流低代码平台和 Agent 代码框架的实际应用与开发

🛠️

自研框架

从零构建自己的 Agent 框架,基于 OpenAI 原生 API 实现

⚙️

掌握高级技能

逐步实现上下文工程、Memory、协议、评估等系统性技术

🤝

模型训练

掌握 Agentic RL,从 SFT 到 GRPO 全流程实战 LLM 训练

🚀

真实案例驱动

实战开发智能旅行助手、赛博小镇等综合项目

💼

求职面试

学习 Agent 相关求职面试题,助力职业发展

📖 内容导航

章节核心内容状态
第一部分:智能体与语言模型基础
第一章 初识智能体Agent 定义、类型、范式与应用✅ 已完成
第二章 智能体发展史从符号主义到 LLM 驱动 Agent 的演变✅ 已完成
第三章 大语言模型基础Transformer、提示词、主流 LLM 及其局限性✅ 已完成
第二部分:构建你的大语言模型智能体
第四章 智能体经典范式构建动手实现 ReAct、Plan-and-Solve、Reflection✅ 已完成
第五章 基于低代码平台的智能体搭建了解 Coze、Dify、n8n 等低代码 Agent 平台✅ 已完成
第六章 框架开发实践AutoGen、AgentScope、LangGraph 等主流框架应用✅ 已完成
第七章 构建你的Agent框架从零构建 Agent 框架✅ 已完成
第三部分:高级知识扩展
第八章 记忆与检索记忆系统、RAG、存储✅ 已完成
第九章 上下文工程持续交互的"上下文理解"✅ 已完成
第十章 智能体通信协议MCP、A2A、ANP 等协议分析✅ 已完成
第十一章 Agentic-RL从 SFT 到 GRPO 全流程实战 LLM 训练✅ 已完成
第十二章 智能体性能评估核心指标、基准测试与评估框架✅ 已完成
第四部分:综合案例进阶
第十三章 智能旅行助手MCP 和多 Agent 协作的实际应用✅ 已完成
第十四章 自动化深度研究智能体DeepResearch Agent 复现与分析✅ 已完成
第十五章 构建赛博小镇将 Agent 与游戏结合,模拟社会动态✅ 已完成
第五部分:毕业设计及未来展望
第十六章 毕业设计构建你自己的完整多 Agent 应用✅ 已完成

💡 如何学习

欢迎,未来的智能系统构建者!本项目兼顾理论与实践,帮助你系统掌握从单智能体到多智能体系统的设计与开发全过程。尤其适合具有一定编程基础的 AI 开发者、软件工程师、学生,以及对前沿 AI 技术有浓厚兴趣的自学者。

在学习本项目之前,我们希望你具备基本的 Python 编程能力,以及对大语言模型的基本概念理解(例如知道如何通过 API 调用 LLM)。本项目的重点在于应用与构建,因此不需要深厚的算法或模型训练背景。

💡 学习建议:Agent 是一个极度依赖实践的快速发展领域。为了达到最佳学习效果,强烈建议你亲自运行、调试甚至修改项目中提供的每一段代码。所有配套代码都在项目的 code 文件夹中。
HELLO AGENTS
前言
写在前面的话
项目起源、背景与读者建议

📌 项目起源

如果说 2024 年是"百模大战"之年,那么 2025 年无疑迎来了"智能体元年"。技术焦点正在从训练更大的基础模型,转向构建更聪明的 Agent 应用。然而,系统化、实践导向的教程极为稀缺。

为此,我们发起了 Hello-Agents 项目,希望为社区提供一份从零开始构建 Agent 系统的完整指南,做到理论与实践并重。

🎯 项目定位

Hello-Agents 是来自 Datawhale 社区的系统化 Agent 学习教程。当前 Agent 开发主要分为两大流派:一是以 Dify、Coze、n8n 为代表的软件工程型 Agent,本质上是以 LLM 为数据处理后端的流程驱动软件开发;二是 AI 原生 Agent,真正由 AI 驱动的智能体。

本教程旨在引导你深入理解并构建后者——真正的 AI Native Agent。教程将带你穿透框架的表面,从 Agent 的核心原理出发,深入其核心架构,理解其经典范式,最终构建属于你自己的多 Agent 应用。

🌟 我们相信,最好的学习方式是动手实践。我们希望本教程能成为你探索 Agent 世界的起点,将你从大语言模型的"使用者"转变为 Agent 系统的"构建者"。

👥 目标读者

  • 具有一定编程基础的 AI 开发者、软件工程师、学生
  • 对前沿 AI 技术有浓厚兴趣的自学者
  • 希望从"使用 LLM"升级为"构建 Agent"的开发者
  • 准备 Agent 相关岗位求职的候选人

📋 前置知识

  • 基本的 Python 编程能力
  • 对大语言模型的基本概念理解(知道如何通过 API 调用 LLM 即可)
  • 不需要深厚的算法或模型训练背景
⚠️ 注意:本教程重点在于应用与构建,对纯数学理论推导涉及较少。如果你需要深入的模型训练知识,建议配合其他资源一起学习。
第一部分 · 智能体与语言模型基础
第一章
初识智能体
Agent 定义、类型、范式与应用场景全面介绍

🤖 什么是智能体(Agent)?

智能体(Agent)是一个能够感知环境、做出决策并采取行动以实现特定目标的计算实体。与传统软件不同,Agent 具有自主性反应性主动性社会能力

在 AI 领域,现代 LLM Agent 是以大语言模型为"大脑",能够使用工具、规划任务、与环境交互并完成复杂任务的系统。

💡 一个简单的类比:如果 LLM 是一个知识渊博的专家,那么 Agent 就是这个专家加上一双手、一双眼睛和一个行动计划——它不仅能回答问题,还能主动解决问题。

🏷️ Agent 的核心要素

1. 感知(Perception)

Agent 通过各种输入(文本、图像、传感器数据等)感知周围环境的状态。LLM Agent 通常通过用户消息、工具输出、记忆系统等获取信息。

2. 规划(Planning)

Agent 需要将复杂任务分解为可执行的子步骤,并制定行动计划。这是 LLM Agent 的核心能力,也是区别于普通 LLM 的关键。

3. 行动(Action)

Agent 通过调用工具(API、代码执行、搜索等)或与其他 Agent 交互来执行具体操作,改变环境状态。

4. 记忆(Memory)

Agent 需要维护短期记忆(当前对话上下文)和长期记忆(持久化的知识和经验),以支持连续交互和学习。

📊 Agent 的类型

  • 简单反应型 Agent:根据当前感知直接做出响应,无内部状态
  • 基于模型的 Agent:维护内部世界模型,考虑行动后果
  • 基于目标的 Agent:以目标为导向进行规划和行动
  • 基于效用的 Agent:通过效用函数权衡不同行动方案
  • 学习型 Agent:能从经验中学习并改进行为
  • 多 Agent 系统:多个 Agent 协同工作,解决复杂问题

🌟 LLM Agent 的应用场景

  • 🔍 信息检索与研究:自动搜索、总结、分析大量信息
  • 💻 代码开发辅助:代码生成、调试、测试自动化
  • 📊 数据分析:自动化数据处理和洞察提取
  • 🗣️ 客户服务:智能客服和问题解决
  • 🎯 任务自动化:工作流程自动化和任务委托
  • 🎮 游戏 NPC:具有真实行为的游戏角色
Python
from openai import OpenAI

client = OpenAI()

def simple_agent(user_query: str) -> str:
    """一个最简单的 LLM Agent 示例"""
    messages = [
        {"role": "system", "content": "你是一个智能助手,能够回答用户的问题并执行简单任务。"},
        {"role": "user", "content": user_query}
    ]
    
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=messages
    )
    
    return response.choices[0].message.content

# 测试
result = simple_agent("帮我分析一下智能体的发展趋势")
print(result)
第一部分 · 智能体与语言模型基础
第二章
智能体发展史
从符号主义到 LLM 驱动 Agent 的演变历程

📅 智能体发展时间线

智能体的发展历史是 AI 研究的一条重要脉络,从早期的符号主义 AI 到今天以大语言模型为核心的现代 Agent,经历了数十年的演变。

🏛️ 第一阶段:符号主义 AI 时代(1950s-1980s)

早期 AI 研究以规则系统专家系统为主。这些系统依赖人工编写的逻辑规则来模拟智能行为。

  • STRIPS(1971):第一个真正意义上的 AI 规划系统
  • MYCIN(1974):医疗诊断专家系统,基于约 600 条规则
  • Shakey 机器人(1972):能够感知和规划的自主机器人
⚠️ 局限性:符号主义 Agent 高度依赖人工设计的规则,难以泛化到新场景,且无法处理不确定性和模糊信息。

🧠 第二阶段:机器学习与强化学习(1990s-2010s)

随着机器学习的兴起,Agent 开始从数据中学习行为策略,而不是依赖预先编写的规则。

  • TD-Gammon(1992):通过自我对弈学会玩西洋双陆棋
  • DeepBlue(1997):击败国际象棋世界冠军卡斯帕罗夫
  • AlphaGo(2016):击败围棋世界冠军,深度强化学习的里程碑

🌐 第三阶段:LLM Agent 时代(2020s至今)

GPT 系列大语言模型的出现彻底改变了 Agent 的设计范式。LLM 作为强大的"推理引擎",使 Agent 获得了前所未有的通用能力。

  • GPT-3(2020):展示了 LLM 的少样本学习能力
  • ChatGPT(2022):对话式 AI 的爆发,RLHF 训练范式
  • ReAct(2022):首个将推理与行动结合的 Agent 范式
  • AutoGPT(2023):自主 Agent 概念的大规模普及
  • OpenAI Assistants API(2023):官方 Agent 构建平台
  • Claude MCP(2024):标准化 Agent 工具调用协议

🔮 发展趋势

  • 从单 Agent 到多 Agent 协作系统
  • 从文本输入到多模态感知(视觉、听觉)
  • 从被动响应到主动规划与长期目标追求
  • 从有限工具到开放式工具生态
  • Agent 的自我进化与持续学习
第一部分 · 智能体与语言模型基础
第三章
大语言模型基础
Transformer 架构、提示词工程、主流 LLM 及其局限性

🏗️ Transformer 架构

Transformer 是现代大语言模型的核心架构,由 Google 在 2017 年的论文《Attention is All You Need》中提出。其核心机制是自注意力(Self-Attention),允许模型在处理每个 token 时考虑序列中所有其他 token 的信息。

核心组件

  • 多头自注意力(Multi-Head Self-Attention):从多个维度捕捉 token 间的关系
  • 前馈神经网络(FFN):对每个位置独立进行非线性变换
  • 层归一化(Layer Norm):稳定训练过程
  • 位置编码(Positional Encoding):为模型提供序列顺序信息

✍️ 提示词工程(Prompt Engineering)

提示词工程是构建高效 LLM Agent 的关键技能,涉及如何设计输入,使 LLM 产生期望的输出。

主要技术

  • 零样本提示(Zero-shot):直接描述任务,无需示例
  • 少样本提示(Few-shot):提供少量示例帮助模型理解任务
  • 思维链(Chain-of-Thought):引导模型逐步推理
  • 角色设定(Role Playing):为 LLM 设定特定的身份和行为模式
  • 结构化输出:指定 JSON 等结构化格式的输出
Prompt Engineering
System: 你是一个专业的智能体开发专家。请按照以下格式回答:
{
  "分析": "...",
  "行动计划": ["步骤1", "步骤2", ...],
  "预期结果": "..."
}

User: 我需要构建一个能够自动整理邮件的智能体,请帮我分析并制定方案。

🤖 主流大语言模型对比

  • GPT-4o(OpenAI):多模态,强推理,Agent 生态完善
  • Claude 3.5(Anthropic):长上下文,安全性强,工具调用能力优秀
  • Gemini 1.5(Google):超长上下文,多模态,与 Google 生态深度集成
  • Qwen(阿里):中文能力强,开源版本可本地部署
  • DeepSeek-V3:国产开源,性价比极高

⚠️ LLM 的局限性与 Agent 的意义

  • 知识截止日期:LLM 无法获取训练数据截止后的信息 → Agent 通过搜索工具解决
  • 计算局限:LLM 不擅长精确计算 → Agent 调用计算器/代码执行工具
  • 无状态性:每次对话独立 → Agent 引入记忆系统
  • 幻觉问题:LLM 可能产生虚假信息 → Agent 通过验证工具核实
第二部分 · 构建你的大语言模型智能体
第四章
智能体经典范式构建
动手实现 ReAct、Plan-and-Solve、Reflection 三大核心范式

🔄 ReAct 范式

ReAct(Reasoning + Acting)是最具影响力的 LLM Agent 范式之一,由 Yao 等人于 2022 年提出。它将推理(Reasoning)行动(Acting)交织进行,使 Agent 能够在与环境交互中动态调整策略。

ReAct 循环

  • Thought(思考):LLM 分析当前状态,规划下一步行动
  • Action(行动):调用特定工具或执行操作
  • Observation(观察):接收工具执行结果
  • 重复循环直至任务完成
Python - ReAct Agent
import json
from openai import OpenAI

client = OpenAI()

# 定义工具
tools = [
    {
        "type": "function",
        "function": {
            "name": "search_web",
            "description": "搜索互联网获取最新信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {"type": "string", "description": "搜索关键词"}
                },
                "required": ["query"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "calculate",
            "description": "执行数学计算",
            "parameters": {
                "type": "object",
                "properties": {
                    "expression": {"type": "string", "description": "数学表达式"}
                },
                "required": ["expression"]
            }
        }
    }
]

def react_agent(user_query: str) -> str:
    messages = [
        {"role": "system", "content": "你是一个智能助手。你可以使用工具来帮助用户解决问题。"},
        {"role": "user", "content": user_query}
    ]
    
    while True:
        response = client.chat.completions.create(
            model="gpt-4o",
            messages=messages,
            tools=tools,
            tool_choice="auto"
        )
        
        message = response.choices[0].message
        
        if message.tool_calls:
            # 处理工具调用
            messages.append(message)
            for tool_call in message.tool_calls:
                result = execute_tool(tool_call)
                messages.append({
                    "role": "tool",
                    "tool_call_id": tool_call.id,
                    "content": result
                })
        else:
            return message.content

📋 Plan-and-Solve 范式

Plan-and-Solve 范式将任务分为两个阶段:首先制定完整计划,然后逐步执行。这种方式适合需要长期规划的复杂任务。

  • 计划阶段:LLM 将任务分解为有序的子任务列表
  • 执行阶段:按顺序执行每个子任务,收集结果
  • 整合阶段:汇总所有子任务结果,形成最终答案

🔁 Reflection 范式

Reflection 让 Agent 能够审视自己的输出,发现错误并进行改进。这大幅提升了复杂任务的完成质量。

  • 生成(Generate):产生初始输出
  • 反思(Reflect):评估输出质量,找出问题
  • 改进(Refine):基于反思改进输出
💡 实践建议:对于简单任务使用 ReAct,对于需要长期规划的任务使用 Plan-and-Solve,对于需要高质量输出的任务使用 Reflection。三种范式也可以组合使用。
第二部分 · 构建你的大语言模型智能体
第五章
基于低代码平台的智能体搭建
了解并使用 Coze、Dify、n8n 等主流低代码 Agent 平台

🎛️ 为什么选择低代码平台?

低代码 Agent 平台让没有深厚编程背景的用户也能快速构建功能强大的 Agent 应用。这些平台通过可视化界面、预置组件和模板,大幅降低了 Agent 开发的门槛。

🔧 Coze(扣子)

字节跳动推出的 Agent 开发平台,提供丰富的插件生态和简单易用的对话流设计界面。

  • 插件市场:数百个预置插件,覆盖搜索、计算、内容生成等
  • 工作流:可视化编排复杂的多步骤任务流程
  • 知识库:上传文档构建私有知识库
  • 发布渠道:一键发布到微信、飞书、Discord 等平台

🔧 Dify

开源的 LLM 应用开发平台,支持私有化部署,是企业级 Agent 应用的热门选择。

  • 应用类型:支持对话助手、文本生成、Agent 等多种应用类型
  • RAG 能力:强大的文档处理和检索增强生成能力
  • 工作流编排:可视化节点式工作流,支持条件分支和循环
  • API 集成:提供标准 API,方便与现有系统集成

🔧 n8n

强大的工作流自动化平台,支持 400+ 服务集成,适合构建复杂的自动化 Agent 工作流。

  • 节点连接:通过拖拽连接不同服务的节点
  • 触发器:支持 Webhook、定时任务、事件驱动等多种触发方式
  • 代码节点:在需要时插入自定义 JavaScript 代码
  • 自托管:完全开源,可在自己的服务器上运行

⚖️ 平台对比

📊 选型建议: 快速原型验证 → Coze; 企业私有化部署 → Dify; 复杂自动化工作流 → n8n; 需要完全定制化 → 编写代码自建框架(见第七章)
第二部分 · 构建你的大语言模型智能体
第六章
框架开发实践
AutoGen、AgentScope、LangGraph 等主流 Agent 框架的应用

🔷 LangChain / LangGraph

LangChain 是最受欢迎的 LLM 应用开发框架,而 LangGraph 在其基础上增加了状态图(State Graph)概念,特别适合构建需要复杂控制流的 Agent 系统。

Python - LangGraph
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from typing import TypedDict, List

class AgentState(TypedDict):
    messages: List[dict]
    next_step: str

def create_agent_graph():
    llm = ChatOpenAI(model="gpt-4o")
    graph = StateGraph(AgentState)
    
    # 添加节点
    graph.add_node("reason", reason_node)
    graph.add_node("act", action_node)
    graph.add_node("observe", observe_node)
    
    # 添加边
    graph.add_edge("reason", "act")
    graph.add_edge("act", "observe")
    graph.add_conditional_edges(
        "observe",
        should_continue,
        {"continue": "reason", "end": END}
    )
    
    graph.set_entry_point("reason")
    return graph.compile()

🔷 AutoGen

微软开源的多 Agent 对话框架,专注于多 Agent 协作场景。其核心是让多个具有不同角色的 Agent 相互对话来解决复杂问题。

  • ConversableAgent:可以互相对话的基础 Agent 类型
  • AssistantAgent:具有代码生成和执行能力的助手 Agent
  • UserProxyAgent:代表用户参与对话的代理 Agent
  • GroupChat:支持多个 Agent 参与的群体对话

🔷 AgentScope

阿里开源的多 Agent 框架,设计目标是让多 Agent 应用的开发更加简洁、可靠。

  • 消息机制:基于 Msg 的统一消息格式
  • Pipeline:灵活的 Agent 协作流水线
  • 分布式:原生支持分布式多 Agent 系统

💡 如何选择框架?

  • 需要成熟生态和大量示例 → LangChain/LangGraph
  • 专注多 Agent 协作 → AutoGen
  • 偏好中文文档和国内生态 → AgentScope
  • 想从底层理解 Agent → 自建框架(第七章)
第二部分 · 构建你的大语言模型智能体
第七章
构建你的 Agent 框架
从零构建一个完整的 Agent 框架 —— HelloAgents

🎯 为什么要自建框架?

理解 Agent 框架的最好方式是自己实现一个。通过从零构建,你将深刻理解每一个组件的作用,而不是停留在"使用轮子"的阶段。本章将带你构建 HelloAgents —— 一个基于 OpenAI 原生 API 的简洁 Agent 框架。

🏗️ HelloAgents 架构设计

核心组件

  • Agent 核心:包含 LLM 调用、工具管理、消息历史
  • 工具系统:标准化工具注册和调用接口
  • 记忆系统:短期记忆和长期记忆管理
  • 规划器:任务分解和执行计划生成
Python - HelloAgents 核心
from openai import OpenAI from typing import Callable, Any import json class Tool: def __init__(self, func: Callable, name: str, description: str, parameters: dict): self.func = func self.name = name self.description = description self.parameters = parameters def to_openai_schema(self) -> dict: return { "type": "function", "function": { "name": self.name, "description": self.description, "parameters": self.parameters } } def __call__(self, **kwargs) -> Any: return self.func(**kwargs) class HelloAgent: def __init__(self, model: str = "gpt-4o", system_prompt: str = ""): self.client = OpenAI() self.model = model self.system_prompt = system_prompt self.tools: dict[str, Tool] = {} self.messages: list[dict] = [] if system_prompt: self.messages.append({"role": "system", "content": system_prompt}) def register_tool(self, tool: Tool): """注册工具""" self.tools[tool.name] = tool def run(self, user_input: str) -> str: """运行 Agent""" self.messages.append({"role": "user", "content": user_input}) while True: response = self.client.chat.completions.create( model=self.model, messages=self.messages, tools=[t.to_openai_schema() for t in self.tools.values()] or None, tool_choice="auto" if self.tools else None ) assistant_msg = response.choices[0].message self.messages.append(assistant_msg) if not assistant_msg.tool_calls: return assistant_msg.content # 执行工具调用 for tool_call in assistant_msg.tool_calls: tool_name = tool_call.function.name tool_args = json.loads(tool_call.function.arguments) if tool_name in self.tools: result = self.tools[tool_name](**tool_args) self.messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": str(result) })

🔧 使用 HelloAgents

Python - 示例使用
agent = HelloAgent( model="gpt-4o", system_prompt="你是一个专业的数据分析助手" ) # 注册工具 def get_weather(city: str) -> str: return f"{city}今天晴,气温 25°C" weather_tool = Tool( func=get_weather, name="get_weather", description="获取指定城市的天气信息", parameters={ "type": "object", "properties": { "city": {"type": "string", "description": "城市名称"} }, "required": ["city"] } ) agent.register_tool(weather_tool) result = agent.run("北京今天天气怎么样?") print(result)
💡 完整代码和更多示例请访问 github.com/jjyaoao/helloagents
第三部分 · 高级知识扩展
第八章
记忆与检索
记忆系统设计、RAG 技术原理与实践、向量存储

🧠 Agent 的记忆系统

记忆是 Agent 实现持续学习和跨会话知识积累的关键。参考人类记忆系统,Agent 的记忆可以分为以下几类:

记忆类型

  • 感觉记忆(Sensory Memory):原始输入信息的短暂留存,如当前输入的 token 流
  • 短期记忆(Working Memory):当前对话上下文,即 messages 列表
  • 长期记忆(Long-term Memory):跨会话持久化的知识,存储在数据库或向量库中
  • 程序性记忆:技能和行为模式,通过 few-shot 示例或 fine-tuning 实现

🔍 检索增强生成(RAG)

RAG(Retrieval-Augmented Generation)是解决 LLM 知识局限性的核心技术,通过在生成时检索相关外部知识来提升答案质量。

RAG 基础流程

  • 文档处理:将文档切分为合适大小的 chunk
  • 向量化:使用 Embedding 模型将 chunk 转为向量
  • 存储:将向量存入向量数据库(如 Chroma、Pinecone、Faiss)
  • 检索:将用户问题向量化,检索最相关的 chunk
  • 生成:将检索结果注入 Prompt,LLM 据此生成答案
Python - 简单 RAG 实现
from openai import OpenAI
import chromadb

client = OpenAI()
chroma = chromadb.Client()
collection = chroma.create_collection("knowledge_base")

def add_documents(docs: list[str]):
    """将文档添加到知识库"""
    embeddings = client.embeddings.create(
        model="text-embedding-3-small",
        input=docs
    ).data
    
    collection.add(
        documents=docs,
        embeddings=[e.embedding for e in embeddings],
        ids=[f"doc_{i}" for i in range(len(docs))]
    )

def rag_query(question: str, top_k: int = 3) -> str:
    """RAG 问答"""
    # 检索相关文档
    q_embedding = client.embeddings.create(
        model="text-embedding-3-small",
        input=[question]
    ).data[0].embedding
    
    results = collection.query(
        query_embeddings=[q_embedding],
        n_results=top_k
    )
    
    context = "\n".join(results['documents'][0])
    
    # 生成答案
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": f"基于以下上下文回答问题:\n{context}"},
            {"role": "user", "content": question}
        ]
    )
    return response.choices[0].message.content

📈 高级 RAG 技术

  • 混合检索:结合向量检索和 BM25 关键词检索
  • 重排序(Reranking):对检索结果进行二次排序
  • 多跳检索:通过多次检索解决需要推理的复杂问题
  • 自适应检索:根据问题类型动态调整检索策略
第三部分 · 高级知识扩展
第九章
上下文工程
持续交互的"上下文理解"—— 如何高效管理 LLM 的上下文窗口

📐 什么是上下文工程?

上下文工程(Context Engineering)是指系统化地设计、管理和优化输入给 LLM 的上下文信息,以最大化模型在有限上下文窗口内的输出质量。

💡 Andrej Karpathy 的定义:"上下文工程是一门微妙的艺术与科学,即在正确的时间将正确的信息填充到上下文窗口中。"

🗂️ 上下文窗口的组成

  • 系统提示(System Prompt):定义 Agent 的角色、能力和行为准则
  • 工具定义:告诉 LLM 可用的工具及其参数
  • 对话历史:记录用户与 Agent 的交互历史
  • 外部知识:从 RAG 系统检索的相关文档
  • 工具输出:之前工具调用的结果
  • 用户输入:当前用户的消息

⚙️ 核心技术

1. 对话压缩

当对话历史过长超出上下文窗口时,需要对历史进行压缩:

  • 滑动窗口:只保留最近 N 轮对话
  • 摘要压缩:用 LLM 对历史对话生成摘要
  • 重要性过滤:根据重要性评分保留关键信息

2. 动态上下文注入

根据当前问题动态决定注入哪些上下文:

  • 根据用户意图检索相关记忆
  • 根据任务类型选择相关工具
  • 根据对话阶段调整系统提示

3. KV Cache 优化

利用 LLM 的 KV Cache 机制,将不变的系统提示和工具定义放在上下文最前面,可以显著降低 API 调用成本。

💡 最佳实践:在设计上下文时,始终把最重要的信息放在最前面(系统提示)和最后面(用户最新输入)。LLM 对上下文的注意力在首尾位置最强。
第三部分 · 高级知识扩展
第十章
智能体通信协议
MCP、A2A、ANP 等协议深度分析与实践

🌐 为什么需要 Agent 通信协议?

随着 Agent 系统日趋复杂,不同 Agent 之间、Agent 与工具之间的通信成为关键问题。通信协议解决了互操作性问题,让不同开发者构建的 Agent 和工具能够无缝协作。

🔌 MCP(Model Context Protocol)

由 Anthropic 提出的开放标准协议,定义了 LLM 应用与外部工具/数据源之间的通信方式。

  • 核心概念:Server(工具提供方)和 Client(AI 应用)
  • 传输层:支持 stdio 和 HTTP/SSE 两种传输方式
  • 能力类型:Tools(工具)、Resources(资源)、Prompts(提示词模板)
  • 生态:已有数百个官方和社区 MCP Server
Python - MCP Server 示例
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Tool, TextContent
import mcp.types as types

app = Server("my-mcp-server")

@app.list_tools()
async def list_tools() -> list[Tool]:
    return [
        Tool(
            name="get_stock_price",
            description="获取股票实时价格",
            inputSchema={
                "type": "object",
                "properties": {
                    "symbol": {"type": "string", "description": "股票代码"}
                },
                "required": ["symbol"]
            }
        )
    ]

@app.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
    if name == "get_stock_price":
        symbol = arguments["symbol"]
        # 实际调用股票 API
        price = fetch_stock_price(symbol)
        return [TextContent(type="text", text=f"{symbol} 当前价格: {price}")]

async def main():
    async with stdio_server() as streams:
        await app.run(*streams)

🤝 A2A(Agent-to-Agent)协议

Google 提出的 Agent 间通信协议,专注于不同 AI Agent 系统之间的互操作性。A2A 定义了 Agent 发现、能力声明和任务委托的标准方式。

🔗 ANP(Agent Network Protocol)

面向开放网络的 Agent 通信协议,支持 Agent 在开放互联网上进行去中心化的发现和通信。

📌 协议选择建议:工具集成 → MCP;多 Agent 企业系统 → A2A;开放网络 Agent 生态 → ANP
第三部分 · 高级知识扩展
第十一章
Agentic-RL
从 SFT 到 GRPO 全流程实战 LLM 训练

🎓 为什么需要 Agent 训练?

通用 LLM 在特定 Agent 任务上的表现往往不够理想。通过针对性的训练,可以让模型学会更好地使用工具、进行规划和执行复杂任务。

📚 训练范式概述

1. 监督微调(SFT)

使用高质量的 Agent 轨迹数据对模型进行监督训练,让模型学习正确的行为模式。

  • 数据格式:(任务,工具调用序列,最终结果)三元组
  • 优势:训练稳定,数据利用效率高
  • 劣势:需要大量高质量标注数据,难以超越专家演示

2. RLHF(基于人类反馈的强化学习)

通过人类对模型输出的评分来优化模型行为,ChatGPT 使用的核心训练技术。

3. GRPO(Group Relative Policy Optimization)

DeepSeek 提出的高效强化学习算法,是 DeepSeek-R1 成功的关键技术。

  • 对同一问题采样多个输出,组内相对评分
  • 无需单独的 Critic 模型,显著降低计算成本
  • 特别适合数学、代码等有明确正确答案的任务
Python - GRPO 奖励函数示例
def compute_reward(completions: list[str], ground_truth: str) -> list[float]: """ GRPO 奖励函数示例 对同一问题的多个模型输出计算奖励 """ rewards = [] for completion in completions: # 格式奖励:输出是否包含思维链 format_reward = 1.0 if "" in completion else 0.0 # 正确性奖励:最终答案是否正确 if extract_answer(completion) == ground_truth: correctness_reward = 1.0 else: correctness_reward = 0.0 rewards.append(0.3 * format_reward + 0.7 * correctness_reward) return rewards

🛠️ Agent 训练最佳实践

  • 从小模型和小数据集开始实验,验证流程正确性
  • 奖励函数设计是成败关键,需要仔细思考
  • 使用 Weights & Biases 等工具监控训练过程
  • 定期在测试集上评估,防止过拟合
第三部分 · 高级知识扩展
第十二章
智能体性能评估
核心指标、基准测试与评估框架全解析

📏 为什么评估很重要?

没有评估就没有改进。在 Agent 系统中,评估尤其困难——Agent 的输出往往是多步骤的轨迹,而不是单一的答案,且很多任务没有唯一正确答案。

📊 核心评估维度

  • 任务成功率(Task Success Rate):Agent 完成任务的比例
  • 步骤效率(Step Efficiency):完成任务所需的平均步骤数
  • 工具使用准确性(Tool Accuracy):正确选择和调用工具的比例
  • 幻觉率(Hallucination Rate):模型产生虚假信息的频率
  • 成本效率:每次任务的 token 消耗和 API 费用
  • 延迟(Latency):完成任务的平均时间

🏆 主流 Agent 基准测试

  • GAIA:测试 Agent 在真实世界任务中的综合能力
  • WebArena:评估 Agent 操作 Web 界面的能力
  • SWE-bench:评估 Agent 解决真实软件工程问题的能力
  • HotPotQA:多跳问答推理评估
  • AgentBench:多任务 Agent 综合评测

🔧 评估框架实践

Python - 简单评估框架
from dataclasses import dataclass from typing import Callable @dataclass class EvalResult: task_id: str success: bool steps: int tokens_used: int latency_ms: float error: str = None class AgentEvaluator: def __init__(self, agent, test_cases: list[dict]): self.agent = agent self.test_cases = test_cases def run(self) -> list[EvalResult]: results = [] for case in self.test_cases: import time start = time.time() try: output = self.agent.run(case["input"]) success = case["judge"](output) results.append(EvalResult( task_id=case["id"], success=success, steps=self.agent.step_count, tokens_used=self.agent.token_count, latency_ms=(time.time()-start)*1000 )) except Exception as e: results.append(EvalResult( task_id=case["id"], success=False, steps=0, tokens_used=0, latency_ms=(time.time()-start)*1000, error=str(e) )) return results def summarize(self, results: list[EvalResult]) -> dict: success_rate = sum(r.success for r in results) / len(results) avg_steps = sum(r.steps for r in results) / len(results) return { "success_rate": f"{success_rate:.1%}", "avg_steps": f"{avg_steps:.1f}", "total_tokens": sum(r.tokens_used for r in results) }
💡 评估建议:建立一套固定的评估集并在每次迭代时运行,这样才能追踪系统的真实进步。不要只看成功率,步骤效率和成本同样重要。
第四部分 · 综合案例进阶
第十三章
智能旅行助手
基于 MCP 和多 Agent 协作的智能旅行规划系统实战

🌍 项目概述

智能旅行助手是一个综合应用 MCP 工具协议和多 Agent 协作技术的实战项目。该系统能够根据用户需求,自动规划行程、查询航班酒店、生成旅行攻略。

🏗️ 系统架构

  • 主控 Agent:理解用户意图,协调其他子 Agent
  • 航班查询 Agent:通过 MCP 连接航班查询 API
  • 酒店推荐 Agent:根据偏好和预算推荐住宿
  • 景点规划 Agent:获取目的地景点信息和推荐路线
  • 预算计算 Agent:汇总并优化旅行总费用

🔧 核心 MCP 工具

  • search_flights(origin, dest, date) — 搜索可用航班
  • get_hotels(city, checkin, checkout, budget) — 查询酒店
  • get_attractions(city, interests) — 获取景点推荐
  • get_weather_forecast(city, dates) — 查询天气预报
  • calculate_budget(items) — 计算旅行预算
Python - 旅行助手主控流程
async def travel_agent_workflow(user_request: str) -> str: """ 旅行助手主控工作流 """ # 第一步:解析用户意图 parsed = await intent_parser.parse(user_request) # {destination: "东京", dates: ["2025-03-15", "2025-03-22"], budget: 15000} # 第二步:并行查询(提升效率) flights, hotels, weather = await asyncio.gather( flight_agent.search(parsed["origin"], parsed["destination"], parsed["dates"]), hotel_agent.search(parsed["destination"], parsed["dates"], parsed["budget"]), weather_agent.forecast(parsed["destination"], parsed["dates"]) ) # 第三步:景点规划 attractions = await attraction_agent.plan( city=parsed["destination"], duration=7, interests=parsed.get("interests", []) ) # 第四步:汇总生成旅行方案 plan = await planner_agent.generate( flights=flights, hotels=hotels, attractions=attractions, weather=weather, budget=parsed["budget"] ) return plan.to_markdown()
🗺️ 运行效果:用户输入"帮我规划下周去东京7天的旅行,预算15000元",系统将在30秒内生成包含航班推荐、酒店选择、每日行程和费用预算的完整旅行方案。
第四部分 · 综合案例进阶
第十四章
自动化深度研究智能体
DeepResearch Agent 复现与分析 —— 让 AI 像研究员一样工作

🔬 什么是 DeepResearch Agent?

DeepResearch 是 OpenAI 推出的深度研究功能,能够自主进行多轮网络搜索、阅读文献、整合信息,最终生成专业水准的研究报告。本章将复现其核心逻辑。

🔁 核心工作流程

  • 问题分析:将复杂研究问题分解为可搜索的子问题
  • 迭代搜索:多轮搜索,每轮根据上一轮结果优化搜索策略
  • 内容提取:从搜索结果中提取关键信息
  • 知识整合:将多个来源的信息整合为连贯的知识体系
  • 报告生成:基于整合的知识生成结构化研究报告
Python - DeepResearch 核心循环
class DeepResearchAgent: def __init__(self, max_iterations: int = 5): self.max_iterations = max_iterations self.knowledge_base = [] async def research(self, topic: str) -> str: # 1. 生成初始搜索计划 search_plan = await self.generate_search_plan(topic) for iteration in range(self.max_iterations): # 2. 执行搜索 search_results = await asyncio.gather(*[ self.web_search(query) for query in search_plan.queries ]) # 3. 提取和验证信息 extracted = await self.extract_information(search_results) self.knowledge_base.extend(extracted) # 4. 评估知识完整性 assessment = await self.assess_knowledge_gaps( topic=topic, knowledge=self.knowledge_base ) if assessment.is_sufficient: break # 5. 生成下一轮搜索计划 search_plan = await self.generate_next_plan(assessment.gaps) # 6. 生成最终报告 return await self.generate_report(topic, self.knowledge_base)

💡 关键技术点

  • 问题分解:使用树状结构将复杂问题分解为子问题
  • 查询优化:根据已有知识动态调整搜索查询
  • 信息去重:识别和合并来自不同来源的重复信息
  • 引用管理:维护信息来源引用,确保报告可溯源
第四部分 · 综合案例进阶
第十五章
构建赛博小镇
将 Agent 与游戏结合,模拟真实的社会动态与群体行为

🏙️ 赛博小镇是什么?

赛博小镇(Cyber Town)是受斯坦福大学 "Smallville" 论文启发的多 Agent 社会模拟项目。在一个虚拟小镇中,多个具有独立人格、记忆和目标的 Agent 共同生活,产生涌现的社会行为。

🎮 系统架构

游戏世界

  • 地图系统:包含家、咖啡馆、图书馆、公园等场所
  • 时间系统:模拟一天 24 小时的时间流逝
  • 交互系统:Agent 可以与物品和其他 Agent 交互

Agent 设计

  • 角色设定:每个 Agent 有独特的性格、职业、兴趣
  • 记忆系统:Agent 记住过去的经历和对话
  • 计划系统:Agent 根据目标制定每日计划
  • 社交系统:Agent 可以建立关系、进行对话
Python - 小镇居民 Agent
class TownResident: def __init__(self, name: str, persona: str): self.name = name self.persona = persona self.memories = MemoryStream() self.location = "home" self.schedule = [] async def perceive(self, environment: dict) -> list[str]: """感知当前环境""" observations = [] for entity in environment.get("entities", []): if self.is_relevant(entity): observations.append(f"我看到 {entity['description']}") await self.memories.add(entity) return observations async def plan_day(self) -> list[dict]: """规划当天行程""" context = f"你是 {self.name}。{self.persona}\n" context += f"今天的记忆:{await self.memories.get_recent(5)}\n" schedule = await llm.generate_schedule( context=context, current_time="08:00", available_locations=TOWN_LOCATIONS ) self.schedule = schedule return schedule async def react(self, observation: str) -> str: """对观察到的事件做出反应""" relevant_memories = await self.memories.retrieve(observation) response = await llm.chat( system=f"你是 {self.name}。{self.persona}", context=relevant_memories, user=observation ) await self.memories.add({ "content": f"我说:{response}", "importance": 7 }) return response
🌟 涌现行为案例:在运行 48 小时后,小镇居民自发组织了一场"派对"——一个 Agent 决定举办派对,通过社交网络传播邀请,其他 Agent 根据自己的计划决定是否参加。这一行为完全没有被预先编程,是多 Agent 交互的自然结果。
第五部分 · 毕业设计及未来展望
第十六章
毕业设计
构建你自己的完整多 Agent 应用,综合检验学习成果

🎓 毕业设计目标

恭喜你完成了 Hello-Agents 的全部学习内容!毕业设计是你综合运用所学知识,构建一个完整多 Agent 应用的机会。通过这个项目,你将:

  • 综合运用 Agent 架构设计、工具调用、记忆系统、多 Agent 协作等知识
  • 经历完整的 Agent 应用开发生命周期
  • 积累真实的项目经验,丰富个人作品集

📋 毕业设计要求

基础要求(必须完成)

  • ✅ 实现至少一个核心 Agent 功能(工具调用、规划等)
  • ✅ 集成至少 3 个不同类型的工具
  • ✅ 实现基本的记忆/上下文管理
  • ✅ 提供清晰的代码文档和 README

进阶要求(可选)

  • ⭐ 实现多 Agent 协作
  • ⭐ 集成 RAG 知识库
  • ⭐ 部署到云端并提供公开访问
  • ⭐ 实现 Web 界面

💡 选题建议

📚

个人知识助手

管理个人笔记和文档,支持智能问答和知识图谱

💼

职场效率 Agent

自动化邮件处理、会议记录、任务管理

🎯

学习助手

个性化学习计划、题目生成、知识点讲解

💻

代码助理

代码审查、Bug 修复、文档生成

🚀 展示与分享

完成毕业设计后,欢迎通过以下方式分享你的成果:

  • 提交 PR 到 Co-creation-projects 目录
  • 在 Issue 中分享你的项目链接
  • 在社交媒体上分享,让更多人了解你的作品
🌟 写在最后:Agent 领域正在以前所未有的速度发展。你现在掌握的知识,是进入这个领域的扎实基础。保持学习的热情,持续关注最新进展,勇敢地构建和分享你的作品。

你已经从 LLM 的"使用者"成长为 Agent 系统的"构建者"!🎉
社区贡献
扩展章节(Extra-Chapter)
社区共建的补充内容,覆盖面试、工具、实战经验等更多主题
00

社区共创毕业设计项目

社区同学的优秀毕业设计作品展示

01

Agent 面试问题汇总

Agent 相关岗位的高频面试问题整理

01

Agent 面试参考答案

对应面试问题的参考回答与解析

02

上下文工程补充知识

对第九章内容的深度扩展和案例补充

03

Dify 智能体创建保姆级教程

从零开始手把手创建 Dify Agent

04

Hello-agents 课程常见问题

Datawhale 课程期间最常见问题的解答

05

Agent Skills 与 MCP 对比

两种工具集成方案的技术深度对比

06

GUI Agent 科普与实战

GUI Agent 概念、原理与实践教程

07

环境配置指南

OpenAI API、Python 环境等配置详解

08

如何写出好的 Skill

Agent Skill 设计最佳实践与案例

09

Agent 应用开发踩坑与经验

构建 Code Agent 的实战教训与心得

10

Agent 自进化

四大闭环与代表性自进化 Agent 项目

11

Web Agent 科普与实战

Web Agent 原理、反爬虫实践与 HelloAgents 集成

12

旅行助手后训练实战

将旅行规划 Demo 训练成真正可用的规划器

社区贡献
贡献者名单
感谢所有为 Hello-Agents 做出贡献的同学

🌟 核心贡献者

陈思洲

项目负责人
Datawhale 成员
全文撰写与校对

孙涛

联合发起人
Datawhale 成员
CAMEL-AI

江书帆

联合发起人
Datawhale 成员
习题设计与校对

黄沛霖

Datawhale 准成员
Agent 开发工程师
第五章贡献

曾鑫民

Agent 工程师
牛客科技
第十四章案例

朱欣忠

顾问专家
Datawhale 首席科学家
浙师大教授

👥 扩展章节贡献者

W

WH

内容贡献者

周奥杰

DW 贡献者团队
西安交通大学
Extra02 内容

张宸旭

独立开发者
帝国理工学院
Extra03 内容

黄弘瀚

DW 贡献者团队
深圳大学
Extra04 内容

王大鹏

Datawhale 成员
高级开发者
Extra08 内容

尤一慧

独立开发者
南京信息工程大学
Extra09 内容

尹欣

独立开发者
浙江大学
Extra10 内容

P

Pranav J.

独立开发者
TinyFish
Extra11 内容

王雨菲

独立开发者
北京邮电大学
Extra12 内容

🤝 如何贡献

我们欢迎所有形式的贡献!

  • 🐛 报告 Bug — 发现内容或代码问题,请提交 Issue
  • 💡 提出建议 — 对项目有好的想法,欢迎发起讨论
  • 📝 完善内容 — 帮助改进教程,提交你的 PR
  • ✍️ 分享实践 — 在"社区共建"中分享学习笔记和项目