Eino初学
前言
此时是已经初步学习了go中的各个主流框架(其实也就gozero、grpc),主要是为了更加深入的了解Sim,我还需学习为go量身打造的agent框架—-Eino,可以粗糙的理解为把langchain工程落地的go版本
此博客搭配笔记https://mirage-thought-d06.notion.site/Eino-21d747825dae807ca9b3ff601c655f4a食用更佳
这里放一幅图,现在我还看的不是很通透,也许后面回顾时再来看就通透了。

React Agent
React(Reasoning+Acting)并不是一个框架,而是一种agent设计思想,也就上让agent不断思考并调用工具再思考,直到完成最终目标的过程。
//接下来介绍构建agent的各个组件
ChatModel
也就是基础的大模型api,能够返回回复、调整参数、多模态交互
关于ChatModel的使用,和我当时python调用讯飞差不多:
准备好.env
引入库,然后实例化模型,传参传入config,设置好返回模式
同时定义好message结构体,也就是用户输入,定义还系统提示此,然后把该结构体当作input参数传入generate函数,得到返回,如果是流式返回,还得for chunk啥的
ChatTemplate
也就是先写一个消息模板,然后后面就只需要传入参数,例如{role}、{task},就能够嵌入模板形成一份完整的提示词
//然后是RAG的一些介绍,由于之前学过,这里不做赘述,接下来讲编排相关内容
Chain
编排分为链式编排和图式编排,链式是图式的一种
1 | //注册链条 |
以上是一个极简链式编排,我还能往里面加工具调用节点,也就是需要我先写好工具函数,定义好工具描述,并注入大模型的可调用工具列表中,然后当我输入一段话时,大模型会思考它是否需要调用工具,要的话就会提取我输入中的参数作为工具函数的参数传入工具函数,然后返回结果再发送给大模型,给出回答。所以可以得到这个过程中大模型是思考了两下的。
Graph
图可以添加更多的东西,与链的初步区别就是加入了分支,我可以创建多个分支节点,然后用一个分支控制节点来决定流程要往哪个分支走,类似于多个if else。代码流程是需要在创建好节点后把节点加入图,然后再把节点加入分支,才算组成图完毕,我上面所说的这些是不加入大模型的情况,后面还能加入大模型、状态、回调,这些就是 graph编排的高级特性了。
state
主要用于记忆功能,让各节点共享state
callback
让经过每个节点时可以做一次例如打印当前节点名称、输入输出的功能。实时监控的感觉
graph
同样的,图也可以作为一个节点嵌入另一个图中
开发工具
vscode插件eino dev是一个可视化的agent工作流编排工具:

编写好后可以生成相应的代码;而且也支持很多debug功能
CozeLoop
这是个字节推出的适配eino的低代码agent开发平台,具体得用用才知道能干啥,总之看起来功能也很多很详细。

