背景介绍
它从开源社区中的诸多优秀 LLM 应用开发框架,如 LangChain 和 LlamaIndex 等获取灵感,同时借鉴前沿研究成果与实际应用,提供了一个强调简洁性、可扩展性、可靠性与有效性,且更符合 Go 语言编程惯例的 LLM 应用开发框架。Eino 提供的价值如下:
- 精心整理的一系列 组件(component) 抽象与实现,可轻松复用与组合,用于构建 LLM 应用。
- 强大的 编排(orchestration) 框架,为用户承担繁重的类型检查、流式处理、并发管理、切面注入、选项赋值等工作。
- 一套精心设计、注重简洁明了的 API。
- 以集成 流程(flow) 和 示例(example) 形式不断扩充的最佳实践集合。
- 一套实用 工具(DevOps tools),涵盖从可视化开发与调试到在线追踪与评估的整个开发生命周期。
eino和langchian确实很相似,不同的组件对应不同的功能,组件列表如下所示:
组件名 | 组件功能 |
ChatModel | 与大模型交互,输入 Message 上下文,得到模型的输出 Message |
Tool | 与世界交互,根据模型的输出,执行对应的动作 |
Retriever | 获取相关的上下文,让模型的输出基于高质量的事实 |
ChatTemplate | 接收外界输入,转化成预设格式的 prompt 交给模型 |
Document Loader | 加载指定的文本 |
Document Transformer | 按照特定规则转化指定的文本 |
Indexer | 存储文件并建立索引,供后续 Retriever 使用 |
Embedding | Retriever 和 Indexer 的共同依赖,文本转向量,捕获文本语义 |
Lambda | 用户定制 function |
ChatModel interface定义了了 Stream
、BindTools
、Generate
流式传输、Tool模型基本对话
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 }
基本调用可以如下图所示:
当然,除了openai库之外,官方同样支持ollama和ark库等。所以无论是调用本地运行的模型,还是服务商提供的模型,都可以迅速上手。
初步感受
这个项目我才接触不久,目前第一感觉是和langchain很像,基于chain的模式实现agent和RAG,但是官方也支持基于graph的编排,目前还不懂,继续学(*∩_∩*)
引用资源:
eino官方文档: https://www.cloudwego.io/zh/docs/
eino github链接: https://github.com/cloudwego/eino 、https://github.com/cloudwego/eino-ext 、
ps:官方的飞书群还挺好的,有啥疑问,回答都挺快的,氛围也不错,点赞!