大语言模型应用开发框架 —— Eino 正式开源!
- 内核稳定,API 简单易懂,有明确的上手路径,平滑的学习曲线。
- 极致的扩展性,研发工作高度活跃,长期可持续。
- 基于强类型语言 Golang,代码能看懂,易维护,高可靠。
- 背靠字节跳动核心业务线的充分实践经验。
- 提供开箱即用的配套工具。
快速认识 Eino
model, _ := ark.NewChatModel(ctx, config) // 创建一个豆包大模型 message, _ := model.Generate(ctx, []*Message{ SystemMessage("you are a helpful assistant."), UserMessage("what does the future AI App look like?")}
- 核心是大模型,业务逻辑围绕“如何给大模型充分、有效的上下文”以及“如何让大模型的输出可靠的影响环境”,核心的组件类型、数据类型和交互模式是可以枚举的,整体可以由有向图来描述。
- 大模型输出的特点是流式输出,意味着模型的下游都需要有效的处理流式数据,包括流的实时处理、流的复制、多个流的合并、单个流的拼接等。
- 以有向图为基础,衍生出并发处理、扇入扇出、通用横切面、option 分配等一系列子问题。
- 代码实现详见: flow/agent/react 的实现
- ReAct Agent 用户手册详见: react_agent_manual
// 构建一个 ReAct Agent,编译为一个输入为 []*Message,输出为 *Message 的 Runnable // 创建包含 state 的 Graph,用户存储请求维度的 Message 上下文 graph = NewGraph[[]*Message, *Message]( WithGenLocalState(func(ctx context.Context) *state { return &state{Messages: make([]*Message, 0, config.MaxStep+1)} })) // 将一个轮次中的上下文和响应,存储到 Graph 的临时状态中 modelPreHandle = func(ctx context.Context, input []*Message, state *state) ([]*Message, error) { state.Messages = append(state.Messages, input...) return state.Messages, nil } _ = graph.AddChatModelNode(nodeKeyModel, chatModel, WithStatePreHandler(modelPreHandle)) _ = graph.AddEdge(START, nodeKeyModel) _ = graph.AddToolsNode(nodeKeyTools, toolsNode) // chatModel 的输出可能是多个 Message 的流 // 这个 StreamGraphBranch 根据流的首个包即可完成判断,降低延迟 modelPostBranch = NewStreamGraphBranch( func(_ context.Context, sr *schema.StreamReader[*Message]) (endNode string, err error) { defer sr.Close() if msg, err := sr.Recv(); err != nil { return "", err } else if len(msg.ToolCalls) == 0 { return END, nil } return nodeKeyTools, nil }, map[string]bool{nodeKeyTools: true, END: true}) _ = graph.AddBranch(nodeKeyModel, modelPostBranch) // toolsNode 执行结果反馈给 chatModel _ = graph.AddEdge(nodeKeyTools, nodeKeyModel) // 编译 Graph:类型检查、callback 注入、自动流式转换、生成执行器 agent, _ := graph.Compile(ctx, WithMaxRunSteps(config.MaxStep))
- 类型检查,在 compile 时确保相邻的节点的类型对齐。
- 流式封装,编译出的 Runnable 既可以 Invoke 调用,也可以 Stream 调用,无论内部的 Tool 是否支持流。
- 并发管理,对 state 这个公共状态的读写是并发安全的。
- 横切面注入,如果某个组件(比如一个 tool)没有实现 callbacks 注入,则 Eino 自动注入。
- Option 分配,编译出的 Runnable 可以灵活接收并把 option 分配给指定的节点。
Eino 的独特优势
内核稳定
敏捷扩展
高可靠易维护
实践驱动
工具生态
快速上手
相关链接

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
数据迁移丨借助 AI 从 PostgreSQL 到 GreatSQL
数据迁移丨借助 AI 从 PostgreSQL 到 GreatSQL 本文将介绍如何从 PostgreSQL 到 GreatSQL 的数据迁移,并运用 AI 协助迁移更加方便。迁移的方式有很多,例如: pg_dump:导出SQL文件,修改后导入 GreatSQL 数据库。 COPY:导出txt文本文件,导入 GreatSQL 数据库。 pg2mysql:从 PostgreSQL 迁移到 MySQL/GreatSQL 工具。 GreatDTS:商业的异构数据库迁移工具。 本文将介绍 pg_dump 和 COPY 两种方法迁移。 PostgreSQL 和 GreatSQL 区别 PostgreSQL PostgreSQL是一个开源的对象关系型数据库管理系统(ORDBMS)。它的特色是强调扩展性、数据完整性和高级特性。PostgreSQL由社区维护和开发,具有出色的可定制性,可以适应各种不同的应用场景。它支持复杂的数据类型、JSON 数据存储、空间数据处理和全文搜索等特性。 GreatSQL GreatSQL 数据库是一款 开源免费 数据库,可在普通硬件上满足金融级应用场景,具有 高可用、高...
- 下一篇
金融场景 PB 级大规模日志平台:中信银行信用卡中心从 Elasticsearch 到 Apache Doris 的先进实践
导读:中信银行信用卡中心每日新增日志数据 140 亿条(80TB),全量归档日志量超 40PB,早期基于 Elasticsearch 构建的日志云平台,面临存储成本高、实时写入性能差、文本检索慢以及日志分析能力不足等问题。因此使用 Apache Doris 替换 Elasticsearch,实现资源投入降低 50%、查询速度提升 2~4 倍,同时显著提高了运维效率。 本文转录自陈地长(中信信用卡中心信息技术部 高级工程师)在 Doris Summit Asia 2024 上的演讲,经编辑整理。 中信银行信用卡中心(以下简称“卡中心”)隶属于中信银行,致力于为广大消费者提供涵盖支付结算、消费信贷、中收增值和特色权益的“金融+生活”全方位服务。卡中心构建了高端、商旅、年轻、商超、车主及零售六大主流产品体系,形成了产品、渠道、经营、合规风控和服务五大经营体系,综合实力在股份制银行中名列前茅。 为确保业务系统的稳定运行、提升运维效率和用户体验,卡中心建立了大规模的日志云分析平台。该平台不仅需支持实时监控和故障排查,还需满足金融监管对日志审计的严格要求。目前,平台每日新增日志数据突破 140 亿...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 设置Eclipse缩进为4个空格,增强代码规范