Think in React(官方文档)翻译

FuncReAct:用Function Calling重构ReAct智能体的确定性执行 ReAct(推理-行动)是构建AI智能体的经典范式,其核心在于通过循环式‘思考→行动→观测’实现复杂任务分解。然而传统ReAct依赖提示词驱动的字符串生成来调用工具,导致JSON格式错误、函数名幻觉、意图漂移等稳定性问题。OpenAI的Function Calling机制通过结构化Schema声明与API原生支持,为工具调用提供了强类型保障和可验证性。FuncReAct正是将二者深度耦合的技术实践——它不是简单叠加,而是以function_call为状态机触发点,重构ReAct闭环,使工具调用成为推理过程的 阅读详情

原文链接 https://facebook.github.io/react/docs/thinking-in-react.html

文章是以第一人称写的,所以少部分内容读起来比较奇怪,但是结构很清晰,适合初学者理解。翻译水平不够,欢迎大佬指导(可以对照原文和原文中的代码)。



正文开始:

React是我们构建性能良好的大型webapp的首选,它目前在我们的facebook和instagram中变现非常好。

在使用react的过程中,核心的一点是如何在它的组件化理念下去思考并构建自己的项目。在这篇文章中,我们会向你展示如何使用react的思考方式去构建一个产品搜索表格的小项目。

 假设我们现在已经有了JSON API和初步的设计稿,如下所示:


JSON API返回的数据:

[
  {category: "Sporting Goods", price: "$49.99", stocked: true, name: "Football"},
  {category: "Sporting Goods", price: "$9.99", stocked: true, name: "Baseball"},
  {category: "Sporting Goods", price: "$29.99", stocked: false, name: "Basketball"},
  {category: "Electronics", price: "$99.99", stocked: true, name: "iPod Touch"},
  {category: "Electronics", price: "$399.99", stocked: false, name: "iPhone 5"},
  {category: "Electronics", price: "$199.99", stocked: true, name: "Nexus 7"}
];



STEP1:按照UI设计稿层次化拆分出react组件

在设计稿上尝试使用方框去画出每一个组件以及它的子组件,然后加上自己可理解的命名。如果和UI沟通方便的话,可以查看一下他们PS软件中的设计稿,因为设计稿一般都是按图层和图层组去管理的,并且已经命名好了,所以可以借鉴很多东西,加快自己的工作流程。

 如何去确定一个组件不能再拆分,你可以这样类比去考虑,在js编程的过程中是不是要判断是否要增加一个函数或对象。通俗一点来说,这种方式叫做单一功能原则,就是一个组件只负责一个功能,如果一个组件包含多个功能,就需要把它拆分为多个子组件。

 还有另外一个技巧在拆分组件是可以借鉴,日常工作中,你会发现json数据是和UI(看以看成组件)一一对应的,这是因为json数据和UI都是根据相同的,需要展示的信息去设计、演化的,这就意味着你只需要拆分组件到每个组件只代表json中一块数据或一个字段,就可以完成拆分组件的工作。


你会看到这个app中有以下五个组件,我们已经用斜体注明了每个组件代表的数据。

1.FilterableProductTable(橙色):包裹了我们这个app

2.SearchBar(蓝色):接收用户的输入数据

3.ProductTable (绿色):根据用户的输入过滤显示数据

4.ProductCategoryRow (蓝绿色/青色):每个类目的标题

5.ProductRow (红色): 用一行代表每个产品

 如果观察一下ProductTable这个组件,你会看到表格头部内name和label标签并没有单独划出组件,这时可以根据自己的偏好决定,如果两种方式犹豫不定的话。在这个例子中,我们把表头留作ProductTable的一部分是因为它的作用和ProductTable的作用是一样的,都是用来渲染产品列表的。另一种情况,如果表头变得更复杂,比如增加了价格区间,这时就非常必要增加一个ProductTableHeader组件了。

 现在我们已经理清了需要的组件,接下来按层次组织一下所有组件,把有父组件的子组件作为子节点显示在层次列表中,如下:

  • FilterableProductTable
    • SearchBar
    • ProductTable
      • ProductCategoryRow
      • ProductRow 


STEP2:使用react构建项目的静态版本

代码如下:

class ProductCategoryRow extends React.Component {
  render() {
    return <tr><th colSpan="2">{this.props.category}</th></tr>;
  }
}

class ProductRow extends React.Component {
  render() {
    var name = this.props.product.stocked ?
      this.props.product.name :
      <span style={{color: 'red'}}>
        {this.props.product.name}
      </span>;
    return (
      <tr>
        <td>{name}</td>
        <td>{this.props.product.price}</td>
      </tr>
    );
  }
}

class ProductTable extends React.Component {
  render() {
    var rows = [];
    var lastCategory = null;
    this.props.products.forEach(function(product) {
      if (product.category !== lastCategory) {
        rows.push(<ProductCategoryRow category={product.category} key={product.category} />);
      }
      rows.push(<ProductRow product={product} key={product.name} />);
      lastCategory = product.category;
    });
    return (
      <table>
        <thead>
          <tr>
            <th>Name</th>
            <th>Price</th>
          </tr>
        </thead>
        <tbody>{rows}</tbody>
      </table>
    );
  }
}

class SearchBar extends React.Component {
  render() {
    return (
      <form>
        <input type="text" placeholder="Search..." />
        <p>
          <input type="checkbox" />
          {' '}
          Only show products in stock
        </p>
      </form>
    );
  }
}

class FilterableProductTable extends React.Component {
  render() {
    return (
      <div>
        <SearchBar />
        <ProductTable products={this.props.products} />
      </div>
    );
  }
}


var PRODUCTS = [
  {category: 'Sporting Goods', price: '$49.99', stocked: true, name: 'Football'},
  {category: 'Sporting Goods', price: '$9.99', stocked: true, name: 'Baseball'},
  {category: 'Sporting Goods', price: '$29.99', stocked: false, name: 'Basketball'},
  {category: 'Electronics', price: '$99.99', stocked: true, name: 'iPod Touch'},
  {category: 'Electronics', price: '$399.99', stocked: false, name: 'iPhone 5'},
  {category: 'Electronics', price: '$199.99', stocked: true, name: 'Nexus 7'}
];
 
ReactDOM.render(
  <FilterableProductTable products={PRODUCTS} />,
  document.getElementById('container')
);
现在有了app的组件和相关结构,可以开始构建工作了。这时最简单的方法是先直接使用已有数据去渲染UI,暂时不考虑app的动态数据是怎么交互和工作的。因为构建静态的版本只需要努力的敲大量代码而不用耗费脑力去思考数据怎么交互,反之,添加数据交互功能更费脑力。接下来,会解释原因。

在只需要渲染已有数据的情况下,你只要把这些数据作为组件的props传入即可。props是父组件向子组件传递数据的方式。如果你熟悉state的相关概念和用法,但是在构建静态版本这个阶段,牢记先不要去使用它。因为state适用于数据交互的,也就是说,数据在不断变化,所以这时先忘记state这个东西。

在具体的操作方式上,可以采用自上而下或自下而上的方式,也就是说,你可以选择从组件结构最上层(FilterableProductTable)或者从结构最下层(ProductRow)。在一些简单的项目中,通常选择从上之下的方法,而在更大的项目中,使用自下而上的方式更容易一些,并且可以同时写测试。

这一步最后,你已经有了可复用的组件去渲染已有数据,静态app版本中只有render()方法。组件结构最上层FilterableProductTable将已有数据作为自己的prop属性,如果你对数据做一点更改,并再次调用render(),UI就会再次更新。在现在app不复杂的情况下,观察UI如何更新,哪里需要更改是很清楚的,react的单向数据流或单向绑定会保证app的模块化和性能。

 

STEP-3: 确认组件的state(数量最少但能包含全部状态)

 为了增强app的交互性,需要能够触发数据的变化,在react中提供了state使整个流程变得简单。

正确构建app首要思考的是找出app中所需要的最少量的state。原则就是不要做重复工作,挖掘最少的state,其他工作交给相关命令。举个栗子,现在要做一个TODOList,只要分理出一个事项列表的state就可以包括所有数据,而不必为每一个事项都提供一个state。在渲染每个事项的时候,使用包含数组的state就行了。

回到我们的app中,观察所有需要展示的数据,可以得出以下几个:

  • 原始的产品列表
  • 用户输入的搜索关键词
  • 单选框的值
  • 经过过滤展示的产品列表

让我们仔细查看每一个,确定哪一个是state。这里要考虑三个关于这些数据的问题:

  • 这个数据是父组件的props属性传过来的吗?如果是,那它就不能作为state
  • 这个数据一直保持不变吗?如果是,那它就不能作为state
  • 这个数据可以用组件内其它的state或者是props计算而来吗?如果是,那它就不能作为state

原始的产品列表是使用props传入的,所以它不是state。用户输入的关键词和单选框的值是在时刻变化的,并且不能计算而来,看起来可以作为state。最后,过滤后的产品列表可以通过原始列表等以上三项数据计算而来,所以它不是state。

最后,app中的state是:

1.用户输入的搜索关键词

2.单选框的值

 

STEP4:确定state放置的具体组件和位置

代码:

class ProductCategoryRow extends React.Component {
  render() {
    return (<tr><th colSpan="2">{this.props.category}</th></tr>);
  }
}

class ProductRow extends React.Component {
  render() {
    var name = this.props.product.stocked ?
      this.props.product.name :
      <span style={{color: 'red'}}>
        {this.props.product.name}
      </span>;
    return (
      <tr>
        <td>{name}</td>
        <td>{this.props.product.price}</td>
      </tr>
    );
  }
}

class ProductTable extends React.Component {
  render() {
    var rows = [];
    var lastCategory = null;
    this.props.products.forEach((product) => {
      if (product.name.indexOf(this.props.filterText) === -1 || (!product.stocked && this.props.inStockOnly)) {
        return;
      }
      if (product.category !== lastCategory) {
        rows.push(<ProductCategoryRow category={product.category} key={product.category} />);
      }
      rows.push(<ProductRow product={product} key={product.name} />);
      lastCategory = product.category;
    });
    return (
      <table>
        <thead>
          <tr>
            <th>Name</th>
            <th>Price</th>
          </tr>
        </thead>
        <tbody>{rows}</tbody>
      </table>
    );
  }
}

class SearchBar extends React.Component {
  render() {
    return (
      <form>
        <input type="text" placeholder="Search..." value={this.props.filterText} />
        <p>
          <input type="checkbox" checked={this.props.inStockOnly} />
          {' '}
          Only show products in stock
        </p>
      </form>
    );
  }
}

class FilterableProductTable extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      filterText: '',
      inStockOnly: false
    };
  }

  render() {
    return (
      <div>
        <SearchBar
          filterText={this.state.filterText}
          inStockOnly={this.state.inStockOnly}
        />
        <ProductTable
          products={this.props.products}
          filterText={this.state.filterText}
          inStockOnly={this.state.inStockOnly}
        />
      </div>
    );
  }
}


var PRODUCTS = [
  {category: 'Sporting Goods', price: '$49.99', stocked: true, name: 'Football'},
  {category: 'Sporting Goods', price: '$9.99', stocked: true, name: 'Baseball'},
  {category: 'Sporting Goods', price: '$29.99', stocked: false, name: 'Basketball'},
  {category: 'Electronics', price: '$99.99', stocked: true, name: 'iPod Touch'},
  {category: 'Electronics', price: '$399.99', stocked: false, name: 'iPhone 5'},
  {category: 'Electronics', price: '$199.99', stocked: true, name: 'Nexus 7'}
];

ReactDOM.render(
  <FilterableProductTable products={PRODUCTS} />,
  document.getElementById('container')
);

前面我们已经确定好了state,接下来研究哪个组件可以包括和控制这几个state。

知识点来了:react中数据在组件结构中是自上而下的单向数据流。要搞清楚哪个组件控制哪个state不是一个简单快速的过程。对于初学者来说,这也可能是最具挑战性的、最费脑去理解的。

所以,以下列举了几个步骤去走一遍这个过程:

  • 找出根据某个state去渲染数据的全部组件
  • 找出公共状态组件(组件结构中联系到某个state的所有组件(第一步找出的组件)的上层组件)
  • 第二步中公共状态组件或最上层组件都可以放置这个state
  • 如果还是不能确定哪个组件放置state,可以创建一个新组件,放置在公共状态组件之上,用这个新组件放置state

让我们应用上边的步骤到示例app中:

  • ProductTable需要根据state过滤、展示数据,searchBar需要展示搜索关键词和单选框状态
  • 上一步两个组件的公共状态组件是FilterableProductTable
  • 所以FilterableProductTable组件可以明证言顺的放置公共state

现在已经确定了state应该放在FilterableProductTable组件中。接下来先把{this.state = {filterText: '', inStockOnly: false}添加到这个组件的constructor中,设置app的初始化状态,然后将filterText和inStockOnly以prop属性的方式传入ProductTable和searchBar组件中,最后使用这些属性数据过滤ProductTable中的产品,显示searchBar中表单的值。

这一步做完就可以大致了解react app是如何运行的。将filterText设置为ball,然后刷新页面,就可以看到产品列表正确的显示结果。

 

STEP5:处理反向数据流

代码:

class ProductCategoryRow extends React.Component {
  render() {
    return (<tr><th colSpan="2">{this.props.category}</th></tr>);
  }
}

class ProductRow extends React.Component {
  render() {
    var name = this.props.product.stocked ?
      this.props.product.name :
      <span style={{color: 'red'}}>
        {this.props.product.name}
      </span>;
    return (
      <tr>
        <td>{name}</td>
        <td>{this.props.product.price}</td>
      </tr>
    );
  }
}

class ProductTable extends React.Component {
  render() {
    var rows = [];
    var lastCategory = null;
    console.log(this.props.inStockOnly)
    this.props.products.forEach((product) => {
      if (product.name.indexOf(this.props.filterText) === -1 || (!product.stocked && this.props.inStockOnly)) {
        return;
      }
      if (product.category !== lastCategory) {
        rows.push(<ProductCategoryRow category={product.category} key={product.category} />);
      }
      rows.push(<ProductRow product={product} key={product.name} />);
      lastCategory = product.category;
    });
    return (
      <table>
        <thead>
          <tr>
            <th>Name</th>
            <th>Price</th>
          </tr>
        </thead>
        <tbody>{rows}</tbody>
      </table>
    );
  }
}

class SearchBar extends React.Component {
  constructor(props) {
    super(props);
    this.handleFilterTextInputChange = this.handleFilterTextInputChange.bind(this);
    this.handleInStockInputChange = this.handleInStockInputChange.bind(this);
  }
  
  handleFilterTextInputChange(e) {
    this.props.onFilterTextInput(e.target.value);
  }
  
  handleInStockInputChange(e) {
    this.props.onInStockInput(e.target.checked);
  }
  
  render() {
    return (
      <form>
        <input
          type="text"
          placeholder="Search..."
          value={this.props.filterText}
          onChange={this.handleFilterTextInputChange}
        />
        <p>
          <input
            type="checkbox"
            checked={this.props.inStockOnly}
            onChange={this.handleInStockInputChange}
          />
          {' '}
          Only show products in stock
        </p>
      </form>
    );
  }
}

class FilterableProductTable extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      filterText: '',
      inStockOnly: false
    };
    
    this.handleFilterTextInput = this.handleFilterTextInput.bind(this);
    this.handleInStockInput = this.handleInStockInput.bind(this);
  }

  handleFilterTextInput(filterText) {
    this.setState({
      filterText: filterText
    });
  }
  
  handleInStockInput(inStockOnly) {
    this.setState({
      inStockOnly: inStockOnly
    })
  }

  render() {
    return (
      <div>
        <SearchBar
          filterText={this.state.filterText}
          inStockOnly={this.state.inStockOnly}
          onFilterTextInput={this.handleFilterTextInput}
          onInStockInput={this.handleInStockInput}
        />
        <ProductTable
          products={this.props.products}
          filterText={this.state.filterText}
          inStockOnly={this.state.inStockOnly}
        />
      </div>
    );
  }
}


var PRODUCTS = [
  {category: 'Sporting Goods', price: '$49.99', stocked: true, name: 'Football'},
  {category: 'Sporting Goods', price: '$9.99', stocked: true, name: 'Baseball'},
  {category: 'Sporting Goods', price: '$29.99', stocked: false, name: 'Basketball'},
  {category: 'Electronics', price: '$99.99', stocked: true, name: 'iPod Touch'},
  {category: 'Electronics', price: '$399.99', stocked: false, name: 'iPhone 5'},
  {category: 'Electronics', price: '$199.99', stocked: true, name: 'Nexus 7'}
];

ReactDOM.render(
  <FilterableProductTable products={PRODUCTS} />,
  document.getElementById('container')
);

到这一步,我们已经构建好了具备单向数据流的app,现在要做的是使app支持另一种数据流动方式:组件结构下层的表单组件去更新上层组件FilterProductTable中的state。

React中数据流动的方式规定很明确,从而让使用者更容易理解应用如何工作,但是相比双向数据绑定的框架就需要更多的代码。

如果现在在示例app中输入或单击选框,你会发现react忽视了你的操作。因为这里设置input标签prop属性的值是使用FilterProductTable组件的state传入的数据,这种方式中忽略输入的react规定的。

接下来想一想我们期望的运行方式和结果是什么,不管用户什么时候输入,state都会根据输入去更新。因为组件只能更新组件内自己的state,所以FilterProductTable组件需要传入回调函数

到searchbar组件中,当state需要更新时,调用回调。我们会在search Bar组件中使用onChange事件监听变化,然后传入的回调函数再调用setState(),最后app就会更新。

虽然上边的内容听起来很复杂,但是却只需要一小段代码。在react构建的app中,你的数据是如何流动和作用的,这一点是很清楚的。

 

最后。。。。。。(完)


AI智能体入门:从Python到ReAct的四层能力构建 AI智能体不是高级聊天机器人,而是具备感知、推理与执行能力的自主软件实体。其核心原理在于将用户模糊需求分解为可验证的‘思考-行动’循环(ReAct),依托Python工程能力调用真实API,并通过LangChain等框架封装记忆、工具调度与输出控制等关键缺陷补偿机制。这种技术范式正广泛应用于企业微信客服、自动化报告生成、内部数据查询等轻量级生产场景。本文聚焦零基础学习者最易卡点的四层递进结构——Python手写能力、API交互直觉、LangChain模块化封装、ReAct行为闭环设计,结合7个落地项目经验, 阅读详情

相关推荐

DeepResearch:基于LangGraph与ReAct的学术智能体实践指南

学术研究正从线性文献浏览迈向可编程、可验证、可回溯的智能研究范式。LangGraph通过有状态工作流图谱,为非线性探索提供底层支撑;ReAct则将‘推理-行动-观察’建模为原子化研究行为,替代传统Prompt链式调用。这种架构显著提升冷门领域(如量子化学张量截断、法律大模型幻觉)的证据溯源准确率与矛盾识别能力。其技术价值在于构建具备研究伦理守门人(Supervisor)、数字显微镜工具链和证据锚点输出的3.0级学术智能体,适用于综述撰写、前沿研判、方法论验证等真实科研场景。

weixin_33829657的博客 319

React中文文档之Thinking in React

Thinking in React - 思考React 在我们看来,React是使用js来创建大的、速度快的web应用的首选方式。它已经在Facebook和Instagram表现的非常好。 React众多伟大部分之一是:创建应用时,它是如何让你思考的。在这个文档中,我们将带领你穿越,使用React来构建搜索产品数据表的整个思维过程 Start With A Mock - 以一个模拟开

beyond__devil的博客 1962

ReAct智能体原理与工程实践:从思维链到原子级行动闭环

ReAct(Reasoning + Acting)是一种将大语言模型推理能力与外部工具调用深度耦合的智能体行为范式,其核心在于构建‘思考-行动-观察’的原子级闭环,而非传统思维链(CoT)式的纯内部推理。它通过强制模型在每个token生成阶段响应真实观测数据,显著抑制幻觉、提升决策可验证性。技术价值体现在对金融风控、医疗问答、法律咨询等高可靠性场景的支撑能力,尤其在需要多跳验证、结构化输入构造、原始Observation保真处理等关键环节展现出不可替代性。本文聚焦ReAct在生产环境中的落地细节,涵盖pro

weixin_30920853的博客 382

Thinking in React(翻译)

以下是React官方文档中的Thinking inReact文章的翻译,第一次翻译英文的文章,肯定有很多不正确的地方,还望多多包涵。 原文地址:https://facebook.github.io/react/docs/thinking-in-react.html 原文开始 ---------------------------------------------------------

win0032的博客 4454

手把手搭建ReACT智能体:让AI真正学会思考与执行

ReACT(Reasoning + Acting)是一种将大语言模型推理能力与外部工具执行能力深度协同的智能体范式,其核心在于构建Thought-Action-Observation闭环,使AI能像人类一样拆解问题、调用工具、验证结果。相比纯文本推理的Chain-of-Thought,ReACT强调动作可执行、观测可验证,显著提升答案的可解释性与可靠性;相较于微调密集型方案如Toolformer,它具备零微调、易调试、工具即插即用的工程优势。该范式特别适用于多跳查询、实时数据依赖、跨系统验证等复杂场景,已成

weixin_34310369的博客 386

think-react-store:基于 react hooks 和 context api 实现的类似的 redux 的数据管理库

think-react-store 基于 react hooks 和 context api 实现的类似的 redux 的数据管理库。支持数据存储,方法调用,可以在 class 组件和 function 组件中使用,支持同步和异步的方法调用。 安装 npm i --save think-react-store api 介绍 api 作用 适合场景 StoreProvider 全局用的 provider app.js 或者单个模块的根文件 StoreContext 存储用的 Context function 组件和 class 组件均适用 useStoreHook store 钩子函数,包含state和dispatch function 组件 useStateHook 获取 state 用的 hook function 组件 useDispatchHook 进行事件派发的 hook fun

Mailvelope高级配置技巧:如何自定义安全背景和优化性能 [特殊字符]

Mailvelope是一款强大的浏览器扩展,专为Google Chrome和Firefox设计,让您能够在Webmail中轻松实现OpenPGP加密通信。这款开源工具不仅提供了端到端加密功能,还允许用户深度定制安全背景和优化性能设置。通过本文的**Mailvelope高级配置技巧**,您将学会如何个性化您的加密体验,同时提升扩展的运行效率。 ## 📊 为什么需要自定义安全背景? Mailve

gitblog_00015的博客 417

react-store:用于React应用程序的状态容器

React Store· React Store是用于应用程序的非常简单但可靠的状态容器。 通过复制工作方式(几乎完全没有Redux),它可以帮助您编写存储应用程序状态的React应用程序,而这些机制完全是使用在纯React中完成。 它为您提供了React Hooks和React HOC,使您能够轻松访问所需的存储功能和数据。 安装 要使用npm安装稳定版本: npm install --save @virtuous/react-store 要使用yarn安装稳定版本: yarn add @virtuous/react-store 设置 React Store遵循Redux的概念。 这意味着您的应用程序的整个状态都存储在React上下文中的对象树中。 更改状态树的唯一方法是发出一个动作,然后让reducer将更改应用于存储部分。 要建立商店,您只需要将商店组件包装在应用程序

Reactjs入门官方文档(十一)【Thinking in React】

此文章是翻译thingking in react这篇React(版本v15.5.4)官方文档。 React 的编程思想在我们看来,React 是 JavaScript 构建大型,高性能 Web 应用的首选。在 Facebook 和 Instagram 中都能很好的应用。React 中许多重要部分之一是思考如何构建应用程序。 在本文档中,我们将引导你完成用 React 构建一个可搜索的产品数据表的思考

极客神殿 761

IC 时钟设计核心问题与高质量系统设计指南(附源码)

本文深入探讨了IC时钟设计的核心问题与高质量系统设计方法。时钟系统作为IC的"心脏",其性能直接影响时序稳定性、功耗效率和可靠性。文章从五个维度展开分析:时钟源选择与性能匹配、时钟分配网络设计、抖动抑制、多时钟域管理和功耗优化。针对高质量时钟系统设计,提出了时钟源优化、时钟树结构优化、干扰抑制与仿真验证等具体方法。同时,系统阐述了时钟与复位的协同设计关系,强调异步复位同步释放等技术的重要性。文章还总结了高质量IC系统设计的综合要点,包括电源/信号完整性、时序功耗平衡、可靠性设计及全流程验

Open 1061

Cyclone MAX独立编程实战:从硬件接口到SAP镜像的嵌入式烧录指南

在嵌入式系统开发与量产中,固件烧录是连接软件与硬件的关键环节。其核心原理是通过特定的调试接口(如JTAG、BDM)和编程算法,将编译后的机器码写入目标处理器的非易失性存储器。这项技术的价值在于确保软件在硬件上的可靠部署,是产品功能实现和质量保证的基础,广泛应用于汽车电子、工业控制等对一致性与可靠性要求极高的领域。独立编程器(Stand-Alone Programmer)在此基础上,通过集成存储、交互界面和任务逻辑,实现了脱离PC的自动化操作,极大提升了产线效率和现场维护的便捷性。本文以Cyclone MAX

weixin_34038293的博客 467

12 Thinking in React

Steps to think in React 1. 根据UI划分组件层级 App SearchBar ProductTable CategoryRow ProductRow 2. 用React创建一个静态版本(渲染UI) 建议: 渲染UI和添加交互过程分开 通过props传入所需数据, 不推荐使用state构建静态版本 state代表了随时间变化而变化的数据, 应当仅在实现交互时使用 大型项目自下而上开发, 小型项目自上而下开发(先父后子) 3. 确定UI state的最小完整表示(

nan's notes 195

SpringBoot+Vue企业级开源聚合支付系统!支持30+款支付平台,只需配置商户证书就能直接使用!

一款开源SAAS支付系统推荐

技术Z先生的博客 2721

重新 Think in Hooks

本文首发于我的个人博客 为什么要重新来过? 我之前写过 一篇博客,介绍了 Class 组件的各个生命周期钩子函数在 Hooks 中对应的方案。那时 Hooks 刚刚发布,开发者最关心的莫过于代码的迁移问题,也就是怎么把现有的 Class 组件改造成 Hooks 的方式。 尽管这种方式非常的直观有效,但很快我们就发现,事情似乎没那么简单。单纯用这个思维来考虑问题,并不能很好地解释 Hooks 的一些...

weixin_33801856的博客 127

RTPS规范v2.3(中文版)

DDSI-RTPSv2.3,DDS发现互操作性-实时发布订阅通信协议,中文版

pony12的专栏 752

告别环境配置噩梦:用Docker Desktop + WSL2在Windows上5分钟搞定vLLM运行环境

本文详细介绍了如何在Windows系统上使用Docker Desktop和WSL2快速搭建vLLM开发环境,5分钟内完成配置。通过容器化技术解决传统环境配置中的依赖冲突、环境污染等问题,提供一键复用的高效方案,特别适合AI开发者快速部署和测试vLLM框架。

weixin_28728495的博客 503

Gemini 3.0深度解析:Deep Think与百万上下文如何重构AI工作流

大语言模型的‘思考方式’正从概率滑坡式输出转向类人慢思考——Deep Think机制通过假设生成、冲突检测与共识收敛,显著提升复杂推理准确率;而百万级上下文不再仅是容量扩展,其核心价值在于跨文档语义锚定与动态时间轴建模,支撑真实业务中的因果链挖掘。这种能力已深度融入Antigravity等原生AI开发平台,实现从需求理解、架构设计到代码生成与部署文档的全流程闭环。对产品经理、开发者与内容创作者而言,这标志着工作范式从‘人指挥AI’跃迁至‘人机协同定义问题’,技术价值最终落点于工程落地效率、决策可信度与组织知

weixin_33985679的博客 370

【汇编实战开发笔记】一段汇编代码如何“反编译”成C代码?

介绍了一种由汇编代码得到C代码的方法

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 1万+

LangChain ReAct Agent最小可运行示例详解

Agent是大模型与外部工具协同决策的核心范式,其本质是基于推理(Reasoning)与执行(Acting)的闭环交互协议。ReAct框架通过结构化提示模板强制规范Thought/Action/Observation流转逻辑,确保LLM输出可解析、可调度、可验证。Tool作为可注册的原子能力单元,需严格满足名称一致性、输入契约明确性与描述语义可检索性三大技术要求,否则将导致路由失败或解析崩溃。该模式广泛应用于智能客服、自动化运维、AI编程助手等需调用API或本地函数的工程场景。本文聚焦LangChain中c

weixin_33841503的博客 560

Apollo Control——超详细入门教程(六):MPC二次规划问题转化

专栏文章列表 Apollo Control——超详细入门教程(一):基于道路误差的车辆动力学模型 Apollo Control——超详细入门教程(二):连续状态空间方程离散化与离散LQR公式推导 Apollo Control——超详细入门教程(三):基于Frenet坐标系及XY坐标系的多项式轨迹生成 Apollo Control——超详细入门教程(四):控制模块轨迹误差计算 Apollo Control——超详细入门教程(五):油门刹车标定表之双线性插值算法 ...

凉了鸭的博客 2233

2、稳定性问题全景图——死机、重启、ANR、Crash、黑屏五大类

当 Crash 发生在 system_server、surfaceflinger、mediaserver 等关键系统进程中时,其后果等同于系统级故障,可能触发 Zygote 重启甚至 kernel panic。这类问题在稳定性治理中的优先级应等同于 P0。

woailuojp的博客 49

FuncReAct:用OpenAI Function Calling打通ReAct智能体的执行闭环

ReAct(推理+行动)是大模型智能体的核心范式,其本质是将复杂任务拆解为可追溯的‘思考→行动→观察’循环;但原始ReAct依赖文本型Action输出,需手动解析函数名与参数,极易因正则误匹配、类型转换失败或引号嵌套等问题导致执行中断。OpenAI Function Calling通过结构化tool_calls与JSON Schema校验,天然解决参数合法性、类型安全与解析可靠性问题。FuncReact正是二者的关键融合——它不新增抽象层,而是将ReAct的prompt逻辑与OpenAI tools机制精准

culiao2169的博客 539

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

FuncReAct:用OpenAI Function Calling落地ReAct智能体

ReAct(推理+行动)是大语言模型实现任务型智能的核心范式,其本质是将复杂问题分解为可验证的思考步骤与确定性工具调用。OpenAI Function Calling通过API级结构化输出契约,从根本上规避了传统文本解析导致的格式幻觉与调用失败,使模型‘想清楚再动手’成为工程现实。该技术显著提升Agent在企业自动化、工作流提效和低代码集成等场景中的稳定性与响应确定性,尤其适用于需高精度工具调度的金融、客服与数据处理任务。本文聚焦FuncReact这一轻量级实践方案,深入解析function calling

weixin_33892359的博客 382

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

深度学习工具包 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实战指南:从ReAct架构到生产部署的智能体开发全解析

AI智能体(AI Agent)作为人工智能领域的关键技术范式,其核心在于通过感知、规划、行动与反思的循环机制,实现自主任务执行。基于ReAct(Reasoning + Acting)架构,智能体将大语言模型的推理能力与外部工具调用相结合,完成了从被动问答到主动执行的范式跃迁。这一技术架构在工程实践中展现出巨大价值,能够处理复杂、多步骤的开放世界任务,广泛应用于自动化客服、智能助手、数据分析等场景。本文以实战为导向,深入探讨了如何利用LangChain等框架构建具备工具使用能力的智能体系统,并系统梳理了从环境

weixin_30838873的博客 398

WINCC7.3破解文件

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

基于LangGraph构建状态化ReAct智能体:实现令牌高效的自动化实验

在构建AI智能体时,上下文管理是核心挑战之一。传统方法依赖完整的对话历史,导致令牌(Token)消耗随交互步骤线性增长,成本高昂。状态驱动架构通过引入结构化的记忆体(State)来替代冗长的历史记录,智能体基于当前状态进行决策和行动,并将结果更新到状态中,形成高效的推理-行动-观察(ReAct)循环。这种设计显著减少了每次模型调用需处理的文本量,实现了令牌高效(Token-Efficient)的交互。其技术价值在于大幅降低大模型API的调用成本,并提升智能体在长期、多步骤任务中的稳定性和可扩展性。应用场景广

weixin_34413103的博客 407

FuncReAct:用Function Calling重构ReAct智能体的结构化工作流

ReAct是一种让大语言模型具备‘思考-行动-观察-反思’能力的经典智能体范式,其核心挑战在于工具调用环节高度依赖模型自由文本生成,导致JSON格式错误、参数类型失配、函数名拼写歧义等稳定性问题。OpenAI Function Calling通过将工具schema作为API通信契约,使模型输出结构化function_call对象,从语义理解层实现参数提取与校验,显著提升调用鲁棒性。该技术并非简单叠加,而是将传统文本解析管道升级为可验证的结构化信道,适用于LangChain/LlamaIndex等框架下的生产

weixin_30430169的博客 394
havealooklook
博客等级 码龄10年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值