返回首页
最新
“我开发了一个简单的应用程序,帮助你留出一些时间。Alnuo。
你可以选择何时开始,选择持续多长时间。它会提醒你。
无需注册账户。就是这样。
欢迎反馈。”
我喜欢在黑客马拉松中获得酷炫的纪念品,也喜欢设计PCB,所以当我的朋友问我是否愿意为新加坡的一场大型游戏开发马拉松设计徽章时,我立刻答应了!<p>这次活动的主题是“游戏中的游戏”,听起来很酷吧!来自世界各地的高中生在花费了大约70小时设计自己的游戏后,被Hackclub邀请参加此次活动。<p>这些徽章需要非常便宜和简单,因为我们需要在有限的时间内制造大约一百个。我选择了零功耗的设计方案,这意味着使用电子墨水,并决定如果组织者希望将NFC引入活动的角色扮演中,可以让参与者添加他们的网站或GitHub链接!<p>我使用了基于RP2040的架构,因为它在第一次尝试时非常简单且便宜,然后添加了一个ST25被动NFC标签,配置起来也很简单。徽章的形状像一张票,因为在花费大量时间设计游戏以获得资格后,你会得到一张“票”!如果在黑客马拉松上遇到紧急情况,徽章的边缘有20个GPIO引脚可供使用,我希望徽章看起来非常有趣,所以社区中的许多人设计了很多艺术作品!<p>徽章的效果非常好,我在这个过程中学到了很多。我的收获是要多制造一些额外的徽章,因为有些会损坏;要从3D的角度考虑你的PCB,因为其中一个电感器有点高,导致更多徽章损坏;并且要对最终产品有清晰的愿景,因为这真的帮助我创造出独特而美丽的东西 :D<p>我喜欢记录我的所有项目,所以如果你想了解我的完整设计过程,欢迎查看我的日志(<a href="https://github.com/KaiPereira/Overglade-Badges/blob/master/JOURNAL.md" rel="nofollow">https://github.com/KaiPereira/Overglade-Badges/blob/master/J...</a>)。如果你有任何问题或反馈,我也很乐意回答!
你觉得怎么样?
我在一次次遇到同样的问题后构建了这个工具——在应用代码中没有好的方式来强制执行令牌预算。提供者的限制是基于账户级别的,它们告诉你发生了什么,而不是正在发生什么。
添加它有两种方式:
```python
# 直接客户端包装
client = tokencap.wrap(anthropic.Anthropic(), limit=50_000)
# LangChain、CrewAI、AutoGen等
tokencap.patch(limit=50_000)
```
有四种在可配置阈值下的操作:警告(WARN)、降级(DEGRADE,透明模型切换)、阻止(BLOCK)和网络钩子(WEBHOOK)。开箱即用的SQLite,支持多代理设置的Redis。
值得一提的一个设计决策是:tokencap跟踪的是令牌,而不是美元。令牌计数直接来自提供者的响应,永远不会因价格变化而漂移。
如有任何问题,我很乐意回答。
在为一家旧金山初创公司构建金融助手的过程中,我们发现AI框架增加了复杂性,却没有带来价值。当我开始使用GraphRAG构建个人助手时,我铭记了这一教训,但仍然尝试了LangChain的MongoDBGraphStore。它让我在10分钟内得到了一个可用的知识图谱。
接着,我查看了数据。我从仅5个文档中获得了17种节点类型和34种关系类型,包括三种“部分”的版本。GraphRAG是一个数据建模问题,而不是检索问题。
附图展示了我最终得到的完整11步流程。以下是每一步所能学到的内容的详细介绍。
基本上,在数据流程的第1步和第2步中,原始数据源经过提取、转换和加载(ETL)过程,最终以文档的形式存储在MongoDB数据仓库中。每个文档存储了源类型、URI、内容和元数据。
然后在第3步中,我们清理文档并将其拆分为以令牌为界限的块。我们从512个令牌开始,重叠部分为64个令牌。不过,我们还需要对此进行更多测试。
关键是,第4步处理图的提取。我们定义了严格的本体论。本体论只是一个正式的合同,精确定义了数据中存在的类别和关系。我们使用了6种节点类型和8种边类型。大型语言模型(LLM)只能提取本体论允许的内容。
例如,如果它输出一个PERSON到TASK的连接,并带有EXPERIENCED边,流程将拒绝它。EXPERIENCED必须将PERSON连接到EPISODE。
我们还将LLM提取与确定性提取分开。我们创建了像Document或Chunk节点这样的结构性条目,而不需要LLM调用。
结果发现,第5步的规范化是最困难的部分。我们使用了三阶段的去重过程。我们进行内存中的模糊匹配、针对MongoDB的跨文档解析和边的重映射。
无论如何,在第6步中,我们批量嵌入节点。系统使用模拟进行测试,开发时使用Sentence Transformers,生产时使用Voyage API。
最终,在第7步和第8步中,节点和边作为统一的内存存储在单个MongoDB集合中。我们使用确定性的字符串ID,如“person:alice”,以防止重复。MongoDB在一个聚合管道中处理文档、$vectorSearch、$text和$graphLookup。$graphLookup函数可以直接在数据库中遍历连接的图数据。对于大多数代理用例,您不需要Neo4j + Pinecone + Postgres。像MongoDB这样的单一数据库就能很好地完成任务。通过分片,您可以将其扩展到十亿条记录。
总结一下,第9步到第11步涵盖了检索。代理通过MCP服务器调用工具。它使用混合向量、文本和图扩展的搜索记忆,以及自然语言到MongoDB聚合的查询记忆。代理还使用摄取工具将数据写回数据库,以便进行持续学习。
以下是我仍在努力解决的一些问题,非常希望听到您的意见:
1. 您是如何处理跨文档的实体/关系解析的?
2. 使用LLM优化实体/关系提取时,最有帮助的是什么?
3. 在图更新后,您如何保持嵌入的一致性?
此外,在构建我的个人助手的过程中,过去几个月我在LinkedIn上撰写了关于这个系统的文章。以下是深入探讨每个部分的帖子:
- 运行嵌入模型的三种方法:[链接](https://www.linkedin.com/feed/update/urn:li:activity:7443288346153480192)
- LangChain让我在10分钟内得到了知识图谱:[链接](https://www.linkedin.com/feed/update/urn:li:activity:7440751582381494272)
- Palantir在以本体论为先的AI上建立了4000亿美元的帝国:[链接](https://www.linkedin.com/feed/update/urn:li:activity:7434591082367320064)
- 数字双胞胎代理的摄取架构:[链接](https://www.linkedin.com/feed/update/urn:li:activity:7432054336589021184)
- 大多数AI代理不需要三个数据库:[链接](https://www.linkedin.com/feed/update/urn:li:activity:7426981104227856385)