初始Eino框架----相关组件的介绍
📅 2026/7/12 2:01:49
👁️ 阅读次数
📝 编程学习
初始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.Message 是实现了 Format 接口的结构体,因此可直接构建
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 列表中,常用于插入历史对话
- 可用于把一个
基本使用
- 使用prompt.FromMessages以及提供的schema.FString格式化
- 构造params参数
- 使用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))}}这些只是一部分的组件的大致介绍,当然组件不止这些,有兴趣的可以到官方网站上面去学习。
编程学习
技术分享
实战经验