北京 – 2024年2月5日 – 在人工智能应用开发领域,字节跳动近日重磅开源了其内部使用的大模型应用开发框架——Eino。这款框架旨在降低AI智能体的开发门槛,提升开发效率,让开发者能够像指挥一支足球队一样,轻松构建基于大模型的软件应用。

Eino框架的开源,无疑为Go语言开发者带来了一大利好。它不仅提供了稳定的内核、灵活的扩展性、完善的工具生态,还拥有可靠且易于维护的特性。更重要的是,Eino框架背后有着豆包、抖音等大型应用的实践经验支撑,这使得它在实际应用中更具参考价值。

正如机器之心AIxiv专栏所描述的:“开发基于大模型的软件应用,就像指挥一支足球队:组件是能力各异的队员,编排是灵活多变的战术,数据是流转的足球。” Eino框架正是基于这一理念,将AI应用开发解构为组件、编排和数据三个核心要素。

Eino框架的核心概念:组件、编排与数据

  • 组件 (Components): Eino框架将各种AI功能抽象为一个个独立的组件,例如文本生成、对话模型、工具调用等。每个组件都定义了明确的输入输出类型、Option类型和方法签名,开发者可以像使用Go interface一样灵活地使用这些组件。这种模块化的设计,极大地提高了代码的可重用性和可维护性。

    go
    type ChatModel interface {
    Generate(ctx context.Context, input []*schema.Message, opts ...Option) (*schema.Message, error)
    Stream(ctx context.Context, input []*schema.Message, opts ...Option) ( *schema.StreamReader[*schema.Message], error)
    BindTools(tools []*schema.ToolInfo) error
    }

  • 编排 (Orchestration): Eino框架允许开发者通过灵活的编排方式,将各个组件连接起来,构建复杂的工作流程。框架提供了两种主要的编排模式:Chain和Graph。Chain模式适用于简单的线性流程,而Graph模式则适用于更复杂的、包含分支和循环的流程。这种编排能力,使得开发者能够根据不同的业务需求,定制化AI应用的行为。

    • Chain: 适用于简单的ChatTemplate + ChatModel的链式调用。

      go
      chain, _ := NewChain[map[string]any, *Message]().
      AppendChatTemplate(prompt).
      AppendChatModel(model).
      Compile(ctx)
      chain.Invoke(ctx, map[string]any{query: what's your name?})

    • Graph: 适用于更复杂的ReAct Agent场景。

      go
      graph := NewGraph[map[string]any, *schema.Message]()
      _ = graph.AddChatTemplateNode(node_template, chatTpl)
      _ = graph.AddChatModelNode(node_model, chatModel)
      _ = graph.AddToolsNode(node_tools, toolsNode)
      _ = graph.AddLambdaNode(node_converter, takeOne)
      _ = graph.AddEdge(START, node_template)
      _ = graph.AddEdge(node_template, node_model)
      _ = graph.AddBranch(node_model, branch)
      _ = graph.AddEdge(node_tools, node_converter)
      _ = graph.AddEdge(node_converter, END)
      compiledGraph, err := graph.Compile(ctx)
      if err != nil {
      return err
      }
      out, err := r.Invoke(ctx, map[string]any{query:Beijing's weather this weekend})

  • 数据 (Data): 数据在Eino框架中扮演着“足球”的角色,在各个组件之间流动。框架提供了统一的数据接口,方便开发者对数据进行处理和转换。

完善的工具生态:助力AI应用开发

Eino框架还提供了一系列强大的工具,例如Callbacks机制,允许开发者在组件运行的开始和结束时,获取输入输出及一些额外信息,从而实现横切面需求,例如日志记录、性能监控等。

Eino框架的意义与展望

Eino框架的开源,不仅降低了AI智能体的开发门槛,还为Go语言开发者提供了一个强大的工具,助力他们构建更智能、更高效的应用。可以预见,随着Eino框架的不断完善和普及,将会有越来越多的开发者加入到AI应用开发的行列中来,共同推动人工智能技术的发展。

字节跳动开源Eino框架,无疑是AI应用开发领域的一项重要举措。它不仅体现了字节跳动在技术领域的实力,也展现了其开放共享的精神。相信在Eino框架的助力下,AI智能体的开发将变得更加丝滑,开发者也将能够像指挥一支“梦之队”一样,轻松打造出令人惊艳的AI应用。

参考文献


>>> Read more <<<

Views: 11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注