返回首页
最新
他13岁。他想要跟踪自己的蚂蚁群落——生长、喂养、湿度和其他指标。他自己搭建了整个应用程序,并在一些人工智能工具的帮助下完成;我只是帮他将其部署到服务器上。很想听听你的反馈!
大家好,我想分享一个对我来说非常重要的项目。fenic 是一个数据框架 API,集成了大型语言模型(LLMs)作为第一类公民,这是一个经典的懒惰数据框架 API,扩展了由 LLMs 支持的新操作符。
这使得你能够在同一上下文中处理结构化和非结构化数据。最重要的是,LLMs 并不是作为不透明的用户定义函数(UDF)黑箱集成的,而是以“语义”操作符的形式暴露出来,规划器可以将其与经典操作符一起进行推理。
(在代码库中有示例和代码片段,可以查看所有内容是如何协同工作的)
为什么要构建这个?我是一名数据基础设施/系统工程师。当 LLMs 出现时,我看到的是一种新的计算方式,它改变了我们处理的工作负载的特性。我想实验一下我们当前的系统如何吸收这些新工作负载和计算类型,以及需要什么才能使开发体验尽可能无缝,这就是 UDF + 任意提示感觉过于复杂的地方。
为了正确支持这一点,我们引入了一些非常酷的东西:
新的计划操作符。你不仅仅是向 LLM 发送提示。你使用像语义连接、语义映射和归约、语义过滤等操作符。它们与经典操作符混合在一起,因为规划器将它们视为真实的操作符而不是黑箱,因此可以围绕它们重新排序工作。
类型化输出。我们提供了将语义操作符的输出直接转换为类型化数据框列的便利性。LLM 输出的 Pydantic 模式变成了一个可以展开、爆炸等的类型化结构列。
新的数据类型,例如 Markdown 数据类型。Markdown 成为与 LLM 共享信息的重要方式,尽管它最初是作为一种格式化文本以便呈现的方式。它携带结构,能够像访问结构体或 JSON 类型一样访问该结构,增强了我提到的开发者体验。
异步 UDFs。LLM 爆发后,工作负载中一个更有趣的变化是需要在管道中放置高度 I/O 绑定的步骤:从 API 获取响应、爬取网站等。异步 UDFs 填补了这一空白,实施会为你处理细微差别:并发、重试等。
一个对 LLM 推理敏感的规划器和运行时。这是我最兴奋的部分之一,还有很多工作要做。目前:相同提示在批处理内合并为单个模型调用,因此重复调用不消耗令牌;请求在每个提供者的每分钟请求/每秒请求限制下并发调度,并带有重试和退避机制;空值和空单元完全跳过模型;并且你可以获得每个操作符的令牌和成本指标。还有一个可选的持久响应缓存,以便重新运行时跳过模型。
MCP 作为新的目录原语。就像注册视图一样,你可以将数据框管道注册为目录中的 MCP 工具。然后,fenic 提供一个 MCP 服务器,以该管道作为工具的逻辑,在你的数据上执行。
这些只是 fenic 在实验 LLM 如何成为我们计算基础设施一部分时所做的一部分工作。还有更多内容,并且现有的内容还有很多需要打磨的地方。
我一直在使用 fenic 来处理各种事情。在小型/个人方面,我用它将我的播客音频录音转换为结构良好的元数据表,以便进行研究。在更复杂的应用中,我将其用作工具,分析从 Pydantic Logfire 导出的代理跟踪,以发现评估并将其转化为可重复的工件,形成数据框管道。
```
pip install fenic
Repo: https://github.com/typedef-ai/fenic
Docs: https://docs.fenic.ai
```
你还可以使用 claude code、codex 等技能,快速在你喜欢的代理编码环境中开始使用 fenic。
我很想听听你们的想法、批评以及任何其他想法。
我在这里回答问题。
AI代理的便携式评估。
ECP是一种与供应商无关的协议,用于测试代理输出、工具调用以及评估者可见的审计上下文,跨越不同的框架、模型、评估平台和持续集成系统。