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

网站营销目标敦化建设局网站

网站营销目标,敦化建设局网站,长沙网站建设,网站关键词被百度屏蔽怎么办前言 开发基于大模型的软件应用#xff0c;就像指挥一支足球队#xff1a;组件是能力各异的队员#xff0c;编排是灵活多变的战术#xff0c;数据是流转的足球。Eino 是字节跳动开源的大模型应用开发框架#xff0c;拥有稳定的内核#xff0c;灵活的扩展性#xff0c;完…前言 开发基于大模型的软件应用就像指挥一支足球队组件是能力各异的队员编排是灵活多变的战术数据是流转的足球。Eino 是字节跳动开源的大模型应用开发框架拥有稳定的内核灵活的扩展性完善的工具生态可靠且易维护背靠豆包、抖音等应用的丰富实践经验。初次使用 Eino就像接手一支实力雄厚的足球队即使教练是初出茅庐的潜力新人也可以踢出高质量、有内容的比赛。 下面就让我们一起踏上新手上路之旅 认识队员 Eino 应用的基本构成元素是功能各异的组件就像足球队由不同位置角色的队员组成 组件名 组件功能 ChatModel 与大模型交互输入 Message 上下文得到模型的输出 Message Tool 与世界交互根据模型的输出执行对应的动作 Retriever 获取相关的上下文让模型的输出基于高质量的事实 ChatTemplate 接收外界输入转化成预设格式的 prompt 交给模型 Document Loader 加载指定的文本 Document Transformer 按照特定规则转化指定的文本 Indexer 存储文件并建立索引供后续 Retriever 使用 Embedding Retriever 和 Indexer 的共同依赖文本转向量捕获文本语义 Lambda 用户定制 function 这些组件抽象代表了固定的输入输出类型、Option 类型和方法签名 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 } 真正的运行需要的是具体的组件实现 组件名 官方组件实现 ChatModel OpenAI, Claude, Gemini, Ark, Ollama... Tool Google Search, Duck Duck Go... Retriever Elastic Search, Volc VikingDB... ChatTemplate DefaultChatTemplate... Document Loader WebURL, Amazon S3, File... Document Transformer HTMLSplitter, ScoreReranker... Indexer Elastic Search, Volc VikingDB... Embedding OpenAI, Ark... Lambda JSONMessageParser... Eino 的开发过程中首先要做的是决定“我需要使用哪个组件抽象”再决定“我需要使用哪个具体组件实现”。就像足球队先决定“我要上 1 个前锋”再挑选“谁来担任这个前锋”。 组件可以像使用任何的 Go interface 一样单独使用。但要想发挥 Eino 这支球队真正的威力需要多个组件协同编排成为一个相互联结的整体。 制定战术 在 Eino 编排场景中每个组件成为了“节点”Node节点之间 1 对 1 的流转关系成为了“边”EdgeN 选 1 的流转关系成为了“分支”Branch。基于 Eino 开发的应用经过对各种组件的灵活编排就像一支足球队可以采用各种阵型能够支持无限丰富的业务场景。 足球队的战术千变万化但却有迹可循有的注重控球有的简单直接。对 Eino 而言针对不同的业务形态也有更合适的编排方式 编排方式 特点和场景 Chain 链式有向图始终向前简单。适合数据单向流动没有复杂分支的场景。 Graph 有向图有最大的灵活性或有向无环图不支持分支但有清晰的祖先关系。 Chain如简单的 ChatTemplate ChatModel 的 Chain chain, _ : NewChain[map[string]any, *Message]().AppendChatTemplate(prompt).AppendChatModel(model).Compile(ctx) chain.Invoke(ctx, map[string]any{query: whats your name?}) Graph如可以执行一次 Tool Call 的 Graph graph : NewGraph[map[string]any, *schema.Message]()_ graph.AddChatTemplateNode(node_template, chatTpl) _ graph.AddChatModelNode(node_model, chatModel) _ graph.AddToolsNode(node_tools, toolsNode) _ graph.AddLambdaNode(node_converter, takeOne)_ graph.AddEdge(START, node_template) _ graph.AddEdge(node_template, node_model) _ graph.AddBranch(node_model, branch) _ graph.AddEdge(node_tools, node_converter) _ graph.AddEdge(node_converter, END)compiledGraph, err : graph.Compile(ctx) if err ! nil {return err } out, err : r.Invoke(ctx, map[string]any{query:Beijings weather this weekend}) 了解工具 现在想象下你接手的足球队用了一些黑科技比如在每个队员接球和出球的瞬间身上的球衣可以自动的记录接球和出球的速度、角度并传递给场边的服务器这样比赛结束后就可以统计出每个队员触球的情况和处理球的时间。 在 Eino 中每个组件运行的开始和结束也可以通过 Callbacks 机制拿到输入输出及一些额外信息处理横切面需求。比如一个简单的打日志能力 handler : NewHandlerBuilder().OnStartFn(func(ctx context.Context, info *RunInfo, input CallbackInput) context.Context {log.Printf(onStart, runInfo: %v, input: %v, info, input)return ctx}).OnEndFn(func(ctx context.Context, info *RunInfo, output CallbackOutput) context.Context {log.Printf(onEnd, runInfo: %v, out: %v, info, output)return ctx}).Build()// 注入到 graph 运行中 compiledGraph.Invoke(ctx, input, WithCallbacks(handler)) 再想象一下这个足球队的黑科技不止一种还可以让教练在比赛前制作“锦囊”并藏在球衣里当队员接球时这个锦囊就会播放教练事先录制好的妙计比如“别犹豫直接射门”。听上去很有趣但有一个难点有的锦囊是给全队所有队员的有的锦囊是只给一类队员比如所有前锋的而有的锦囊甚至是只给单个队员的。如何有效的做到锦囊妙计的分发 在 Eino 中类似的问题是 graph 运行过程中 call option 的分发 // 所有节点都生效的 call option compiledGraph.Invoke(ctx, input, WithCallbacks(handler))// 只对特定类型节点生效的 call option compiledGraph.Invoke(ctx, input, WithChatModelOption(model.WithTemperature(0.5)))// 只对特定节点生效的 call option compiledGraph.Invoke(ctx, input, WithCallbacks(handler).DesignateNode(node_1)) 发现独门秘笈 现在想象一下你的球队里有一些明星球员中场大脑 ChatModel 和锋线尖刀 StreamableTool身怀绝技他们踢出的球速度如此之快甚至出现了残影看上去就像是把一个完整的足球切成了很多片面对这样的“流式”足球对手球员手足无措不知道该如何接球但是你的球队的所有队员都能够完美的接球要么直接一个片一个片的接收“流式”足球并第一时间处理要么自动的把所有片拼接成完整的足球后再处理。身怀这样的独门秘笈你的球队具备了面对其他球队的降维打击能力 在 Eino 中开发者只需要关注一个组件在“真实业务场景”中是否可以处理流式的输入以及是否可以生成流式的输出。根据这个真实的场景具体的组件实现包括 Lambda Function就去实现符合这个流式范式的方法 // ChatModel 实现了 Invoke输入输出均非流和 Stream输入非流输出流两个范式 type ChatModel interface {Generate(ctx context.Context, input []*Message, opts ...Option) (*Message, error)Stream(ctx context.Context, input []*Message, opts ...Option) (*schema.StreamReader[*Message], error) }// Lambda 可以实现任意四种流式范式// Invoke is the type of the invokable lambda function. type Invoke[I, O, TOption any] func(ctx context.Context, input I, opts ...TOption) (output O, err error)// Stream is the type of the streamable lambda function. type Stream[I, O, TOption any] func(ctx context.Context,input I, opts ...TOption) (output *schema.StreamReader[O], err error)// Collect is the type of the collectable lambda function. type Collect[I, O, TOption any] func(ctx context.Context,input *schema.StreamReader[I], opts ...TOption) (output O, err error)// Transform is the type of the transformable lambda function. type Transform[I, O, TOption any] func(ctx context.Context,input *schema.StreamReader[I], opts ...TOption) (output *schema.StreamReader[O], err error) Eino 编排能力会自动做两个重要的事情 上游是流但是下游只能接收非流时自动拼接Concat。 上游是非流但是下游只能接收流时自动流化T - StreamReader[T]。 除此之外Eino 编排能力还会自动处理流的合并、复制等各种细节把大模型应用的核心——流处理做到了极致。 一场训练赛 -- Eino 智能助手 好了现在你已经初步了解了 Eino 这支明星球队的主要能力是时候通过队员(组件)、战术(编排)、工具(切面、可视化)来一场训练赛去亲自体验一下它的强大。 场景设定 Eino 智能助手根据用户请求从知识库检索必要的信息并按需调用多种工具以完成对用户的请求的处理。工具列表如下 DuckDuckGo从 DuckDuckGo 搜索互联网信息 EinoTool获取 Eino 的工程信息比如仓库链接、文档链接等 GitClone克隆指定仓库到本地 任务管理(TaskManager)添加、查看、删除 任务 OpenURL使用系统的默认应用打开文件、Web等类型的链接 本文主要呈现一个 Demo 样例用户可根据自己的场景更换自己的知识库和工具以搭建自己所需的智能助手。 先来一起看看基于 Eino 搭建起来的 Agent 助手能实现什么效果 6-eino_agent_play 我们分两步来构建这个 Eino 智能助手 Knowledge Indexing索引知识库将我们在特定领域沉淀的知识以分词、向量化等多种手段构建成索引以便在接收用户请求时索引出合适的上下文。 本文采用向量化索引来构建知识库。 Eino AgentEino 智能助手根据用户的请求信息以及我们预先构建好的可调用的工具让 ChatModel 帮我们决策下一步应该执行什么动作或输出最终结果。Tool 的执行结果会再次输入给 ChatModel让ChatModel 再一次判断下一步的动作直至完成用户的请求。 任务工作流 索引知识库(Knowledge Indexing) 将 Markdown 格式的 Eino 用户手册以合适的策略进行拆分和向量化存入到 RedisSearch 的 VectorStore 中作为 Eino 知识库。 Eino 智能体(Eino Agent) 根据用户请求从 Eino 知识库召回信息采用 ChatTemplate 构建消息请求 React Agent视需求循环调用对应工具直至完成处理用户的请求。 所需工具 在从零开始构建「Eino 智能助手」这个实践场景中需要下列工具 工具集 是否必须 功能与作用 资源列表 Eino 框架 必须 全码开发 AI 应用的框架 提供 AI 相关的各种原子组件和编排能力 https://github.com/cloudwego/eino https://github.com/cloudwego/eino-ext 「Eino 用户手册」https://www.cloudwego.io/zh/docs/eino/ EinoDev 插件 (Goland) 非必须 可视化拖拽编排 AI 应用并生成全码 可视化对编排的 AI 应用进行调试 EinoDev 暂只有 Goland 版后续会提供 VSCode 版 「Eino Dev 插件安装」 https://www.cloudwego.io/zh/docs/eino/core_modules/devops/ide_plugin_guide/ 「EinoDev 可视化编排插件功能指南」 https://www.cloudwego.io/zh/docs/eino/core_modules/devops/visual_orchestration_plugin_guide/ 火山云 豆包模型/向量化 必须 豆包模型ArkChatModel提供在线的对话文本推理能力 向量化将文本进行向量化计算用于对 Eino 知识库构建向量索引 「火山引擎豆包模型」 https://console.volcengine.com/ark 需要实名认证后购买使用每人有 50万免费Tokens额度 Docker 非必须 通过 Docker 提供 RedisSearch 组件 也可自主进行手动部署 Docker https://docs.docker.com/get-started/ Eino 智能助手 代码示例 必须 本文的完整示例代码 https://github.com/cloudwego/eino-examples/tree/main/quickstart/eino_assistant 索引知识库 示例的仓库路径https://github.com/cloudwego/eino-examples/tree/main/quickstart/eino_assistant 下文中采用相对于此目录的相对路径来标识资源位置 构建一个命令行工具递归遍历指定目录下的所有 Markdown 文件。按照标题将 Markdown 文件内容分成不同的片段并采用火山云的豆包向量化模型逐个将文本片段进行向量化存储到 Redis VectorStore 中。 指令行工具目录cmd/knowledge_indexing Markdown 文件目录cmd/knowledge_indexing/eino-dcos 开发「索引知识库」应用时首先采用 Eino 框架提供的 Goland EinoDev 插件以可视化拖拽和编排的形式构建 KnowledgeIndexing 的核心应用逻辑生成代码到 eino_graph/knowledge_indexing 目录。 代码生成后首先手动将该目录下的各组件的构造方法补充完整然后在业务场景中调用 BuildKnowledgeIndexing 方法构建并使用 Eino Graph 实例。 接下来将逐步介绍KnowledgeIndexing 的开发过程 大模型资源创建 火山引擎是字节跳动的云服务平台可从中注册和调用豆包大模型有大量免费额度。 创建 doubao-embedding-large 作为知识库构建时的向量化模型以及创建 doubao-pro-4k 资源作为 agent 对话时的模型。 「火山引擎在线推理」https://console.volcengine.com/ark 启动 Redis Stack 本文将使用 Redis 作为 Vector Database为方便用户构建环境提供 Docker 的快捷指令 在 eino-examples/quickstart/eino_assistant 提供 docker-compose.yml 在 eino-examples/quickstart/eino_assistant/data 目录下提供了 Redis 的初始知识库 直接用 redis 官方的 redis stack 镜像启动即 完成启动后打开本地的 8001 可进入 redis stack 的 web 界面 在浏览器打开链接 http://127.0.0.1:8001 可视化开发 「Eino 可视化开发」是为了降低 Eino AI 应用开发的学习曲线提升开发效率。对于熟悉 Eino 的开发者也可选择跳过「Eino 可视化开发」阶段直接基于 Eino 的 API 进行全码开发。 安装 EinoDev 插件并打开 Eino Workflow 功能 Graph name: KnowledgeIndexing Node trigger mode: 任意前驱节点结束后出发 Input type: document.Source Import path of input type: github.com/cloudwego/eino/components/document Output type: []string 其他置空 按照上文「索引知识库」中的流程说明从 Eino Workflow 中选择需要使用的组件库本文需要用到如下组件 document/loader/file 从指定 URI 加载文件解析成文本内容以 schema.Document 列表形式返回。 document/transformer/splitter/markdown 将从 FileLoader 中加载到的文本内容进一步拆分成合适的大小以平衡向量化计算/存储的尺寸限制和召回的效果。 indexer/redis 将 schema.Document 的原文、索引字段 存储在 Redis Vector Database 中 embedding/ark 采用 Ark 平台的向量化模型对 schema.Document 中的 Content 等内容进行向量化计算 将选中的组件按照预期的拓扑结构进行编排完成编排后点击“生成代码”到指定目录。 「索引知识库」的代码生成到eino_assistant/eino/knowledgeindexing 本示例可直接复制 eino/knowledge_indexing.json 中的 Graph Schema来快速构建示例中的图 按需完善各个组件的构造函数在构造函数中补充创建组件实例时需要的配置内容 补充好组件的配置内容后即可调用 BuildKnowledgeIndexing 方法在业务场景使用 完善代码 通过可视化开发生成的 Eino 编排代码无法保证可直接使用需要人工阅读和检查下代码的完整性 生成核心函数是 BuildKnowledgeIndexing()用户可在需要的地方调用此方法创建实例进行使用 在「索引知识库」的场景下需要将 BuildKnowledgeIndexing 封装成一个指令从环境变量中读取模型配置等信息初始化 BuildKnowledgeIndexing 的配置内容扫描指定目录下的 Markdown 文件执行对 Markdown 进行索引和存储的操作。 详细代码可查看cmd/knowledgeindexing/main.go 运行 PS: 示例项目中已经内置了 eino 的一部分文档向量化到 redis 中 在 .env 文件中按照注释说明获取并填写 ARK_EMBEDDING_MODEL 和 ARK_API_KEY 的值按如下指令运行 KnowledgeIndexing 指令 cd xxx/eino-examples/quickstart/eino_assistant # 进入 eino assistant 的 example 中# 修改 .env 中所需的环境变量 (大模型信息、trace 平台信息) source .env# 因示例的Markdown文件存放在 cmd/knowledgeindexing/eino-docs 目录代码中指定了相对路径 eino-docs所以需在 cmd/knowledgeindexing 运行指令 cd cmd/knowledgeindexing go run main.go 执行运行成功后即完成 Eino 知识库的构建可在 Redis Web UI 中看到向量化之后的内容 在浏览器打开链接 http://127.0.0.1:8001 Eino 智能体 示例的仓库路径https://github.com/cloudwego/eino-examples/tree/main/quickstart/eino_assistant 下文中采用相对于此目录的相对路径来标识资源位置 构建一个基于从 Redis VectorStore 中召回的 Eino 知识回答用户问题帮用户执行某些操作的 ReAct Agent即典型的 RAG ReAct Agent。可根据对话上下文自动帮用户记录任务、Clone 仓库打开链接 等。 大模型资源创建 继续使用「索引知识库」章节中创建的 doubao-embedding-large 和 doubao-pro-4k 启动 RedisSearch 继续使用「索引知识库」章节中启动的 Redis Stack 可视化开发 eino_agent 打开 EinoDev 插件进入到 Eino Workflow 页面新建一张画布 Graph Name: EinoAgent Node Trigger Mode: 任意前驱节点结束后出发 Input Type Name: *UserMessage Input Package Path: Output Type Name: *schema.Message Output Import Path: github.com/cloudwego/eino/schema 其他置空 按照上文「Eino 智能体」中的流程说明从 Eino Workflow 中选择需要使用的组件库本文需要用到如下组件 lambda: 将开发者任意的函数 func(ctx context.Context, input I) (output O, err error)转换成可被编排的节点在 EinoAgent 中有两个转换场景 将 *UserMessage 消息转换成 ChatTemplate 节点的 map[string]any 将 *UserMessage 转换成 RedisRetriever 的输入 query retriever/redis 根据用户 Query 从 Redis Vector Database 根据语义相关性召回和 Query 相关的上下文以 schema.Document List 的形式返回。 prompt/chatTemplate 通过字符串字面量构建Prompt模板支持 文本替换符 和 消息替换符将输入的任意 map[string]any转换成可直接输入给模型的 Message List。 flow/agent/react 基于开发者提供的 ChatModel 和 可调用的工具集针对用户的问题自动决策下一步的 Action直至能够产生最终的回答。 model/ark Ark 平台提供的能够进行对话文本补全的大模型例如豆包模型。作为 ReAct Agent 的依赖注入。 可调用的工具列表 互联网搜索工具(DuckDuckGo)、EinoTool、GitClone、任务管理(TaskManager)、 OpenURL 将选中的组件按照预期的拓扑结构进行编排完成编排后点击“生成代码”到指定目录。 本示例中「Eino 智能体」的代码生成到eino/einoagent 本示例可直接复制 eino/eino_agent.json 中的 Graph Schema来快速构建示例中的图 按需完善各个组件的构造函数在构造函数中补充创建组件实例时需要的配置内容 补充好组件的配置内容后即可调用 BuildEinoAgent 方法在业务场景使用 完善代码 在「Eino 智能体」的场景下BuildEinoAgent 构建的 Graph 实例可做到根据用户请求和对话历史从 Eino 知识库中召回上下文 然后结合可调用的工具列表将 ChatModel 循环决策下一步是调用工具或输出最终结果。 下图即是对生成的 BuildEinoAgent 函数的应用将 Eino Agent 封装成 HTTP 服务接口 运行 在 .env 文件中按照注释说明获取并填写对应各变量的值按如下指令启动 Eino Agent Server cd eino-examples/eino_assistant # 进入 eino assistant 的 example 中# 修改 .env 中所需的环境变量 (大模型信息、trace 平台信息) source .env# 为了使用 data 目录需要在 eino_assistant 目录下执行指令 go run cmd/einoagent/*.go 启动后可访问如下链接打开 Eino Agent Web Eino Agent Webhttp://127.0.0.1:8080/agent/ 观测(可选) 如果在运行时在 .env 文件中指定了 LANGFUSE_PUBLIC_KEY 和 LANGFUSE_SECRET_KEY便可在 Langfuse 平台中登录对应的账号查看请求的 Trace 详情。 相关链接 项目地址https://github.com/cloudwego/einohttps://github.com/cloudwego/eino-ext Eino 用户手册https://www.cloudwego.io/zh/docs/eino/ 项目官网https://www.cloudwego.io 扫描二维码加入飞书社群
http://www.hkea.cn/news/14438295/

相关文章:

  • layui做移动网站网站解决方案
  • 电商网站构建网站开发需要逻辑吗
  • 成都学校网站制作营销型网站建设怎么做
  • 点击即玩的小游戏网站百度的总部在哪里
  • 嘉鱼网站建设哪家专业网页游戏大全小游戏
  • 网站开发发展趋势2020一建试题
  • 网站开发专业术语自做头像的网站
  • 高校思政课网站建设网站建设色彩搭配
  • 这么建立com的网站像素人物制作网站
  • 建设网站公司哪家好深圳住房城乡建设局网站
  • 安防网站建设优点大学生网站建设结题报告
  • 黑色个人网站欣赏wordpress minty 2.6
  • 网站开发能用udp协议吗php 网站配置
  • 个人怎样免费建网站在阿里云做视频网站需要什么
  • 网站域名服务器wordpress提问插件
  • 山西建设厅网站利用html做博客网站
  • 上海哪里做网站好如何免费制作微信小程序
  • 山西网站建设排名网站运营推广公司
  • 志勋网站建设公司建设网站企业注册人员
  • iis做网站视番禺的互联网公司
  • 开发网站的流程步骤电脑网页打不开是什么问题
  • 建设银行网站理财产品wordpress for sae 4.0
  • 怎样暂停域名指向网站如何建设传奇网站
  • 开发网站公司门户网站wordpress fancyzoom
  • 备案网站系统wordpress codecolorer
  • 百度下拉框推广网站珠海做网站公司有哪些
  • 免费在线观看韩国电视剧网站推荐我做彩票网站开发彩票网站搭建
  • 建设个网站制作app费用
  • php网站建设基本流程企业网站模板
  • 网站的建设流程图网站设计方案谁写