AI Engineering 实战锻造场。
这个仓库通过文章、Notebook 和可运行示例,持续研究 LangChain、LangGraph、RAG、MCP、Sec for AI、Agent 工程化、记忆、工具调用与安全控制。每个专题的 README 提供专题介绍、学习路线和内容入口。
下面汇总 labs/ 实验内容与 drafts/ 发布稿、规划稿的并集;完整实验路线优先进入对应专题 README,发布稿可从 drafts/ 阅读。
| 专题 | 当前覆盖与进展 | 入口 |
|---|---|---|
| LangChain | 已覆盖模型接入、Messages、Prompt、Tools、短期/长期记忆、Embeddings、LCEL、ReAct Agent,以及限流、兜底、人工审批、脱敏、上下文管理和动态提示词等 Middleware 工程化主题。 | 查看专题 |
| LangGraph | 已覆盖 State、Node、Edge、条件边、ToolNode、Reducer、Checkpoint、多轮对话、状态回退、Postgres 持久化、Human-in-the-loop、Durable Execution、Memory、Streaming、Send、Command、Runtime Context、工具调用治理、RAG 接入和子图设计,并整理了 Streaming、tool loop、Send、Command、Runtime Context、工具治理、RAG 接入、子图设计等发布稿。 | 查看专题 / 发布稿 |
| RAG | 已覆盖 RAG 基础、向量与余弦相似度、CSV/JSON/PDF/Text/Markdown/目录加载、Text Splitter、向量库增删查与持久化、Retriever,以及最小 Prompt + LLM 问答链路。 | 查看专题 |
| MCP | 已覆盖 Host、Client、Server、Tool、Resource、Prompt、初始化与能力发现、stdio/Streamable HTTP Transport、调试、输入安全、Host 权限、执行安全、审计安全、远程访问、远程授权、工具上下文规模和真实远程服务接入。 | 查看专题 / 发布稿 |
| Sec for AI | 已覆盖间接 Prompt Injection、Skill Reference 路径穿越、工具描述投毒等应用层安全问题,并在路线图中规划模型、数据、Prompt、RAG、Agent、供应链、安全评测与运行治理等方向。 | 查看专题 / 发布稿 |
| Skills | 已覆盖 Skills 在 Agent 架构中的定位、最小 SKILL.md、Action 与 Reference、Instruction-only / Executable、脚本执行、本地 runtime、MCP 工具约束,以及和 LangGraph 路由、执行、人工确认的结合。 | 查看专题 / 发布稿 |
| Coding | 已收录 Python @dataclass、FastAPI Depends 和 LangGraph Streaming v2 get_stream_writer 等 AI 工程常用编码基础与服务化实践笔记。 |
查看内容 |
下面展示各专题的前 10 项内容,帮助你快速了解仓库目前覆盖的问题。完整路线和后续计划请进入对应专题。
| 序号 | 文件 | 研究问题 | 状态 |
|---|---|---|---|
| 01 | LangChain开发环境搭建.ipynb | 如何搭建可运行的 LangChain 开发环境? | 已完成 |
| 02 | 基于 OpenAI Python SDK的模型接入方式.ipynb | 不使用 LangChain 时,如何通过 OpenAI Python SDK 接入模型? | 已完成 |
| 03 | 快速体验LangChain.ipynb | 如何完成第一次 LangChain 模型调用? | 已完成 |
| 04 | LangChain推荐的模型创建方式.ipynb | LangChain 推荐怎样创建和配置模型? | 已完成 |
| 05 | LangChain中模型调用的两种方式.ipynb | 不同模型调用方式分别适合什么场景? | 已完成 |
| 06 | LangChain中的消息(Messages).ipynb | LangChain 如何表示不同角色的消息? | 已完成 |
| 07 | LangChain 提示词工程.ipynb | 如何组织可复用的提示词? | 已完成 |
| 08 | LangChain中的工具(Tools).ipynb | 模型如何发现并调用外部工具? | 已完成 |
| 09 | LangChain中的短期记忆(InMemorySaver).ipynb | InMemorySaver 如何保存对话状态? |
已完成 |
| 10 | LangChain中的短期记忆(SqliteSaver与PostgresSaver).ipynb | SQLite 与 Postgres Saver 如何持久化状态? | 已完成 |
| 序号 | 文件 | 研究问题 | 状态 |
|---|---|---|---|
| 00 | LangGraph系统学习路线.md | LangGraph 的核心概念应该按什么顺序学习? | 已完成 |
| 01 | LangGraph 入门第一步:从开发环境搭建到可视化跑通.ipynb | 如何搭建环境并运行第一个可视化 Graph? | 已完成 |
| 02 | LangGraph 启动原理:CLI 如何找到并加载 Graph.md | LangGraph CLI 如何找到并加载 Graph? | 已完成 |
| 03 | LangGraph Studio 数据流:云端界面如何连接本地 Graph.md | 云端 Studio 如何连接本地 Graph? | 已完成 |
| 04 | LangGraph 核心三件套:用一个订单计算器看清Node、State、Edge.md | 如何用最小例子理解 LangGraph 的核心三件套? | 已完成 |
| 05 | LangGraph 常用语法:类型提示与Lambda.ipynb | LangGraph 示例中常见的 Python 语法如何工作? | 已完成 |
| 06 | LangGraph 基础骨架:State、Node、Edge、Graph 是什么.ipynb | State、Node、Edge 和 Graph 如何组成完整流程? | 已完成 |
| 07 | LangGraph 条件边:让流程根据 State 分支.ipynb | 如何根据 State 动态选择流程分支? | 已完成 |
| 08 | LangGraph 工具节点:tools、ToolNode、Runnable 是什么.ipynb | Tools、ToolNode 与 Runnable 如何协作? | 已完成 |
| 09 | LangGraph 状态更新与 Reducer.ipynb | 并发或连续更新时如何合并 State? | 已完成 |
| 10 | Graphviz 与 LangGraph:安装、绘图与导出.ipynb | 如何绘制和导出 Graph 结构? | 已完成 |
| 序号 | 文件 | 研究问题 | 状态 |
|---|---|---|---|
| 01 | RAG基础通识.md | RAG 解决什么问题,完整链路包含哪些环节? | 已完成 |
| 02 | 向量基础通识.md | 文本为什么可以表示成向量? | 已完成 |
| 03 | 余弦相似度到底在算什么.md | 余弦相似度究竟在比较什么? | 已完成 |
| 04 | RAG中的CSV文档加载(CSVLoader).ipynb | 如何把 CSV 数据转换成文档? | 已完成 |
| 05 | RAG中的JSON文档加载(JSONLoader).ipynb | 如何读取和组织 JSON 文档? | 已完成 |
| 06 | RAG主流文档加载器速查(PDF、Text、Markdown、目录).ipynb | PDF、Text、Markdown 和目录应该如何加载? | 已完成 |
| 07 | RAG文档切分 Text Splitter.ipynb | 文档为什么要切分,常见切分策略如何选择? | 已完成 |
| 08 | RAG向量库的增删查与持久化.ipynb | 如何完成向量数据的增删查与持久化? | 已完成 |
| 09 | RAG Retriever 检索器.ipynb | 检索器如何从向量库取回相关上下文? | 已完成 |
| 10 | RAG最小问答链路:Prompt组装与LLM调用.ipynb | 如何把检索结果、Prompt 和 LLM 组成最小 RAG? | 已完成 |
| 序号 | 文件 | 研究问题 | 状态 |
|---|---|---|---|
| 01 | MCP 是什么:先把它放回 AI 应用架构里理解.md | MCP 到底是什么,解决了什么连接问题? | 已完成 |
| 02 | MCP 架构:从一次订单分析看懂 Host、Client、Server.md | Host、Client、Server 如何在一次订单分析中协作? | 已完成 |
| 03 | MCP Tool、Resource、Prompt:从会用到会设计.md | 一个能力应该设计成哪种 Server Primitive? | 已完成 |
| 04 | MCP 通信过程:从 initialize 到 tools-call.ipynb | 从 initialize 到 tools/call,MCP 消息如何流动? |
已完成 |
| 05 | MCP Transport:stdio 与 Streamable HTTP 如何传递消息.md | 同一组消息如何通过 stdio 和 Streamable HTTP 传递? | 已完成 |
| 06 | MCP Client:Host 如何发现并调用 Server 能力.md | Host 如何发现多个 Server 的能力并正确路由调用? | 已完成 |
| 07 | MCP 调试:从 Server 启动失败到 Tool 调用异常.md | 如何按进程、Transport、生命周期、能力发现和执行逐层定位失败? | 已完成 |
| 08 | MCP 输入安全:参数限制、Schema 与数据最小化.md | Tool 如何限制输入范围和返回数据? | 已完成 |
| 09 | MCP Host 权限:Tool 白名单与危险操作确认.md | Host 何时允许 MCP Client 发送 Tool 调用? | 已完成 |
| 10 | MCP 执行安全:业务边界、幂等与重复调用.md | Server 如何约束危险操作的真实副作用? | 已完成 |
| 序号 | 文件 | 研究问题 | 状态 |
|---|---|---|---|
| 01 | 间接 Prompt Injection:业务数据也可能变成指令.md | 外部业务数据如何诱导模型提出危险 Tool 调用并造成真实副作用? | 已完成 |
| 02 | Skill 权限绕过:Reference 的路径穿越风险.md | 只控制 Skill 可见性时,内部 reference 读取如何绕过权限边界? | 已完成 |
| 03 | 工具描述投毒:Agent 也会被“自我介绍”带偏.md | 工具描述如何影响 Agent 工具选择,并把调用引向错误能力? | 已完成 |
| 序号 | 文件 | 研究问题 | 状态 |
|---|---|---|---|
| 01 | Skills 的定位:它在 Agent 架构中解决什么问题.md | Skills 到底应该放在 Agent 架构的哪一层? | 已完成 |
| 02 | 最小 SKILL.md:一个 Skill 如何被发现和使用.md | 一个最小 SKILL.md 至少要写清哪些内容,才能被发现和使用? |
已完成 |
| 03 | Skill 的两种常见设计形态:Action 与 Reference.md | Action 与 Reference 分别适合承载什么内容,如何组合? | 已完成 |
| 05 | 教学用 Skills runtime:扫描、路由、加载、执行如何分工.md | 一个支持 Skills 的最小 runtime 应该如何拆分扫描、路由、加载、执行和记录? | 已完成 |
| 10 | Skills + MCP:如何让 Skill 指导 MCP 工具调用.md | Skill 如何说明并指导模型使用 MCP Server 暴露的工具? | 已完成 |
文章和 Notebook 可以直接在线阅读,无需安装本地环境。
如果你希望运行 Notebook 或复现示例,本仓库要求 Python 3.13 或更高版本,并使用 uv 管理依赖:
uv sync
uv run jupyter notebook不同实验可能有额外启动参数,请查看对应专题说明。例如:MCP README。
公众号用于发布更短、更聚焦的文章版本;仓库保留完整实验和持续更新的研究记录。
已整理的公众号稿按专题收录,例如 LangGraph 公众号稿 和 Skills 公众号稿。
