【ai_agent】从零写一个agent框架(二)如何让一个workflow/agent跑起来,runtime模块设计

分清Agent Harness与Agent Runtime:职责边界与实战排查指南 在AI Agent开发与部署中,一个常见困扰是:系统报错到底该查Agent编排逻辑,还是查底层运行环境?许多开发者混淆了Agent Harness与Agent Runtime的边界。Agent Harness负责决策流程与工具编排,类似生产调度系统;Agent Runtime则承担进程管理、沙箱隔离、依赖与网络环境等底座能力。实际项目中,诸如“could not find the WebView2 Runtime”或“oci runtime create failed”等报错,本质都属于Runtime层问题 阅读详情

前言

上篇文章我们大致演示了一下ai_agent的食用方法。这里我们做一下核心模块runtime的设计和实现。

一个agent也好,workflow也好,他们单个实现起来并不复杂,困难的是如何将他们有机的组合起来,能够按照一定的逻辑流转起来。并且能够层层嵌套,能力无限。

理解起来比较抽象,我们先看几个重点方向,和现实中的例子:

1. 简单的workflow场景

我们可以使用一个简单的workflow来处理一些场景,比如奶茶店的智能推荐,那么它的一个流程大致如下:

graph LR
User --用户画像+query+上下文+其他--> pormpt
pormpt --> llm 
llm --> answer
answer --> 奶茶卡片

  • 这个流程就能看到,我们将llm,memory,prompt都当做一个节点,按照图中的顺序执行最终会得到一个推荐结果。
  • 可以说这是一个workflow的基础功能。

2. smartflow场景

对于有些问题,我们是不能够将完全预测出执行流程,比如Least-to-Most和smartflow的场景,这些节点往往是在执行过程中慢慢生成出来的。

我们还是举个例子, 假设有这样一个agent:评阅大师,它的目标是评阅优化输入文案。那么它的工作流程可能是这样的。

graph TD
user -->|文案| pf[评分llm]
pf -->|评分>80| 输出
pf -->|评分<80 \n 待优化方向| yhp[追加上下文]
yhp --> yh[优化llm]
yh --> pf

  • 工作方式一目了然,可以理解为一个评分llm,一个优化llm。对于一个文案,评分llm不断给出需要优化的点,并追加到上下文中,优化llm则根据要求不断优化,直到评分>80。
  • 我们的流程设计肯定不能是DAG,因为出现环了。

3. multi-agent场景

multi-agent常用来解决复杂问题,对流程设计的要求也更高。比较典型的场景是狼人杀。它的流程可能长这样。

graph TD
xdyt[入夜] --> zcr
zcr[主持人] -->|第一轮| lrfy[狼人开刀]
lrfy --> zcr
zcr[主持人agent] -->|第二轮| nwfy[女巫药]
nwfy --> zcr
zcr[主持人agent] -->|第三轮| yyjfy[预言家查人]
yyjfy --> zcr
zcr[主持人agent] -->|第四轮| syrfy[所有人发言]
syrfy --> gp[归票]
gp --> zcr
zcr -->|某个阵容胜利| 结束

  • 上图画的游戏规则并不严谨,但大体能感受到一个multi-agent的工作方式。这里面的每个角色都可以理解为一个agent,主持人可以是一个固定的脚本。
  • 这个场景要求每个agent都有自己的prompt,有独立的memory等,将一个agent放大,那么这个agent也应该是一个worlflow,由无数的节点拼接而来。也就要求我们流程设计能够层层嵌套,能力无限。

4. NL2code场景

保持开放是一个非常重要的能力,一来是能够让程序员直接写脚本。二是大模型有时候也会自己写脚本,也就是NL2Code场景。

我之前参与过一个专项,其中的一个能力是用户自由操作文档,比如文档归类,概要摘取等,结果通过text2sql存到数据库中。

这种场景下,仅仅提供有限功能的节点是不足够的。必须具备无限扩展的能力。

5. 开放域

在开放域中,agent将具备更自由的意志。举几个典型的场景:聊天室 游戏NPC 虚拟宠物

在这种应用中,agent更应该是一个完备的ai,具备更长的生命周期,更强的主观能动性。

agent从运行到结束,要像人一样,生下来就有意识,直到死亡。

简单的做法是先构建一个single agent,并让它至少有个memory+tool+设定这几个模块,最好是采用多模态大模型做基座模型。然后不断循环调用这个agent,从而达到和我一样的牛马状态。当然成本肯定极高。

另一种方法是做双循环,还是这个agent,一个循环是外界有输入后再调用agent,另一个循环是定时唤起agent的主观意识。从而节能减排。

不管是哪种方式,我更倾向于从agent外部解决。而非agent本身。

总结

现实中应用肯定不局限于这几种情况,但通过一定的流程编辑基本都可以解决,只是复杂性会比较高。

runtime 设计

一个agent的runtime大概可以看成是由这几部分构成:调度+节点服务+执行计划+上下文。

节点 service

代码仓库

一个service可以理解成一个原子能力,比如llm,比如tool,也可能是function。

我们这里做一个抽象:

pub trait Service: Send + Sync {
    async fn call(&self, flow: Flow) -> anyhow::Result<Output>;
}

执行计划

这个也很好理解,我们需要按照这个计划不断执行service。

pub trait Plan: Send + Sync {
    fn next(&self, ctx: Arc<Context>, node_id: &str) -> NextNodeResult;
    fn set(&self, nodes: Vec<PlanNode>);
    fn update(
        &self,
        node_code: &str,
        update: Box<dyn FnOnce(Option<&mut PlanNode>) -> anyhow::Result<()>>,
    ) -> anyhow::Result<()>;
}

上下文Context

这个所谓的上下文Context可以理解为 执行一个任务的具体消息,比如任务编码,堆栈信息,状态等。

  • 这里有一个子上下文的概念,也就是说在一个service里面可以执行一个子计划,也就是能力无限的实现。并且父子上下文会共享堆栈。todo:也会共享状态。
  • 这里没有做共享设计,每个Context会记录自己归属的运行时。也就是每个运行时都是独立的,为了多租户设计的。
pub struct Context {
    pub parent_code: Option<String>,
    //任务流名称
    pub code: String,
    //状态
    pub status: AtomicU8, //0:init 1:running, 2:success, 3:error
    //堆栈信息
    pub stack: Arc<Mutex<ContextStack>>,
    //执行计划
    pub plan: Arc<dyn Plan>,
    //全局扩展字段
    pub extend: Mutex<HashMap<String, Box<dyn Any + Send + Sync + 'static>>>,
    //结束时回调
    pub over_callback: Option<Mutex<Vec<Box<dyn FnOnce(Arc<Context>) + Send + Sync + 'static>>>>,
    pub(crate) runtime: Arc<Runtime>,
}

调度

调度也很简单,就是按照plan不断执行service

  • 这里做了中间层设计,也就是每个service都是一个‘洋葱’,一层层进,一层层出。
  • 每个service都是异步执行的,就是说如果你的plan存在并行结构,那么两个并行的分支会一起执行。
fn exec_next_node(ctx: Arc<Context>, node_code: &str) {
    let nodes = ctx.plan.next(ctx.clone(), node_code);
    ...
    for i in nodes {
        match ctx.runtime.nodes.get(i.node_type_id.as_str()) {
        ...
        };
        //将service和middle封装成一个flow执行
        let flow = Flow::new(i, ctx.clone(), middle);
        tokio::spawn(async move {
            let ctx = flow.ctx.clone();
            let result = tokio::spawn(async move {
            ... //处理一些堆栈信息
                //执行flow
                if let Err(e) = flow.call().await {
                    //错误处理
                } else {
                    //执行���功则继续执行下一个
                    Runtime::exec_next_node(ctx, code.as_str());
                }
            })
            .await;
            ... //检查错误,和故障恢复
        });
    }
}

Service layer

为了方便service的实现,我们将service再包装一层。如下:

pub  trait  ServiceLayer: Sync + Send {
    //service的配置类型
    type Config;
    //输出结果
    type Output;
    //执行过程
    async  fn call(
        &self,
        code: String,
        ctx: Arc<Context>,
        cfg: Self::Config,
    ) -> anyhow::Result<Self::Output>;
}

再为这个包装层加一个自动json解析的实现。这样入参和出参可以直接绑定到struct。

impl<T, In, Out> Service for LayerJson<T, In, Out>
where
T: ServiceLayer<Config = In, Output = Out>,
    In: for<'a> Deserialize<'a> + Send + Sync,
    Out: Serialize + Send + Sync,
{
    async  fn call(&self, flow: Flow) -> anyhow::Result<Output> {
        ... //类型解析和参数的初步处理
        //解析入参
        let cfg = match serde_json::from_str::<In>(node_config.as_str()) {
            ... //错误处理
        };
        //调用执行过程
        let output = self.handle.call(code, ctx, cfg).await ? ;
        //解析出参
        let raw = match serde_json::to_value(&output) {
            Ok(o) => o,
            Err(e) => return anyhow::anyhow!("code[{}],output json error:{}", node_info, e).err(),
        };
        Output::new(raw).raw_to_ctx().ok()
    }
}

测试

测试用例

尾语

整体runtime模块还是比较简单,比较薄的

​

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

一文厘清Agent Runtime与Agent Harness:从执行环境到上层编排 在AI Agent开发中,执行环境与编排策略的分层是架构设计的关键。Agent Runtime作为底层执行底座,负责模型推理、工具调用、上下文管理等基础设施,解决的是“能否跑起来”的问题;而Agent Harness则承担主循环、Prompt策略与技能编排,决定任务如何完成,解决的是“能否跑得好”的问题。从WebView2 Runtime缺失、OCI Runtime创建失败等常见运行时故障,到Harness工程、Codex Harness等新趋势,文章系统解析了二者的核心职责、选型要点与排障归因。掌握这一分 阅读详情

相关推荐

从 Claude Code 到 Codex:拆解 Agent Runtime 五层架构的新技术演进

更强的 Loop+ 更强的 Planner+ 更强的 Executor+ 更强的 Memory+ 更真实的 Environment= 下一代 Agent更会规划更会记忆更会与环境交互更会失败后修正自己而 Claude Code、Codex 的真正强大之处,也正是在这里。它们不是“更强的模型”。它们是:一个会思考、会行动、会记忆、会反思、会在真实环境中不断修正自己的系统。而这,才是下一代 Agent 真正的方向。

花千树的专栏 632

Agent runtime介绍(一个负责驱动Agent生命周期、状态、任务执行、工具调度、上下文管理的运行环境)比工作流引擎更底层,未来AI时代的操作系统

Agent Runtime 本质上是:一个负责驱动 Agent 生命周期、状态、任务执行、工具调度、上下文管理的运行环境。JVM 对 JavaNode.js 对 JavaScriptKubernetes 对容器Temporal 对工作流能力说明生命周期管理Agent 创建、暂停、恢复、销毁状态管理Tool 调度调用外部 API / MCP / 函数Workflow 执行推理链、任务图、DAG多 Agent 协作Agent 间通信事件驱动Event Loop。

Dontla的博客 3425

【05】企业级 Agent Runtime 如何设计?

企业级 Agent Runtime 是 AI 任务的生产控制层。本文从接入、上下文、协议、治理、执行、状态、观测和数据闭环拆解完整设计。

i_k_o_x_s的专栏 303

智能体(Agent)与工作流(Workflow)

工作流(Workflow)是一种描述业务过程的方法,它将工作流程中的各个步骤和规则抽象化,并通过计算机技术来实现这些流程的自动化。优点缺点Agent动态规划灵活缺乏稳定性Workflow静态规划稳定性高缺乏灵活性完成复杂的任务缺乏稳定性。

weixin_58811620的博客 2万+

Hermes Agent vs OpenClaw:轻量级AI Agent开发框架选型指南

AI Agent 框架本质上是连接能力与执行逻辑的中间件,其核心原理在于将任务分解为可组合、可调度、可观测的原子单元。技术价值不在于模型调用有多炫,而在于降低工程摩擦——包括启动延迟、热更新成本、环境依赖复杂度和调试可见性。典型应用场景涵盖本地自动化(如PDF摘要、邮件处理)、边缘设备部署及非技术人员可用的桌面级数字同事。Hermes 以分层架构(Skill/Orchestrator/Runtime)和协议驱动设计,直击 OpenClaw 等单体框架在生产落地中的卡点,尤其适合追求快速迭代、多环境兼容与桌面

weixin_30482181的博客 336

AI Agent Runtime 范式革命:会话即事件日志

AI Agent 并非简单调用大模型,其核心挑战在于状态管理与可信赖执行。传统架构将 session 硬塞进 context window,导致静默截断、调试困难、故障不可恢复——本质是把模型上下文当作‘承重墙’。Anthropic Managed Agents 提出根本解法:解耦 Session(持久化事件日志)、Harness(无状态执行器)和 Sandbox(微虚拟机沙箱),实现无限回溯、精准重放与零凭证暴露。这一 runtime 层架构演进,正推动行业从‘胶水代码开发’转向可观测性驱动、策略治理强化

Liusuzhi19610221的博客 480

【AI_agent】从零写一个agent框架(二)如何让一个workflow/agent跑起来,runtime模块设计

上篇文章我们大致演示了一下ai_agent的食用方法。这里我们做一下核心模块runtime的设计和实现。一个agent也好,workflow也好,他们单个实现起来并不复杂,困难的是如何将他们有机的组合起来,能够按照一定的逻辑流转起来。并且能够层层嵌套,能力无限。现实中应用肯定不局限于这几种情况,但通过一定的流程编辑基本都可以解决,只是复杂性会比较高。

xxue345678的博客 756

AI时代管理后台框架:基于Vue与Monorepo的Agent编排实践

管理后台正从静态页面集合演进为AI驱动的能力调度中心。其核心在于将AI能力抽象为可声明、可编排、可治理的独立单元(Agent),而非零散API调用;通过Vue响应式模型天然适配AI状态流,提升开发体验与协作效率;借助monorepo统一管理碎片化AI能力,实现版本共治、依赖共享与能力自动发现。AGENTS.md作为人机协作的通用协议,以轻量Markdown承载输入输出契约、权限策略与降级逻辑,使产品、法务等非技术人员也能参与AI能力定义与管控。本文聚焦AI成为默认运行时的中后台架构重构,提供可落地的Vue+

cishan3804的博客 393

从零开始:构建AI Agent框架(二)- 实现工作流/Agent的运行时模块设计

上篇文章我们大致演示了一下ai_agent的食用方法。这里我们做一下核心模块runtime的设计和实现。一个agent也好,workflow也好,他们单个实现起来并不复杂,困难的是如何将他们有机的组合起来,能够按照一定的逻辑流转起来。并且能够层层嵌套,能力无限。现实中应用肯定不局限于这几种情况,但通过一定的流程编辑基本都可以解决,只是复杂性会比较高。

2401_85390073的博客 1816

运放电路实战:5分钟搞定加法器与减法器的电路设计与调试(附避坑指南)

本文从实战角度出发,详细讲解了运算放大器加法器与减法器的电路设计与调试方法。针对加法器,重点分析了利用“虚地”特性简化设计和选型要点;对于减法器,则深入剖析了决定精度的核心——电阻匹配问题,并提供了使用电阻网络等提升共模抑制比的实用策略。文章还分享了从仿真到实物焊接的完整流程与常见避坑技巧,帮助电子爱好者快速掌握这两种基础运放电路。

weixin_28323057的博客 465

配置VScode编译、调试STM32(一)手动配置makefile和debug

做嵌入式的朋友们都应该有过想要有个功能强大的IDE或者编辑器,Keil MDK5、IAR EWARM是用的比较普遍的平台了,但是两者在编辑器方面都比较弱势,当然可以设置 或者使用外部编辑器,像Sourceinsight、notePad++这样,但毕竟需要切换回来进行Build、Debug,非常麻烦。 VScode从发布至今口碑一直很好,而且里面有非常多的插件,比如彩虹括号、Code Runner、...

hanhe0551的博客 4289

【03】Workflow为何不够?为何需要Agent Runtime?

Workflow 能描述节点和流转,却无法独立承担权限、状态恢复、审计、评测和运行治理。企业因此开始建设 Agent Runtime。

i_k_o_x_s的专栏 399

2024年上市公司ESG评级全解析:六大权威数据源横向对比与应用指南

本文深度解析2024年国内主流ESG评级数据源,包括华证、商道融绿、Wind、富时罗素和彭博,横向对比其覆盖范围、评分逻辑与应用侧重点。文章提供实战指南,帮助投资者与企业根据投资决策、风险管理和学术研究等不同场景,精准选择并有效应用ESG数据,实现从概念到实用分析工具的转变。

weixin_29229055的博客 312

【AI Agent】从零写一个agent框架,打造最强开放agent编辑框架,拳打dify,脚踩coze_webuiagent

这篇文章探讨了如何从零开始构建一个灵活、开放的AI Agent框架。作者分析了现有框架如Coze和Dify的优缺点,提出了三个核心目标:编排式Agent设计、服务与编排分离的BaaS架构,以及无限扩展能力。文章详细介绍了该框架的架构设计,包括Agent服务、WebUI编排界面、Python运行时环境等核心模块,并提供了快速体验指南,包括服务启动、插件加载和流程调试方法。最后通过一个简单的Single Agent示例,展示了从用户输入到LLM调用再到工具执行的完整工作流程。该框架强调开放性和灵活性,旨在突破现

Z4400840的博客 417

尚硅谷Redis 7学习笔记

尚硅谷Redis 7学习笔记

不更了,主打一个陪伴 2万+

UDS服务应该支持哪些否定响应码

UDS服务应该支持哪些否定响应码所有服务都需支持的否定响应码具体的服务需要支持的否定响应码否定响应码定义及其取值 USD诊断服务的否定响应中包含有导致否定响应原因的编码,称为否定响应码(NRC, Negative Response Code)。否定响应码的取值范围为0x00 - 0xFF,被分为三组: 0x00:服务器内部实现否定响应码判断逻辑时使用,表示要给出肯定响应。 0x01 – 0x7F:诊断通信相关的否定响应码。 0x80 – 0xFF:服务器收到诊断服务请求时,由于某些条件不满足要求而给出的否定

闲聊汽车软件开发 4万+

Agent Workflow Runtime 架构拆解:把 Agent Loop 从提示词搬进代码,长任务才真正稳了

拆解 Workflow Runtime 如何用代码接管 Agent Loop,让长任务更稳定、可复盘、可复用。

AI 小老六的博客 782

Windows 10下Gpg4win 4.3.1安装与配置全攻略:从下载到邮件加密实战

本文详细介绍了在Windows 10系统下安装和配置Gpg4win 4.3.1的全过程,包括下载、验证、自定义安装以及密钥管理。特别重点讲解了如何通过Kleopatra证书管理器进行密钥创建和管理,以及在Outlook中实现邮件加密的实战操作,帮助用户全面提升数据安全防护能力。

weixin_29271263的博客 301

VoltAgent 入门全景:从 Agent 定义、Workflow 编排到 VoltOps 可观测性的 TypeScript AI Agent 框架指南

VoltAgent 是一个开源的 TypeScript AI Agent 框架与工程平台,本文基于其官方文档 [getting-started/overview.md](https://link.gitcode.com/i/6b69c2a562dc2a0df38052e7bcf435e0) 展开,结合仓库源码([packages/core](https://link.gitcode.com/i/6

gitblog_01012的博客 406

YOLO26优化:AAAI2026 | 融合PartialNet Block的C3k2-YOLO高效目标检测网络 | 轻量化涨点设计

PartialNet Block 结合YOLO26的C3k2模块,进行二次创新。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 589

Python爬虫实战:股票历史数据抓取与量化回测全流程详解

我们以**东方财富网(eastmoney.com)和雪球网(xueqiu.com)**为主要目标,演示如何爬取A股历史行情。最常用的HTTP请求库,简单易用,适合静态页面数据请求。本文详细介绍了从股票历史数据抓取到简单回测的完整流程,代码示例基于最新技术,结构清晰,适合初学者和进阶者学习量化投资实战。希望对你入门Python爬虫和量化交易有所帮助!

2201_76125261的博客 1778

从零开发 AI Agent(一):项目搭建与 Agent Runtime 基础架构设计

本文记录了作者从零搭建AIAgent项目的首阶段实践:基于Python构建模块化Agent架构。通过定义统一的请求/响应数据模型(Pydantic),实现意图识别(关键词匹配)与工具抽象层(BaseTool),初步搭建起用户输入→意图识别→工具调用→结果返回的执行链路,旨在深入理解Agent核心机制,为后续集成LLM、工作流与错误处理奠定基础。

weixin_63535518的博客 142

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

从1到1000个Agent:OpenRath Workflow模块化组合指南

OpenRath 是一个开源的**多 Agent、多会话(multi-session)智能体框架**,灵感来自 PyTorch:它把 Agent 拆成可复用的小层,用 `Workflow` 像搭积木一样组合起来,让 Session 成为贯穿所有 Agent 的"流动数据"。无论你是刚接触 LLM Agent 的新手,还是想管理上百个协作 Agent 的工程师,这份指南都能帮你快速理解 **Work

gitblog_00124的博客 631

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Agent Runtime 和 Agent Workflow 有什么区别?分别解决什么问题?

Agent Workflow 管任务怎么走,Agent Runtime 管任务在什么环境里持续运行。前者安排步骤、分支和循环,后者承接模型、工具、数据、状态、权限与执行记录。流程已经画出来,却常常卡在上线环节,缺的通常就是运行层。ZGI 把自己放在 Agent Runtime 的位置,同时提供可视化工作流。这个组合容易理解:工作流负责把事情编排出来,Runtime 负责让它接入真实资源,并在一次次执行中留下可追踪的状态。

zgiLucas的博客 575

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

AI 正在进入本地时代,我开源了一个推理平台—— 支持多模型 / Agent / Workflow 的工程实现

2022起始,伴随着 ChatGPT 的热潮,大语言模型(LLM)从科学殿堂走向商业应用,伴随着大模型的能力越来越强,大模型逐渐从个人与企业的“尝鲜工具”正演变成个人与企业真正的生产力倍增器与工作效率提升引擎。于是,我跟我的团队深度挖掘企业大模型与智能体应用的真实痛点,从2025年下半年开始,我们花了超过半年多的时间,从零开始,基于开源架构自主研发一套本地大模型部署与智能体管理平台。我们拥有越来越多大模型与智能体工具,但缺少真正的大模型部署与智能体平台。是否存在一个真正“平台级”的本地大模型模型解决方案?

Java与Android技术栈 634

OpenVitamin 整体架构设计—— 一个本地 AI 推理平台是如何构建的

OpenVitamin 将 Knowledge / RAG Service 作为 Control Plane 的核心组成部分,而不是附属插件。随着 AI 应用复杂度提升,Runtime 与 Control Plane 的价值将越来越明显。在 OpenVitamin 的整体架构中,Control Plane 是最核心的一层。将所有 AI 行为抽象为“任务”,并交由 Control Plane 统一调度。Control Plane 负责将“AI 能力”转化为“可调度的系统行为”。

Java与Android技术栈 535
上一篇: 【ai_agent】从零写一个agent框架(一)打造最强开放agent编辑框架,拳打dify,脚踩coze
下一篇: 【ai_agent】从零写一个agent框架(三)实现几个示例中的service:llm,tool等
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值