最近刷到了一张 agent 记忆的分类图,简单概括下: 短期记忆:记住刚刚说过的话 比如你问"我女儿多大了",它记得你刚说过是5岁,就能接着聊"哦,那该上幼儿园了"
长期记忆:存储重要信息、用户偏好 比如记住你喜欢喝美式不加糖,下次点咖啡就自动记得你的口味啦
情节记忆:记住具体发生的事情 比如知道上周你加班很累,这周就会贴心地问问你休息得怎么样
最近刷到了一张 agent 记忆的分类图,简单概括下: 短期记忆:记住刚刚说过的话 比如你问"我女儿多大了",它记得你刚说过是5岁,就能接着聊"哦,那该上幼儿园了"
长期记忆:存储重要信息、用户偏好 比如记住你喜欢喝美式不加糖,下次点咖啡就自动记得你的口味啦
情节记忆:记住具体发生的事情 比如知道上周你加班很累,这周就会贴心地问问你休息得怎么样
分享一期 最近被疯狂推荐的播客 - 102。 和张祥雨聊,多模态研究的挣扎史和未来两年的 2 个“GPT-4 时刻”(文字版)。 该播客是拾象 CEO 李广密对大模型公司阶跃星辰首席科学家张祥雨的访谈,其中张祥雨阐述了他近些年对 LLMs、MultiModal 领域的一些思考,我和 claude 总结了下收获比较大的点,欢迎讨论:
分享下最近 Andrej 在 YC 上的一次分享,主题是 AI 时代下软件演进的趋势,其中有一些深刻的洞察: 该分享原内容:视频、PPT、中文版
软件演进的三个时代:从传统的代码编程到 训练神经网络 再到自然语言编程,突然间 每个人都是程序员。
对应了现在 vibe coding 兴起,ai coding 产品风靡(该概念也是 Andrej 提出)
LLMs 是新一代的操作系统:如同早期计算机,计算资源昂贵且集中在云端,不同的是 LLMs 优先在消费者端大规模爆发而非 政府与企业。
类比:新的交互方式 - CUI 类似于早期的 GUI;同样的多模态输入;PC 之间的连接(如 A2A);新的 RAM(context window);Disk(embeddings);Softwares(CodeInterpreter、Terminal、Browser)
如何更好的使用 LLMs:不要完全指望 LLM 自主完成端到端的任务,而是让它们做"增强工具"。成功的 LLMs 产品(如 Cursor、Perplexity)都有个共同点:人机协同(LLMs 负责生成内容;人类负责检查验证),产品设计让协同过程显得直观。
分享下最近的一个行业观察:
整体趋势上的趋势,国内外模型厂商都有往应用层 发力的趋势,甚至最近还有一篇“爆文” ChatGPT将来要做的,大家就绕开吧,进一步探讨下:
分享下 a16z 的近期一篇文章,对产品早期增长很有启发:In Consumer AI, Momentum Is the Moat。
标题:AI 时代的分发策略:速度即护城河,对应的中文版
文章的主旨是:LLMs 同质化趋势下,AI 产品 的护城河不再是技术壁垒 为主(技术的差异越来越小),而是增长的速度与产品认知差。
一些关键洞察:
分享一个最近比较火的概念 “context engineering”(由 Andrej Karpathy 提出),一句话解释:在模型推理时 提供出 任务所需的所有完整信息的工程。
以下内容参考自 Awesome-Context-Engineering
为什么近期 context engineering 被广泛讨论?原因是 prompt engineering 不足以代表了现在生产级 LLMs 应用的复杂度。
首先 LLMs 的概率函数是:
prompt engineering 约等于将 prompt 视为了 context,而 LLMs 应用中 context 等于以下多个组件的组合: context = Assemble(instructions, knowledge, tools, memory, state, query)
- |context| ≤ MaxTokens(context window limitation)
function isElementInViewport(el) { | |
http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap | |
{ /* The source of the following code. */ } | |
const rect = el.getBoundingClientRect() | |
const windowHeight = (window.innerHeight || document.documentElement.clientHeight) | |
const windowWidth = (window.innerWidth || document.documentElement.clientWidth) | |
const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0) | |
const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0) |
const quickSort = a => { | |
if (!a.length) { return [] } | |
return [ | |
...quickSort(a.filter(e => e < a[0])), | |
...a.filter(e => e === a[0]), | |
...quickSort(a.filter(e => e > a[0]))] | |
} |
const permutate = (n, choices = ['A', 'B', 'C', 'D']) => { | |
const result = [] | |
const recursion = path => { | |
if (path.length === n) { | |
result.push(path.join('')) | |
return | |
} | |
choices.forEach(c => { recursion([...path, c]) }) | |
} |
const patchTasksByTimeout = (task, tasks, timeout) => { | |
return tasks.reduce((a, t) => { | |
if (t.value === task.value) { | |
t.timeout = timeout | |
} else { | |
t.timeout = Math.max(0, t.timeout - 1) | |
} | |
return [...a, t] | |
}, []) | |
} |