AI-网络秘籍--早期访问--二-

AI 网络秘籍 (早期访问)(二)

原文:AI Networking Cookbook (Early Access)

译者:飞龙

协议:CC BY-NC-SA 4.0

return {

"answer": "Please set your OPENAI_API_KEY"

}

try:

response = client.chat.completions.create(

model="gpt-3.5-turbo",

messages=[

{

"role": "system",

"content": "You are a network engineer assistant Give concise, practical answers about network troubleshooting, configuration, and performance issues."

},

{"role": "user", "content": request.question}

],

max_tokens=150

)

return {"answer": response.choices[0].message.content}

except Exception as e:

return {"answer": f"AI service unavailable: {str(e)}"}

if name == "main":

import uvicorn

uvicorn.run(app, port=8000)


2. 我们可以如下运行服务器:

```bash

$ python main_1.py

INFO:     Started server process [142204]

INFO:     Waiting for application startup.

INFO:     Application startup complete.

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

INFO:     127.0.0.1:44394 - "POST /ask HTTP/1.1" 200 OK

  1. 我们可以使用 curl 和 /ask 端点来尝试该函数。

$ curl -X POST "http://localhost:8000/ask" -H "Content-Type: application/json" -d '{"question": "Why is my BGP session down?"}'

{"answer":"您的 BGP 会话可能由于多种原因中断,例如配置不当、对端配置错误、网络连接问题、MTU 不匹配、路由问题或 BGP 邻居密码不匹配。检查配置、网络连通性和日志以识别 BGP 会话中断的确切原因。"}

  1. 后端和前端最大的区别之一是,后端主要关注提供内容,而不是用户界面。如果我们导航到 127.0.0.1:8000,我们将看到一个并不漂亮的页面:

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_7_1.png

图 7.1: 默认 FastAPI 页面

  1. 然而,在 FastAPI 中,文档始终是“一等公民”。我们可以在 /docs 端点看到自动生成的文档:

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_7_2.png

图 7.2: FastAPI 文档

工作原理……

FastAPI 将我们的应用程序封装在一个函数中,该函数会自动处理 HTTP 请求、JSON 序列化和 API 文档生成。title 参数会在每次显示 title 时(例如文档页面)设置该名称。


app = FastAPI(title="Network AI")

FastAPI 最优特性之一是与 Pydantic 的集成。在以下代码中,如果有人为 question 发送了无效数据(例如类型错误或缺少值),Pydantic 会自动验证传入的 JSON 请求,FastAPI 将生成错误消息。


class QuestionRequest(BaseModel):

    question: str

接下来的部分是 AI 魔法所在,我们编写提示词(prompt)、指定模型并解析响应。


response = client.chat.completions.create(

    model="gpt-3.5-turbo",

    messages=[

        {

            "role": "system",

            "content": "你是一个网络工程师助手。

                        请就网络故障排除、配置和

                        性能问题提供简洁、实用的回答。"

        },

        {"role": "user", "content": request.question}

    ],

    max_tokens=150

)

return {"answer": response.choices[0].message.content}

结尾处的导入看起来可能很奇怪,但这是 FastAPI 的最佳实践。它只在需要时(直接运行该文件时)才导入 uvicorn。


if __name__ == "__main__":

    import uvicorn

    uvicorn.run(app, port=8000)

更多内容……

为了获得更详细的日志,我们可以使用以下模式来记录更多信息。


import logging

logging.basicConfig(level=logging.INFO)

@app.post("/ask")

def ask_question(request: QuestionRequest):

    logging.info(f"Question received: {request.question}")

另请

请访问 fastapi.tiangolo.com/ 查看更多关于 FastAPI 的信息。

7.2 添加设备上下文

让我们增强我们的 AI 应用,包含一个提供特定设备建议的功能。这将带给我们更详细的答案,因为额外信息将提供特定的命令。此教程旨在演示我们如何重构代码以添加更多功能。

准备工作

请完成教程 7.1

如何实现……

  1. 我们将增强在 7.1 中创建的脚本,复制相同的脚本并命名为 main_v2.py。

  2. 我们将在 QuestionRequest 类中添加一个额外的 device_type 参数。


class QuestionRequest(BaseModel):

    question: str

    device_type: str = "generic"

  1. 我们可以添加一个 if-else 循环来修改我们的提示词。

进入/path/to/xxx目录,找到xxx.json。

在表达式cvar = avar + bvar中,加法运算符(+)将avar与bvar相加,得到它们的和cvar

在List.of(arg0, arg1, arg2)中,List接口的工厂方法of()接受一系列的元素,返回包含它们的只读列表。

之后我们这样调用cmd命令:cmd arg0 arg1 arg2。


if (condVar > someVal) {console.log("xxx")}

以下是排版后的 Markdown 格式文本:


首先,引入所需模块:


from sqlalchemy import create_engine, Column, Integer, String, DateTime

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker

from datetime import datetime

之前的设置代码(OpenAI,数据库等)


client = openai.OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

engine = create_engine("sqlite:///questions.db")

Base = declarative_base()

Session = sessionmaker(bind=engine)

定义 Question 数据模型:


class Question(Base):

    __tablename__ = "questions"

    id = Column(Integer, primary_key=True)

    question = Column(String)

    answer = Column(String)

    device_type = Column(String)

    timestamp = Column(DateTime, default=datetime.now)

Base.metadata.create_all(engine)

创建 FastAPI 应用实例:


app = FastAPI(title="网络 AI")

定义请求体模型:


class QuestionRequest(BaseModel):

    question: str

    device_type: str = "generic"

核心 AI 回答函数


def get_ai_answer(question: str, device_type: str = "generic"):

    if not client.api_key:

        return "请设置您的环境变量 OPENAI_API_KEY"

    system_msg = "你是一个网络工程师助手。 "

    if device_type.lower() == "cisco":

        system_msg += "关注 Cisco IOS/IOS-XE 命令。 "

    elif device_type.lower() == "juniper":

        system_msg += "关注 Junos 命令。 "

    elif device_type.lower() == "arista":

        system_msg += "关注 Arista EOS 命令。 "

    elif device_type.lower() == "palo alto":

        system_msg += "关注 Palo Alto 防火墙命令。 "

    system_msg += "给出简洁、实用的答案,并带有具体的命令。"

    try:

        response = client.chat.completions.create(

            model="gpt-3.5-turbo",

            messages=[

                {"role": "system", "content": system_msg},

                {"role": "user", "content": question}

            ],

            max_tokens=200

        )

        return response.choices[0].message.content

    except Exception as e:

        return f"AI 服务不可用:{str(e)}"

Web 界面路由


@app.get("/", response_class=HTMLResponse)

def web_interface():

    return """

    <!DOCTYPE html>

    <html>

    <head>

    <title>网络 AI 助手</title>

    <style>

        body { font-family: Arial, sans-serif; margin: 4px; max-width: 800px; }

        .form-group { margin: 2px 0; }

        input[type="text"], select { width: 100%; padding: 10px; font-size: 16px; }

        button { background: #07cba; color: white; padding: 2px 24px; border: none; font-size: 16px; cursor: pointer; }

        .answer { background: #f5f5f5; padding: 20px; margin: 20px 0; border-radius: 5px; }

    </style>

    </head>

    <body>

        <h1>🤖 网络 AI 助手</h1>

        <form method="post" action="/web-ask">

            <div class="form-group">

                <label>提出您的网络问题:</label>

                <textarea name="question" rows="3" placeholder="例如:我如何排查 BGP 邻居 Down 问题?"></textarea>

            </div>

            <div class="form-group">

                <label>设备类型:</label>

                <select name="device_type">

                    <option value="generic">通用</option>

                    <option value="cisco">Cisco</option>

                    <option value="juniper">Juniper</option>

                    <option value="arista">Arista</option>

                    <option value="palo alto">Palo Alto</option>

                </select>

            </div>

            <button type="submit">获取 AI 回答</button>

        </form>

        <div>

            <h3>最近的问题</h3>

            <p><a href="/history">查看对话历史</a></p>

        </div>

    </body>

    </html>

    """

处理表单提交:


@app.post("/web-ask", response_class=HTMLResponse)

def web_ask_question(question: str = Form(...), device_type: str = Form("generic")):

    answer = get_ai_answer(question, device_type)

    # 保存到数据库

    session = Session()

    session.add(Question(question=question, answer=answer, device_type=device_type))

    session.commit()

    session.close()

    return f"""

    <!DOCTYPE html>

    <html>

    <head>

    <title>网络 AI 助手</title>

    <style>

        body { font-family: Arial, sans-serif; margin: 40px; max-width: 800px; }

        .question { background: #e3f2fd; padding: 15px; margin: 10px 0; border-radius: 5px; }

        .answer { background: #f5f5f5; padding: 20px; margin: 10px 0; border-radius: 5px; white-space: pre-wrap; }

        .back { margin: 20px 0; }

        a { color: #007cba; text-decoration: none; }

        strong { font-weight: bold; }

    </style>

    </head>

    <body>

        <h1>🤖 网络 AI 助手</h1>

        <div class="question">

            <strong>您的问题 ({device_type}):</strong><br>

            {question}

        </div>

        <div class="answer">

            <strong>AI 回答:</strong><br>

            {answer}

        </div>

        <div class="back">

            <a href="/">再提一个问题</a>

        </div>

    </body>

    </html>

    """

历史记录与设备支持接口:


@app.get("/history")

def get_history():

    session = Session()

    questions = session.query(Question).order_by(Question.timestamp.desc()).limit(10).all()

    session.close()

    return [{"question": q.question, "answer": q.answer, "device_type": q.device_type, "time": q.timestamp} for q in questions]

@app.get("/devices")

def supported_devices():

    return {

        "supported_devices": ["cisco", "juniper", "arista", "palo alto", "generic"],

        "usage": "在您的 JSON 请求中包含 device_type 以获取特定设备的帮助"

    }

应用入口:


if __name__ == "__main__":

    import uvicorn

    uvicorn.run(app, port=8000)


7.5 Docker 部署

在本教程中,我们将把网络 AI 助手应用封装进 Docker 容器,这样它就可以在任何地方运行。

准备工作

请确保已完成第 7.4 节并安装了 Docker。

如何操作……

  1. 创建一个名为 dockerfile 的 Docker 文件。注意我们使用了 main_v4.py,但你也可以使用之前的版本。

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY main_v4.py .

EXPOSE 8000

CMD ["python", "main_v4.py"]

  1. 对于 FastAPI 文件,我们在 uvicorn 配置中仅监听了 localhost,我们需要将其更改为监听所有接口。

if __name__ == "__main__":

    import uvicorn

    uvicorn.run(app, host="0.0.0.0", port=8000)

  1. 创建 requirements.txt 文件。

fastapi

uvicorn

openai

sqlalchemy

python-multipart

  1. 在终端中使用 docker build -t <name> . 构建容器镜像。

$ docker build -t network-ai .

[+] Building 6.2s (7/9)                                    docker:default

 => => resolve docker.io/library/python:3.11-slim@sha256:0ce77749ac  0.0s

 => => sha256:f3bfd8e9386c2a97d52a0f28a4cc8db81b034 5.37kB / 5.37kB  0.0s

 => => sha256:59e22667830bf04fb35e15ed9c70023e9d1 28.23MB / 28.23MB  0.4s

 => => sha256:abd846fa1cdb2ae1ef7731213cd4f0c40b05f 3.51MB / 3.51MB  0.1s

 => => sha256:b7b61708209ad8f9b9a11c61dc9df90f74c 16.21MB / 16.21MB  0.3s

  1. 使用 OPENAI_API_KEY 运行容器。

$ docker run -p 8000:8000 -e OPENAI_API_KEY="your-openai-key" network-ai

/app/main_v4.py:14: MovedIn20Warning: declarative_base() function is now available as sqlalchemy.orm.declarative_base(). (deprecated since: 2.0) (Background on SQLAlchemy 2.0 at https://sqlalche.me/e/b8d9)

  Base = declarative_base()

INFO:     Started process [1]

INFO:     Waiting for application.

INFO:     Application startup.

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

  1. 我们应该在端口 8000 看到相同的 Web 界面。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B3264_7_5.png
图 7.5:来自容器的界面

  1. 测试容器化的 AI 网络助手。

$ curl -X POST "http://127.0.0.1:8000/ask" -H "Content-Type: application/json" -d '{"question": "How do I configure VLANs on a switch?", "device_type": "cisco"}'

{"answer":"To configure VLANs on a Cisco, follow these steps:\n1. 进入全局配置:\n```\nenable\nconfigure terminal\n```\n\n2. 创建 VLAN 并为它们命名:\n```\nvlan <vlan_id>\nname <vlan_name>\n```\n\n3. 将接口分配到 VLAN:\n```\ninterface <interface_type> <interface_number>\nswitchport mode access\nswitchport access vlan <vlan_id>\n```\n\n4. 退出配置模式并保存配置:\n```\nend\nwr\n```\n\n5. 验证 VLAN 配置:\n```\nshow vlan\nshow interfaces\n```","device_type":"cisco"}

注意: 对于 HTML 表单元素,如果您的文本是英文原文,可以保留原有链接格式;若为中文,则保持原样。以上内容已包含在[content]...[/content]标记中。

工作原理……

这是一个构建 Docker 容器的标准工作流:

  1. 创建Dockerfile。

  2. 创建requirements.txt。

  3. 构建并运行容器,根据需要添加环境变量。

  4. 测试容器化应用程序。

一旦我们对应用程序进行容器化,就可以将其移动到许多提供商,如 DigitalOcean、AWS 或 Azure。

更多……

请查看第 4 章关于 Docker 安装的技术要求。

总结

在本章中,我们构建了一个完整的 AI 驱动的后端,并带有一个简单的 Web 界面,我们的前端团队可以使用它。正如任何开发者所说,工作永无完止。

在本文写作时,通常有两种“氛围编程”(vibe code)的方法。第一种是将工具集成在集成开发环境(IDE)内部,另一种较新的方法是将工具集成在终端中。对于已经习惯 IDE 编写代码的人来说,使用 IDE 更加熟悉,而终端更具通用性(例如在手机上)。我们将演示这两种方法:第一种使用配合 VSCode 的 GitHub Copilot,第二种使用 Anthropic 的 Claude Code。

信息:请注意,在写作时,GitHub Copilot 提供免费层级,且VSCode也是免费的,但这两者都可能发生变化。Claude Code目前只有付费订阅层级,但我认为其提供的功能物超有所值。

该领域正在迅速发展,如果你发现定价或安装方式与下方不同,请检查相关资源以获取最新信息:

让我们从设置 GitHub Copilot 开始。

10.1 设置 GitHub Copilot

在本教程中,我们将在本地计算机上设置 GitHub Copilot。

准备工作

你需要一台能够运行VSCode的计算机。下方的截图截自 Apple Mac 电脑,但在不同操作系统上的安装指令说明也是可以轻松获取的。

如何操作……

访问 code.visualstudio.com/,浏览器将检查你的操作系统并提示你下载相应的软件,你也可以点击右上角的“Download”按钮进行下载。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_1.png

图 10.1:Visual Studio Code 首页

  1. Visual Studio Code 从诞生起初一直是一个免费产品。此时,GitHub Copilot 也提供了免费和多个付费层级。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_2.png

图 10.2:GitHub Copilot 定价

  1. 打开VSCode并点击Extension(扩展)选项卡,搜索GitHub Copilot并点击Install(安装)。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_3.png

图 10.3:GitHub Copilot 扩展

  1. 安装完成后,你应该能在顶部看到 Copilot 图标。如果右侧面板被隐藏了,请使用右上角的图标显示它。打开右侧面板后,寻找聊天窗口。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_4.png

图 10.4:Copilot 面板

  1. 在对话框中,寻找下拉菜单以在不同模式切换:Agent、Ask和Edit。我们将在 Agent 和 Edit 之间切换。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_5.png

图 10.5:配置模式

  1. 在右侧的下拉框中,你还可以找到选择不同模型的选项,可以自由选择任何标准或高级模型(高级模型会产生少量费用)。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_6.png

图 10.6:模型选择

  1. 选择Ask模式并将GPT-4.1作为模型。提一个问题,例如explain the structure of a JSON file。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_7.png

图 10.7:使用 GPT-4.1 的 Ask 模式

  1. 切换到Agent模式并使用模型GPT-4.1。输入指令在你为此章节创建的文件夹创建一个虚拟环境。例如:please change to /home/ubuntu/ai_network_cookbook/ch10 and create a Python virtual environment named .venv.。

警告。请谨慎使用 Agent 模式,它将代表你执行更改。虽然通常有撤销更改的选项,但并非总是如此。在 Agent 模式下请格外小心。

  1. 如果你点击指令并选择Continue(继续),代理将代表你执行并做出更改。我们可以点击Cancel(取消),因为我们已经手动创建了虚拟环境。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_8.png

图 10.8:使用 GPT-4.1 的 Agent 模式

工作原理……

Ask 模式类似于直接在 IDE 中拥有一个 AI LLM 聊天机器人。先从 Ask 模式开始,手动复制粘贴代码或命令。谨慎使用 Agent 模式,它会代表你执行并更改。通常有“confirm”(确认)或“accept”(接受)选项,但如果我们不小心,在 agent 模式下更容易犯不可逆的错误。

更多功能……

我们可以包含其他文件和链接来帮助回答。点击Add Context(添加上下文)按钮,我们可以从本地文件或其他链接中选择包含的内容。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_9.png

图 10.9:添加上下文

参见……

GitHub Copilot 教程:github.com/features/copilot

10.2 设置 Claude Code

在 IDE 内进行氛围编程的能力很棒。然而,并非所有平台都适合 IDE(例如平板和手机),而且每个人都习惯在 IDE 中工作。

Anthropic (www.anthropic.com/) 作为 Claude LLM 模型的创建者,创建了一个名为Claude Code的氛围编程工具,通过CLI直接在终端运行。在写作时,Claude Code 只有付费订阅模式。希望当你读到这里时,Claude Code 已提供免费层级。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_10.png

图 10.10:Claude Code 定价

准备工作

本教程请使用你喜欢的终端窗口。

如何操作……

  1. 访问 docs.anthropic.com/en/docs/claude-code/overview#install-and-authenticate 获取最新的安装指令。

  2. 通过npm安装@anthropic-ai/claude-code。如果你的平台没有 npm,请遵循此处的说明:docs.npmjs.com/downloading-and-installing-node-js-and-npm,适用于你的操作系统。

# npm install -g @anthropic-ai/claude-code

added 3 packages in 3s

2 packages are looking for funding

run `npm fund` for details

npm notice

npm notice New major version of npm available! 10.9.2 -> 11.5.2

npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.5.2

npm notice To update run: npm install -g npm@11.5.2

npm notice
  1. 安装完成后,我们可以进入项目目录并使用claude启动 Claude Code(Linux 平台需要 root 权限)。

  2. 请记住所有操作都在终端中进行,因此我们需要使用方向键进行导航,使用 Enter 键确认。

  3. 首次启动时,Claude Code 会询问显示样式。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_11.png

图 10.11: Claude Code 文本样式

  1. 按照屏幕指令登录 Claude 账户。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_12.png

图 10.12: Claude 账户登录

  1. 登录后,将出现 Claude Code 控制台。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_13.png

图 10.13: Claude Code 控制台

  1. 输入/查看命令选项。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_14.png

图 10.14: Claude Code 选项

  1. 这是交互模式模式,你可以直接与 Claude Code 对话以提问、请求任务并获取即时响应。

  2. 输入quit退出 Claude Code

工作原理……

如果你习惯了在 IDE 中通过图形界面编写代码,可能需要一点时间来适应。不过,我发现终端窗口的操作速度比 GUI 界面更快。

更多内容……

尝试按照 docs.anthropic.com/en/docs/claude-code/quickstart#step-5%3A-use-git-with-claude-code 上的说明进行对话式Git操作。

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_15.png

图 10.15: 使用 Claude Code 进行 Git 操作

延伸……

Claude Code 快速上手:docs.anthropic.com/en/docs/claude-code/quickstart

10.3 对话式日志分析与威胁检测

本示例演示了如何通过对话式 AI 开发构建威胁检测能力。我们将使用 GitHub Copilot 作为示例。

准备工作

请完成配方 10.1以准备 GitHub Copilot 开发环境。

如何实现……

  1. 请创建一个新目录mock_data来存储模拟数据:firewall_logs.txt、network_info.yaml和threat_intelligence.json。这些文件可以从书籍下载页面和书籍的 GitHub 仓库下载。

  2. 防火墙日志混合了不同厂商的带有威胁模式的防火墙日志。

%ASA-6-302013: Built inbound TCP connection 12345 for outside:203.0.113.100/443 (203.0.113.100/443) to inside:10.0.1.50/80 (10.0.1.50/80)

%ASA-4-106023: Deny tcp src outside:203.0.113.50/1337 dst inside:10.0.1.100/22 by access-group outside_in

%ASA-6-302014: Teardown TCP connection 12345 for outside:203.0.113.100/443 to inside:10.0.1.50/80 duration 0:02:30 bytes 2048

%ASA-4-106023: Deny tcp src outside:198.51.100.25/4444 dst inside:10.0.1.200/3389 by access-group outside_in

…

# pfSense 日志

filterlog: 5,,,1000000103,em0,match,block,in,4,0x0,,64,1024,0,DF,6,tcp,40,203.0.113.100,10.0.1.50,443,80,0,S,1024,,

filterlog: 5,,,1000000104,em0,match,pass,in,4,0x0,,64,1024,0,DF,6,tcp,40,10.0.1.50,203.0.113.100,80,443,0,A,1024,,

filterlog: 5,,,1000000105,em0,match,block,in,4,0x0,,64,1024,0,DF,6,tcp,40,198.51.100.25,10.0.1.200,3389,0,A,1024,,

filterlog: 5,,,1000000106,em0,match,block,in,4,0x0,,64,1024,0,DF,6,tcp,40,10.0.1.50,203.0.113.100,80,443,0,A,1024,,

…

# Suricata 日志

1/15/2024-12:00:0.12345 [1:20049:7] GPL CHAT IRC [Classification: policy-violation] [Priority: 3] {TCP} 203.0.113.100:667 -> 10.0.1.50:2768

1/15/2024-12:05:15.7890 [1:20012:5] ET MALWARE Conficker Request [Classification: trojan] [Priority: 1] {TCP} 0.0.1.100:4915 -> 198.51.100.25:80

1/15/2024-12:10:30.45689 [1:20085:5] ET SSH Scan [Classification: attempted-recon] [Priority: 2] {TCP} 203.0.113.50:22 -> 10.0.1.0/24

使用 GPT-4.1 Ask 模式

  1. 首先切换到正确的目录,“请切换到 /home/ubuntu/ai_network_cookbook/ch10/Recipe_10_1 文件夹。”

  2. 让 Copilot 描述数据,“描述 mock_data 目录下的文件。” 这是 AI 的回答:

    https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_16.png

    图 10.16:Copilot 对 Mock Data 文件的回答

  3. 发出开始构建脚本的指令,“在 mock_data/firewall_logs.txt 文件中,可能包含端口扫描和暴力破解攻击。帮我构建一个可以识别这些威胁模式的解析器。”

  4. 查看逻辑和文件输出,如有需要通过指令进一步修改。

    https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_17.png

    图 10.17:脚本输出

  5. 切换到 Agent 模式并让 Copilot 构建它。这是一个示例指令,“请构建脚本并将其命名为 log_analysis.py。”

  6. 脚本已编写完成,你可以选择保留或撤销。https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_18.png图 10.18:log_analysis.py 的创建

10.4 用于事件响应的快速安全脚本开发

在本食谱中,我们将使用 Claude Code 快速开发事件响应自动化。就像食谱 10.3 一样,我们将使用对话风格来完成任务。

准备工作

请完成食谱 10.2 设置 Claude Code,并从书中代码拷贝模拟数据文件 incident_scenarios.json 和 network_topology.yaml。

如何操作……

  1. 在终端提示符中使用 claude 启动 Claude Code。

  2. 因为这只是一个终端,我们可以使用提示符中可用的所有 Linux 工具,如 pwd、cd 和 ls。

    https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_19.png

    图 10.19:使用 Linux 工具的 Claude

  3. 从对话开始,“需要构建一个事件响应系统,可以自动隔离受感染系统、阻止恶意 IP 并收集取证证据。该系统应该处理勒索软件、数据外泄和凭据破解等不同事件类型。请帮我从零开始设计这个系统。”

  4. Claude Code 将列出几个步骤并开始处理该过程。https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_20.png图 10.20:Claude Code 设计解决方案

  5. Claude Code 将提出一个 incident_resposne_system.py,你可以选择创建文件或对脚本进行迭代。https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_21.png图 10.21:创建 incident_response_system.py

  6. 开始参与其他对话,例如,“这种结构的最佳方式是什么,以便它可以处理多种事件类型并与不同的安全工具集成?”

其工作原理……

Claude Code 对话式事件响应开发方法比简单的代码补全具有多个优势:

  • 自然语言问题解决对话:Claude Code 在复杂的多轮讨论中保持上下文。

  • 架构指导:Claude 在架构指导方面可能具有更好的理解。它是否比 GitHub Copilot 等工具更好取决于主观判断,但它绝对优于传统的代码补全。

  • 终端集成:Claude Code 直接集成在终端中,为丰富的 CLI 用户提供了更流畅的体验。

  • 迭代精炼:就像 GitHub Copilot 一样,Claude Code 允许根据用户反馈实时完善响应逻辑、升级程序和集成方法。

更多……

Claude Code 还可以使用 claude-sdk 与 Python 配合,docs.anthropic.com/en/claude-sdk/python。以下终端命令安装 Python 的 claude-sdk。

$ pip install claude-sdk

https://github.com/OpenDocCN/freelearn-dl-zh/tree/master/docs/ai-networking-cookbook-early-access/img/B32646_10_22.png

图 10.22:Claude Code Python 基础用法

其工作原理……

对话式方法使我们能够快速开发解决方案并进行迭代。其中几个关键机制包括:

  • 自然语言问题定义:我们没有编写正式的规格文档,而是直接描述了问题。

  • 迭代模式识别:注意 AI 自动识别出我们需要正则表达式匹配并创建了初始集合。

  • 持续重构:注意我们没有写任何一行代码来接收文件,我们可以继续我们的“开发 -> 测试 -> 改进”循环,直到我们获得一个准备好投入生产环境的解决方案。

更多……

请尝试以下操作:

  • 不同的模式检测:尝试扩展对话以处理更复杂的攻击。

  • 角色区分:尝试针对高级资深工程师或初学者定制代码以提高可维护性。

  • 优化代码执行:尝试优化代码以提高执行速度。

另见……

总结

在本章中,我们引入了“对话编程”作为一种开发网络安全的对话方法。与传统的开发方法不同,对话编程优先通过与 AI 助手的对话进行快速原型设计。核心概念包括:

  • 对话优于正式规格需求:安全人员不再提供正式文档,只需描述问题和预期解决方案。

  • 速度优于完美:我们很少在第一次或第二次就写对脚本,但由于生成脚本的时间非常快,我们可以非常快速地迭代。

  • 领域知识优先:对话编程允许领域专家利用其专业知识,并让对话编程工具编写代码。

使用 GitHub Copilot,我们能够在 Visual Studio Code 中直接使用对话编程。助手可以在 Ask 或 Agent 模式下运行,并有不同的模型组合供选择。通过 Claude Code,对话编程助手集成到了终端中。

这是本书的最后一章。感谢你与我一起走过 AI LLM 与网络工程交叉领域不断演变的景观。你在这本书中所投入的时间精力将为你网络专业人士解决复杂问题的根本性转变提供良好帮助。本书的目的是作为你的起点,而非终点。当你采取这些模式并将其适用于自己的用法时,真正的魔法就会发生。

再次感谢你抽出时间阅读这本书。我希望书中的解决方案能为你带来价值,并祝你的 AI LLM 网络工程之旅一切顺利。网络工程的未来将由像你这样的从业者编写,利用 AI 来增强而非取代人类工程师。直直向前吧!

posted @ 2026-09-25 20:40  绝不原创的飞龙  阅读(4)  评论(0)    收藏  举报