当前位置: 首页 > news >正文

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

初始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))}}

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

http://www.jsqmd.com/news/1171046/

相关文章:

  • 华为/H3C/锐捷/思科 4厂商流量统计配置对比:3种实现原理与5个关键差异点
  • 金仓数据库高可用集群部署实战:主备同步与故障自动切换
  • 深度解析PDF补丁丁:如何实现高效PDF文档重构与批量处理
  • 涌现性不对齐:AI“学坏“会传染——《自然》新研究揭示AI行为模式跨任务扩散的机制与风险
  • Zotero + Obsidian 文献管理:开题报告文献综述 3 步高效工作流
  • Tomasulo 算法模拟器实战:5步图解 RAW/WAR/WAW 数据相关消除过程
  • 1987年5月18日中午11-13点出生性格、运势和命运
  • 【小白搭建小龙虾】 OpenClaw 实操|图形化一键部署全过程避坑详解(含安装包)
  • Camera Sensor 6种分辨率控制方法对比:Windowing/Binning/Scaling 对帧率与视场角影响
  • 从 SENet 到 GateNet:张俊林团队 3 代特征重要性模型演进与工业落地思考
  • 活性锰除醛产品怎么挑?我会先看这几个地方
  • 敏捷创新背后的举重式工作:突破性创新的幕后逻辑
  • 嵌入式系统信号上下拉设计与PIC18F85J10实践
  • 毕业必备!2026AI论文工具榜单(覆盖 99% 论文写作需求)
  • TEKLauncher终极指南:告别方舟MOD冲突与服务器配置烦恼的完整解决方案
  • 沐曦MXC600国产GPU实战:从CUDA迁移到AI训练集群部署
  • LabVIEW TDMS 文件高级应用:3步实现高速流盘与Excel数据交换
  • LinkSwift网盘直链下载助手:一键获取9大网盘真实下载地址的终极解决方案
  • 深入理解 Java I/O 流:从基础到高级应用
  • 【Midjourney角色一致性终极指南】:20年AI视觉工程师亲授3大锚点控制法,97%用户忽略的提示词底层逻辑
  • 详情页跳出率下降41%的秘密:用ChatGPT构建“用户决策路径图谱”(附可即插即用的12类目Prompt矩阵)
  • 防火墙Web管理端口8443 vs 443:思科/华为/华三3厂商安全策略解析
  • 5步掌握Windows Terminal:现代命令行的深度配置实战
  • vSphere HA 6.5+ 虚拟机重启优先级与顺序控制:5级策略与依赖链实战
  • 163MusicLyrics终极指南:跨平台音乐歌词提取与处理的完整解决方案
  • 勒让德变换与凸共轭函数:从3个经典案例看优化理论的数学基石
  • YimMenu技术解析:构建GTA V最强防护系统的开源方案
  • SDF函数
  • 基于鸿蒙平台的AI星座匹配应用开发实践:从移动端到鸿蒙PC的全场景解决方案
  • League Akari:英雄联盟玩家的终极本地化效率工具