十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DeepAgents 部署内容创作 Agent:基于 Supabase 自定义认证实现按用户隔离的记忆系统

DeepAgents 部署内容创作 Agent:基于 Supabase 自定义认证实现按用户隔离的记忆系统 DeepAgents 部署内容创作 Agent基于 Supabase 自定义认证实现按用户隔离的记忆系统【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents导读deepagents deploy是 DeepAgents 提供的将 Agent 打包部署到 LangSmith 云平台的官方流程。本文以仓库中的 deploy-content-writer 示例 为骨架完整讲解如何部署一个能写博客、LinkedIn 帖子和推文的 AI 内容创作 Agent并重点剖析它的两个核心特性按用户身份隔离的持久化记忆per-user memory与零自定义代码的 Supabase 认证集成。读完本文你将掌握从环境配置、deepagents deploy部署到通过 LangGraph SDK 携带 JWT 调用的完整链路并理解记忆文件如何在多用户场景下做到零串号。示例整体架构deploy-content-writer是一个开箱即用的内容创作 Agent 部署示例其目录结构如下examples/deploy-content-writer/ ├── AGENTS.md # Agent 指令与记忆工作流定义 ├── agent.json # Agent 名称与运行时模型配置 ├── deepagents.toml # 部署配置模型、认证——README 所述随部署生成 ├── skills/ │ ├── blog-post/ # 长文博客写作技能 │ └── social-media/ # LinkedIn 与推文写作技能 ├── user/ │ └── AGENTS.md # 用户偏好模板preferences.md 的初始内容 └── test_user_memory.py # 跨会话记忆持久化的端到端验证脚本各文件的职责在 README 的 Structure 一节中有明确对应AGENTS.md 定义了 Agent 的人格与工作流品牌语调专业但平易近人、写作标准主动语态、以价值开头、每段一个观点、以行动结尾、内容支柱AI Agent 与自动化、开发者工具、软件架构、新兴技术以及最重要的用户记忆使用规则。agent.json 声明了 Agent 的运行时元数据名称为deepagents-deploy-content-writer模型为openai:gpt-4.1。deepagents.toml是部署时的核心配置本文主角之一其中[auth]段决定是否启用 Supabase 认证。skills/下的两个技能文件是可被 Agent 按需调用的能力单元详见后文。前置条件与环境变量部署前需要准备以下环境变量变量用途OPENAI_API_KEYGPT-4.1 模型访问凭证LANGSMITH_API_KEY部署到 LangSmith 平台的必需凭证SUPABASE_URLSupabase 项目 URL仅认证场景需要SUPABASE_ANON_KEYSupabase anon/public 密钥仅认证场景需要配置步骤将.env.example复制为.env并填入对应密钥。README 特别强调Supabase 密钥只有在deepagents.toml中保留[auth]段时才需要删除该段即可部署为无认证模式。也就是说认证是可插拔的——这正体现了 DeepAgents 部署链路中配置即声明declarative configuration的设计思路。部署一行命令完成认证接线在项目根目录执行deepagents deployREADME 明确描述了部署时的自动行为部署时deepagents.toml中的[auth]段会自动生成一个 Supabase token validator并将其接入部署无需任何自定义中间件。这背后的含义是[auth]配置声明了本部署使用 Supabase 身份体系deepagents deploy在打包阶段据此自动完成 JWT 校验器的生成与装配。开发者无需编写一行认证代码也无需手动注册中间件从而把多租户认证这种常见但繁琐的工作从业务代码中剥离。对部署链路感兴趣的读者可以对比同一仓库中另一个部署示例 deploy-coding-agent后者同样是deepagents deploy一行部署展示了该流程在不同 Agent 类型编码 Agent vs 内容创作 Agent间的通用性。按用户隔离的记忆系统Per-User Memory记忆文件的组织方式每个通过认证的用户都会获得自己独立的记忆文件统一存放在/memories/user/下文件读写权限用途preferences.md读/写Agent 读取并更新用于记录用户的语调、主题与排版偏好context.md只读关于用户公司与产品的静态上下文由于认证将这两类文件按用户身份user identity进行作用域隔离一份部署可以同时服务多个用户且账户之间零数据串扰。Agent 侧的记忆读写规则AGENTS.md 的User Memory一节给出了 Agent 使用记忆的明确协议会话开始时用ls /memories/user/发现可用文件每次对话开始前必须读取记忆文件以便个性化输出当用户分享偏好时用edit_file更新/memories/user/preferences.mdcontext.md为只读仅在创作内容时引用。这一先读记忆、再产出内容、持续回写偏好的闭环使得 Agent 能够跨会话记住用户喜欢更随意的语气这类偏好并在后续的博客、LinkedIn、推文创作中持续生效。user/AGENTS.md则提供了preferences.md的初始模板尚未设置偏好Agent 将在学习用户偏好的过程中更新本文件部署时作为每个新用户记忆文件的起点。记忆持久化的端到端验证仓库中的 test_user_memory.py 是理解记忆隔离机制的最佳可运行证据。它通过 LangGraph SDK 依次执行四个测试场景Thread 1设置偏好以user_idtest-user-sydney向 Agent 发送我偏好简洁的要点式内容请记住这一偏好Thread 2同用户跨会话持久化新建线程同一user_id询问我的内容偏好是什么读取你的记忆文件并告诉我——验证记忆跨线程保留Thread 3不同用户隔离换用user_idother-user-xyz问同样的问题——预期看不到Thread 1 设置的偏好验证账户隔离Thread 4无 user_id 容错不传user_id仅打招呼——预期优雅跳过用户记忆不报错。该脚本的关键实现细节展示了如何在 SDK 层注入用户身份config {} if user_id: config {configurable: {user_id: user_id}}即用户身份通过 run 的config.configurable.user_id传入在启用 Supabase 认证的部署中该身份由部署在服务端自动从 JWT 推断而脚本直接传user_id的方式则适用于无认证的本地/自定义场景。脚本同时支持从环境变量或.env文件读取LANGSMITH_API_KEY并会先调用client.assistants.search()自动发现部署后的 assistant_id。自定义认证Custom Auth配置配置声明在deepagents.toml中加入以下配置段即可启用 Supabase 认证[auth] provider supabase这正是 README 所强调的zero custom code仅凭这一小节配置部署时便会自动生成 Supabase token validator 并接入服务端使得部署会自动校验每个请求携带的 Supabase JWT从 JWT 中推断用户身份该身份被用于/memories/user/记忆文件的作用域隔离。与记忆系统的联动认证与记忆的联动是本文档最核心的架构点没有认证记忆文件无法安全地按用户划分有了认证一份部署即可安全服务多租户。若移除[auth]段无认证部署则所有请求共享同一套记忆空间也就失去了账户隔离能力——这也解释了为何 README 要求只在需要认证时配置 Supabase 密钥。通过 LangGraph SDK 查询与流式调用携带 JWT 发起请求部署完成后在 LangSmith 的Deployments页面可以找到部署 URL。调用方需在 HTTP 请求的Authorization头中携带 Supabase JWT部署端会自动校验并推断用户身份from langgraph_sdk import get_client client get_client( urlhttps://your-deployment-url, headers{Authorization: Bearer your-supabase-jwt}, ) thread await client.threads.create() async for chunk in client.runs.stream( thread[thread_id], agent, input{messages: [{role: user, content: Write a tweet about AI agents}]}, stream_modemessages, ): print(chunk.data, end, flushTrue)要点拆解get_client(url..., headers...)在客户端统一注入认证头后续所有请求自动携带threads.create()创建会话线程runs.stream(thread_id, agent, input..., stream_modemessages)以消息流模式流式获取 Agent 输出agent是默认的 assistant 名称stream_modemessages逐 token 输出适合聊天式 UI 渲染。更多调用示例test_user_memory.py 中的run_thread函数给出了另一种流式模式stream_modevalues按状态快照流式返回可获取每轮的完整消息列表并演示了如何从事件数据中解析最终的 AI 文本兼容纯文本与 tool-use 块两种内容结构。两种模式各有适用场景messages偏实时聊天流values偏结构化状态观测。技能体系博客与社媒写作能力单元示例将写作能力拆分为两个可复用的技能Skill由 Agent 按任务类型按需调用blog-post长文博客SKILL.md 定义的能力要点写作前强制研究使用task工具并指定subagent_type: researcher先委托研究子代理展开调研再动笔固定结构Hook 开头2-3 句的抓人问题/数据/陈述→ 问题背景 → 主体3-5 个 H2 小节含代码示例与要点列表→ 实战应用分步说明→ 结论与 CTA最多 3 条要点SEO 约束主关键词进标题与首段、标题 60 字符内、meta description 150-160 字符输出路径保存到blogs/slug/post.md。social-mediaLinkedIn 与推文SKILL.md 覆盖三种格式格式核心规范Twitter/X Thread钩子推 280 字符3-7 条跟进推末条 CTA善用换行LinkedIn Post前 2 行即钩子see more 之前可见3-5 短段以提问收尾促互动目标约 1,300 字符Short-form Update单段公告/洞察可附长文链接 280 字符便于跨平台通用准则还包括LinkedIn 用第一人称、公司账号用第三人称只加 2-3 个相关 hashtagLinkedIn 偏专业、Twitter 偏口语化每篇内容独立成立、拒绝只吊胃口用具体数字而非模糊宣称。输出统一保存到social/platform/slug.md。技能与记忆的协作结合 AGENTS.md 的四步工作流研究 → 大纲 → 写作 → 对照质量清单复核可以还原一次典型创作会话的完整链路读取用户记忆 → 派 researcher 子代理调研 → 按所选技能的结构化模板创作 → 依据品牌语调与质量标准复核 → 将新学到的用户偏好回写preferences.md。技能管怎么写记忆管为谁写二者共同构成内容创作 Agent 的生产力闭环。验证与运行前提说明test_user_memory.py中的DEPLOY_URL指向一个具体的 LangSmith 部署实例仅供示例参考实际运行请替换为你在 LangSmithDeployments页面获取到的部署 URL。脚本要求安装langgraph_sdk示例的完整依赖与打包配置可参考仓库内其他示例的pyproject.toml并具备有效的LANGSMITH_API_KEY。本文涉及的命令与配置以当前仓库 examples/deploy-content-writer 的实际内容为准deepagents.toml与.env.example为 README 所述但未随仓库提交的部署期文件实际部署时需按上文说明自行创建。【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表