欢迎来到我的博客文章,我将在其中分享我使用 LLama2 模型的旅程和见解。 LLama2 是 Meta 开发的一个出色的 AI 模型,探索其类似于 GPT-3 的功能令人兴奋。在这篇文章中,我们将深入探讨 LLama2 的不同方面,包括它的设置、先决条件、应用、重要性,甚至了解我们如何自行训练它。我很高兴向您介绍我在 LLama2 上的学习经历,所有这些都是在我的 HackBot 项目中获得的。
LLama2 是 Meta 创建的一项尖端技术,其核心被归类为人工智能模型。将其视为一个非常智能的助手,可以理解人类语言并产生有意义的响应,几乎像人类一样。 LLama2 的目标是提高人与计算机之间交互的轻松性和自然性。
考虑一下当您与朋友交谈或撰写电子邮件时如何口头表达自己;与你交流的人能够理解并做出反应。与操作类似,LLama2 可以处理大量文本数据并从中学习。这使得 LLama2 能够协助完成各种任务,例如传递信息和回答查询,以及编写内容和协助解决问题。
LLama2 的独特之处在于它在创建时就考虑到了可访问性。这就像拥有一个灵活的仪器,可供具有不同技术能力水平的任何人使用。 LLama2 提供了一种简单的方法来发挥人工智能的潜力,无论您是开发人员、作家、学生还是只是对人工智能感兴趣的人。
从本质上讲,LLama2 创造了一个充满可能性的领域,让计算机可以更轻松、更有效地与人类语言进行交互。您与技术的互动变得更加富有成效和高效,因为它就像有一个虚拟伙伴一直在那里帮助您进行涉及文本和语言的活动。
让我们开始执行第一步。以下是您必须考虑使代码正常工作的任务。
选择您的语言:
Python 是我可靠旅行伴侣的首选。由于其适应性强且在编程社区中广泛使用,它是与 LLama2 交互的绝佳选择。如果您已经熟悉 Python,那么您就处于良好状态。
设置要点:
HuggingFace 帐户和 Lama 存储库访问:
您需要在 HuggingFace(一个包含多个人工智能模型和工具的平台)上创建一个帐户才能开始。确保您的帐户已准备好。此外,您还可以通过访问 Meta 的 Lama 存储库来找到 LLama2 的组件。
C/C++ 和 Cmake 安装: LLama2 有一个名为 LLama-cpp 的组件,它需要在您的系统上安装 C/C++ 和 Cmake。这些工具对于构建 LLama-cpp 至关重要,因此请确保它们已设置完毕并准备就绪。
登录并准备:
Huggingface-cli 登录:掌握 HuggingFace 帐户详细信息后,使用 HuggingFace 命令行界面登录。此步骤使用您的帐户令牌将您连接到 HuggingFace 平台,从而使您能够访问所需的 AI 资源。如果您没有找到令牌,则可以使用此URL找到令牌并生成令牌。
命令是:
$ huggingface-cli login Token: Your_Token
安装 LLama-cpp: Llama-cpp 是 llama 和 Python 一起工作的低级访问绑定器,为我们提供了更多的灵活性。
安装可以通过两种方式完成:
直接Python安装:
pip install llama-cpp-python
编译选项:为此,您需要查看该模块的自述文件,其解释很复杂: README.md
安装 Langchain :Langchain 是一个开放框架,旨在简化 LLM 模型应用程序的开发。我们将特别使用LLamaCpp 、 PrompTemplate 、 CallbackManager和StreamingStdOutCallbackHandler模块来完成此任务。
安装命令是:
pip install langchain pip install langchainplus-sdk
它在Python代码中是如何使用的?
现在主要问题是如何使用它?
回答这个问题,集成部分可以分为几个步骤。
模型下载和定义:
为此,我将参考 HackBot 的代码。
调用所有基本模块后,我们必须决定模型名称和要从中下载它的存储库。
model_name_or_path = "localmodels/Llama-2-7B-Chat-ggml" model_basename = "llama-2-7b-chat.ggmlv3.q4_0.bin" model_path = hf_hub_download(repo_id=model_name_or_path, filename=model_basename)
在上面的代码中,使用的llama模块是7b或70亿参数模型和Localmodels版本llama2。
然后,huggingface 下载器通过模型的下载路径引用 model_path,该下载器将llama-2-7b-chat.ggmlv3.q4_0.bin从存储库下载到系统中。
该路径很重要,因为LlamaCpp将引用模型位置来使用它。
定义角色和提示模板:
from langchain import PromptTemplate from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler template = """ persona: {persona} You are a helpful, respectful, and honest cybersecurity analyst. Being a security analyst, you must scrutinize the details provided to ensure they are usable for penetration testing. Please ensure that your responses are socially unbiased and positive. If a question does not make any sense or is not factually coherent. If you don't know the answer to a question, please don't share false information. Keep your answers in English and do not divert from the question. If the answer to the asked question or query is complete, end your answer. Keep the answer accurate and do not skip details related to the query. Give your output in markdown format. """ prompt = PromptTemplate(template=template, input_variables=["persona"]) callback_manager = CallbackManager([StreamingStdOutCallbackHandler()])
我们必须为美洲驼提供一个基本模板,用作其角色,例如将其定义为个人助理或网络安全分析师。
模板定义了模型的工作方式,并对最终输出产生很大影响,因此必须非常小心地编写。
然后使用模板角色生成提示,并使用该角色生成 PromptTemplate 模块。
回调管理器用于显示AI的输出并管理输入和输出链接。
定义 LlamaCpp 模块:
llm = LlamaCpp( model_path=model_path, input={"temperature": 0.75, "max_length": 3500, "top_p": 1}, callback_manager=callback_manager, max_tokens=3500, n_batch=3500, n_gpu_layers=60, verbose=False, n_ctx=3500, streaming=False, )
现在,通过实现这一点,我们创建了一个聊天机器人主干或连接器,使用它我们可以开始与人工智能模型进行积极的对话。
HackBot 是我尝试创建一个特定于网络安全的聊天机器人,该工具具有扫描数据、日志数据分析工具和代码分析功能等功能。
聊天交互循环:
while True: try: prompt_in = Prompt.ask('> ') # ... except KeyboardInterrupt: pass
此循环创建一个交互式环境,用户可以在其中输入命令或提示。该代码使用Prompt.ask('> ')
等待用户输入,并处理键盘中断 (Ctrl+C) 等异常,而不会导致程序崩溃。此循环确保聊天机器人保持响应并可以持续与用户交互。
处理用户命令:
if prompt_in == 'quit_bot': quit() elif prompt_in == 'clear_screen': clearscr() pass elif prompt_in == 'bot_banner': # ... elif prompt_in == 'save_chat': # ... elif prompt_in == 'static_code_analysis': # ... elif prompt_in == 'vuln_analysis': # ... elif prompt_in == 'contact_dev': # ... elif prompt_in == 'help_menu': # ... else: # ...
在循环内,根据不同的命令关键字检查用户输入。根据输入,代码执行相应的操作。例如,如果用户输入“quit_bot”,则调用quit()
函数退出程序。如果用户输入“clear_screen”, clearscr()
函数将清除控制台屏幕。类似的逻辑也适用于其他命令。
生成 AI 响应:
else: prompt = prompt_in print(Print_AI_out(prompt)) pass
如果用户输入与任何预定义命令都不匹配,则会将其视为 AI 的提示。输入被分配给prompt
变量,并调用Print_AI_out(prompt)
函数以根据提供的提示生成 AI 响应。然后,AI 生成的响应将打印到控制台。
保存聊天记录:
def save_chat(chat_history: list[Any, Any]) -> None: f = open('chat_history.json', 'w+') f.write(json.dumps(chat_history)) f.close
save_chat
函数负责将对话历史记录(包括用户提示和 AI 生成的响应)保存到名为“chat_history.json”的 JSON 文件中。该函数将chat_history
列表中的数据序列化为JSON格式并写入文件。
漏洞分析和静态代码分析:
elif prompt_in == 'static_code_analysis': print(Markdown('----------')) language_used = Prompt.ask('Language Used> ') file_path = Prompt.ask('File Path> ') print(Markdown('----------')) print(static_analysis(language_used, file_path)) pass elif prompt_in == 'vuln_analysis': print(Markdown('----------')) scan_type = Prompt.ask('Scan Type > ') file_path = Prompt.ask('File Path > ') print(Markdown('----------')) print(vuln_analysis(scan_type, file_path)) pass
这些部分处理用于执行静态代码分析和漏洞分析的用户命令。系统会提示用户提供所使用的语言或扫描类型以及文件路径等信息。然后使用提供的数据调用相应的分析函数( static_analysis
或vuln_analysis
),并且 AI 生成包含分析结果的响应。
漏洞分析:在vuln_analysis
部分,以下代码提示用户输入:
scan_type = Prompt.ask('Scan Type > ') file_path = Prompt.ask('File Path > ')
这里, Prompt.ask
函数用于交互式地询问用户信息。系统会提示用户输入扫描类型和需要分析的数据的文件路径。这些输入对于漏洞分析至关重要。用户提供这些输入后,就会使用包含用户输入的提示启动分析:
prompt = f""" **Objective:** You are a Universal Vulnerability Analyzer powered by the Llama2 model. Your main objective is to analyze any provided scan data or log data to identify potential vulnerabilities in the target system or network. You can use the scan type or the scanner type to prepare a better report. **Instructions:** # ... (rest of the instructions) **Input Data:** You will receive the scan file data or log file data in the required format as input. Ensure the data is correctly parsed and interpreted for analysis. **Output Format:** The vulnerability analysis report should be organized as mentioned in the "Comprehensive Report" section. Please perform the vulnerability analysis efficiently, considering the security implications and accuracy, and generate a detailed report that helps users understand the potential risks and take appropriate actions. --- Provide the scan type: {scan_type} Provide the scan data or log data that needs to be analyzed: {file_data} """
在此提示中, {scan_type}
和{file_data}
占位符将替换为用户输入的实际值。然后,此动态提示会传递到 LLama2 模型,以生成 AI 响应,该响应根据所提供的扫描类型和文件数据提供分析结果。
静态代码分析:同样,在static_code_analysis
部分,代码提示用户输入:
language_used = Prompt.ask('Language Used> ') file_path = Prompt.ask('File Path> ')
系统会提示用户提供所使用的编程语言以及需要分析的代码的文件路径。这些输入对于执行静态代码分析至关重要。就像漏洞分析部分一样,为 LLama2 模型构造了一个包含用户输入的提示:
prompt = f""" **Objective:** Analyze the given programming file details to identify and report bugs, vulnerabilities, and syntax errors. Additionally, search for potential exposure of sensitive information such as API keys, passwords, and usernames. **File Details:** - Programming Language: {language_used} - File Name: {file_path} - File Data: {file_data} """
此处, {language_used}
和{file_path}
占位符被替换为用户提供的实际值。然后,该动态提示用于生成 AI 响应,该响应根据用户输入的编程语言和文件数据呈现分析结果。
在这两种情况下,动态提示的使用可确保 LLama2 生成的响应与上下文相关,并根据用户请求的特定分析进行定制。
联系信息和帮助菜单:
elif prompt_in == 'contact_dev': console.print(Panel( Align.center( Group(Align.center(Markdown(contact_dev))), vertical="middle", ), title= "Dev Contact", border_style="red" ), style="bold green" ) pass elif prompt_in == 'help_menu': console.print(Panel( Align.center( Group(Align.center(Markdown(help_menu))), vertical="middle", ), title= "Help Menu", border_style="red" ), style="bold green" ) pass
这些部分处理显示开发人员联系信息的命令 ( contact_dev
) 和列出可用命令的帮助菜单 ( help_menu
)。当用户输入这些命令时,相应的信息会使用 Rich 库显示在格式良好的面板中。
主要功能执行:
if __name__ == "__main__": main()
main
函数包含整个聊天交互和处理逻辑,仅当脚本直接运行(不作为模块导入)时才会执行。此行确保在运行脚本时执行聊天机器人的核心功能。
您可以从我的 Github 存储库查看并尝试整个聊天机器人:链接
训练人工智能模型是一个转型过程,需要规划和准确性。以下是完成该过程的分步指南。
先决条件:
张量力量:具有相当大的张量处理能力的强大系统将为成功奠定基础。确保您的设备能够处理 AI 模型训练所需的处理能力。
数据集:与 AI 训练格式相对应的数据集将加速模型的学习曲线。有效的训练取决于高质量的数据,这会影响模型的准确性和能力。
Autotrain Advanced :让您自己能够访问这一重要的人工智能培训资源。该计划简化了培训程序,实现了关键程序的自动化并提高了生产力。
训练过程:
数据准备:为了确保准确性和统一性,组织和预处理数据集。拥有干净、有组织的数据是获得最佳训练结果的关键。
模型初始化:选择最佳的预训练模型作为起点。收敛速度加快,训练过程快速启动。
微调:调整学习率、批量大小和优化器设置等超参数来微调参数。为了平衡模型性能和收敛速度,请调整这些参数。
训练迭代:通过模型多次(epoch)运行数据集以开始训练。该模型在每次迭代中都会提高其理解力,从而提高其预测倾向。
验证和测试:利用不同的验证数据集来持续验证模型的开发。通过针对新数据进行测试来评估模型的泛化能力。
分析和监控:密切关注培训指标。损失曲线、准确性趋势和其他指标等指标提供了有关模型开发的信息。
优化和微调:根据监控结果战略性地调整超参数。为了获得所需的性能,请迭代优化模型。
评估和部署:对最终模型进行彻底的测试数据集评估。如果您对结果感到满意,请在实际应用中使用经过训练的模型。
数据集:
数据集可以是预先构建的数据集,就像可用的文本生成特定数据集下的 Huggingface 数据集中可用的数据集一样。对于自定义数据集,请确保遵循以下步骤:
以下是您可以使用的示例数据集格式: data.csv
姓名 | 描述 | 迅速的 |
---|---|---|
问候语 | 基本问候语和回复 | ###人类:你好 |
天气 | 询问天气 | ###HUMAN:今天天气怎么样 |
餐厅 | 询问餐厅推荐 | ###HUMAN:你能推荐一家好的餐厅吗 |
技术 | 讨论最新科技趋势 | ###HUMAN:今年的科技趋势是什么 |
旅行 | 寻求旅行建议和提示 | ###HUMAN:游览巴黎的任何旅行提示 |
这只是 1 种类型。
获得数据集后,就可以根据您拥有的 GPU 功率以及数据集的大小来训练您的 AI,时间也相应对应。现在我们可以使用huggingface 的自动训练高级模块来训练人工智能。
我们可以使用以下命令安装 autotrain-advanced:
pip install autotrain-advanced
训练 AI 的命令是:
autotrain llm --train --project_name your_project_name --model TinyPixel/Llama-2-7B-bf16-sharded --data_path your_data_set --use_peft --use_int4 --learning_rate 2e-4 --train_batch_size 2 --num_train_epochs 3 --trainer sft --model_max_length 2048 --push_to_hub --repo_id your_repo_id -
您可以将project_name从your_project_name
更改为您的实际项目名称,将模型从TinyPixel/Llama-2-7B-bf16-sharded
为您有兴趣训练的llama模型,将data_path更改为.
如果它是自定义数据集或huggingface/dataset
数据集的存储库 ID(如果它来自 Huggingface)。
我的目标是训练 Llama 模型或任何我能掌握的 LLM 模型,使其成为一名完整的网络安全助手,以自动化我们作为黑客的大部分任务,这将是一件幸事。
因此,谈论功能时,Meta 发布了 Llama 的研究论文,其中包含多个基准。论文称,Llama 模型的参数范围从 7B 到 65B,与其他大型语言模型相比具有竞争性的性能。例如,Llama-13B 尽管尺寸小 10 倍,但在大多数基准测试中都优于 GPT-3。 Llama 的 65B 参数模型也与 Chinchilla 或 PaLM-540B 等其他大型语言模型具有竞争力。论文还提到,训练时间较长的较小模型最终在推理上会更便宜。它指出,即使在 1T 代币之后,7B 模型的性能仍在继续提高。不过,该文件并未提供 Llama 模型之间性能差异的具体数值。
其他消息来源称 Llama 模型比 GPT 模型和 PaLM 模型更通用、更快速,使其成为最好的人工智能模型之一。但对于黑客攻击或任何特定于安全的任务,这需要大量的培训或个人输入。为其生成培训模型并不容易,但一旦经过培训,这可能会改变游戏规则。
人工智能世界的旅程非常具有启发性,展示了自动化和集成的惊人影响。在看到人工智能在各个行业中的功能后,我对人工智能如何改变我们的工作和互动方式深表赞赏。从观察常规操作的无缝自动化到体验人工智能融入日常生活,我的学习经历给我带来了启示。随着我对人工智能复杂性的了解越来越多,我了解到自动化和集成不仅仅是技术理念;相反,它们充当创新的催化剂。凭借这一新发现,我现在可以看到人工智能在提高效率和协作方面的潜力是无限的。
您可以通过LinkedIn与我联系。如果您有任何疑虑,可以在下面发表评论。
谢谢阅读。