初始Eino框架----相关组件的介绍
2026/7/12 1:53:06 网站建设 项目流程

初始Eino框架----相关组件的介绍

Eino是什么?

Eino[‘aino] (近似音: i know,希望框架能达到 “i know” 的愿景) 旨在提供基于 Golang 语言的终极大模型应用开发框架。 它从开源社区中的诸多优秀 LLM 应用开发框架,如 LangChain 和 LlamaIndex 等获取灵感,同时借鉴前沿研究成果与实际应用,提供了一个强调简洁性、可扩展性、可靠性与有效性,且更符合 Go 语言编程惯例的 LLM 应用开发框架。

什么是组件?

组件就像是一个足球队的一个个能力各异的队员,流水线上面不同的功能节点,每一个节点都像是一个能力强大的api。

接下来我将介绍一下基本的组件:

ChatModel

goget github.com/cloudwego/eino/schemagoget github.com/cloudwego/eino/components/modelgoget github.com/cloudwego/eino-ext/components/model/ark

定义

ChatModel 组件是一个用于与大语言模型交互的组件。它的主要作用是将用户的输入消息发送给语言模型,并获取模型的响应。

  • 自然语言对话
  • 文本生成和补全
  • 工具调用的参数生成
  • 多模态交互(文本、图片、音频等)

就是基础的大模型api

接口定义与三种方法

typeBaseChatModelinterface{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)}typeToolCallingChatModelinterface{BaseChatModel// WithTools returns a new ToolCallingChatModel instance with the specified tools bound.// This method does not modify the current instance, making it safer for concurrent use.WithTools(tools[]*schema.ToolInfo)(ToolCallingChatModel,error)}

Generate 方法

  • 功能:生成完整的模型响应
  • 参数:
    • ctx:上下文对象,用于传递请求级别的信息,同时也用于传递 Callback Manager
    • input:输入消息列表
    • opts:可选参数,用于配置模型行为
  • 返回值:
    • schema.Message:模型生成的响应消息
    • error:生成过程中的错误信息

Stream 方法

  • 功能:以流式方式生成模型响应
  • 参数:与 Generate 方法相同
  • 返回值:
    • schema.StreamReader[*schema.Message]:模型响应的流式读取器
    • error:生成过程中的错误信息

WithTools 方法

  • 功能:为模型绑定可用的工具
  • 参数:
    • tools:工具信息列表
  • 返回值:
    • ToolCallingChatModel: 绑定了 tools 后的 chatmodel
    • error:绑定过程中的错误信息

schema.Message结构体

**typeMessagestruct{****// Role 表示消息的角色(system/user/assistant/tool)Role RoleType// Content 是消息的文本内容Contentstring**// MultiContent 是多模态内容,支持文本、图片、音频等MultiContent[]ChatMessagePart// Name 是消息的发送者名称Namestring**// ToolCalls 是 assistant 消息中的工具调用信息ToolCalls[]ToolCall// ToolCallID 是 tool 消息的工具调用 IDToolCallIDstring**// ResponseMeta 包含响应的元信息ResponseMeta*ResponseMeta// Extra 用于存储额外信息Extramap[string]any**}**

ChatTemplate

goget github.com/cloudwego/eino/components/prompt

结构化消息:ChatTemplate组件

typeChatTemplateinterface{Format(ctx context.Context,vsmap[string]any,opts...Option)([]*schema.Message,error)}
  • prompt.FromMessages()
    • 用于把多个 message 变成一个 chat template。
  • schema.Message{}
    • schema.Message 是实现了 Format 接口的结构体,因此可直接构建schema.Message{}作为 template
  • schema.SystemMessage()
    • 此方法是构建 role 为 “system” 的 message 快捷方法
  • schema.AssistantMessage()
    • 此方法是构建 role 为 “assistant” 的 message 快捷方法
  • schema.UserMessage()
    • 此方法是构建 role 为 “user” 的 message 快捷方法
  • schema.ToolMessage()
    • 此方法是构建 role 为 “tool” 的 message 快捷方法
  • schema.MessagesPlaceholder()
    • 可用于把一个[]*schema.Message插入到 message 列表中,常用于插入历史对话

基本使用

  1. 使用prompt.FromMessages以及提供的schema.FString格式化
  2. 构造params参数
  3. 使用template自带的Format构建即可

示例代码

template:=prompt.FromMessages(schema.FString,schema.SystemMessage("你是一个{role}"),&schema.Message{Role:schema.User,Content:"请帮帮我,史瓦罗先生,{task}",},)params:=map[string]any{"role":"机器人史瓦罗先生","task":"写一首诗",}messages,err:=template.Format(ctx,params)

Embedding

goget github.com/cloudwego/eino-ext/components/embedding/ark

文本向量化:Embedding组件

Embedding 组件是一个用于将文本转换为向量表示的组件。它的主要作用是将文本内容映射到向量空间,使得语义相似的文本在向量空间中的距离较近。这个组件在以下场景中发挥重要作用:

  • 文本相似度计算
  • 语义搜索
  • 文本聚类分析

接口定义

typeEmbedderinterface{EmbedStrings(ctx context.Context,texts[]string,opts...Option)([][]float64,error)}

EmbedStrings 方法

  • 功能:将一组文本转换为向量表示
  • 参数:
    • ctx:上下文对象,用于传递请求级别的信息,同时也用于传递 Callback Manager
    • texts:待转换的文本列表
    • opts:转换选项,用于配置转换行为
  • 返回值:
    • [][]float64:文本对应的向量表示列表,每个向量的维度由具体的实现决定
    • error:转换过程中的错误信息

代码示例

packagemainimport("context""os""github.com/cloudwego/eino-ext/components/embedding/ark""github.com/joho/godotenv")funcmain(){err:=godotenv.Load(".env")iferr!=nil{panic(err)}ctx:=context.Background()apitype:=ark.APITypeMultiModal embedder,err:=ark.NewEmbedder(ctx,&ark.EmbeddingConfig{APIKey:os.Getenv("ARK_API_KEY"),Model:os.Getenv("EMBEDDER"),APIType:&apitype,})iferr!=nil{panic(err)}input:=[]string{"你好,大家好",}embeddings,err:=embedder.EmbedStrings(ctx,input)iferr!=nil{panic(err)}// 使用生成的向量fori,embedding:=rangeembeddings{println("文本",i+1,"的向量维度:",len(embedding))}}

这些只是一部分的组件的大致介绍,当然组件不止这些,有兴趣的可以到官方网站上面去学习。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询