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

初始Eino框架----相关组件的介绍 初始Eino框架----相关组件的介绍Eino是什么Eino[‘aino] (近似音: i know希望框架能达到 “i know” 的愿景) 旨在提供基于 Golang 语言的终极大模型应用开发框架。 它从开源社区中的诸多优秀 LLM 应用开发框架如 LangChain 和 LlamaIndex 等获取灵感同时借鉴前沿研究成果与实际应用提供了一个强调简洁性、可扩展性、可靠性与有效性且更符合 Go 语言编程惯例的 LLM 应用开发框架。什么是组件?组件就像是一个足球队的一个个能力各异的队员流水线上面不同的功能节点每一个节点都像是一个能力强大的api。接下来我将介绍一下基本的组件ChatModelgoget 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 Managerinput输入消息列表opts可选参数用于配置模型行为返回值schema.Message模型生成的响应消息error生成过程中的错误信息Stream 方法功能以流式方式生成模型响应参数与 Generate 方法相同返回值schema.StreamReader[*schema.Message]模型响应的流式读取器error生成过程中的错误信息WithTools 方法功能为模型绑定可用的工具参数tools工具信息列表返回值ToolCallingChatModel: 绑定了 tools 后的 chatmodelerror绑定过程中的错误信息schema.Message结构体**typeMessagestruct{****// Role 表示消息的角色system/user/assistant/toolRole RoleType// Content 是消息的文本内容Contentstring**// MultiContent 是多模态内容支持文本、图片、音频等MultiContent[]ChatMessagePart// Name 是消息的发送者名称Namestring**// ToolCalls 是 assistant 消息中的工具调用信息ToolCalls[]ToolCall// ToolCallID 是 tool 消息的工具调用 IDToolCallIDstring**// ResponseMeta 包含响应的元信息ResponseMeta*ResponseMeta// Extra 用于存储额外信息Extramap[string]any**}**ChatTemplategoget 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{}作为 templateschema.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)Embeddinggoget github.com/cloudwego/eino-ext/components/embedding/ark文本向量化Embedding组件Embedding 组件是一个用于将文本转换为向量表示的组件。它的主要作用是将文本内容映射到向量空间使得语义相似的文本在向量空间中的距离较近。这个组件在以下场景中发挥重要作用文本相似度计算语义搜索文本聚类分析接口定义typeEmbedderinterface{EmbedStrings(ctx context.Context,texts[]string,opts...Option)([][]float64,error)}EmbedStrings 方法功能将一组文本转换为向量表示参数ctx上下文对象用于传递请求级别的信息同时也用于传递 Callback Managertexts待转换的文本列表opts转换选项用于配置转换行为返回值[][]float64文本对应的向量表示列表每个向量的维度由具体的实现决定error转换过程中的错误信息代码示例packagemainimport(contextosgithub.com/cloudwego/eino-ext/components/embedding/arkgithub.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(文本,i1,的向量维度:,len(embedding))}}这些只是一部分的组件的大致介绍当然组件不止这些有兴趣的可以到官方网站上面去学习。