1天1个项目推荐|Agent项目学习

手把手带你从零搭一个 AI Agent|本地运行,不花一分钱

今天推荐一个 GitHub 上的宝藏项目——AI Agents from Scratch,用本地大模型从第一性原理构建 AI Agent。不需要 API Key,不需要花钱,不需要 GPU,8GB 内存的笔记本就能跑。

为什么推荐这个项目?

市面上大部分 Agent 教程都是"调 API + 套框架",你跟着跑通了,但不知道底层在干嘛。这个项目不一样:

  • 从零开始:不用 LangChain、不用 AutoGen,纯手写
  • 本地运行:用 node-llama-cpp 加载 GGUF 模型,完全离线
  • 10 个递进式 Lesson:从"调用一次 LLM"到"写出完整 ReAct Agent"
  • 每个 Lesson 都有原理文档(CONCEPT.md)+ 代码实现(CODE.md)

学完之后你再去用 LangChain / LangGraph,会发现"原来框架就是帮我封装了这些东西"。

环境准备(5 分钟)

1. 安装 Node.js

确保 Node.js 版本 ≥ 18:

node -v   # 需要 v18+

2. 克隆项目并安装依赖

git clone https://github.com/pguso/ai-agents-from-scratch.git
cd ai-agents-from-scratch
npm install

3. 下载模型

项目使用 GGUF 格式的本地模型。推荐 Qwen2.5-7B-Instruct(约 4.7GB),8GB 内存就能跑:

mkdir models
# 从 Hugging Face 下载(需要梯子)或国内镜像
# 把 .gguf 文件放到 models/ 目录下

国内用户可以去 hf-mirror.com 搜索 "Qwen2.5-7B-Instruct-GGUF" 下载 Q4_K_M 量化版本。

学习路线:4 个关键 Lesson

项目有 10 个 Lesson,但核心是下面 4 个。跟着做完,你就理解了 Agent 的本质。

Lesson 1:Hello LLM(examples/01_intro)

目标:加载本地模型,发送第一条消息。

这一步的意义是让你理解:Agent 的底层就是在跟一个 LLM 对话,所有的"智能"都建立在这个基础上。

跑起来之后你会看到模型的回复一个字一个字地流式输出,这就是最原始的 LLM 交互。

Lesson 2:Function Calling(examples/07_simple-agent)

目标:让 LLM 学会调用外部工具——这是 Agent 的核心能力。

核心概念:普通的 LLM 只能生成文字。但如果你告诉它"你有这些工具可以用",它就能判断什么时候该用工具、用哪个工具、传什么参数。

代码关键部分——定义一个工具:

const multiply = defineChatSessionFunction({
  name: "multiply",
  description: "Multiplies two numbers",
  parameters: {
    type: "object",
    properties: {
      a: { type: "number" },
      b: { type: "number" }
    }
  },
  callback: async (a, b) => {
    const result = a * b;
    return result.toString();
  }
});

就这么简单——给工具一个名字、一段描述、定义参数类型、写好执行逻辑。LLM 会根据 description 自动判断什么时候该调用它。

这就是所有 Agent 框架的底层原理。LangChain 的 Tool、OpenAI 的 Function Calling、Claude 的 Tool Use,本质上都是在做这件事。

Lesson 3:ReAct Agent(examples/09_react-agent)⭐ 最重要

目标:搭一个完整的 ReAct Agent——当前最主流的 Agent 架构。

ReAct = Reasoning + Acting,Agent 的工作循环是:

思考(Thought)→ 行动(Action)→ 观察(Observation)→ 思考 → 行动 → ... → 最终答案

系统提示词——告诉 LLM 按这个模式工作:

const systemPrompt = `你是一个数学助手,使用 ReAct 方法。
你必须严格按照以下模式:

Thought: [分析需要什么计算]
Action: [调用一个工具]
Observation: [等待结果]
Thought: [分析结果,决定下一步]
...
Thought: [已获得所有信息]
Answer: [最终答案,停止]`;

核心循环——Agent 的"大脑":

async function reactAgent(userPrompt, maxIterations = 10) {
    let iteration = 0;
    
    while (iteration < maxIterations) {
        iteration++;
        
        const response = await session.prompt(
            iteration === 1 ? userPrompt : "Continue your reasoning.",
            { functions, maxTokens: 300 }
        );
        
        // 检测到 "Answer:" 就停止循环
        if (response.toLowerCase().includes("answer:")) {
            return response;
        }
    }
}

实际运行效果(问它"一家店周一卖15件、周二卖20件、周三卖10件,每件8元,求日均销量和总收入"):

--- Iteration 1 ---
Thought: 我需要先算每天的收入
Action: multiply(15, 8)
Observation: 120

--- Iteration 2 ---
Thought: 周一收入120,现在算周二
Action: multiply(20, 8)
Observation: 160

--- Iteration 3 ---
Thought: 周二160,算周三
Action: multiply(10, 8)
Observation: 80

--- Iteration 4 ---
Thought: 三天收入 120+160+80,求总和
Action: add(120, 160)  →  280
Action: add(280, 80)   →  360

--- Iteration 5 ---
Thought: 总收入360,日均销量 = (15+20+10)/3
Action: add(15, 20) → 35
Action: add(35, 10) → 45
Action: divide(45, 3) → 15

Answer: 日均销量15件,总收入$360

关键理解:Agent 不是一次性给出答案,而是一步步推理、一步步调用工具、一步步验证。这就是为什么它能解决复杂问题——把大问题拆成小步骤。

Lesson 4:Memory Agent(examples/08_simple-agent-with-memory)

目标:给 Agent 加上记忆,让它记住之前的对话。

没有 Memory 的 Agent 每次对话都是"失忆"的。加上 Memory 后,它能记住你之前说过什么、做过什么,实现连续对话。

这就是 ChatGPT 能记住上下文的原理——把历史对话存起来,每次请求都带上。

学完之后能做什么?

理解了 Function Calling + ReAct + Memory 这三个核心概念后,你可以:

  1. 看懂任何 Agent 框架的源码——LangChain、AutoGen、CrewAI 都是在这三个概念上做封装
  2. 写进简历——"从零实现了基于 ReAct 架构的 AI Agent,支持工具调用和持久化记忆"
  3. 扩展成自己的项目——把计算器工具换成天气 API、数据库查询、网页搜索,就是一个实用的 Agent

扩展方向(面试加分项)

方向 怎么做 面试怎么说
接入真实 API 把工具换成天气/搜索/数据库查询 "实现了多工具编排的 Agent"
多 Agent 协作 让两个 Agent 互相对话、分工 "设计了多 Agent 协作架构"
RAG 增强 加向量数据库做知识检索 "实现了 RAG 增强的智能问答系统"
Web UI 用 React 做个聊天界面 "全栈开发了 AI Agent 应用"

总结:Agent 的本质就三件事——调用工具(Function Calling)、循环推理(ReAct)、记住上下文(Memory)。这个项目用最少的代码把这三件事讲透了。

项目地址:github.com/pguso/ai-agents-from-scratch

clone 下来,今晚就能跑起来。 ![alt]

#AI求职实录#
全部评论

相关推荐

03-12 21:22
门头沟学院 Java
从0到java大王:这就是大厂笔试题吗,感觉比平时刷的力扣难,要么是数学题要么是看着比较复杂的题,只会第一道题,第四道题暴力直接超市,二三看了会就放弃了
点赞 评论 收藏
分享
一共一个小时,面试难度以及自己的回答算是最近的面试压力比较大的,实习问了30分钟,中间穿插八股。1.redis数据结构2.redis持久化机制3.mysql索引底层4.聚簇索引与非聚簇索引5.索引优化6.索引失效7.mysql执行一条sql8.那么多索引mysql怎么选(不会)9.tcp与udp区别10.tcp为什么可靠11.消息队列作用12.kafka怎么保证消息有序性13.mcp是什么?14.skills是什么?15.jvm内存分配与回收过程(我讲了从创建对象到判断垃圾对象到垃圾回收我全说了一遍,是这个吗?)16.fullgc触发机制17.tcp的拥塞控制流程(不会了)18.分布式事务解决方案,说了2pc,3pc,tcc。算法是反转双向链表,没有按格式输出,但是面试官没让继续写了,面完以为挂了,结果晚上秒过,看看复试什么情况吧。今天百度打电话准备发offer了,业务跟在手子的差不多,很垂,并且说不分日常暑期,只看表现,会有转正机会,但是考虑再三还是拒绝了,百度实习薪资确实有点低,title也不如之前了,但是面试的二位业务老师我很喜欢,对我的评价也不错,希望之后能有机会共事。从三月份到现在一共面了六家,面试次数总共是8场,情况如下:脉脉二面(无答复,默认挂)百度二面已oc美团一面过,下周一二面shein一面过直接HR面游族一面过直接HR面腾讯一面过等待约二面滴滴明天一面面试通过率还是蛮高的,但是大部分都是日常,感觉对我现在的加成不大,大概率不会去,不知道暑期会是什么情况呢唉,希望能有面试吧,继续加油。字节被无hc直接取消了,现在还没人捞,有没有字节HR救救我
不管什么都不想跳动了:本人美团百度快手都待过,建议肯定是直接留快手多一点产出后转正or直接冲字节腾讯暑期吧。一是快手从福利到基建都吊打另外两家。美团现在这个业务比较惨,本来毛利就很低,亏损严重,今年很可能要优化人力降低成本,去了别说日常,就算暑期后面都很可能被优化。百度其实实习生权限挺高的,可以接触到一些含金量高的项目,但是现在的风评不如之前了,薪资也不高。二是转正概率和薪资是跟产出挂钩的,你都在手子已经积累产出了,去其他家日常实习产出都是从0开始,肯定不可能有你在手子转正可能性大啊,现在日常压根没必要去,而且我有两个师弟都是在快手日常转正的,不用太担心,安心留在手子一边多做一点产出然后一边冲字节腾讯暑期,字节腾讯今年实习岗位非常多的,不如好好把握这个,加油。
今天你投了哪些公司?
点赞 评论 收藏
分享
平衡劈叉树:同一个部门,你这还没到时候呢,我那天一面找死锁,半个小时后二面,二面比较正常项目,我觉得答挺好,三面丢了俩脑筋急转弯我就搁那做了两个点,那天从四点面到八点,最后挂了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务