字节跳动大模型应用 Go 开发框架 —— Eino 实践

前言

开发基于大模型的软件应用,就像指挥一支足球队:组件是能力各异的队员,编排是灵活多变的战术,数据是流转的足球。Eino 是字节跳动开源的大模型应用开发框架,拥有稳定的内核,灵活的扩展性,完善的工具生态,可靠且易维护,背靠豆包、抖音等应用的丰富实践经验。初次使用 Eino,就像接手一支实力雄厚的足球队,即使教练是初出茅庐的潜力新人,也可以踢出高质量、有内容的比赛。

下面就让我们一起踏上新手上路之旅!

认识队员

Eino 应用的基本构成元素是功能各异的组件,就像足球队由不同位置角色的队员组成:

组件名

组件功能

ChatModel

与大模型交互,输入 Message 上下文,得到模型的输出 Message

Tool

与世界交互,根据模型的输出,执行对应的动作

Retriever

获取相关的上下文,让模型的输出基于高质量的事实

ChatTemplate

接收外界输入,转化成预设格式的 prompt 交给模型

Document Loader

加载指定的文本

Document Transformer

按照特定规则转化指定的文本

Indexer

存储文件并建立索引,供后续 Retriever 使用

Embedding

Retriever 和 Indexer 的共同依赖,文本转向量,捕获文本语义

Lambda

用户定制 function

这些组件抽象代表了固定的输入输出类型、Option 类型和方法签名:

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
}

真正的运行,需要的是具体的组件实现

组件名

官方组件实现

ChatModel

OpenAI, Claude, Gemini, Ark, Ollama...

Tool

Google Search, Duck Duck Go...

Retriever

Elastic Search, Volc VikingDB...

ChatTemplate

DefaultChatTemplate...

Document Loader

WebURL, Amazon S3, File...

Document Transformer

HTMLSplitter, ScoreReranker...

Indexer

Elastic Search, Volc VikingDB...

Embedding

OpenAI, Ark...

Lambda

JSONMessageParser...

Eino 的开发过程中,首先要做的是决定“我需要使用哪个组件抽象”,再决定“我需要使用哪个具体组件实现”。就像足球队先决定“我要上 1 个前锋”,再挑选“谁来担任这个前锋”。

组件可以像使用任何的 Go interface 一样单独使用。但要想发挥 Eino 这支球队真正的威力,需要多个组件协同编排,成为一个相互联结的整体。

制定战术

在 Eino 编排场景中,每个组件成为了“节点”(Node),节点之间 1 对 1 的流转关系成为了“边”(Edge),N 选 1 的流转关系成为了“分支”(Branch)。基于 Eino 开发的应用,经过对各种组件的灵活编排,就像一支足球队可以采用各种阵型,能够支持无限丰富的业务场景。

足球队的战术千变万化,但却有迹可循,有的注重控球,有的简单直接。对 Eino 而言,针对不同的业务形态,也有更合适的编排方式:

编排方式

特点和场景

Chain

链式有向图,始终向前,简单。适合数据单向流动,没有复杂分支的场景。

Graph

有向图,有最大的灵活性;或有向无环图,不支持分支,但有清晰的祖先关系。

Chain,如简单的 ChatTemplate + ChatModel 的 Chain:

chain, _ := NewChain[map[string]any, *Message]().
           AppendChatTemplate(prompt).
           AppendChatModel(model).
           Compile(ctx)
chain.Invoke(ctx, map[string]any{"query": "what's your name?"})</
### EINO 环境搭建教程 EINO 是一种用于特定开发场景的集成环境配置方案,通常涉及多个工具链和依赖项。以下是关于如何搭建 EINO 环境的具体指南。 #### 1. 准备工作 在开始之前,需确认操作系统支持并安装必要的基础软件包。对于 Linux 和 macOS 用户来说,推荐使用 Homebrew 或者 apt-get 来管理依赖项[^1]。Windows 用户可以考虑 WSL (Windows Subsystem for Linux) 来模拟类 Unix 的运行环境[^2]。 #### 2. 安装核心组件 EINO 环境的核心组件包括 Python 解释器、Node.js 运行时以及数据库服务(如 MySQL 或 PostgreSQL)。具体操作如下: - **Python**: 推荐版本为 3.8 及以上。可以通过 `pyenv` 工具来管理和切换不同版本的 Python[^3]。 ```bash curl https://pyenv.run | bash pyenv install 3.9.7 pyenv global 3.9.7 ``` - **Node.js**: 使用 nvm (Node Version Manager) 来简化 Node.js 版本控制过程[^4]。 ```bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash nvm install --lts nvm use --lts ``` - **Database Setup**: 如果项目需要关系型数据库,则应提前设置好对应的服务器实例。例如,在本地启动 MySQL 数据库: ```sql CREATE DATABASE eino_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON eino_db.* TO 'eino_user'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` #### 3. 配置虚拟环境与依赖 为了隔离项目的依赖关系,建议创建独立的 Python 虚拟环境,并通过 pip 安装所需的模块列表[^5]。 ```bash python3 -m venv env_eino source env_eino/bin/activate pip install -r requirements.txt ``` 如果存在前端资源文件,则可能还需要执行 npm/yarn 命令完成静态资产构建任务[^6]。 ```bash npm install npm run build ``` #### 4. 启动应用 最后一步就是验证整个流程是否正常运作。一般情况下,开发者会编写一个入口脚本来初始化所有子系统[^7]。 ```python from flask import Flask, jsonify app = Flask(__name__) @app.route('/') def index(): return jsonify({"message": "Welcome to the EINO environment!"}) if __name__ == '__main__': app.run(debug=True) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值