langgraph的ReAct应用

一、什么是langgraph的ReAct

LangGraph 中的 ReAct(Reasoning + Acting)代理是一种结合推理与行动能力的 AI 代理架构,通过动态决策链实现复杂任务处理。以下是其核心要点及实践指南

1、ReAct 代理的核心原理

1.1工作流程

ReAct 代理通过循环迭代完成任务:

推理(Reason):模型分析输入和历史上下文,生成思考步骤。

行动(Act):选择工具并调用,或直接响应用户。

观察(Observe):工具返回结果作为新输入,循环直至输出最终响应

1.2技术优势

动态决策基于状态图(State Graph)管理节点和边,支持循环和条件分支。

透明可控:开发者可干预执行流程(如中断节点),调试更便捷。

多轮对话支持:通过检查点(Checkpointer)持久化状态,实现长上下文记忆

2、典型应用场景

2.1 RAG 增强检索

结合路由机制,动态选择向量库检索或网络搜索(如 Tavily API),并通过评分器过滤无关结果。

2.2 多工具协作

例如:用户查询 → 搜索工具 → 数学计算工具 → 生成综合响应

2.3实时交互系统

客服机器人中处理多轮对话,保留历史上下文

二、langgraph的ReAct应用示例

在本节中,我们将创建一个简单的 ReAct 代理应用程序,该应用程序可以检查天气。该应用程序由一个代理(LLM)和工具组成。当我们与应用程序交互时,我们将首先调用代理(LLM)来决定是否应该使用工具。然后我们将运行一个循环

1.如果代理说要采取行动(即调用工具),我们将运行工具并将结果传递回代理

2.如果代理没有要求运行工具,我们将结束(应用户)

预构建的代理

请注意,这里我们将使用预构建的代理。LangGraph 的一大优势是你可以轻松创建自己的代理架构。因此,虽然从这里开始快速构建代理是不错的选择,但我们强烈建议你学习如何构建自己的代理,这样你就可以充分利用LanqGraph。

下面是代码示例:

# 首先我们初始化我们想要使用的模型。
from langchain_openai import ChatOpenAI
import osapiKey = os.environ.get("MODELSCOPE_SDK_TOKEN")
model = ChatOpenAI(api_key=apiKey,  # 请替换成您的ModelScope SDK Tokenbase_url="https://api-inference.modelscope.cn/v1/",model="Qwen/Qwen2.5-Coder-32B-Instruct"
)
from typing import Literal
from langchain_core.tools import tool# 定义一个工具函数 get_weather,它根据城市名称返回预定义的天气信息
@tool
def get_weather(city: Literal["武汉", "长沙"]):"""Use this to get weather information."""if city == "武汉":return "很热"elif city == "长沙":return "不想告诉你"else:raise AssertionError("未知的城市名")# 将工具放入一个列表中
tools = [get_weather]# 导入 create_react_agent 函数,用于创建 REACT 代理
from langgraph.prebuilt import create_react_agent# 使用指定的模型和工具创建 REACT 代理
graph = create_react_agent(model, tools=tools)# 将生成的图片保存到文件
graph_png = graph.get_graph().draw_mermaid_png()
with open("create_react_agent.png", "wb") as f:f.write(graph_png)# 定义一个函数用于打印流数据
def print_stream(stream):for s in stream:message = s["messages"][-1]if isinstance(message, tuple):print(message)else:message.pretty_print()# 使用需要工具调用的输入运行应用程序
inputs = {"messages": [("user", "长沙的天气怎么样")]}
print_stream(graph.stream(inputs, stream_mode="values"))# 尝试一个不需要工具的问题
inputs = {"messages": [("user", "如何学AI")]}
print_stream(graph.stream(inputs, stream_mode="values"))inputs = {"messages": [("user", "深圳的天气怎么样")]}
print_stream(graph.stream(inputs, stream_mode="values"))inputs = {"messages": [("user", "武汉的天气怎么样")]}
print_stream(graph.stream(inputs, stream_mode="values"))

上面代码生成的流程图如下:

上面代码我们分别问了四个问题,对应的输出如下:

================================ Human Message =================================

长沙的天气怎么样

================================== Ai Message ==================================

Tool Calls:

  get_weather (call_2db5e20f75474d5489225b)

 Call ID: call_2db5e20f75474d5489225b

  Args:

    city: 长沙

================================= Tool Message =================================

Name: get_weather

不想告诉你

================================== Ai Message ==================================

很抱歉,无法获取当前长沙的天气信息。请稍后再试。

================================ Human Message =================================

如何学AI

================================== Ai Message ==================================

学习人工智能(AI)是一个多步骤的过程,涉及理论知识的学习和实践技能的培养。以下是一些基本的建议,帮助你开始你的AI学习之旅:

1. **数学基础**:AI依赖于大量的数学概念,包括线性代数、微积分、概率论和统计学。这些数学知识对于理解机器学习算法的工作原理至关重要。

2. **编程技能**:Python是目前最常用的AI编程语言,因为它有许多强大的库和框架支持,如TensorFlow、PyTorch、Scikit-learn等。熟悉Python编程语言及其相关库对于AI开发非常重要。

3. **机器学习基础**:机器学习是AI的一个重要分支,它使计算机能够从数据中自动学习和改进。了解监督学习、无监督学习、强化学习等概念以及相关的算法,如线性回归、决策树、神经网络等。

4. **深度学习**:深度学习是机器学习的一个子领域,它使用人工神经网络来模拟人脑处理信息的方式。学习深度学习可以帮助你理解如何构建和训练复杂的模型来解决更复杂的问题。

5. **数据处理与分析**:学会如何清洗、转换和分析数据,因为这在AI项目中是非常重要的步骤。掌握数据可视化技术也很有帮助,它可以帮助你更好地理解和展示数据。

6. **项目实践**:理论学习固然重要,但实际操作经验同样不可或缺。尝试参与一些AI项目,比如图像识别、自然语言处理等,通过实践来巩固所学知识。

7. **持续学习**:AI领域发展迅速,新的技术和方法不断涌现。保持对新技术的关注,并持续学习,对于在AI领域取得成功至关重要。

8. **加入社区**:加入AI相关的论坛、小组或者参加线下活动,与其他学习者和专业人士交流,可以让你获得更多的资源和支持。

9. **阅读文献**:阅读最新的研究论文和技术文章,可以帮助你了解行业趋势和前沿技术。

10. **动手实验**:利用在线平台(如Kaggle、Google Colab等)进行实验和练习,可以快速验证你的想法,并提高解决问题的能力。

通过以上步骤,你可以逐步建立起扎实的AI知识体系,并具备一定的实践能力。记住,学习AI是一个长期且持续的过程,保持好奇心和耐心是非常重要的。

================================ Human Message =================================

深圳的天气怎么样

================================== Ai Message ==================================

目前`get_weather`工具仅支持查询武汉和长沙的天气信息。如果您需要查询深圳的天气,建议使用其他天气预报服务。

================================ Human Message =================================

武汉的天气怎么样

================================== Ai Message ==================================

Tool Calls:

  get_weather (call_6cf152a8605f46d6a74cc5)

 Call ID: call_6cf152a8605f46d6a74cc5

  Args:

    city: 武汉

================================= Tool Message =================================

Name: get_weather

很热

================================== Ai Message ==================================

武汉今天的天气很热。

向 ReAct 代理添加记忆

我们可以简单的 将记忆存储到内存中,当然也可以存储到其他中间件中,比如redis、mongo等其他介质。要启用内存,我们只需要将 checkpointer 传递给create react agents。

代码示例如下:

# 首先我们初始化我们想要使用的模型。
from langchain_openai import ChatOpenAI
import osapiKey = os.environ.get("MODELSCOPE_SDK_TOKEN")
model = ChatOpenAI(api_key=apiKey,  # 请替换成您的ModelScope SDK Tokenbase_url="https://api-inference.modelscope.cn/v1/",model="Qwen/Qwen2.5-Coder-32B-Instruct"
)
from typing import Literal
from langchain_core.tools import tool# 定义一个工具函数 get_weather,它根据城市名称返回预定义的天气信息
@tool
def get_weather(city: Literal["武汉", "长沙"]):"""Use this to get weather information."""if city == "武汉":return "很热"elif city == "长沙":return "不想告诉你"else:raise AssertionError("未知的城市名")# 将工具放入一个列表中
tools = [get_weather]# 导入 create_react_agent 函数,用于创建 REACT 代理
from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import MemorySavermemory =MemorySaver()# 使用指定的模型和工具创建 REACT 代理
graph = create_react_agent(model, tools=tools, checkpointer=memory)# 将生成的图片保存到文件
graph_png = graph.get_graph().draw_mermaid_png()
with open("create_react_agent.png", "wb") as f:f.write(graph_png)# 定义一个函数用于打印流数据
def print_stream(stream):for s in stream:message = s["messages"][-1]if isinstance(message, tuple):print(message)else:message.pretty_print()# 使用需要工具调用的输入运行应用程序config = {"configurable": {"thread_id": "1"}}inputs = {"messages": [("user", "武汉的天气怎么样")]}
print_stream(graph.stream(inputs, stream_mode="values",config=config))inputs = {"messages": [("user", "怎么样")]}
print_stream(graph.stream(inputs, stream_mode="values",config=config))

打印内容如下:

================================ Human Message =================================

武汉的天气怎么样

================================== Ai Message ==================================

Tool Calls:

  get_weather (call_21d7ec337ddb4a3382b9c1)

 Call ID: call_21d7ec337ddb4a3382b9c1

  Args:

    city: 武汉

================================= Tool Message =================================

Name: get_weather

很热

================================== Ai Message ==================================

武汉今天的天气非常热。

================================ Human Message =================================

怎么样

================================== Ai Message ==================================

Tool Calls:

  get_weather (call_dd70f99943ef40acbe2ce4)

 Call ID: call_dd70f99943ef40acbe2ce4

  Args:

    city: 武汉

================================= Tool Message =================================

Name: get_weather

很热

================================== Ai Message ==================================

武汉今天的天气非常热。

由上面打印我们可以知道,第二个问题没有指明具体的问题,但是模型还是回答了,说明他具备了记忆功能。

向 ReAct 代理添加系统提示

本教程将展示如何向预构建的 ReAct 代理添加自定义系统提示。

代码示例如下:

# 首先我们初始化我们想要使用的模型。
from langchain_openai import ChatOpenAI
import osapiKey = os.environ.get("MODELSCOPE_SDK_TOKEN")
model = ChatOpenAI(api_key=apiKey,  # 请替换成您的ModelScope SDK Tokenbase_url="https://api-inference.modelscope.cn/v1/",model="Qwen/Qwen2.5-Coder-32B-Instruct"
)
from typing import Literal
from langchain_core.tools import tool# 定义一个工具函数 get_weather,它根据城市名称返回预定义的天气信息
@tool
def get_weather(city: Literal["武汉", "长沙"]):"""Use this to get weather information."""if city == "武汉":return "很热"elif city == "长沙":return "不想告诉你"else:raise AssertionError("未知的城市名")# 将工具放入一个列表中
tools = [get_weather]# 导入 create_react_agent 函数,用于创建 REACT 代理
from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import MemorySaver#添加内存存储
memory =MemorySaver()# 我们可以在这里添加系统提示
prompt = "请用繁体字回答"# 使用指定的模型和工具创建 REACT 代理
# 使用指定的模型、工具和状态修改器(系统提示)创建 REACT 代理
graph = create_react_agent(model, tools=tools, checkpointer=memory,prompt=prompt)# 将生成的图片保存到文件
graph_png = graph.get_graph().draw_mermaid_png()
with open("create_react_agent-prompt.png", "wb") as f:f.write(graph_png)# 定义一个函数用于打印流数据
def print_stream(stream):for s in stream:message = s["messages"][-1]if isinstance(message, tuple):print(message)else:message.pretty_print()# 使用需要工具调用的输入运行应用程序config = {"configurable": {"thread_id": "1"}}inputs = {"messages": [("user", "武汉的天气怎么样")]}
print_stream(graph.stream(inputs, stream_mode="values",config=config))inputs = {"messages": [("user", "怎么样")]}
print_stream(graph.stream(inputs, stream_mode="values",config=config))

打印结果如下:

================================ Human Message =================================

武汉的天气怎么样

================================== Ai Message ==================================

Tool Calls:

  get_weather (call_044f77360fa14deca3390e)

 Call ID: call_044f77360fa14deca3390e

  Args:

    city: 武汉

================================= Tool Message =================================

Name: get_weather

很热

================================== Ai Message ==================================

武漢的天氣很熱。

================================ Human Message =================================

怎么样

================================== Ai Message ==================================

Tool Calls:

  get_weather (call_c3752beac3e34751a980d4)

 Call ID: call_c3752beac3e34751a980d4

  Args:

    city: 武漢

================================= Tool Message =================================

Name: get_weather

Error: 1 validation error for get_weather

city

  Input should be '武汉' or '长沙' [type=literal_error, input_value='武漢', input_type=str]

    For further information visit https://errors.pydantic.dev/2.11/v/literal_error

 Please fix your mistakes.

================================== Ai Message ==================================

輸入的城市名稱有誤,請輸入「武漢」或「長沙」。

从上面的打印,我们知道提示词已生效。

向 ReAct 代理添加人机交互

本教程将演示如何向预构建的 ReAct 代理添加人机交互环过程,主要是在工具执行前进行中断,interrupt_before=["tools"]。

代码示例如下:

# 首先我们初始化我们想要使用的模型。
from langchain_openai import ChatOpenAI
import osapiKey = os.environ.get("MODELSCOPE_SDK_TOKEN")
model = ChatOpenAI(api_key=apiKey,  # 请替换成您的ModelScope SDK Tokenbase_url="https://api-inference.modelscope.cn/v1/",model="Qwen/Qwen2.5-Coder-32B-Instruct"
)
from typing import Literal
from langchain_core.tools import tool# 定义一个工具函数 get_weather,它根据城市名称返回预定义的天气信息
@tool
def get_weather(city: Literal["武汉", "长沙"]):"""Use this to get weather information."""if city == "武汉":return "很热"elif city == "长沙":return "不想告诉你"else:raise AssertionError("未知的城市名")# 将工具放入一个列表中
tools = [get_weather]# 导入 create_react_agent 函数,用于创建 REACT 代理
from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import MemorySavermemory =MemorySaver()# 使用指定的模型和工具创建 REACT 代理
graph = create_react_agent(model, tools=tools, checkpointer=memory, interrupt_before=["tools"])# 将生成的图片保存到文件
graph_png = graph.get_graph().draw_mermaid_png()
with open("create_react_agent-hl.png", "wb") as f:f.write(graph_png)# 定义一个函数用于打印流数据
def print_stream(stream):for s in stream:message = s["messages"][-1]if isinstance(message, tuple):print(message)else:message.pretty_print()# 使用需要工具调用的输入运行应用程序config = {"configurable": {"thread_id": "1"}}inputs = {"messages": [("user", "武汉的天气怎么样")]}
print_stream(graph.stream(inputs, stream_mode="values",config=config))# # 获取图的状态快照
snapshot = graph.get_state(config)
# 打印下一步信息
print("Next step: ", snapshot.next)# 打印后续流输出
print_stream(graph.stream(None, config, stream_mode="values"))

上面代码打印结果如下:

================================ Human Message =================================

武汉的天气怎么样

================================== Ai Message ==================================

Tool Calls:

  get_weather (call_40adb899316d45e2bf14a0)

 Call ID: call_40adb899316d45e2bf14a0

  Args:

    city: 武汉

Next step:  ('tools',)

================================== Ai Message ==================================

Tool Calls:

  get_weather (call_40adb899316d45e2bf14a0)

 Call ID: call_40adb899316d45e2bf14a0

  Args:

    city: 武汉

================================= Tool Message =================================

Name: get_weather

很热

================================== Ai Message ==================================

武汉今天的天气非常热。

将最后几行代码注释掉后:

# 首先我们初始化我们想要使用的模型。
from langchain_openai import ChatOpenAI
import osapiKey = os.environ.get("MODELSCOPE_SDK_TOKEN")
model = ChatOpenAI(api_key=apiKey,  # 请替换成您的ModelScope SDK Tokenbase_url="https://api-inference.modelscope.cn/v1/",model="Qwen/Qwen2.5-Coder-32B-Instruct"
)
from typing import Literal
from langchain_core.tools import tool# 定义一个工具函数 get_weather,它根据城市名称返回预定义的天气信息
@tool
def get_weather(city: Literal["武汉", "长沙"]):"""Use this to get weather information."""if city == "武汉":return "很热"elif city == "长沙":return "不想告诉你"else:raise AssertionError("未知的城市名")# 将工具放入一个列表中
tools = [get_weather]# 导入 create_react_agent 函数,用于创建 REACT 代理
from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import MemorySavermemory =MemorySaver()# 使用指定的模型和工具创建 REACT 代理
graph = create_react_agent(model, tools=tools, checkpointer=memory, interrupt_before=["tools"])# 将生成的图片保存到文件
graph_png = graph.get_graph().draw_mermaid_png()
with open("create_react_agent-hl.png", "wb") as f:f.write(graph_png)# 定义一个函数用于打印流数据
def print_stream(stream):for s in stream:message = s["messages"][-1]if isinstance(message, tuple):print(message)else:message.pretty_print()# 使用需要工具调用的输入运行应用程序config = {"configurable": {"thread_id": "1"}}inputs = {"messages": [("user", "武汉的天气怎么样")]}
print_stream(graph.stream(inputs, stream_mode="values",config=config))# # 获取图的状态快照
# snapshot = graph.get_state(config)
# # 打印下一步信息
# print("Next step: ", snapshot.next)
# 
# # 打印后续流输出
# print_stream(graph.stream(None, config, stream_mode="values"))

当我们把后面几行代码注释掉后,执行结果如下:

================================ Human Message =================================

武汉的天气怎么样

================================== Ai Message ==================================

Tool Calls:

  get_weather (call_f9aaf3002f664cd5b05157)

 Call ID: call_f9aaf3002f664cd5b05157

  Args:

    city: 武汉

Process finished with exit code 0

由上面对比,可知人机交互效果已实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88411.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个编辑功能所引发的一场知识探索学习之旅(JavaScript、HTML)

文章目录一个编辑功能所引发的一场知识探索学习之旅(JavaScript、HTML)1. 一个编辑功能案例2. 知识点探索学习3. 参考资料一个编辑功能所引发的一场知识探索学习之旅(JavaScript、HTML) 1. 一个编辑功能案例 HTML: &l…

kali制作Windows木马

环境描述:攻击机:Kali-2025实验靶机:Windows11不要攻击他人,这只是网络安全实验还是一样获取IP地址制作好之后开服务,上传下载在靶机右键保留下载记得把防火墙,安全中心关了否则无法下载之后就可以kali控制…

从零实现一个GPT 【React + Express】--- 【1】初始化前后端项目,实现模型接入+SSE

摘要 本系列文章主要是实现一个能够对话以及具有文生图等功能的模型应用。主要UI界面会参考chat-gpt,豆包等系列应用。模型使用的是gpt开源的大模型。 如果你是一个前端开发工程师需要一个自己的开源项目,可以学习这个系列的文章,不需要有很完整的后端…

【PTA数据结构 | C语言版】在顺序表 list 的第 i 个位置上插入元素 x

本专栏持续输出数据结构题目集,欢迎订阅。 文章目录题目代码题目 请编写程序,将 n 个整数存入顺序表,对任一给定整数 x,将其插入顺序表中指定的第 i 个位置。注意:i 代表位序,从 1 开始,不是数…

汽车智能化2.0引爆「万亿蛋糕」,谁在改写游戏规则?

进入2025年,长安、奇瑞、比亚迪等各大主机厂纷纷将智能化推进至全新高度,中国汽车智能化竞争进入了“技术市场生态”综合较量阶段。一方面,各大主机厂全力推进辅助驾驶的规模化普及,掀起了一场关于高阶辅助驾驶的“技术平权”革命…

QT 第八讲 --- 控件篇 Widget(三)界面系列

前言: 在上一讲《QT 第七讲 --- 控件篇 (二)window系列与qrc机制》中,我们探讨了应用程序窗口(QMainWindow, QWidget)的基础结构、窗口标志、状态以及Qt强大的资源管理机制(.qrc文件&#xff0…

广州华锐互动:AR 领域的创新与服务先锋​

(一)定制化服务​ 广州华锐互动秉持 “以客户为中心” 理念,为客户提供高度定制化 AR 解决方案。项目初期,通过多种方式深入了解客户需求,挖掘痛点。基于需求分析,技术团队运用自主研发技术和先进算法&…

暑假算法日记第一天

目标​:刷完灵神专题训练算法题单 阶段目标📌:【算法题单】滑动窗口与双指针 LeetCode题目:1456. 定长子串中元音的最大数目643. 子数组最大平均数 I1343. 大小为 K 且平均值大于等于阈值的子数组数目2090. 半径为 k 的子数组平均值2379. 得…

【软考高项】信息系统项目管理师-第1章 信息化发展(1.5 数字化转型与元宇宙、1.6 标题类知识点、1.7 十四五规划内容汇总)

文章大纲 第1章 信息化发展1.5 数字化转型与元宇宙1.5.1 数字化转型1.5.2 元宇宙1.6 标题类知识点1.7 十四五规划内容汇总1.8 10道试题第1章 信息化发展 学习建议: 此章内容大部分为新增内容,基本是全新的章节2023年5月考试2分选择,5分案例2023年下半年各批次选择题2分左右1.…

STM32F103C8T6单片机内部执行原理及启动流程详解

引言:为什么深入理解STM32启动流程很重要?STM32F103C8T6作为嵌入式开发中最常用的单片机之一,其内部执行原理和启动流程是理解嵌入式系统底层运行机制的核心。无论是开发Bootloader、调试HardFault异常,还是优化系统启动速度&…

【python 常用的数学科学/计算机视觉等工具】

当然有!在科学计算、机器学习、图像处理等领域,scikit-learn、scikit-image(skimage)、SciPy、OpenCV 是非常重要的库,但它们不是唯一的。以下是一些与它们类似或互补的项目,按照用途分类列出: …

LUMP+NFS架构的Discuz论坛部署

一、配置准备 每台主机都安装mysql、nfs、php、mysql 对每台主机都进行关闭防火墙、上下文等,减少阻碍[rooteveryone ~]# systemctl stop firewalld [rooteveryone ~]# setenforce 0安装插件等[rootlocalhost mysql]# yum install -y nfs-utils nginx [rootlocalho…

C++STL-deque

一.基础概念deque和vector一样都是对元素的操作,不同点:vector对元素增删后元素会往前或往后移,如果数据不大没有太多影响,如果数据很大效率会变低;deque对元素增删不会使元素位置改变,所有效率会变高。二.…

字节跳动高质量声音克龙文字转语音合成软件MegaTTS3整合包

MegaTTS3是抖音团队联合国内其他大学研发的一款语音合成及声音克龙应用,可实现零样本语音克龙及富有情感的自然语音合成。我基于当前最新版制作了免安装一键启动整合包。 MegaTTS3介绍 MegaTTS 3 是字节跳动(ByteDance)与浙江大学联合开发的…

RPC:远程过程调用机制

目录 1、概念 2、RPC架构 2.1 RPC的四个核心组件 2.2 访问流程 3、关键概念 3.1 接口定义语言 (IDL - Interface Definition Language) 3.2 序列化与反序列化 (Serialization & Deserialization - Marshalling/Unmarshalling) 3.3 网络传输 (Transport) 3.4 服务发…

EPLAN 电气制图(六):电机正反转副勾主电路绘制

一、项目背景:为什么绘制电机正反转主电路? 在多功能天车系统中,电机正反转控制是核心功能之一。通过 EPLAN 绘制主电路,不仅能清晰展示电源分配、换相逻辑和线缆连接,还能为后续 PLC 控制设计奠定基础。本次以西门子设…

JAVA JVM对象的实现

jvm分配内存给对象的方式1. 内存分配的总体流程对象内存分配的主要步骤:类加载检查:确认类已加载、解析和初始化。内存分配:根据对象大小,从堆中划分内存空间。内存初始化:将分配的内存空间初始化为零值(不…

CVE-2023-41990/CVE-2023-32434/CVE-2023-38606/CVE-2023-32435

CVE-2023-41990(GitLab 命令注入漏洞)漏洞原理CVE-2023-41990是GitLab CE/EE(社区版/企业版)中项目导出功能的一个命令注入漏洞。具体原理如下:①GitLab在导出项目时,会调用git命令生成项目存档&#xff08…

RAG实战指南 Day 8:PDF、Word和HTML文档解析实战

【RAG实战指南 Day 8】PDF、Word和HTML文档解析实战 开篇 欢迎来到"RAG实战指南"系列的第8天!今天我们将深入探讨PDF、Word和HTML文档解析技术,这是构建企业级RAG系统的关键基础。在实际业务场景中,80%以上的知识都以这些文档格式…

【AXI】读重排序深度

我们以DDR4存储控制器为例,设计一个读重排序深度为3的具体场景,展示从设备如何利用3级队列优化访问效率:基础设定从设备类型:DDR4存储控制器(支持4个存储体Bank0-Bank3)读重排序深度:3&#xff…