从零手搓 ReAct 智能体:用 Python 实现 AI Agent 核心闭环(附完整代码)

从零手搓AI Agent:百行Python代码实现ReAct智能体核心架构 AI Agent(智能体)作为当前人工智能领域的热点技术,其核心在于构建一个能够自主感知、决策与行动的智能系统。从技术原理上看,Agent通常基于大语言模型(LLM)作为推理核心,通过ReAct(推理+行动)等模式,实现与外部工具的协同工作。这种架构的价值在于将LLM的认知能力与具体工具的执行能力相结合,从而完成搜索信息、数学计算、数据分析等实际任务。在应用场景上,从自动化客服、代码助手到复杂问题求解,AI Agent正逐步渗透到各个行业。本文聚焦于通过极简的Python代码实践,拆解Agent的‘大脑-记 阅读详情

在大模型应用爆发的当下,AI Agent(智能体) 已从理论概念走向实战落地 —— 它本质是具备 “环境感知 - 逻辑推理 - 自主执行” 能力的智能实体,接收复杂任务后无需人工干预,就能拆解步骤、调用工具完成目标。而在众多 Agent 架构中,ReAct 框架(融合 Reasoning 推理与 Acting 行动)凭借贴近人类思考的特性成为行业标杆:让大语言模型(LLM)在处理任务时,同步输出 “思考过程(Thought)” 与 “执行动作(Action)”,再根据外部工具反馈的结果(Observation)动态调整决策,最终生成精准答案。

img

本文将跳出复杂框架依赖,以 DeepLearning.AI 热门课程《AI Agents in LangGraph》的核心逻辑为蓝本,用基础 Python 代码拆解 ReAct Agent 的完整构建流程。不仅会实现 “推理 - 行动 - 观察” 的核心闭环,还会补充工具扩展技巧、异常处理方案与工程化优化思路,帮你从底层理解 Agent 工作原理,而非单纯复制粘贴代码 —— 无论你是零基础想入门大模型开发,还是程序员想拓展 AI 技能栈,这套实战方案都能让你快速掌握 Agent 开发核心,为高薪岗位竞争力加码。

1、环境搭建:从依赖安装到接口验证

当然在正式进入代码实战之前,我们还是要配置相关的环境的,我们可以通过以下代码来创建相关的conda环境并下载openai库。

conda create -n langgraph python=3.12 -y
conda activate langgraph
pip install openai

安装完成后,我们还需要配置大模型的调用接口。本次课程中,我使用的是 阿里云百炼平台提供的大语言模型 API。关于如何获取 api_key,我在前面的文章中已经详细介绍过,这里就不再赘述,具体可参考这篇文章:万字长文!手把手带你上手基于LangChain及Qwen大模型的开发与应用

拿到 api_key 后,我们可以通过以下代码进行测试,以验证大模型是否能够正常调用。如果运行后成功返回内容,说明接口配置无误,可以继续后续开发。

from openai import OpenAI
aliyun_api_key = '你的api_key'
client = OpenAI(
    api_key=aliyun_api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

response = client.chat.completions.create(
    model="qwen-max",
    messages=[
        {'role': 'user', 'content': "你是谁?"}
    ]
)

# 打印完整回答内容
print(response.choices[0].message.content)

2、 Agent 搭建

2.1、 搭建思路

对于一个常见的ReAct框架的Agent,我们需要以下几个零部件:

  • LLM 模型(大脑):OpenAI、通义千问、Claude 等大语言模型。其作用是负责理解用户输入、组织推理逻辑、判断调用哪个工具、最后生成回答。它是整个 Agent 推理与决策的基础。
  • Memory(记忆):保存对话的上下文。其作用是记录用户的历史对话、身份信息、上下文等,让 Agent 在多轮对话中保持“记忆”。
  • 工具(行动能力):计算器、搜索器、数据库查询器等。其作用是帮助 Agent 执行它不能直接回答的任务,例如查天气、算数学题、提取表格数据等。
  • Prompt 模板(思维方式):如 ReAct 提示词。其作用是明确告诉模型“你要如何思考、如何调用工具、如何表达每一步的过程”。

总的来说,大模型是大脑,Prompt是思维方式,工具是行动能力,Memory是记忆系统。四者合力,才能构建出一个真正实用的 ReAct Agent。下面我们就来一步步的将这四部分内容进行完善,完成最初的前期准备工作。

2.2、 构建大脑及内部记忆

首先,我们需要构建一个支持 LLM 对话的类,用于与大语言模型进行交互,同时记录完整的对话信息,为后续循环调用做好准备。

import re
from openai import OpenAI
aliyun_api_key = '你的api_key'
client = OpenAI(
    api_key=aliyun_api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
class Agent:
    def __init__(self, system=""):
        self.system = system
        self.messages = []
        if self.system:
            self.messages.append({"role": "system", "content": system})

    def __call__(self, message):
        self.messages.append({"role": "user", "content": message})
        result = self.execute()
        self.messages.append({"role": "assistant", "content": result})
        return result

    def execute(self):
        response = client.chat.completions.create(
            model="qwen-max",
            messages=self.messages
        )
        return response.choices[0].message.content

我们可以一步步来看看这个 Agent 类具体实现了哪些功能。

首先,我们通过以下代码创建了一个 Agent 对象:

abot = Agent('你是一个乐于助人的机器人')

在创建这个对象的过程中,其实我们是将 '你是一个乐于助人的机器人' 作为参数传入了类的构造函数 __init__(),即:

class Agent:  
  def __init__(self, system='你是一个乐于助人的机器人'):

在构造函数中,我们通过 self.system 和 self.messages 定义了两个类的属性:

  • self.system:保存系统提示词,也就是我们设定的大模型身份。
  • self.messages:初始化一个空列表,用于保存整段对话的历史信息(包含 system、user、assistant 三类角色的内容)。
    bash
        self.system = '你是一个乐于助人的机器人'   
             self.messages = []

再然后就是把系统提示词加入到self.messages 的列表当中,即便是空的字符串也是需要加入进去的。

        if self.system:       
             self.messages.append({"role": "system", "content": '你是一个乐于助人的机器人'})

加入进去后,self.mesages就会变成下面这样把一条信息保存起来。

self.messages = [{"role": "system", "content": '你是一个乐于助人的机器人'}]

以上就完成了Agen这个类创建的前期准备工作了。当我们去调用这个类,也就是和我们刚刚创建好的abot 去对话,我们可以这样来完成:

result = abot("你是谁?")
print(result)

当我们使用 abot() 来传入信息时,其实是调用了 Agent 类中定义的 __call__() 方法,并将 '你是谁?' 作为 message 传入:

    def __call__(self, message='你是谁'):

然后下一步就是执行这个函数里的内容,第一步就是把这个信息传入到这个字典里,并且也是通过.append的方式添加到列表中。

        self.messages.append({"role": "user", "content": '你是谁'})

经过这样之后,我们的列表就会更新成下面这样。

self.messages = [{"role": "system", "content": '你是一个乐于助人的机器人'}, {"role": "user", "content": '你是谁'}]

再然后我们就是去执行一个函数self.execute() ,并将结果保存在变量result这里。

        result = self.execute()

这个函数其实就是Agent这个类里的第三个函数def execute(self): ,我们就是用的最普通的openai调用方法来获取回复,但是这里需要注意的是,我们传入给大模型的信息其实正是我们一直保存在self.messages的信息,所以大模型会基于我们的系统提示词和用户提示词给出对应的回复,比如这里的回复就应该是:我是来自阿里云的大规模语言模型,我叫通义千问。。

def execute(self):
    response = client.chat.completions.create(
        model="qwen-max",
        messages=self.messages
    )
    return response.choices[0].message.content

最后保存大模型回复的信息也会以格式化的形式添加到self.messages 中,以作为聊天记录等待下一次的调用。完成一次聊天后,在self.messages 保存的聊天记录应该如下所示:

self.messages = [{"role": "system", "content": '你是一个乐于助人的机器人'}, {"role": "user", "content": '你是谁'},{"role": "assistant", "content": '我是来自阿里云的大规模语言模型,我叫通义千问。'}]

通过这样的方式,我们不仅完成了一次完整的问答过程,还保留了整个对话的上下文,为后续多轮交互提供了基础。

2.3、 工具准备

Agent 的工具是指大语言模型在完成任务时可以调用的外部函数或服务,比如搜索引擎、计算器、数据库查询、文件读取等,它让模型不仅能“思考”,还能“行动”。通过这些工具,模型可以在无法直接回答的问题面前主动获取信息、执行代码或调用API,从而完成更复杂、更真实的智能任务。这种“思考+行动”的模式,是构建智能 Agent 系统的核心能力之一。

比如说我们可以设置两个小的工具来完成后续的Agent任务,第一个是计算器工具calculate(what) ,这是一个用于执行数学表达式的工具函数,能够接收一个字符串形式的表达式,并使用 Python 的 eval() 函数进行计算。

def calculate(what):
    return eval(what)

print(calculate("3 + 7 * 2"))   # 返回 17
print(calculate("10 / 4"))      # 返回 2.5

另外一个是狗狗体重查询工具average_dog_weight(name) ,该函数根据传入的狗的品种名称,返回该品种的平均体重信息。如果传入的品种不在预设列表中,则返回默认的平均体重信息。

def average_dog_weight(name):
    if name in"Scottish Terrier": 
        return("Scottish Terriers average 20 lbs")
    elif name in"Border Collie":
        return("a Border Collies average weight is 37 lbs")
    elif name in"Toy Poodle":
        return("a toy poodles average weight is 7 lbs")
    else:
        return("An average dog weights 50 lbs")

average_dog_weight("Scottish Terrier")  
# 返回 "Scottish Terriers average 20 lbs"
average_dog_weight("Labrador")          
# 返回 "An average dog weights 50 lbs"

最后我们可以把这两个工具注册到一起,并且还需要写入到提示词模版当中,那这样就可以让大模型知道有哪些工具可用,并且调用的时候使用什么样的格式。

known_actions = {
    "calculate": calculate,
    "average_dog_weight": average_dog_weight
}

2.4、 提示词模版

在完成工具准备并明确任务了以后,我们就可以开始来构建提示词模版了。这里所使用的提示词模版肯定不能是上面那种有用的助手那么简单,因为我们需要其能够实现思考、行动、暂停、观察这样一轮轮的步骤完成,因此这个提示词也是需要复杂一些。以下是这个任务所使用的提示词模版:

prompt = """
You run in a loop of Thought, Action, PAUSE, Observation.
At the end of the loop you output an Answer
Use Thought to describe your thoughts about the question you have been asked.
Use Action to run one of the actions available to you - then return PAUSE.
Observation will be the result of running those actions.

Your available actions are:

calculate:
e.g. calculate: 4 * 7 / 3
Runs a calculation and returns the number - uses Python so be sure to use floating point syntax if necessary

average_dog_weight:
e.g. average_dog_weight: Collie
returns average weight of a dog when given the breed

Example session:

Question: How much does a Bulldog weigh?
Thought: I should look the dogs weight using average_dog_weight
Action: average_dog_weight: Bulldog
PAUSE

You will be called again with this:

Observation: A Bulldog weights 51 lbs

You then output:

Answer: A bulldog weights 51 lbs
""".strip()

我们可以深入的来看看每一部分其具体是怎么实现的:

第一部分是定义大语言模型的行为流程,即模型需要按照 Thought → Action → PAUSE → Observation → Answer 的顺序来思考和回答问题。这种结构让模型像人一样,先思考,再行动,观察结果,最后得出结论,是 ReAct 智能体模式的核心逻辑。

You run in a loop of Thought, Action, PAUSE, Observation.
At the end of the loop you output an Answer

第二部分是解释各个关键结构,Thought 表示模型的思考过程,Action 用于调用工具,PAUSE 代表暂时停止以等待外部执行,Observation 是动作执行后的反馈信息。这一段为模型提供了清晰的格式指南,确保它知道每一步该怎么做。

Use Thought to describe your thoughts about the question you have been asked.
Use Action to run one of the actions available to you - then return PAUSE.
Observation will be the result of running those actions.

第三部分列出了当前模型可调用的两个工具,一个是 calculate 用于执行数学计算,一个是 average_dog_weight 用于查询狗的平均体重。每个工具都有调用示例和用途描述,明确告诉模型能干什么、怎么写,帮助它在需要时做出正确选择。

Your available actions are:

calculate:
e.g. calculate: 4 * 7 / 3
Runs a calculation and returns the number - uses Python so be sure to use floating point syntax if necessary

average_dog_weight:
e.g. average_dog_weight: Collie
returns average weight of a dog when given the breed

第四部分是示例演示,通过一个完整的例子(“Bulldog 的体重”)演示了整个流程如何运作,从用户提问,到模型思考、选择工具、接收观察结果,再到最终生成答案。这种 few-shot 示例起到了“教模型怎么做”的作用,帮助它快速学习并模仿。

Example session:

Question: How much does a Bulldog weigh?
Thought: I should look the dogs weight using average_dog_weight
Action: average_dog_weight: Bulldog
PAUSE

You will be called again with this:

Observation: A Bulldog weights 51 lbs

You then output:

Answer: A bulldog weights 51 lbs

所以这个提示词是一个典型的 ReAct 模式 Prompt,用于引导大语言模型按 “Thought → Action → Observation → Answer” 的流程进行多步推理。它定义了两个可调用工具(计算器与狗体重查询),并通过示例教会模型如何思考、选择工具、暂停等待执行结果,最终给出回答。整个提示结构清晰,逻辑合理,是构建工具增强型智能体的经典设计模板。基于这个提示词模版,大模型就能够照着示例来一步步完成我们想要其完成的任务。

3、 Agent 组装

当我们准备好了四部分Agent的组件后,我们就可以将其组装起来,实现真正的Agent流程了。具体的代码实现如下所示:

action_re = re.compile('^Action: (\w+): (.*)$')
def query(question, max_turns=5):
    i = 0
    bot = Agent(prompt)
    next_prompt = question
    while i < max_turns:
        i += 1
        result = bot(next_prompt)
        print(result)
        actions = [
            action_re.match(a) 
            for a in result.split('\n') 
            if action_re.match(a)
        ]
        if actions:
            # There is an action to run
            action, action_input = actions[0].groups()
            if action notin known_actions:
                raise Exception("Unknown action: {}: {}".format(action, action_input))
            print(" -- running {} {}".format(action, action_input))
            observation = known_actions[action](action_input)
            print("Observation:", observation)
            next_prompt = "Observation: {}".format(observation)
        else:
            return result

第一部分:正则表达式定义(识别 Action 行)

这一行是用 Python 的 re 模块预编译了一个正则表达式,用于匹配模型输出中的动作调用指令。

action_re = re.compile('^Action: (\w+): (.*)$')

正则表达式的含义是:

  • ^Action: 表示必须以 Action: 开头
  • (\w+) 匹配一个由字母、数字或下划线组成的字符串,用来捕获工具名
  • : 是第二个冒号
  • (.*) 匹配这一行剩下的所有内容,作为工具的输入参数
  • $ 表示这一行的末尾

比如说以下的内容:

Action: calculate: 5 + 3
Action: average_dog_weight: Border Collie

就可以提取出:

  • 工具名:如 calculate
  • 参数内容:如 5 + 3

这在整个 ReAct 框架中起到了“解析模型指令”的作用,是连接 LLM 与工具函数的桥梁。

第二部分:函数定义和初始化 Agent

这是 query 函数的定义部分,它是整个“ReAct式推理对话”的主函数。

def query(question, max_turns=5):
    i = 0
    bot = Agent(prompt)
    next_prompt = question

函数参数说明:

  • question 是用户输入的问题,比如:“我有两只狗,一只是 Border Collie,一只是 Scottish Terrier,它们的总重是多少?”
  • max_turns 是最多允许模型推理的轮数,用于避免死循环

内部变量初始化:

  • i = 0:轮次计数器,从第 0 轮开始
  • bot = Agent(prompt):实例化一个 Agent 对象,并加载前面写好的系统提示词 prompt,使得模型具备 ReAct 风格行为
  • next_prompt = question:把用户问题作为第一轮对话的输入

这一部分的作用是准备好模型上下文、轮次计数器和初始输入内容,为后续的对话循环做准备。

第三部分:进入推理循环,每轮运行 Agent

这是 query() 函数的主循环体,每次循环代表一次推理轮次。

while i < max_turns:
    i += 1
    result = bot(next_prompt)
    print(result)

解释:

  • 循环条件是轮数不能超过 max_turns ,这也就是前面所说的5轮。

  • 每轮输入 next_prompt,一开始也是我们提问的问题,后面随着每一轮运行,内容不断增加

  • result 是模型输出的完整文本,可能包含:

    • Thought: 模型的推理说明
    • Action: 工具调用请求
    • PAUSE 暂停符号(人为控制)
    • 或最终的 Answer: xxx

通过 print(result) 打印结果,让我们看到每一步模型做了什么,是非常常见的开发习惯。正式上线的时候可以去掉以提升速度。

第四部分:识别输出中是否包含 Action 调用指令

这段代码的目标是从模型输出中提取出 Action: xxx: yyy 的指令。

actions = [
    action_re.match(a) 
    for a in result.split('\n') 
    if action_re.match(a)
]

解释:

  • result.split('\n') 将多行模型输出按行拆分为一个列表
  • 对每一行使用正则表达式 action_re.match(a) 进行匹配
  • 如果某一行符合格式 Action: 工具名: 参数,就会返回一个匹配对象(Match 对象)
  • 把这些匹配对象组成一个列表 actions

这个部分的作用是:

  • 分析模型的输出,看它有没有发出“我想调用哪个工具”的指令
  • 如果有,就提取出来准备执行
  • 如果没有,则说明模型已经准备好输出最终结果,不需要调用工具
第五部分:判断是否执行动作,并提取调用细节

这一段表示如果 actions 列表非空,说明找到了模型想执行的 Action。这个时候就取出第一个匹配项,并用 .groups() 方法获得两个内容:

  • action:工具名称(如 calculate)
  • action_input:参数内容(如 5 + 3)
if actions: 
 action, action_input = actions[0].groups()

注意这里只取第一个 Action,意味着如果模型一次输出多个动作,只会执行第一个。你可以扩展为多动作支持,但这个例子中是单轮单动作执行。

第六部分:检查工具是否合法并执行

这段是一个保护机制,确保模型调用的工具必须是在你定义的工具字典 known_actions 中注册过的。

 if action not in known_actions:
        raise Exception("Unknown action: {}: {}".format(action, action_input))

如果模型写错了工具名称,或者调用了你未定义的函数,这段代码就会抛出异常,终止程序,防止模型“乱调用”。

第七部分:实际执行工具函数,并获取 observation

当确保函数存在后,我们就可以实际的去执行这个函数并获取结果了。

   print(" -- running {} {}".format(action, action_input))
    observation = known_actions[action](action_input)
    print("Observation:", observation)

  • known_actions[action] 表示从工具字典中取出对应的函数(如 calculate)
  • (...) 表示调用这个函数,把 action_input 作为参数传进去
  • 执行后得到的返回值就是 observation(观察结果)

比如说假如我们传入的是下面的内容:

action = "calculate"
action_input = "3 + 5"
observation = calculate("3 + 5")  # → 8

这个 observation 会作为反馈提供给模型,让它继续思考下一步。

第八部分:将 Observation 返回模型,形成闭环

这行代码的作用是把上一轮工具运行得到的结果包装成 Observation 格式,然后作为下一轮对话的输入内容。

    next_prompt = "Observation: {}".format(observation)

这样模型在下一次运行时就能“看到”之前工具的执行结果,形成 ReAct 模式中的“观察反馈”闭环。

第九部分:如果没有 Action,直接返回最终结果

如果这一轮模型输出中没有 Action,说明它认为已经有足够信息来给出最终回答了。

else:  
  return result

比如:

Answer: The total weight of your dogs is 57 lbs.

这时候就不再继续工具调用流程,直接返回这个结果作为最终输出。

4、 实际调用

在准备好整体的调用逻辑及工具后,我们可以通过调用函数开启我们手搓的Agent了!这里提出的问题就是:我有两只小狗,一只是border collie,另一只是scottish terrier,总共有多重:

question = """I have 2 dogs, a border collie and a scottish terrier. \
What is their combined weight"""
query(question)

我们可以通过query函数里print的内容在终端看到其中的变化:

Thought: I need to find the average weight of a Border Collie and a Scottish Terrier, then add them together to get their combined weight.
Action: average_dog_weight: Border Collie
PAUSE
 -- running average_dog_weight Border Collie
Observation: a Border Collies average weight is37 lbs
Thought: Now that I have the average weight of a Border Collie, I need to find the average weight of a Scottish Terrier.
Action: average_dog_weight: Scottish Terrier
PAUSE
 -- running average_dog_weight Scottish Terrier
Observation: Scottish Terriers average 20 lbs
Thought: I now have the average weights of both a Border Collie and a Scottish Terrier. I can now add these two weights together to find their combined weight.
Action: calculate: 37 + 20
PAUSE
 -- running calculate 37 + 20
Observation: 57
Answer: The combined weight of a Border Collie and a Scottish Terrier is57 lbs.

第一步:第一次 Thought + Action

从文本可以看出,模型先“想了想”:要得到总重,得先分别查两只狗的平均体重,再把它们加起来。然后决定先查 Border Collie 的体重,调用工具 average_dog_weight 。最后加上 PAUSE,意味着它希望系统先执行完工具再继续。

Thought: I need to find the average weight of a Border Collie and a Scottish Terrier, then add them together to get their combined weight.
Action: average_dog_weight: Border Collie
PAUSE

这里需要注意的是,运行result = bot(next_prompt) 后,这部分思考和行动的内容都会作为聊天记录保存在self.messages里了,这样可以帮助模型后续进一步完成任务。

第二步:系统执行 Border Collie 工具

停下后就开始进行行动(action)了,就是从known_actions 字典中调用 average_dog_weight("Border Collie")。可以得到结果 "a Border Collies average weight is 37 lbs"。最后系统把这个 observation 反馈给模型,让它继续推理。

-- running average_dog_weight Border Collie
Observation: a Border Collies average weight is 37 lbs

这个时候,observation会作为下一个提问传给模型,模型基于历史记录及这个观察进一步的完成任务,同样的,在历史里会把这个observation的信息作为user message传入self.messages。

第三步:模型继续推理下一步

在接收到观察的信息后,模型知道了第一只狗的体重。接着模型思考“我还需要第二只狗的体重”所以这一步它调用 average_dog_weight: Scottish Terrier 工具进一步进行调整。

Thought: Now that I have the average weight of a Border Collie, I need to find the average weight of a Scottish Terrier.
Action: average_dog_weight: Scottish Terrier
PAUSE

当然这个信息也回作为assistant回复的信息保存在self.messages 中。

第四步:系统执行第二个工具

在收到action指令后,系统继续调用工具函数:average_dog_weight("Scottish Terrier")。最后可以得到体重:20 lbs。然后系统再次将结果作为 Observation 反馈给模型。

-- running average_dog_weight Scottish Terrier
Observation: Scottish Terriers average 20 lbs
第五步:模型思考并调用加法工具

系统看到了我们已经找到了两个体重(37和20),所以模型决定 调用 calculate: 37 + 20 工具来进行计算。

Thought: I now have the average weights of both a Border Collie and a Scottish Terrier. I can now add these two weights together to find their combined weight.
Action: calculate: 37 + 20
PAUSE
第六步:系统执行加法工具

根据正则表达式的解析,系统调用 calculate("37 + 20") → eval("37 + 20") 得出 57。最后我们将把这个 Observation 返回给模型。

 -- running calculate 37 + 20
Observation: 57

最后一步:模型输出最终答案

最后模型输出一个Answer的答案内容,由于并没有输出Action的信息,因此整个推理链条闭环,任务结束。

Answer: The combined weight of a Border Collie and a Scottish Terrier is 57 lbs.

整体流程展示
阶段模型行为工具调用Observation下一步
1思考需要两个体重查 Border Collie得到 37 lbs去查第二只
2查第二只狗的体重查 Scottish Terrier得到 20 lbs开始计算
3加法计算calculate: 37 + 20得到 57给出最终答案

完整代码如下所示:

import re
from openai import OpenAI
aliyun_api_key = '你的api_key'
client = OpenAI(
    api_key=aliyun_api_key,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

class Agent:
    def __init__(self, system=""):
        self.system = system
        self.messages = []
        if self.system:
            self.messages.append({"role": "system", "content": system})

    def __call__(self, message):
        self.messages.append({"role": "user", "content": message})
        result = self.execute()
        self.messages.append({"role": "assistant", "content": result})
        return result

    def execute(self):
        response = client.chat.completions.create(
            model="qwen-max",
            messages=self.messages
        )
        return response.choices[0].message.content

abot = Agent('你是一个乐于助人的机器人')
result = abot("你是谁?")
print(result)

prompt = """
You run in a loop of Thought, Action, PAUSE, Observation.
At the end of the loop you output an Answer
Use Thought to describe your thoughts about the question you have been asked.
Use Action to run one of the actions available to you - then return PAUSE.
Observation will be the result of running those actions.

Your available actions are:

calculate:
e.g. calculate: 4 * 7 / 3
Runs a calculation and returns the number - uses Python so be sure to use floating point syntax if necessary

average_dog_weight:
e.g. average_dog_weight: Collie
returns average weight of a dog when given the breed

Example session:

Question: How much does a Bulldog weigh?
Thought: I should look the dogs weight using average_dog_weight
Action: average_dog_weight: Bulldog
PAUSE

You will be called again with this:

Observation: A Bulldog weights 51 lbs

You then output:

Answer: A bulldog weights 51 lbs
""".strip()

def calculate(what):
    return eval(what)

def average_dog_weight(name):
    if name in"Scottish Terrier": 
        return("Scottish Terriers average 20 lbs")
    elif name in"Border Collie":
        return("a Border Collies average weight is 37 lbs")
    elif name in"Toy Poodle":
        return("a toy poodles average weight is 7 lbs")
    else:
        return("An average dog weights 50 lbs")

known_actions = {
    "calculate": calculate,
    "average_dog_weight": average_dog_weight
}

action_re = re.compile('^Action: (\w+): (.*)$')   # python regular expression to selection action
def query(question, max_turns=5):
    i = 0
    bot = Agent(prompt)
    next_prompt = question
    while i < max_turns:
        i += 1
        result = bot(next_prompt)
        print(result)
        actions = [
            action_re.match(a) 
            for a in result.split('\n') 
            if action_re.match(a)
        ]
        if actions:
            # There is an action to run
            action, action_input = actions[0].groups()
            if action notin known_actions:
                raise Exception("Unknown action: {}: {}".format(action, action_input))
            print(" -- running {} {}".format(action, action_input))
            observation = known_actions[action](action_input)
            print("Observation:", observation)
            next_prompt = "Observation: {}".format(observation)
        else:
            return result

question = """I have 2 dogs, a border collie and a scottish terrier. \
What is their combined weight"""
query(question)

5、 总结

虽然本节课我们构建的 Agent 还比较基础,但它已经完整地展示了一个智能体“思考-行动-观察-再思考”的核心闭环流程。随着任务复杂度的提升,我们无法仅靠手工控制流程来支撑更强大的 Agent 系统,可能我们需要一些成熟的 Agent 框架来实现我们的想法。

如今技术圈降薪裁员频频爆发,传统岗位大批缩水,相反AI相关技术岗疯狂扩招,薪资逆势上涨150%,大厂老板们甚至开出70-100W年薪,挖掘AI大模型人才!

技术的稀缺性,才是你「值钱」的关键!

具备AI能力的程序员,比传统开发高出不止一截!有的人早就转行AI方向,拿到百万年薪!👇🏻👇🏻

请添加图片描述

是不是也想抓住这次风口,但卡在 “入门无门”?

  • 小白:想学大模型,却分不清 LLM、微调、部署,不知道从哪下手?
  • 传统程序员:想转型,担心基础不够,找不到适配的学习路径?
  • 求职党:备考大厂 AI 岗,资料零散杂乱,面试真题刷不完?

别再浪费时间踩坑!2025 年最新 AI 大模型全套学习资料已整理完毕,不管你是想入门的小白,还是想转型的传统程序员,这份资料都能帮你少走 90% 的弯路

👇👇扫码免费领取全部内容👇👇

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图,厘清要学哪些

一个明确的学习路线可以帮助新人了解从哪里开始,按照什么顺序学习,以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

img

L1级别:大模型核心原理与Prompt

在这里插入图片描述

L1阶段: 将全面介绍大语言模型的基本概念、发展历程、核心原理及行业应用。从A11.0到A12.0的变迁,深入解析大模型与通用人工智能的关系。同时,详解OpenAl模型、国产大模型等,并探讨大模型的未来趋势与挑战。此外,还涵盖Pvthon基础、提示工程等内容。
目标与收益:掌握大语言模型的核心知识,了解行业应用与趋势;熟练Python编程,提升提示工程技能,为AI应用开发打下坚实基础。

L2级别:RAG应用开发工程

请添加图片描述

L2阶段: 将深入讲解AI大模型RAG应用开发工程,涵盖Naive RAGPipeline构建、AdvancedRAG前治技术解读、商业化分析与优化方案,以及项目评估与热门项目精讲。通过实战项目,提升RAG应用开发能力。

目标与收益: 掌握RAG应用开发全流程,理解前沿技术,提升商业化分析与优化能力,通过实战项目加深理解与应用。

L3级别:Agent应用架构进阶实践

请添加图片描述

L3阶段: 将 深入探索大模型Agent技术的进阶实践,从Langchain框架的核心组件到Agents的关键技术分析,再到funcation calling与Agent认知框架的深入探讨。同时,通过多个实战项目,如企业知识库、命理Agent机器人、多智能体协同代码生成应用等,以及可视化开发框架与IDE的介绍,全面展示大模型Agent技术的应用与构建。

目标与收益:掌握大模型Agent技术的核心原理与实践应用,能够独立完成Agent系统的设计与开发,提升多智能体协同与复杂任务处理的能力,为AI产品的创新与优化提供有力支持。

L4级别:模型微调与私有化大模型

在这里插入图片描述

L4级别: 将聚焦大模型微调技术与私有化部署,涵盖开源模型评估、微调方法、PEFT主流技术、LORA及其扩展、模型量化技术、大模型应用引警以及多模态模型。通过chatGlM与Lama3的实战案例,深化理论与实践结合。

目标与收益:掌握大模型微调与私有化部署技能,提升模型优化与部署能力,为大模型项目落地打下坚实基础。

二、 全套AI大模型应用开发视频教程

从入门到进阶这里都有,跟着老师学习事半功倍。

在这里插入图片描述

三、 大模型学习书籍&文档

收录《从零做大模型》《动手做AI Agent》等经典著作,搭配阿里云、腾讯云官方技术白皮书,帮你夯实理论基础。

在这里插入图片描述

四、 AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

img

五、大模型大厂面试真题

整理了百度、阿里、字节等企业近三年的AI大模型岗位面试题,涵盖基础理论、技术实操、项目经验等维度,每道题都配有详细解析和答题思路,帮你针对性提升面试竞争力。

img

六、大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

img

适用人群

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …
第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …
第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …
第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

用Python手搓一个ReAct Agent:从零实现思考-行动-观察循环(附完整代码) 本文详细介绍了如何从零开始用Python实现一个ReAct Agent,构建其核心的思考-行动-观察循环。通过剖析ReAct范式的原理,并提供完整的代码实现,包括LLM客户端、工具系统、提示词引擎和主循环控制器,帮助开发者深入理解Agent的工作机制,并构建可扩展的智能体应用。 阅读详情

相关推荐

从零手搓AI Agent:ReAct、RAG与Multi-Agent核心原理与实操

AI Agent是一种能自主推理、调用工具并根据反馈调整行动的智能系统,其核心在于ReAct范式驱动的“推理-行动-观察”循环。通过工具调用、记忆管理和循环控制三大模块,Agent可完成复杂任务。RAG技术让Agent接入外部知识库,Multi-Agent则实现多智能体协作。掌握这些基础原理,开发者能构建出可查资料、会计算的智能体,并应用于自动化问答、数据分析等场景。本文从零手搓AI Agent,深入拆解ReAct、RAG与Multi-Agent的实现细节。

weixin_31100517的博客 269

探索Agent原理并亲手打造一个简易ReAct Agent

本文介绍了Agent的核心概念和主流架构,重点讲解了ReAct(推理并行动)框架的实现方法。Agent由大模型、记忆和工具组成,具备自主性、反应性、主动性及社会性。文章详细展示了如何构建一个简易的ReAct Agent,包括环境配置、LLM模型封装、工具类实现(以谷歌搜索为例)以及Agent核心逻辑。通过硅基流动的Qwen模型和Serper API,实现了能够自主思考、执行搜索并整合信息的智能体。测试案例表明,该Agent能有效获取并总结关于Gemini模型的最新信息。文章还提供了完整的代码实现和调试输出,

DandTK的博客 1684

Hello-Agents:从零手搓AI Native Agent的开源实战教程

Agent(智能体)是AI Native时代的核心系统范式,其本质并非高级Prompt工程,而是具备目标驱动、自主规划、反思迭代与工具调用能力的自治系统。理解Agent需回归基础原理:以ReAct为代表的决策循环范式,强调‘思考-行动-观察’闭环;而MCP协议则定义了多智能体间的标准化通信机制,支撑可扩展、可追溯、跨语言的协作架构。这类技术价值在智能旅行助手、赛博小镇等真实场景中充分显现——涵盖动态任务编排、异常恢复、状态持久化与生产级可观测性。Hello-Agents作为国产高星开源教程,正以‘概念透彻+

weixin_34293911的博客 472

从零构建 ReAct Agent:从原理到实战的完整指南,一文看懂!

从零构建 ReAct Agent:从原理到实战的完整指南,一文看懂!

2301_76168381的博客 1819

从零实现ReAct Agent:拆解AI智能体的思考-行动-观察循环

在AI应用开发领域,智能体(Agent)已成为连接大语言模型与外部工具的核心架构范式。其核心原理在于通过结构化的工作流,使模型能够主动调用工具、处理反馈,从而解决复杂任务。从技术价值看,这种范式突破了传统单一提示词工程的局限,赋予AI系统动态规划、迭代执行的能力,是实现自动化、智能化应用的关键。在工程实践中,ReAct(Reasoning-Acting)模式通过“思考-行动-观察”的循环机制,将推理与工具调用有机结合,广泛应用于智能客服、数据分析、自动化流程等场景。本文以ReAct范式为例,深入解析其底层状

weixin_34296641的博客 531

番外A1-从零实现ReAct Agent-完整技术实现指南

ReAct(Reasoning + Acting)是当前最流行的Agent推理模式之一。与传统大模型对话不同,ReAct通过“思考-行动-观察”的循环机制,让AI像人类一样工作:先分析问题,选择合适的工具执行,观察结果后继续推理。 这篇文章从零实现一个完整的ReAct Agent系统,代码简洁但功能完整,适合作为Agent开发入门项目。

7DGroup,让技术更有价值! 2781

【保姆级教程】从零手写 ReAct 智能体:让大模型通过 Python 调用本地工具

本文介绍了如何用纯Python实现一个具备思考能力的AI助手,无需复杂框架。通过四个核心模块:封装大模型(LLMClient)、工具注册中心(ToolRegistry)、ReAct思考引擎(ReActAgent)和启动入口(main.py),构建了一个能自主调用Python函数解决问题的智能体。该Agent采用"思考-行动-观察"的循环机制,可以执行计算、测量字符串长度等任务。文章详细展示了每个模块的实现代码,并提供了运行示例,帮助初学者理解Agent的核心原理。

2501_94225863的博客 494

通达信强龙趋势幅图指标 - 精准捕捉趋势,把握强势行情,多角度分析个股,强弱一目了然

STICKLINE(趋势>0 AND SJTJ,4.8,5.8,1.5,0),COLORYELLOW;STICKLINE(资金>0 AND SJTJ,1.2,2.2,1.5,0),COLOR0080FF;STICKLINE(异动>0 AND SJTJ,0,1,1.5,0),COLORFF0080;STICKLINE(异动=0 AND SJTJ,0,1,1.5,1),COLORGRAY;

Q1809330692的博客 5584

python ai ReAct 代理(ReAct Agent)

ReAct 代理(ReAct Agent)是一种结合了推理(Reasoning)和行动(Action)的智能代理框架,旨在通过交互式的方式解决复杂任务。ReAct 的核心思想是让代理在完成任务时,能够动态地推理下一步行动,并根据环境反馈调整策略。ReAct 代理是一种强大的智能代理框架,通过结合推理和行动解决复杂任务。代理分析任务,生成下一步的行动计划(例如“调用搜索引擎查询 2023 年诺贝尔文学奖”)。行动的结果会反馈给代理,用于指导下一步的推理和行动。每次循环都会更新代理的知识和策略,直到任务完成。

nbspzs的专栏 1137

IAR9.X半主模式异常解析:为何硬件复位后仍陷调试状态?

本文深入解析了IAR 9.X半主模式异常问题,探讨了硬件复位后MCU仍陷调试状态的原因及解决方案。通过分析半主模式工作机制,提供了禁用半主功能、重写低级IO函数等具体方法,并给出了版本兼容性处理和调试与量产配置分离的优化建议,帮助开发者有效解决复位异常问题。

oo7890的博客 599

【上海大学计算机组成原理实验报告】一、数据传送实验

将58H写入A寄存器//将6BH写入W寄存器//将C3H写入R1寄存器//将C3H写入R1寄存器//了解实验仪器数据总线的控制方式//掌握数据传送的基本原理//掌握各寄存器的结构、工作原理及其控制方法//数据传送实验

HackerKevon的博客 3505

【Agent零基础入门课程】手搓AI智能体:30行代码带你玩转ReAct、Plan-and-Solve与Reflection

本文摘要: 《手搓AI智能体:30行代码玩转三大范式》介绍了构建AI智能体的三种核心方法:1)ReAct范式通过"思考-行动-观察"循环实现动态任务处理;2)Plan-and-Solve范式先规划后执行,适合复杂逻辑任务;3)Reflection范式通过"生成-评价-修正"循环提升输出质量。文章以简洁的Python代码示例展示了每种范式的实现原理,强调理解底层思维模式比单纯调包更重要。这三种范式可单独使用或组合,适用于不同业务场景,为开发者提供了构建高效智能体的基础框

weixin_44471994的博客 1183

项目管理-(补充)七种基本质量工具

七种基本质量工具,用于PDCA循环的架构内 解决与质量相关的问题,分为老七工具和新七工具。 1)老七种:刘英只点劣质茶(流程图、因果图、直方图、散点图、帕累托图、控制图、核查表)2)新七种:锯树联亲测动优(矩阵图、树形图、关联图、亲和图、过程决策程序图、活动网络图、优先矩阵)

weixin_42081167的博客 4600

200 行 Python 代码,从零手搓极简 Agent,吃透智能体核心原理!

不到 200 行的核心代码,实现一个完整可用、能落地干活的 AI Agent,它具备以下核心要素:短期记忆、工具调用、上下文管理、长期记忆 RAG。

『一枫说码』的博客! 463

分区补光与ISP图像调节技术

在安防监控场景中,逆光、强光、明暗不均(如门口 / 窗边的 “阴阳脸” 画面)是导致图像细节丢失的核心问题。分区补光技术通过对画面不同亮度区域精准补光,解决 “局部过曝 / 欠曝” 难题;ISP(图像信号处理器)图像调节技术则通过算法优化,提升画面色彩、对比度与细节。二者协同可实现 “硬件补光 + 算法优化” 的双重增强,是低功耗摄像机实现高清画质的关键技术组合。分区补光与 ISP 图像调节技术:原理、协同方案及安防监控应用案例。一、核心技术原理解析。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 720

【深度学习新浪潮】李飞飞团队VAGEN框架深度解析:让VLM智能体学会“三思而后行“

VAGEN框架的真正价值,不仅在于性能指标的突破,更在于重新定义了VLM智能体的发展方向——人工智能的进步不应只追求"做得对",更要实现"想得清"。李飞飞团队通过强制显式思考、动态表示适配和精细化奖励三大创新,让智能体第一次具备了可解释的世界建模能力。正如人类通过"观察-预测-行动"认识世界,VAGEN为AI注入的这种思考范式,或许正是通往通用人工智能的关键一步。对于开发者而言,开源的VAGEN框架不仅提供了强大的工具,更揭示了一个重要理念:让AI学会思考,比让它学会执行更重要。

专注:太空算力、AI infra、异构调度、大模型成本工程 277

Python+AI智能体(Agent)零基础入门全攻略:原理、架构、手搓代码与实战落地

本文介绍了AI Agent智能体的核心概念、开发框架及Python实战指南。首先对比了AI Agent与大模型的本质区别,强调Agent具备自主规划、工具调用、记忆存储等能力。文章详细解析了智能体的五大核心模块和闭环执行流程,并对比了主流Python开发框架(如LangChain、AutoGen等)。针对初学者,提供了完整的开发环境配置指南,并重点演示了如何用纯Python手写实现具备ReAct范式的原生智能体,包括工具调用和任务闭环功能。最后给出了从单智能体到多Agent协作的学习路线建议,帮助开发者快速

2602_94956987的博客 1596

【开源电机驱动】位置环控制

这是三闭环里的最后一个:位置闭环控制。如果你认真的阅读并推导了前章节,那么这一节将会很好理解。一如既往,我会使用简练的语言来描述复杂的问题。本章节主要涉及位置环的一些概念,以及控制框图。文章不会涉及具体的代码。

BadBoyHolly的博客 6088

【Python 手搓 ReAct Agent】一文吃透「Thought - Action - Observation」闭环

ReAct 智能体框架解析 本文基于Datawhale开源项目hello-agents,详细解析了ReAct(Reasoning and Acting)智能体架构。ReAct通过结合推理(Thought)与行动(Action)的循环机制,实现了"思考-行动-观察"的动态交互流程。文章首先对比了纯推理与纯行动方法的局限性,然后重点介绍了ReAct的创新工作流程,包括其核心的Thought->Action->Observation循环机制。在技术实现层面,详细讲解了LLM客户端类

weixin_50512050的博客 1146

【漏洞复现】Palo Alto Networks PAN-OS GlobalProtect 命令注入漏洞 CVE-2024-3400

在特定PAN-OS版本和不同功能配置下,未经身份验证的攻击者可能利用此漏洞在防火墙上以root权限执行任意代码。技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。本文所提供的工具仅用于学习,禁止用于其他!poc如下,注入点在Cookie中,将其中的DNSlog地址替换为你的dnslog地址,借助DNSLOG来复现,可以使用http://dnslog.pw/

失心少年 1218

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

一文入门ReAct Agent,附从零构建 ReAct Agent

这篇文章不谈虚的:咱今天就把ReAct Agent扒开,看看它到底是怎么“想事儿”和“干活儿”的, 顺便手把手带你把理论落地成实践。纸上谈兵?不存在的!准备好了就上车,一起把这“智能代理”的门道整明白!

m0_74969835的博客 1187

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【必收藏】手把手教你实现ReAct框架AI Agent:从零搭建智能体“思考-行动-观察“闭环系统

其实对于AI Agent的介绍已经非常非常多了,简单来说,AI Agent 是一种具备“感知-思考-行动”能力的智能体,它能接收任务,自动推理并调用外部工具完成复杂流程。而在众多 Agent 架构中,ReAct 框架(Reasoning + Acting)是一种非常经典的思维方式——它让大语言模型一边推理(用 Thought 表达思考过程),一边行动(用 Action 执行操作),并根据返回结果(Observation)继续决策,直到给出最终的答案。

大模型教程的博客 869

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

手搓AI Agent:从ReAct原理到可运行的最小闭环系统

AI Agent不是高级提示词工程,而是具备感知、推理、行动与反馈能力的智能体系统。其核心原理源于ReAct范式——将大模型的思维过程(Reasoning)与工具调用行为(Acting)解耦并结构化。这种设计赋予系统任务分解、失败回退、状态追踪等关键工程能力,显著提升复杂业务场景下的鲁棒性与可解释性。在智能客服、自动化运营、跨系统调度等真实应用中,一个能稳定执行多跳指令、支持上下文记忆并具备熔断机制的Agent,远比‘跑通demo’的封装器更具技术价值与落地潜力。本文聚焦手搓级实践,深入拆解ReAct三层架

weixin_30819085的博客 499

LLM 只会生成文本?用 ReAct 模式手搓一个简易 Claude Code Agent

摘要: 大语言模型(LLM)与Agent的结合正成为AI落地的关键方向。ReAct模式通过“思考-行动-观察”循环,赋予Agent决策与执行能力。Agent具备自主性、交互性和目标导向性,以LLM为“大脑”,工具为“手脚”。实现ReAct需构建结构化Prompt,引导LLM分步生成指令,执行工具调用并迭代优化,直至任务完成。本文以网页端模拟和代码实践为例,演示如何从零构建基础ReAct Agent。

听得到微笑的博客 1692

手把手教学:1小时从零构建你的ReAct Agent!万字保姆级指南,吃透大模型智能体核心

其实对于 **AI Agent** 的介绍已经非常非常多了,简单来说,AI Agent 是一种具备“感知-思考-行动”能力的智能体,它能接收任务,自动推理并调用外部工具完成复杂流程。而在众多 Agent 架构中,**ReAct 框架(Reasoning + Acting)是一种非常经典的思维方式——它让大语言模型一边推理**(用 Thought 表达思考过程),一边**行动**(用 Action 执行操作),并根据返回结果(Observation)继续决策,直到给出最终的答案。

m0_59163425的博客 1177

从零手搓AI Agent:不依赖框架的ReAct循环与工程实践

大语言模型(LLM)通过提示词工程与工具调用协议,可构建具备感知、规划、执行与反思能力的AI Agent。其核心原理是ReAct循环:模型在每轮推理中显式输出思考与行动,调用外部工具并将结果反馈至上下文,形成闭环。技术价值在于摆脱高度封装的Agent框架后,开发者能精准控制循环终止、上下文管理与工具调度,从而解决工具调用死循环、RAG介入层级模糊等工程痛点。典型应用场景包括智能客服、知识库问答与自动化任务处理。本文围绕手搓AI Agent的完整链路,从ReAct循环实现、工具注册、记忆管理到RAG知识库接入

weixin_29057163的博客 327
上一篇: 企业级 AI 落地关键:一文吃透智能体核心 ReAct 机制
下一篇: 【收藏必看】零基础也能学会!AI智能体构建全攻略:打造你的专属AI助手
冻感糕人~
博客等级 码龄3年 8923粉丝 2332原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值