海森堡:No money,no coding,使用第一个为agent构建的数据库。

海森堡:No money,no coding,使用第一个为agent构建的数据库。

海森堡:No money,no coding,使用第一个为agent构建的数据库。 海森堡:No money,no coding,使用第一个为agent构建的数据库。 Modified November 1, 2025 No access 20251031003403 rec 00:00 但这里还有一个潜在的问题,就是非常依赖于memory(CLAUDE.md中的内容)。一旦未来memory中的内容过多,就会导致memory召回不精准,memory之间混淆的问题,并且,我们普遍认为,memory中应该是更通用的知识,而不应该具体到传什么参数,调用那个脚本。 那有什么解决方案呢? Anthropic 10 月 17号 推出了一个新的技术——Skills,可以解决上述的问题。 Skills Skills,一种使用文件和文件夹构建专业agent的方法。通过扩展和便携的方式来赋予agent特定领域的专业知识。 简单来说,Skills 就是将特定领域的context知识外挂到一个SKILL.md文件中。如下图所示(下图是一个pdf skill,专门让agent来处理pdf)。 启动时,agent会预加载每个已安装技能的 name 和 description (下图中YAML Frontmatter中)到其system prompt中(不会读取完整的内容,防止上下文过长)。当agent判断应该执行某个Skill的时候,会继续读取这个Skill的详细信息(下图中markdown的部分)。 此外,在Skill.md中,还可以定义其他的文件(如下图)(不同的文件定义不同的能力,agent按需选择取读取这些文件),这样使用“文件系统”作为上下文的方式,有很多的好处,比如大小不受限制,天然持久化等等。 同样的思路,可以提前编写一些通用的脚本(如下图的 pdf/extract fields.py ),在md文件中中告诉 agent 什么情况下需要执行这个脚本。 那这,不就是我们之前干的事情么。。。。。 首先提前写好插入数据的脚本(insert data.py)以及检索数据的脚本(hybrid search.py);然后在 memory(CLAUDE.md) 中告诉agent当你需要插入数据的时候,就执行insert data.py这个脚本,并传入参数;当你需要检索数据的时候就执行hybrid search.py这个脚本,并传入参数。 所以,我们也可以配置一个Skill给claude code,干的就是上述的事情,这样,我们就不用依赖于memory了。 项目目录中有一个 agentic postgres skill/ 文件夹 ,他就是一个SKill;接下来,我们要把他配置到claude code中。 Code block Plain Text Copy mkdir /.claude/skills 然后将项目目录中的文件夹 agentic postgres skill/ 移动到上述目录中。 得到 /.claude/skills/agentic postgres skill/ 接下来重启claude,Skill就配置好了。 然后我们只需要这样问他,哦,在这之前,你可以放心的清空 CLAUDE.md 中的内容。 Code block Plain Text Copy 使用 agentic postgres skill 帮助我检索一下 文章 "A Definition of AGI" 中通过哪些维度来量化AGI呢? claude code中运行流程如下: No access 20251031140816 rec 00:00 上面这个视频中,我们通过这个agentic postgres skill 轻松的实现了数据的检索。 可能有人会觉得 Skills 太简单,几乎算不上一个功能。很多人早就尝试过向 md 文件中添加额外指令,并告诉agent在继续执行任务前读取该文件。比如执行动作前先读取 AGENT.md 。 但 Skills 设计的简单性是让我如此兴奋的原因,这里我们可以简单比较一下MCP和Skills。 MCP 是一个完整的协议规范,涵盖了主机、客户端、服务器、资源、提示、工具、采样、根、引出以及三种不同的传输方式(标准输入输出、流式 HTTP 和原始的 SSE)。 Skills是带有少量 YAML 元数据的 Markdown,以及一些可选的、在环境中可执行的脚本。它们感觉更接近 LLM 的精神——输入一些文本,让模型自行处理。 它们将困难的部分外包给 LLM 框架和相关计算机环境。我认为这是一个非常明智的策略。 你可以非常轻松的像我们配置agentic postgres skill一样配置其他的skill,比如Anthropic官方出的这些skill。 https://github.com/anthropics/skills 以上,就是本篇文章的全部内容,从 tiger 这家公司新出的agentic postgres数据库入手,我们通过利用 mcp 以及一些额外的脚本链接到了agentic postgres数据库,实现了数据的插入和检索。然后我们探讨了"上下文卸载"这个重要的context engineer的方式,将脚本提前写好,只告诉agent应该在什么场景下如何调用这个脚本,并且需要传入什么参数。这大大提高了agent执行任务的效率和准确性。 接着,我们过渡到了anthropic新出的Skills技术,使用起来非常的简单,没有复杂的协议,只需要编写一个SKILL.md文件,编写好name 和 description,编写好这个skill的能力,如果需要的话提前写好脚本;最后只需要和agent对话的时候告诉他“ 请使用XXX 这个Skill ”。 一些废话 多说几句: • 对于我们文中搭建的知识库来讲,还有很多地方可以优化,比如 1. 现在数据插入的时候,只支持传入文本文件,也就是md或者txt等。未来,可以支持传入pdf格式的文章,先将pdf转为文本内容(使用OCR,MinerU, 或者使用一个pdf Skill都可以实现),再插入到数据库中。 2. 一篇文章首先要被分chunk,然后再embedding。目前分chunk使用的是一个开源库(chonkie);代码中分chunk的逻辑是写死的,且只是使用了 chonkie 中最基础的功能,真实的分chunk逻辑可以更fancy一点;且分chunk的效果并没有测试。 3. 检索数据也可以再优化一下,目前混合检索(同时检索关键词和embedding向量)使用的是最简单的 RRF混合检索。 RRF 公式: 1 / (k + rank) RRF混合检索示例sql,k=60 SQL Copy SELECT d.id, d.title, COALESCE(1.0 / (60 + v.rank), 0.0) + COALESCE(1.0 / (60 + k.rank), 0.0) AS combined score FROM documents d LEFT JOIN vector search v ON d.id = v.id LEFT JOIN keyword search k ON d.id = k.id WHERE v.id IS NOT NULL OR k.id IS NOT NULL ORDER BY combined score DESC LIMIT 10; Skills MinerU chonkie No access 20251031003403 rec 00:00 No access 20251031003403 rec 00:00 但这里还有一个潜在的问题,就是非常依赖于memory(CLAUDE.md中的内容)。一旦未来memory中的内容过多,就会导致memory召回不精准,memory之间混淆的问题,并且,我们普遍认为,memory中应该是更通用的知识,而不应该具体到传什么参数,调用那个脚本。 那有什么解决方案呢? Anthropic 10 月 17号 推出了一个新的技术——Skills,可以解决上述的问题。 Skills Skills Skills,一种使用文件和文件夹构建专业agent的方法。通过扩展和便携的方式来赋予agent特定领域的专业知识。 简单来说,Skills 就是将特定领域的context知识外挂到一个SKILL.md文件中。如下图所示(下图是一个pdf skill,专门让agent来处理pdf)。 启动时,agent会预加载每个已安装技能的 name 和 description (下图中YAML Frontmatter中)到其system prompt中(不会读取完整的内容,防止上下文过长)。当agent判断应该执行某个Skill的时候,会继续读取这个Skill的详细信息(下图中markdown的部分)。 此外,在Skill.md中,还可以定义其他的文件(如下图)(不同的文件定义不同的能力,agent按需选择取读取这些文件),这样使用“文件系统”作为上下文的方式,有很多的好处,比如大小不受限制,天然持久化等等。 同样的思路,可以提前编写一些通用的脚本(如下图的 pdf/extract fields.py ),在md文件中中告诉 agent 什么情况下需要执行这个脚本。 那这,不就是我们之前干的事情么。。。。。 首先提前写好插入数据的脚本(insert data.py)以及检索数据的脚本(hybrid search.py);然后在 memory(CLAUDE.md) 中告诉agent当你需要插入数据的时候,就执行insert data.py这个脚本,并传入参数;当你需要检索数据的时候就执行hybrid search.py这个脚本,并传入参数。 所以,我们也可以配置一个Skill给claude code,干的就是上述的事情,这样,我们就不用依赖于memory了。 项目目录中有一个 agentic postgres skill/ 文件夹 ,他就是一个SKill;接下来,我们要把他配置到claude code中。 接下来重启claude,Skill就配置好了。 然后我们只需要这样问他,哦,在这之前,你可以放心的清空 CLAUDE.md 中的内容。 claude code中运行流程如下: No access 20251031140816 rec 00:00 No access 20251031140816 rec 00:00 上面这个视频中,我们通过这个agentic postgres skill 轻松的实现了数据的检索。 可能有人会觉得 Skills 太简单,几乎算不上一个功能。很多人早就尝试过向 md 文件中添加额外指令,并告诉agent在继续执行任务前读取该文件。比如执行动作前先读取 AGENT.md 。 但 Skills 设计的简单性是让我如此兴奋的原因,这里我们可以简单比较一下MCP和Skills。 MCP 是一个完整的协议规范,涵盖了主机、客户端、服务器、资源、提示、工具、采样、根、引出以及三种不同的传输方式(标准输入输出、流式 HTTP 和原始的 SSE)。 Skills是带有少量 YAML 元数据的 Markdown,以及一些可选的、在环境中可执行的脚本。它们感觉更接近 LLM 的精神——输入一些文本,让模型自行处理。 它们将困难的部分外包给 LLM 框架和相关计算机环境。我认为这是一个非常明智的策略。 你可以非常轻松的像我们配置agentic postgres skill一样配置其他的skill,比如Anthropic官方出的这些skill。 Anthropic官方出的这些skill 以上,就是本篇文章的全部内容,从 tiger 这家公司新出的agentic postgres数据库入手,我们通过利用 mcp 以及一些额外的脚本链接到了agentic postgres数据库,实现了数据的插入和检索。然后我们探讨了"上下文卸载"这个重要的context engineer的方式,将脚本提前写好,只告诉agent应该在什么场景下如何调用这个脚本,并且需要传入什么参数。这大大提高了agent执行任务的效率和准确性。 接着,我们过渡到了anthropic新出的Skills技术,使用起来非常的简单,没有复杂的协议,只需要编写一个SKILL.md文件,编写好name 和 description,编写好这个skill的能力,如果需要的话提前写好脚本;最后只需要和agent对话的时候告诉他“ 请使用XXX 这个Skill ”。 一些废话 多说几句: • 对于我们文中搭建的知识库来讲,还有很多地方可以优化,比如 1. 现在数据插入的时候,只支持传入文本文件,也就是md或者txt等。未来,可以支持传入pdf格式的文章,先将pdf转为文本内容(使用OCR,MinerU, 或者使用一个pdf Skill都可以实现),再插入到数据库中。 MinerU 2. 一篇文章首先要被分chunk,然后再embedding。目前分chunk使用的是一个开源库(chonkie);代码中分chunk的逻辑是写死的,且只是使用了 chonkie 中最基础的功能,真实的分chunk逻辑可以更fancy一点;且分chunk的效果并没有测试。 chonkie 3. 检索数据也可以再优化一下,目前混合检索(同时检索关键词和embedding向量)使用的是最简单的 RRF混合检索。 RRF 公式: 1 / (k + rank) RRF混合检索示例sql,k=60 SQL Copy SELECT d.id, d.title, COALESCE(1.0 / (60 + v.rank), 0.0) + COALESCE(1.0 / (60 + k.rank), 0.0) AS combined score FROM documents d LEFT JOIN vector search v ON d.id = v.id LEFT JOIN keyword search k ON d.id = k.id WHERE v.id IS NOT NULL OR k.id IS NOT NULL ORDER BY combined score DESC LIMIT 10; RRF 公式: 1 / (k + rank) 而真实的生产要更复杂,可以参考如下方法。 a. 使用调整后的权重对分数进行线性组合(比 RRF 简单,但需要参数调整) b. 基于相关性判断进行优化的学习排序模型 • 项目目录中的 agentic postgres skill 是由skill creator(anthropic官方出的一个skill)自己生成的(闭环了)。 • 文章中claude code演示使用的是 Minimax M2的免费api,用起来很流畅,和claude code适配度很高。 • 项目中的A Definition of AGI.md 是我自己写的,原文在这里。 原文在这里 • 以下这些文章非常推荐大家阅读(这些文章也在我的个人ai知识库中) ◦ https://www.anthropic.com/engineering/effective context engineering for ai agents(anthropic对于context engineer的介绍) ◦ 🤖 Manus:Context Engineering for AI Agents(manus对于context engineer的介绍) ◦ https://manus.im/zh cn/blog/Context Engineering for AI Agents Lessons from Building Manus(manus从构建agent中获得的经验教训) ◦ https://blog.abdellatif.io/production rag processing 5m documents(一个生产级rag项目的分享) 🤖 Manus:Context Engineering for AI Agents ◦ https://www.anthropic.com/engineering/effective context engineering for ai agents(anthropic对于context engineer的介绍) ◦ 🤖 Manus:Context Engineering for AI Agents(manus对于context engineer的介绍) 🤖 Manus:Context Engineering for AI Agents ◦ https://manus.im/zh cn/blog/Context Engineering for AI Agents Lessons from Building Manus(manus从构建agent中获得的经验教训) ◦ https://blog.abdellatif.io/production rag processing 5m documents(一个生产级rag项目的分享) Agent 数据库只是个引子,这篇文章中,还有最新的agent技术方案。 Agent 数据库只是个引子,这篇文章中,还有最新的agent技术方案。 1. Agentic postgres 数据库 tiger data这家数据库公司最近推出了agentic postgres数据库;官网上号称是第一个为agents构建的数据库。 agentic postgres数据库 为什么要说是为agent设计的数据库呢?因为它有如下的功能。 内置的MCP server可将 agent 连接至Postgres与Tiger Data文档。主提示词会指导agent如何设计数据模型、优化查询,并基于上下文进行推理,从而让它们构建得更智能,而不仅仅是更快。 Postgres现已具备AI搜索能力。BM25文本搜索与向量检索可在数据库内原生运行,为agent提供快速、高召回率的上下文检索,无需依赖外部存储或产生延迟开销。 借助写时复制存储技术,数秒内即可创建完整的Postgres数据库副本。agent可获得快速、隔离的沙箱环境,用于安全地进行测试、调试和迭代,无需复制数据或影响生产系统。 内置的MCP server可将 agent 连接至Postgres与Tiger Data文档。主提示词会指导agent如何设计数据模型、优化查询,并基于上下文进行推理,从而让它们构建得更智能,而不仅仅是更快。 内置的MCP server可将 agent 连接至Postgres与Tiger Data文档。主提示词会指导agent如何设计数据模型、优化查询,并基于上下文进行推理,从而让它们构建得更智能,而不仅仅是更快。 Postgres现已具备AI搜索能力。BM25文本搜索与向量检索可在数据库内原生运行,为agent提供快速、高召回率的上下文检索,无需依赖外部存储或产生延迟开销。 Postgres现已具备AI搜索能力。BM25文本搜索与向量检索可在数据库内原生运行,为agent提供快速、高召回率的上下文检索,无需依赖外部存储或产生延迟开销。 借助写时复制存储技术,数秒内即可创建完整的Postgres数据库副本。agent可获得快速、隔离的沙箱环境,用于安全地进行测试、调试和迭代,无需复制数据或影响生产系统。 借助写时复制存储技术,数秒内即可创建完整的Postgres数据库副本。agent可获得快速、隔离的沙箱环境,用于安全地进行测试、调试和迭代,无需复制数据或影响生产系统。 如下图所示,相比传统的postgres数据库或者其他向量数据库,他支持快速地创建副本,使agent能够安全地测试,调试和迭代;相比于向量数据库,它支持原生的 BM25关键词检索以及更快的向量检索。 (tiger 官网上有关BM25的介绍和用法:https://www.tigerdata.com/blog/introducing pg textsearch true bm25 ranking hybrid retrieval postgres ) 最重要的是,它支持mcp,而通过mcp,我们可以轻松地将agent和数据库进行连接从而完成有关数据库的一切(建表,插入数据,查询数据等等) 接下来,no money,no coding,你就可以完成一个知识库的搭建。 详细教程 一些配置 安装uv 初始化python环境 安装 Claude code 为clcude code配置免费的API(二选一即可) Minimax M2 API(免费到11月7日) Qwen API (免费100万Token) Minimax M2 API Qwen API Minimax M2 API(免费到11月7日) Minimax M2 API Qwen API (免费100万Token) Qwen API 登录claude code 出现如下界面表示配置成功。 安装tiger cli 以及 tiger mcp server tiger cli 然后登录 然后安装 tiger mcp server 安装 tiger mcp 最后重启claude 接下来无需任何配置,在命令行登录,接着输入 /mcp , 就可以看到我们刚刚配置的tiger mcp工具(登录claude code 后 tiger mcp server会自动启动,这里绿色就显示启动成功,后续agent 就可以直接调用工具。) 如果你想要知道每个工具的定义和用法,可以输入 /mcp,然后按enter键 , 查看每个工具的定义,描述,以及参数的schema。(强烈建议看一下!) 搭建知识库 接下来,就可以开始搭建知识库了。这个搭建的过程,非常的简单。 首先我们需要将一篇文章(项目目录中的A Definition of AGI.md)进行分chunk(就是分为一块一块的,为了提高向量检索的准确性),然后对每一个chunk进行embedding(比如1024维度),然后将数据插入到数据库中。最后总数据库中进行检索。 首先我们需要将一篇文章(项目目录中的A Definition of AGI.md)进行分chunk(就是分为一块一块的,为了提高向量检索的准确性),然后对每一个chunk进行embedding(比如1024维度),然后将数据插入到数据库中。最后总数据库中进行检索。 搭建知识库不需要写一行代码,操作如下: 一些配置 在 tiger cloud 上创建一个service,service name为my database。https://console.cloud.timescale.com/dashboard/services 将如下信息填写到.env文件中 申请免费的qwen embedding模型API(https://help.aliyun.com/zh/model studio/embedding) 将申请好的DASHSCOPE API KEY填写到.env文件中。 开始搭建 一,将知识插入到表中 在claude code 的输入框中输入 Claude code执行过程如下: Audio or video is not supported Please download the file and open it with the appropriate software. 20251031002752 rec .mp4 · 41.45MB 20251031002752 rec 00:00 Audio or video is not supported Please download the file and open it with the appropriate software. 20251031002752 rec .mp4 · 41.45MB 20251031002752 rec 00:00 可以看到,表成功创建,文章成功插入到表中。 向表中插入数据的流程是这样的: 1. 在我们的service(my database)中创建表需要service id,claude code首先调用List Database Services 工具来获取service id。 2. 拿着这个service id和我们的提出的字段要求,写了一个sql,调用Execute SQL Query工具创建表 3. 接着,根据CLAUDE.md中的指令(CLAUDE.md中的内容为claude code的memory,会将所有内容给到上下文中)将文章A Definition of AGI.md插入到数据库中。这个插入的过程没有写sql,然后调用mcp工具。而是我提前写好了一个脚本。让claude code直接传入参数执行这个脚本。(为什么要这么做呢?因为这个插入的过程链路比较长,涉及到将文章分chunk,然后对每个chunk进行embedding,接着还要执行sql将数据insert到表中。最蛋疼的地方就是——你要将embedding后的向量也插入到数据库中;如果要让claude code写sql将这些数据插入到数据库中,那么他就会在sql中一个token一个token 的输出这些向量。如果一个chunk被embedding为1024维度的向量,10个chunk就得写十个sql,每个sql都包含了1024个向量;这样上下文就直接爆炸了,所以这里我们需要提前写好脚本,脚本会串起来整个链路,claude code不会接触到任何的向量,他只需要传入最开始的输出,也就是文件路径,以及文件名。而这,也是context engineer中一个非常重要的思想——上下文卸载(context offloading)) 再来解释一下"上下文卸载",我们不需要把所有的信息都存到agent的消息历史中。在上述情况,agent不需要知道文章是如何分chunk的,每个chunk是如何embedding的,向表中插入数据的sql是如何写的。这些我们都可以提前写好,agent只需要像调用一个工具一下调用我们提前写好的脚本(一个文件),传入参数,得到结果。 而这个前提是,agent需要知道这个脚本是用来干嘛的,它知道什么时候该调用,所以我们把这些信息写到了它的memory中(也就是CLAUDE.md)。 二,尝试检索知识 接下来,我们尝试从表中检索。实现rag。 Claude code执行过程如下: 整个检索的流程是这样的: 1. 通过memory(CLAUDE.md)知道,检索需要调用脚本hybrid search.py,接着,claude code会改写传入的query,然后调用脚本,传入参数,得到混合检索结果。 2. 总结结果,回复。 三,一个潜在问题 上述,我们实现了一个demo版的知识库,包括数据的插入,以及数据的检索。

在 小宇宙note 阅读完整内容