AI宝库

AI宝库首页 › AI 资讯 › 具有Letta的状态代理工程 Copilots:核心内存,共享状态,语义检索,自

具有Letta的状态代理工程 Copilots:核心内存,共享状态,语义检索,自定义工具,流化,和可移植的 Agent 工作流程

来源:MarkTechPost · 发布时间:10-24 · 由 AI宝库每小时自动聚合

探索如何通过搭建与Letta的能动工程copilot来将代理内存扩展到基本提示之外。 该综合指南涵盖可检查的共同

在这个教程中,我们用Letta来构建一个具有状态的工程copilot,以展示代理记忆如何超越常规的即时对话。 我们首先创建可检查的核心内存块,agent可以自主地更新,然后暴露出这些块进行程序状态同步和跨越多个agents共享访问。 我们进一步扩展了架构,包括用于语义检索的归档向量内存、用于确定风险估计的自定义服务器侧工具、用于观察agent执行的流线、用于持续对话的服务器侧信息历史以及用于可移植性的.af导出。 这些组件一起展示了一种实用的内存架构,其中持久状态,检索,工具,多agent协作,以及执行痕迹作为一个集成的代理系统。

导入子进程,sys

subprocess.run ([sys. executive,"-m","pip","install","-q","-U","letta-client"],"检查=True").

导入 os, json,时间,文本包

从接通导入接通

从 letta 客户端导入 Letta

flex(*尝试,标签="):

错误=无

fn 在尝试中:

尝试:

返回 fn ()

例外作为e:

错误=e

提高运行时 Error( f) 所有调用变量失败 { label 或 ' call'}: {err}} 从错误中调用。

API KEY = os.environ.get ("LETTA API KEY")或取出("Letta API key (plateform.letta.com/api-keys):").

BASE_URL = os.environ.get("LETTA_BASE_URL", "").strip()

客户端=弹性(

羊肉:Letta(base url=BASE URL,api key=API KEY) 如果BASE URL else Letta(api key=API KEY),则使用该词。

羊肉:Letta(base url=BASE URL,令牌=API KEY) 如果BASE URL 其它 Letta(token=API KEY)

标签=“客户输入”

)

df hr(标题):

打印 ("\n" + "=" * 92 + f"\n {title}\n" + "=" * 92)

def 为 text(内容):

如果存在( 内容,st):

返回内容

如果存在( 内容,列表):

返回 “. ”。 join( getattr( p, “ text”, “ “” ) 或 p 内容中的“ “ ” )

返回 str( 内容或“ ” )

def 显示( 响应,隐藏解释=虚假 ):

用于获取器(响应、“信息”、响应)或[:

type = getatr(m,"message type",无)或 getatr(m,"type","'?)

而不是隐藏。.. 解释:

print ("推理:"), text wrap.shorten (gettr (m,"解释","""或",","220")).

elif kind ====================================================================================================================================================================为====================================

tc = getatr(m,"tool call",无)

print("工具调用:"),取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取

elif kind ================================================================================== (===================================================================================为=====================为=====================

print ("工具 ret:"), text wrap.shorten (str (gettr (m, "tool return", "")", "260") (中文(简体) ).

elif kind =================================================================== (=====================================================================================================为======================为=======================

打印("助手:"), as text(getattr(m),"内容","")))

elif kind ="批准请求消息":

print ("批准":agent正等待您批准一个工具呼叫").

u = 得到(答复,“使用”,无)

如果为 u:

print (f) 阶梯 QQGetattr(u, “ step counts”, “? ”) 符号 QQGetattr(u, “total tokens”, “? ”) )

def 聊天( agent id,文本,max steps=12,安静=假):

r=弹性(

lambda:客户端.agents.messages.create(agent id=agent id,输入=text,最大 steps=max steps) 互联网档案馆的存檔,存档日期2013-12-21.

羊肉:客户端。 agents. messages.create(agent id=agent id,输入=text) 羊肉:

羊肉:客户端。 agents. messages.create(agent id=agent id) 羊肉:

消息=[{"作用":"用户","内容":text}]

标签="messages.create"

)

若不安静:

打印(f"\n 用户:{text}")

显示(r)

返回 r 时

活塞= ["openai/gpt-4.1","openai/gpt-4o-mini","anthropic/claude-sonnet-4-20250514"].

尝试:

handers = [getatr(m,"handle","none")在客户端中表示 m.models.list (]

MODEL = 下个((如果 h 在手柄中,H 在 PreFERRED 中为h),无) 或手柄 [0]

除外:

模型 = 预选 [0]

打印(f) 连接到 ^ 模型手柄 = {MODEL}" )

hr ("1. 创建带有自定义内存块的状态 agent").

def make agent (**kw) (中文(简体) ).

返回弹性( E)

羊肉:客户端。 agents.create(模型=MODEL,嵌入="openai/text-embedding-3-small",**kw) 出品人:

羊肉:客户端。 agents. Creative(模型=MODEL,**kw)

标签="agents. Create"

)

copilot = 制造 agent ()

名称=f"copilot-{int(time.time ())}"

说明=“具有可检查长期内存的工程copilot”

标记= ["图","copilot"]

内存块=[

{"标签":"人"

"价值":"我Mnemo,一个工程copilot. 我是铁丝网,混凝土,我从来没有 "

"发明事实——如果我不知道我说的话,然后去查查".

"限制": 3000}

{"标签":"人类"

"描述":"关于我工作的工程师的可论证事实:姓名,角色,堆,"

"喜好,工作风格。 只要我学会稳定的东西,就更新这个".

"价值":"至今不详".

"限制": 3000}

{"标签":"项目状态"

"描述":"我们所运输的项目的生存状态:里程碑,阻塞器,"

"决定及其理由。 保持其密集而流畅;去掉被打乱的行".

"值":"(空)".

"限制":5000]

{"标签":"教训"

"叙事":"哈尔沁教与出错再不重复。 仅附录一行,每行一行".

"值":"(空)".

"限制":2000]

],

)

打印 ("agent id:", copilot.id)

def 获取块( agent id,标签):

返回弹性( E)

羊肉:客户端。 agents. blocks.retrieve(agent id=agent id,块 label=label)

羊肉:客户端。 agents. blocks.retrieve(agent id,标签)

标签="agents. blocks.retrieve"

)

def set block( agent id,标签,值):

返回弹性( E)

lambda:客户端。 agents. blocks.update(agent id=agent id,块 label=标签,值=值)

羊肉:客户端。 agents. blocks.modify(agent id=agent id,块 label=标签,值=值)

Lambda:客户端。 agents. blocks.update(agent id,标签,值=值)

标签="agents.blocks.update" (中文(简体) ).

)

def dump memory(agent id,标题="核心内存"):

块 = 有弹性 (lambda: client.agents. blocks.list (agent id=agent id) )

lambda:客户端。 agents.blocks.list(agent id),标签="agents.blocks.list").

打印(f"\n────{标题}}\")

b 区块:

ro = "[只读]",如果取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取

print(f) {b. label}{ro} ({len(b. value or "')}/{gettr(b,'limit','?')}字符) )

打印(text wrap.缩进(textwrap.fill (b.value 或 ",","100",""))

返回块

turn memory(copilot.id,"出生时的核心记忆")

我们设置了Letta客户端,安装了SDK,并增加了兼容性帮助器,处理Letta版本的API变体。 我们动态地选择一个可用的模型,并创建一个具有结构化核心内存块的状态工程copilot. 然后检查初始内存状态,以建立agent的持续上下文。

hr ("2. 自编自导自导的记忆——说一次,然后读出块回").

聊天( copilot. id)

"嗨,我是Priya,北风的员工工程师。 我们正在运输"光环",一种粗糙的摄入"

"服务,在11月14日。 我讨厌长长的解释——给我子弹或代码,永远不要作文章。 "

"Curent Blocker:卡夫卡消费者在负载下每~4分钟重新平衡". ).

聊天( copilot. id)

"更新:我们追踪到重平衡最大5秒民调。 中间慢批量承诺。"

" 决定:移出民调圈。 也记住我们已经尝试了碰碰"

”“课会。超时”和“无所作为”——不要再次暗示。 ”

dump memory(copilot.id),"2个转弯后的核心内存(注意移动到哪里)".

hr ("3. 您的代码写入上下文窗口" )

活 = 得到 block(copilot.id,"Project state")

设置块( copilot. id), “ project state”

(live.value or "") + "n [CI 09:41Z] 主干为RED:集成/kafka reable test 失败(flaky x3)".

聊天(copilot.id,"在我开始之日前应该知道什么?").

hr ("4. 在两个 agents 之间共享内存")

策略 = 客户端。 blocks.create(

标签=“政策”

说明=“不可谈判的工程政策。 只读:服从,不编辑".

值="1. 无直接向主推。\n2. 每个有回归测试的固定船。

"3. 客户数据从未离开欧盟区域".

限额=2000

仅读为真

)

抓取板 = 客户端。 blocks.create ()

标签="团队-scratchpad"

说明=“在copilot和审查员agent之间共享工作指出。”

"两个agents在这里读和写;保持条目前缀你的名字".

数值="(空)"

限额=4 000

)

(政策.id, crawpad.id):

flex( lambda:客户端。 agents. blocks. attach( agent id=copilot. id,块 id=bid)

羊肉:客户端。 agents. blocks.attach(copilot.id,出价)

标签="agents. blocks.attach").

审查者 = make agent ()

name=f"审查器-{int(time.time ())}"

描述=“与 copilot 共享内存的 Strict 代码审查员”

标记= [“审校”]

block ids=[政策.id,抓图.id]

内存 blocks=[{"标签":"人"

"价值":"我是Argus,一个偏执的工作人员评论员。 我寻找失败模式 "

"其他人都跳过,我逐个引用团队政策"].

)

print ("审查者 id:",审查者.id)

聊天( copilot. id),“ 将您为重新平衡问题提出的修正写入团队 scratchpad”

"堵住,让评论员能看到。 保持为4行". )

print ("\n IPER在共享块中看到的(由其他 agent 所写):")

print(textwrap.indent (client.blocks.retrieve (scratchpad.id)). ) 值," " " )

聊天(reviewer.id),"Read team scratchpad并审查提议的固定。 煽动其违反的任何政策,"

"然后在同一个街区附上你的判决。"

print (“\n 共享块在审查者答复后 ” )

print(textwrap.indent (client.blocks.retrieve (scratchpad.id)). ) 值," " " )

打印( “此块所附带的正则 ” )

[a.name for a in flex(lambda: client.blocks.agents.list (block id=scratchpad.id)) 中一个在flex(lambda: client.blocks.

羊肉:客户端。 blocks.agents.list(scratchpad.id) 页面存档备份,存于互联网档案馆。

标签="块.agents.list")].

我们通过向copilot提供有关工程师、项目、决定和已知故障模式的持久信息来展示自我编辑记忆。 我们还直接从应用程序代码更新工程状态,并创建共享的只读可写块来进行多agent协作。 然后,我们将一个评论员agent与共享内存连接起来,并观察agents双方如何交换持续的工作环境。

hr ("5. 存档内存:散装知识,然后让 agent 检索).

认识 = [

("后尸检"2024-08-02:光环下降1.2M事件当消费者群体在一次"

"调出。 根因:在被屏蔽的民调回路内

["死后","kafka","halo"].

("ADR-017:光环在发送时使用最少的一分一秒,并用一分一分一分的写法键入 (tenant id, event id).

"通过卡夫卡的交易被否决了"

["adr", "architecture", "halo"]),

("运行本:要排出一个光环节点,设置 DRAIN=1,等后差<1000,再由SIGTERM. 永远不要签字 - "

"飞机舱只检查优雅的关闭。"

["跑书","通","哈罗".

("基准测试 2025-01:rdkafka 2.3 有8个分区在p99 32ms上持续了240k事件/s).

"c6i.4x大;瓶颈是JSON解析,而不是网络".

["基准测试","性能"].

("Priya在文件布局上的偏好:每个限定上下文一个模块,集成测试活性").

"旁边的模块,没有测试/特大指令",["首选","风格"].

("事件2025-03-19:一个欧盟租户的有效载荷被镜像到我们东一号40分钟。 "

"被地区包围 DLQ. 这就是为什么政策3存在",["事件","遵守"].

]

def 归档( agent id,内容,标记):

返回弹性( E)

lambda:客户端。 agents. passages. 插入(agent id=agent id,内容=内容,标签=tags)

lambda:客户端。 agents.passages.create(agent id=agent id,文本=内容,标签=tags)

lambda:客户端。 agents.passages.create(agent id=agent id,文本=内容)

标签="agents. Passages. 插入"

)

在“知识”中显示内容、标记:

存档( copilot. id,内容,标签)

打印(f) “插入了{len(KNOWLEDGE)}段落” )

达到 = 弹性( )

lambda:客户端.agents.passages.search(agent id=copilot.id,查询="部署时丢失消息").

lambda:客户端.agents.passages.list(agent id=copilot.id,搜索="部署时丢失消息").

标签="agents. passages. search" (中文(简体) ).

)

print ("\n 程序语义搜索“ 部署时丢失消息 ” )

(达到)[:3]:

print ("-"), text wrap.shorten (gettr (h,"content","none") 或 getatr (h,"text",""","",",",",",",")

聊天(copilot.id),"在我今晚重启节点之前:我们历史上有什么值得我做的"

"担心,什么是安全程序?"

hr ("6. 给 agent 一个自定义工具").

def 估计 release risk(开出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出

""减轻出船的风险p

本文由 AI宝库自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。

相关 AI 工具

FastGPT

免费AI工作流搭建工具 自动化提高效率

AI Prompt Genius

AI提示词库创建和管理工具

AIPRM

AI 提示词库和提示词管理工具

Awesome ChatGPT Prompts

AI提示词收集和整理工具

相关免费羊毛

ChatGPT

学生认证免费 4 个月 ChatGPT Plus(限美国高校,10-31 前领取)

Arize AX

每月 2.5 万条 span 免费

Clair

学生免费使用临床 AI 工具套件

E2B

Agent 沙箱:注册送 $100 赠金

同源资讯

满足 Anthropic 的沙盒运行时间:OS- Level sandboxing for AI Agents,

MarkTechPost · 10-24

NVIDIA 发布尼莫特龙 3.5 Bolt E4B 4GB:本地语音Agents,游戏字符和机器人的开放小语言

MarkTechPost · 10-24

Kyutai CADRE:剪接世界模式 Lag 的视频自动编码器 230 ms以下

MarkTechPost · 10-24

Moonshot AI 发布 Kimi K3.1 Pro: A 2.8T Total/104B 有1M上下文的活

MarkTechPost · 10-24

阅读原文(marktechpost.com)

标题、摘要与正文均来自该信源的公开页面,版权归原作者所有;本站自动聚合与翻译,仅作出处跳转。

← 返回 AI 资讯列表AI工具图鉴首页

返回 AI宝库首页 · 提交工具 · 商务合作 · 关于本站 · 589 款 AI 工具分类导航 · 每日 AI 热门项目与动态