祗疼妳一个 发表于 2025-4-24 12:42:09

基于LangChain构建安全Agent应用实践(含代码)

概述:本文基于langchain和Cyber Security Breaches数据集构建Agent,并基于该Agent实现了数据分析、趋势图输出、预测攻击态势三个功能,最后给出Agent在安全领域应用的三点启示。
前提:
1、拥有openai API KEY;(需付费)
2、熟悉Google colab 情况;(T4显卡可免费使用12个小时)
3、下载好数据集。
一、选定数据集

数据集的选择是根据我们想要做的事情定的,基于我们的目标事件,去HG上探求是否有相干数据集。这里笔者想要分析网络安全漏洞影响,以是选择了“Cyber Security Breaches”数据集。
https://i-blog.csdnimg.cn/img_convert/8a3575eb9d8677031803dbedeb0e6ffc.png
&&网络安全漏洞库Cyber Security Breaches
Cyber Security Breaches数据集,该数据集包含了各种有关网络安全漏洞的信息,如受影响组织的名称、国家、受影响人数、数据泄漏类型等。用户可以通过该页面查看数据集的详细信息,并使用Hugging Face库举行数据集的访问和处置惩罚。页面提供了数据集的统计信息、示例数据和数据集字段的详细描述,资助用户更好地了解数据集内容。
数据集地点:https://huggingface.co/datasets/schooly/Cyber-Security-Breaches/viewer
上传数据集:下载好Cyber Security Breaches到本地计算机后运行上传代码,并打印前面10行举行有原数据举行比对并确认无错误。
https://i-blog.csdnimg.cn/direct/cf0d0889757c48b4b22782db6fcad7bb.png
https://i-blog.csdnimg.cn/direct/0013352fde20495fa24278d2c421598b.png
二、基于langchian搭建agent
通常来说,基于langchain搭建agent主要包含定义署理类型、配置工具和语言模子,并根据必要将署理部署在应用程序中等步骤:以下是一个基于 LangChain 搭建基本 agent 的示例流程:
2.1、安装依赖

确保安装了 LangChain 和其他必要的依赖。
https://i-blog.csdnimg.cn/direct/a2fd434698364c0eb30812baa214ef5e.png
2.2、导入模块
导入 LangChain 的焦点模块,包罗署理、工具和语言模子。
https://i-blog.csdnimg.cn/direct/febdfe4fafaf48c580efd82aaf57f7c6.png
2.3、定义语言模子
设置 OpenAI 的语言模子,比如 ChatOpenAI 或 OpenAI,并调整温度等参数来控制模子响应的创造性。
https://i-blog.csdnimg.cn/direct/7d5778fdafc34f30bda5637a49b6598c.png
2.4、配置工具
定义署理将使用的工具(Tool),这些工具可以包罗搜刮、数据库查询、文件读取等使用。
https://i-blog.csdnimg.cn/direct/adece7bbcd584bdda15b68a3e5260535.png
langchain常见工具举例,本文将使用到PandasDataFrame工具举行数据分析。
函数名称阐明使用场景举例SearchTool一个简单的搜刮工具,允许通过查询访问网络信息。用户扣问最新的科技新闻,署理使用搜刮工具提供最新的信息。Wikipedia从维基百科提取信息的工具,可以用于快速获取知识性内容。用户扣问某个汗青事件,署理调用维基百科工具提供相干信息。PandasDataFrame处置惩罚和分析 Pandas DataFrame 的工具,支持数据使用。用户请求对某数据集举行统计分析,署理使用 Pandas 工具执行使用。Calculator基本计算器工具,用于执行数学计算。用户扣问复杂的数学问题,如积分或代数,署理调用计算器工具举行计算。WebScraper网页抓取工具,用于从网页中提取数据。用户希望获取某个电商网站的产品价格信息,署理使用网页抓取工具提取数据。FileReader读取文件内容的工具,如文本文件或 CSV 文件。用户上传文件并请求数据分析,署理使用文件读取工具加载数据。ChatTool处置惩罚对话的工具,用于与用户举行交互。用户与署理举行问答,署理调用对话工具生成天然语言响应。OpenAIFunctions调用 OpenAI API 的工具,举行天然语言处置惩罚和生成。用户请求生成一篇文章,署理调用 OpenAI 函数生成文本内容。 2.5、 初始化署理
使用 initialize_agent 函数创建署理,指定类型、工具和语言模子。
https://i-blog.csdnimg.cn/direct/461a3aa161aa48b19a7e6288fe934dee.png
2.6、使用署理
一旦署理配置完成,便可以用天然语言向署理发送请求,并获取相应的响应。
https://i-blog.csdnimg.cn/direct/f9c91b45632a4c3a98908fed6a2efeb0.png
   常用署理类型
- Zero-Shot React:实用于直接响应的署理,主要用于简单的 Q&A。
- Self-Ask with Search:将复杂问题分解成简单问题,并使用搜刮工具查找答案。
- React Docstore:得当访问和查询文档库数据的署理类型。
扩展功能
你可以根据需求添加更多工具,或使用特定的署理类型来处置惩罚特定使命,比如 Structured Chat 用于多输入工具或复杂聊天对话。
署理的应用场景
可以将构建的署理用于各种应用场景,包罗智能客服、数据分析助手、文档检索工具等。
https://carta.blog.csdn.net/article/details/143366461?spm=1001.2014.3001.5502
三、 智能体应用
3.1、创建Agent

基于langchain框架导入模块并创建数据框agent,通过 create_pandas_dataframe_agent 函数,创建了一个 Pandas 数据框署理 sm_ds_OAI。该署理会与 OpenAI 的模子结合,能够接受天然语言的指令来分析和查询 document 中的数据,实现智能的数据处置惩罚和分析
# 导入模块
from langchain.agents.agent_types import AgentType#导入 AgentType 枚举,用于指定代理类型。

from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent
#从实验模块中导入 create_pandas_dataframe_agent 函数,这个函数允许我们创建一个 Pandas DataFrame 的智能代理。

from langchain_openai import ChatOpenAI
from langchain_openai import OpenAI

#创建数据框代理
sm_ds_OAI = create_pandas_dataframe_agent(
    OpenAI(temperature=0),   
    document,   
    verbose=True
)

3.2、实践一:分析总结

使用sm_ds_OAI.invok()举行数据分析,invok是Langchain中向智能体发送天然语言指令的方法,它允许agent根据这些指令执行相干使命并返回结果,具体功能包罗使命调理、天然语言执行、支持多种工具调用和生成响应。
sm_ds_OAI.invoke("请分析此数据,并用大约 100 字的中文简要说明。请将分析过程的标记,如'Thought'和'Action'替换为'思考'和'执行'")

在 LangChain 中,有多个方法可以用于执行差别使命。下面是一些常见的方法,包罗阐明、使用场景和 Python 调用示例:
函数名称阐明使用场景举例函数调用示例invoke发送指令到署理,自动匹配工具或模子执行使命,并返回结果。举行数据分析、生成报告、答复问题等使命agent.invoke("Describe the dataset")run雷同于 invoke,但通常用于快速执行单步指令,得当简单使命。用户请求快速问题答复,如“本日的天气如何?”agent.run("What is the weather today?")add_tool动态添加工具到署理中,使署理在调用时可以使用新工具。用户希望添加一个新的搜刮工具,以增强署理的本领agent.add_tool(search_tool)get_tools获取当前署理中的所有可用工具,便于了解署理的本领范围。用户希望查看署理具备哪些工具来完成特定使命agent.get_tools()set_verbose设置署理的详细模式,表现执行过程的详细信息,有助于调试。在调试过程中查看署理调用的每个步骤和输出细节agent.set_verbose(True)clear_memory扫除署理的临时记忆,实用于多轮对话中重置上下文的情况。用户在会话中想重新开始交谈,以制止前面内容的干扰agent.clear_memory()initialize_agent初始化署理,配置语言模子、工具等资源,用于设置署理情况。初始化署理的配置,如加载数据处置惩罚工具和模子initialize_agent(tools, llm) 运行上面的语言后,Agent开始运行,可以看到经过九步思索与执行后,agent给出了最终的分析结论。

> Finished chain.
{'input': "请分析此数据,并用大约 100 字的中文简要说明。请将分析过程的标记,如'Thought'和'Action'替换为'思考'和'执行'",
'output': '根据对该数据的分析,可以发现该数据集包含1055条记录,涉及到不同州的医疗机构发生的违规事件。其中,受影响人数最多的州是加利福尼亚州,受影响人数最少的州是阿拉斯加州。同时,通过散点图可以发现,随着年份的增加,受影响人数也呈现增加的趋势。此外,还发现数据中存在大量缺失值,需要进一步处理。'}

https://i-blog.csdnimg.cn/img_convert/a0fe464fffc681b3e599493373fedea1.png
Entering new AgentExecutor chain…一步Thought: 我必要使用pandas来分析这个数据Action: python_repl_astAction Input: import pandas as pdObservation:两步Thought: 我必要将数据读取到一个pandas dataframe中Action: python_repl_astAction Input: df = pd.read_csv(‘data.csv’)Observation:三步Thought: 我必要先将数据文件下载到本地Action: 下载数据文件Action Input: data.csvObservation:四步Thought: 我必要使用pandas的head()函数来查看数据的前几行Action: python_repl_astAction Input: print(df.head())Observation:五步Thought: 我必要对数据举行简单的描述性统计分析Action: python_repl_astAction Input: df.describe()Observation:六步Thought: 我必要对数据举行更深入的分析,比如查看缺失值和数据类型Action: python_repl_astAction Input: df.info()七步Thought: 我必要对数据举行可视化分析,比如绘制柱状图来查看差别州的数据数量 Action: python_repl_astAction Input: df[‘State’].value_counts().plot(kind=‘bar’)Observation: Axes(0.125,0.11;0.775x0.77)Observation: Axes(0.125,0.11;0.775x0.77)八步Thought: 我必要对数据举行更深入的可视化分析,比如绘制散点图来查看受影响人数和年份的关系 Action: python_repl_ast Action Input: df.plot.scatter(x=‘year’, y=‘Individuals_Affected’) Observation: Axes(0.125,0.11;0.775x0.77)九步Thought: 我现在知道了数据的大致情况,可以开始撰写分析报告了Final Answer: 根据对该数据的分析,可以发现该数据集包含1055条纪录,涉及到差别州的医疗机构发生的违规事件。此中,受影响人数最多的州是加利福尼亚州,受影响人数最少的州是阿拉斯加州。同时,通过散点图可以发现,随着年份的增长,受影响人数也呈现增长的趋势。此外,还发现数据中存在大量缺失值,必要进一步处置惩罚。Finished chain.{‘input’: “请分析此数据,并用大约 100 字的中文扼要阐明。请将分析过程的标记,如’Thought’和’Action’替换为’思索’和’执行’”,‘output’: ‘根据对该数据的分析,可以发现该数据集包含1055条纪录,涉及到差别州的医疗机构发生的违规事件。此中,受影响人数最多的州是加利福尼亚州,受影响人数最少的州是阿拉斯加州。同时,通过散点图可以发现,随着年份的增长,受影响人数也呈现增长的趋势。此外,还发现数据中存在大量缺失值,必要进一步处置惩罚。’} 备注:因为Observation数据较多,为节流空间,前面几步的内容不再文章内呈现。
此处想到这个画面应该不过分吧https://i-blog.csdnimg.cn/img_convert/8bdc0a3b34a7ac88d04493b5147160c8.png
https://i-blog.csdnimg.cn/img_convert/dfa534a97aba4a369b32329623b3ea70.jpeg
https://i-blog.csdnimg.cn/img_convert/019f33c68f0b1fc713f74361e3e7436b.jpeg
图片来源:https://www.youtube.com/watch?v=zt9Oh_RZ5KU
3.3、实践二:趋势图输出

在讲langchain中的invoke方法时有提到,run方法通常用于快速执行单步指令,得当简单使命。实践二基于run()实现趋势图的绘制。
sm_ds_OAI.run(“画一条体现团体安全的趋势图”)
https://i-blog.csdnimg.cn/img_convert/382a471a1e4c437e9c336955253d4ac6.png
3.4、实践三:预测攻击态势
运行:
sm_ds_OAI.invoke("""选择一个预测模型来预测攻击态势。使用这种类型的模型来预测在加利福尼亚州未来3年的平均攻击次数和受影响的人数。output输出的内容翻译为中文。""")

输出结果:‘加利福尼亚州未来3年的匀称攻击次数为536.27次,受影响的人数为41345.94人。’
https://i-blog.csdnimg.cn/img_convert/4c9b64b26d33b19f397586a8292c8bb3.png
四、安全应用启示
一、安全领域应用: 将 Cyber Security Breaches数据集替换为用户的网络安全攻击日志,那么基于智能体开展态势分析、威胁狩猎、攻击溯源、态势预测、数据统计等工作均成为可能。
二、 数据安全: SOTA大模子结果虽然相对好,但是调用API方式存在数据安全的问题,国内政府、金融、能源等行业难以落地,本地部署安全领域垂直模子是一种可行路径。
三、价格昂贵: 即使能接受数据外传,调用API方式的泯灭依然是个天文数字,笔者大概观测了下,上文实践一运行一次0.2元,实践三运行一次0.3元,而且是基于gpt-3.5-turbo,如果换位GPT4-O,及时流量检测场景下,一个用户匀称一天1亿条HTTP日志,一条HTTP按照1000Token计算,天天的费用上亿美元,如此看来及时检测通过调用SOTA大模子API是天方夜谭,不过在安全分析场景(如态势分析)可以思量。
如何学习AI大模子?

大模子期间,火爆出圈的LLM大模子让程序员们开始重新评估本身的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。
不如成为「掌握AI工具的技术人」,究竟AI期间,谁先实行,谁就能占得先机!
想正式转到一些新兴的 AI 行业,不仅必要系统的学习AI大模子。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增长本身的职场竞争力。
但是LLM相干的内容很多,现在网上的老课程老课本关于LLM又太少。以是现在小白入门就只能靠自学,学习本钱和门槛很高
那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以资助到更多学习大模子的人!至于能学习到多少就看你的学习毅力和本领了 。我已将重要的AI大模子资料包罗AI大模子入门学习思维导图、精品AI大模子学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完备版的大模子 AI 学习资料已经上传CSDN,朋侪们如果必要可以微信扫描下方CSDN官方认证二维码免费领取【包管100%免费】
https://i-blog.csdnimg.cn/img_convert/081da29992e52fdd6785e11039fba33c.jpeg
页: [1]
查看完整版本: 基于LangChain构建安全Agent应用实践(含代码)