mem0学习笔记3:与 LangChain 的无缝集成

在 第二部分 中,我们手动实现了一个带记忆的 ReAct 智能体。但在真实项目中,你不会从零开始写 ReAct 循环。 你会使用像 LangChain 这样的成熟框架。那么,如何将 Mem0 集成进去呢? LangChain 的 Agent 架构 LangChain 提供了一个强大的 AgentExecutor,它已经实现了完整的 ReAct 循环。你只需要: 1. 定义工具 (Tools) 2. 提供 LLM 3. 运行 executor.run() from langchain.agents import initialize_agent, Tool from langchain.llms import OpenAI…

mem0学习笔记2:构建你的第一个带记忆的 ReAct 智能体

在 第一部分 中,我们理解了 ReAct 智能体的记忆问题。现在,让我们动手构建一个真正能"记住"的智能体。 我们将从零开始实现一个 ReAct 循环,然后逐步加入 Mem0 记忆层。 ReAct 循环的核心结构 在开始之前,让我们先理解 ReAct 循环的本质。它是一个 Thought → Action → Observation 的迭代过程。 while not task_complete and steps < max_steps: # 1. Thought: 智能体分析当前状态并制定计划 thought = llm.generate(f"当前状态: {state}\n下一步应该做什么?"…

mem0学习笔记1:ReAct 智能体的记忆困境

如果你正在构建 AI 智能体,你可能已经遇到了一个让人抓狂的问题:智能体似乎患有"阿尔茨海默症"。 它刚刚花了 3 步去搜索某个 API 文档,但 5 分钟后,当你问同样的问题时,它又重新搜索了一遍。它无法记住自己做过什么、学到了什么,更不用说记住用户的偏好了。 这不是某个框架的 bug,这是 ReAct 智能体架构的固有问题。 什么是 ReAct? 在深入记忆问题之前,让我们先理解 ReAct(Reasoning and Acting)范式。 ReAct 是由 Yao 等人在 2022 年提出的一种 Agent 架构模式。它的核心思想是:让 LLM 交替进行"思考"…

Go-Sandbox 开发实录 (4):穿越铁窗 —— 那些关于 IO 和超时的坑

牢笼建好了,犯人也关进去了。最后的问题是:我们怎么知道他在里面干了什么? 对于 Code Interpreter 来说,用户的代码输出(Stdout/Stderr)必须实时、完整地传回给前端。而且,如果代码死循环了,我们得能把它杀掉。 这两个看似简单的需求,在实现时也让我们踩了不少坑。 坑一:IO 阻塞与 Goroutine 泄漏 最初,我们简单地用 cmd.StdoutPipe() 获取管道,然后在一个 Goroutine 里读。 // 错误示范 go func() { io.Copy(outputChan, stdoutPipe) }() 但在高并发场景下,我们发现 Goroutine 数量飙升。原来,如果 Python 进程异常退出或者被 kill 掉,有时候管道的 Read…

Go-Sandbox 开发实录 (3):画地为牢 —— 我们是如何构建“监狱”的?

把 Go 代码注入到 Python 进程后,我们拿到了控制权。现在的任务是:把这个进程关进“监狱”里。 在 internal/core/lib/python/add_seccomp.go 中,我们定义了这座“监狱”的构造。 第一步:切断退路 (Chroot) 首先要解决的是文件系统的隔离。我们不希望用户代码能看到 /etc/passwd,也不希望它能看到宿主机的任何文件。 chroot 是最古老也是最有效的手段之一。 // internal/core/lib/python/add_seccomp.go func InitSeccomp(uid int, gid int, enable_network bool) error { // 1.…

Go-Sandbox 开发实录 (2):特洛伊木马 —— 如何“黑”进 Python 进程?

在上一篇中,我们确定了“进程级沙箱”的路线。但摆在面前的第一个技术难题是:如何在 Python 进程启动的那一刻,强行插入我们的安全代码? 我们需要在用户代码执行之前,完成 Chroot 和 Seccomp 的设置。如果等到用户代码开始跑了再限制,黄花菜都凉了。 尝试一:直接修改解释器源码? 最硬核的办法是下载 CPython 源码,在 main 函数里加几行代码,重新编译一个 safe-python。 但这太蠢了。 1. 维护噩梦:每次 Python 发新版,我们都得重新打补丁、编译。 2. 不通用:那 Node.js 怎么办?Java 怎么办?难道都要改源码? 我们需要一种非侵入式的方案。 尝试二:LD_PRELOAD? Linux 有个黑魔法叫…

Go-Sandbox 开发实录 (1):为了毫秒级启动,我们放弃了 Docker

做 LLM Agent 开发时,Code Interpreter 是个绕不开的功能。让 AI 写代码容易,但让它安全地运行代码,却是个棘手的工程问题。 在设计 go-sandbox 之初,我们面临的最大抉择就是:到底是用 Docker,还是自己造轮子? Docker 的诱惑与代价 最开始,我们自然而然地想到了 Docker。它成熟、安全、隔离性好。我们尝试为每个代码执行请求启动一个容器: docker run --rm -it python:3.10 python -c "print('hello')" 但在高并发测试中,问题很快暴露了: 1. 慢:即使是热启动,容器的创建和销毁也需要几百毫秒。对于用户来说,…

X99 平台下 Docker 部署全攻略

摘要:手持 X99 平台和一张只有 2GB 显存的 GTX 960,还能玩转 Docker 和 AI 吗?本文详细对比了 Docker Desktop 与 WSL Native 两种部署方案,并深入讲解了最令人头秃的网络代理配置、数据迁移。 X99 平台凭借多核心优势,至今仍是很多开发者的主力机。但当你想在 Windows 上通过 Docker 运行 AI 模型时,往往会面临选择困难症:是装简单易用的 Docker Desktop,还是追求极致性能的 WSL 原生命令行? 本文记录了在 Windows (X99) + GTX 960 (2GB) 环境下的完整折腾记录。 第一部分:路线选择——你属于哪一派? 在…