AI prompts
base on SecGPT网络安全大模型
# SecGPT 网络安全大模型
探索使用网络安全知识训练大模型,能达到怎样的能力边界。
**模型下载**
- [huggingface](https://huggingface.co/clouditera/secgpt)
- [wisemodel](https://wisemodel.cn/models/clouditera/secgpt)
**最新**
- [SecGpt-Mini已经发布,可以在CPU运行](./secgpt-mini/README.md)
## 模型介绍
SecGPT的愿景是将人工智能技术引入网络安全领域,以提高网络防御的效率和效果。其使命是推动网络安全智能化,为社会提供更安全的数字生活环境。
SecGPT可以作为基座安全模型,用于探索各种网络安全任务。以下是对SecGPT在网络安全任务中可能应用的进一步探讨:
**1. 漏洞分析:**
SecGPT可以与安全研究人员或开发团队进行多轮对话,共同分析和审查应用程序或系统中的潜在漏洞。它可以帮助识别和理解漏洞的性质、潜在影响以及可能的修复方法。
**2. 溯源分析:**
在网络入侵事件调查中,SecGPT可以与调查员合作,协助分析网络流量、日志和事件记录,以追踪攻击者的活动路径,从而支持安全溯源分析。
**3. 流量分析:**
SecGPT可以分析网络流量数据,识别异常流量模式,帮助检测潜在的网络攻击或入侵行为,并提供应对这些行为的建议。
**4. 攻击研判:**
在面对未知攻击时,SecGPT可以与安全团队一起进行多轮对话,共同分析攻击的特征、模式和可能的来源,以便更好地理解和应对威胁。
**5. 命令解释:**
SecGPT可以解释和分析安全相关的命令、脚本或代码,帮助安全专家理解其功能、潜在风险和执行结果。
**6. 网安知识问答:**
SecGPT可以用于回答网络安全领域的问题,为安全从业者提供支持和解释,包括解释安全概念、提供最佳实践建议和分析最新的威胁趋势。
相较于其他的开源模型,SecGPT有以下几个重要的特色:
**1. 自写训练代码,节省显存:**
SecGPT提供了自己的训练代码,包括预训练、有监督学习和DPO强化对齐等功能。这使得即使使用小型显卡,也能够训练大规模的网络安全模型,为更多的开发者和研究者提供了参与网络安全研究的机会。
**2. 高质量网络安全训练集:**
SecGPT提供了精选的高质量网络安全类无监督训练集,使模型能够学习网络安全问题。这有助于提高模型对于网络安全领域的理解。
**3. DPO强化学习:**
通过DPO强化学习方法,SecGPT引入了安全专家的见解和答案,与模型原始输出一起作为数据进行训练。这种方法有助于模型更好地模拟安全专家的思维方式,提高了模型输出的实用性和准确性,使其更符合安全领域的需求。
**4. 无道德限制:**
在网络安全领域,无道德限制的GPT模型具有优势。比如模型可以深入分析和解释恶意软件的代码、行为和影响,而不受道德限制的束缚。当然,需要注意的是,无道德限制并不意味着可以不受限制地使用这些模型。在执行敏感网络安全任务时,仍然需要谨慎考虑法律、道德和隐私问题,并遵循适用的法律法规和道德准则。
## 效果展示
**1. 代码审计&解释&修复建议**
![image](images/640.png)
![image](images/641.png)
**2. 反汇编伪代码分析**
![image](images/6402.png)
![image](images/640%203.png)
**3. 钓鱼邮件编写**
![image](images/640%204.png)
**4. 命令解释**
![image](images/640%205.png)
**5. 日志分析**
![image](images/6406.png)
## 模型训练
目前,SecGPT不仅开源了基座模型,还开源了所有的训练代码以及数据(包括预训练,有监督训练,DPO训练等大模型全流程训练代码)和网络安全训练数据。我们鼓励任何人都使用这些代码和数据去训练自己的网络安全大模型!
该模型的训练过程大致如下图所示:
![image](images/640%207.png)
**基座模型**
(1) 选用Baichuan-13B模型作为基座模型进行训练(无道德限制,较好中文支持,显存资源占用小)
(2) 训练环境与配置:
① webdemo推理:2*4090(24G)
② lora训练:3*4090(24G)
**微调技术**
(1) 基于Lora做预训练和SFT训练
(2) 优化后的训练代码可展示训练的底层知识
(3) 大幅减少训练的显存占用,可在3*4090显卡上训练
**训练数据**
(1) 预训练数据
① 收集安全书籍,安全知识库,安全论文,安全社区文章,漏洞库等等安全内容。
② 数据集开源地址:
https://huggingface.co/datasets/clouditera/security-paper-datasets
![image](images/640%208.png)
(2) 有监督训练数据
① 利用ChatGPT+人工构造各类有监督安全能力数据集,让模型能了解各类安全指令。
![image](images/640%209.png)
② 思维链:基于思维链方式构造有监督数据集让模型能够根据问题逐步推理到最终答案,展现推理过程。
③ 知乎回答:加入了部分高质量知乎数据集,在一些开放性问题上模型能通过讲故事举例子等方式回答答案和观点,更易读懂。
④ 为防止灾难性遗忘,在有监督数据中,通用能力数据:安全能力数据,约为5:1。
**模型训练**
(1) 超参数信息配置:
![image](images/61.png)
(2) 预训练配置:
![image](images/62.png)
(3) SFT训练配置:
![image](images/63.png)
(4) RLHF强化学习校准:
为了改善模型的输出质量,有以下两种策略可供选择。首先,可以通过使用更明确的提示词来引导模型,使其更专注于用户需求,从而生成更有针对性的回答。其次,可以采用RLHF强化学习方法,模型将生成多个答案,用户可以手动选择最优的答案,在后面进行强化学习,从而不断提高模型对齐的能力。
SecGPT模型具备内置的RLHF选择器,每次会输出三个不同的答案。用户可以根据需求选择最佳答案,同时这也为后续的RLHF微调提供了有价值的数据,有助于模型进一步提升输出的质量。这些方法共同作用,有助于确保模型输出满足用户的预期,并在网络安全等领域中发挥更大的作用。
![image](images/64.png)
关于SecGPT网络安全大模型,这只是我们分享的一部分内容。云起无垠致力于将SecGPT开源大模型分享给更多的安全从业者,我们鼓励大家积极参与共同的研讨和交流,以不断改进和增强其功能。通过开源的方式,我们也期望加强网络安全从业者对这一大模型的理解和应用。
如果您有任何关于该模型的问题或建议,请随时在GitHub上提交issue或PR。我们热切欢迎各位共同参与建设,让SecGPT网络安全大模型能够惠及网络安全领域的每一位需求者!共同的努力将有助于提高网络安全的水平,确保数字生活的安全性。
① SecGPT开源地址:
https://github.com/Clouditera/secgpt
② 模型地址:
https://huggingface.co/clouditera/secgpt
③ 数据集地址:
https://huggingface.co/datasets/clouditera/security-paper-datasets
#### 开放问题
![img.png](images/image-2.png)
![Alt text](images/image-3.png)
![Alt text](images/image-4.png)
## 联系我们
<div align=center><img src="images/20240220-164216.jpg" alt="" width="70%" height="40%">
</div>
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=Clouditera/secgpt&type=Date)](https://star-history.com/#Clouditera/secgpt&Date)
## 免责声明
用户在使用本模型时,应充分了解网络安全模型的特性,并对生成的内容进行谨慎评估和使用。如果要公开使用或商用该模型服务,请注意服务方需承担由此产生的不良影响或有害言论的责任,本项目开发者不承担任何由使用本项目(包括但不限于数据、模型、代码等)导致的危害或损失。
", Assign "at most 3 tags" to the expected json: {"id":"5201","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"