为了更好地分享AI Agent在网络安全领域的实践方法与应用经验,作者正式开启“智能体攻防实战”专栏。本专栏将围绕“大模型如何赋能网络安全攻防实践”和“大模型及智能体内生安全”这两个主题展开,重点关注AI Agent、AI Coding、自动化分析、入侵检测、威胁情报、漏洞研判与安全运营等方向,尝试将大模型的语义理解、代码生成、工具调用和安全知识推理能力融入真实安全任务中。通过系列化案例,专栏希望降低网络安全实验、算法复现和工具开发的实践门槛,为安全研究人员、开发者和初学者提供更加直观、可操作的技术参考。基础文章,希望对您有帮助。感恩分享的第15年,fighting!

随着网络攻击活动呈现组织化、持续化和复杂化趋势,安全公告、威胁情报报告、漏洞通报及攻击行为描述等数据快速增长。传统依赖人工阅读、规则匹配和手工标注的威胁情报分析方法,在处理效率、知识抽取一致性和复杂语义理解等方面面临明显局限。大语言模型凭借较强的语义理解、上下文推理和结构化生成能力,为网络威胁知识自动抽取与智能分析提供了新的技术路径。本文以CodeBuddy为开发与实验工具,结合百度千帆精调大模型,系统介绍基于大模型的网络威胁实体与关系自动抽取实践。

文章首先介绍智能体赋能网络威胁自动分析的整体思路。随后,详细说明百度千帆大模型的服务创建、SFT精调、LoRA训练配置、数据集上传、模型发布与API调用流程。在此基础上,借助CodeBuddy完成本地代码开发与调试,构建少样本提示上下文,并调用精调大模型从MITRE ATT&CK威胁描述中自动识别攻击组织、恶意软件、攻击工具和攻击技术等实体,抽取“使用”等语义关系,最终将结果以JSONL格式保存,为后续威胁知识图谱构建、攻击行为关联分析和安全实战研判提供结构化数据支撑。希望这篇文章对您有帮助,最后感谢学生睿杰在实验调试与内容整理过程中给予的帮助,共勉!

代码开源地址:

在这里插入图片描述

前文赏析:

传统安全专栏:
在这里插入图片描述


一.智能体赋能的网络威胁自动分析

智能体赋能的网络威胁知识自动抽取与分析,旨在面向安全公告、威胁情报报告、漏洞通报、攻击日志及恶意代码分析结果等多源异构数据,构建集信息采集、语义理解、知识抽取、关联分析与辅助研判于一体的自动化处理机制。通过引入大语言模型、知识图谱、检索增强生成与工具调用能力,智能体可自主完成威胁实体识别、攻击关系抽取、技术战术映射、事件链重构及风险摘要生成,从非结构化数据中提取攻击组织、恶意软件、漏洞、基础设施、受害目标和攻击技战术等核心知识。

在这里插入图片描述

(1) 多源网络威胁数据智能采集与预处理
面向安全公告、漏洞通报、威胁情报报告、攻击日志、恶意代码分析结果、开源社区信息及安全厂商报告等多源异构数据,构建由智能体驱动的自动采集与预处理机制。智能体可根据预设任务目标,自主完成数据源发现、内容抓取、格式解析、文本清洗、去重归一和可信度初筛,并将非结构化、半结构化和结构化数据统一转换为标准化输入。该方向重点解决威胁数据来源分散、格式不统一、信息冗余和时效性不足等问题,为后续知识抽取与关联分析提供稳定的数据基础。

(2) 网络威胁实体与关系自动抽取
利用大语言模型、命名实体识别、关系抽取和提示工程等技术,从威胁文本中自动识别攻击组织、恶意软件、漏洞、攻击工具、基础设施、受害目标、攻击时间及攻击技战术等关键实体,并抽取“利用”“控制”“投递”“通信”“攻击”“归属”和“影响”等语义关系。智能体可根据不同情报类型动态选择抽取模板和分析策略,实现从长文本、复杂报告和跨段落描述中提取结构化威胁知识。该方向的核心目标是将原始安全文本转换为可计算、可关联和可验证的威胁知识单元。

(3) 威胁知识规范化、对齐与融合
针对不同来源中实体名称不一致、缩写混用、同名异义和重复描述等问题,构建威胁知识规范化与融合机制。智能体可结合上下文语义、规则库、历史知识图谱及外部安全知识库,对攻击组织、恶意软件、漏洞编号、域名、IP地址和攻击技术进行实体对齐与关系消歧,并对重复知识进行合并。通过引入MITRE ATT&CK、CVE、CAPEC等标准体系,可将抽取结果映射到统一的知识表示框架,形成具有一致语义和标准编码的网络威胁知识库。

(4) 攻击链重构与技战术映射
基于抽取后的实体、关系和时间信息,智能体进一步识别攻击活动之间的先后顺序、因果关系和阶段性特征,自动重构攻击链。通过将行为描述映射至MITRE ATT&CK中的战术、技术和子技术,可实现对初始访问、执行、持久化、权限提升、横向移动、数据窃取和命令控制等关键阶段的识别。该方向能够将零散的威胁线索组织为完整的攻击过程,为分析攻击路径、识别关键节点和判断攻击意图提供依据。

(5) 威胁数据分析与实战辅助研判
在结构化威胁知识基础上,智能体可进一步开展跨事件关联、相似攻击发现、攻击组织归属分析、基础设施聚类和威胁演化分析。通过综合时间、行为、工具、漏洞、网络资产和技战术特征,识别不同安全事件之间的潜在联系,并生成风险摘要、攻击画像和处置建议。该方向可直接服务于安全运营中心中的告警研判、威胁狩猎、攻击溯源、应急响应和防御策略制定,帮助分析人员快速从海量信息中定位高价值线索,提升复杂攻击事件的发现效率和响应能力。


二.百度千帆大模型调用与配置

下面利用百度千帆调用云端大模型实现威胁知识抽取,其具体过程如下所示:

第一步,登录百度千帆(百度智能云),点击“立即体验”。

在这里插入图片描述

第二步,在模型广场中选择“模型服务”,点击“专属推理服务”。

在这里插入图片描述

第三步,在弹出的界面中选择“创建推理服务”。

在这里插入图片描述

第四步,在创建的专属推理服务中填写服务名称“Eastmount_CTI”,然后选择模型。

在这里插入图片描述

大家既可以选择预制的各类大模型,也可以在“我的模型”中选择自己精调的模型。

在这里插入图片描述

第五步,在“模型精调”中点击“创建精调作业”,接着配置精调大模型。

在这里插入图片描述

第六步,设置精调作业内容。 大模型精调选项包括:

  • 模型精调方式
  • 基本信息:作业、基础模型、基础模型版本
  • 训练配置:增量训练、训练方法(全量更新、LoRA)、参数配置
  • 数据配置:数据来源、数据格式、选择数据集、混合训练、验证集
  • 资源配置
  • 发布模型

在这里插入图片描述

(1)当前选择SFT精调方式和Meta-Llama-3-8B模型

在这里插入图片描述

(2)设置训练配置参数

在这里插入图片描述

(3)数据配置如下,需要选择本地数据集

在这里插入图片描述

本地数据集如下图所示:

在这里插入图片描述

数据集展示如下,网络威胁数据集,读者可以从Github下载或自行采集。

在这里插入图片描述

在这里插入图片描述

(4)资源配置后发布模型

在这里插入图片描述

温馨提示:介绍完模型精调和通用数据集构建之后,我们又回到专属推理服务任务,继续后续流程。

(7)从“我的模型”中选择已配置好的微调模型

在这里插入图片描述

(8)创建专属推理服务,API地址需要设计一个自定义关键词用来调用API,如“test”

在这里插入图片描述

选择定时释放并提交创建。

在这里插入图片描述

开通成功如下所示,自此,百度千帆微调大模型创建成功。

在这里插入图片描述


三.基于大模型的网络威胁自动抽取

第一步,点击上线刚创建的精调大模型。

在这里插入图片描述

第二步,通过编辑器如(VS Code或CodeBuddy)打开本地代码。

在这里插入图片描述

CodeBuddy打开界面如下所示,其中“APTtrain-rewrite-short-prompt-response.jsonl”文件为采集的威胁情报数据集,包括:prompt和response。

在这里插入图片描述

在这里插入图片描述

第三步,修改testLLM.py代码,主要讲API Key替换为自己构建的值。

(1)base_model_path修改为百度平台模型名称(详见上面第8步)

在这里插入图片描述

(2)AUTHORIZATION_STRING设置为“安全认证”中的AccessKey值。

在这里插入图片描述

在这里插入图片描述

复制该Key值到代码文件中,Bearer保留,后面的内容为复制的Key。

AUTHORIZATION_STRING = "Bearer bce-v3/ALTAK-eGwh*****ec6"

在这里插入图片描述

基于大模型的威胁自动抽取代码如下:

import sys
import requests
from bs4 import BeautifulSoup
import csv
import re
import time
import json
import random
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.neighbors import NearestNeighbors


# ==========================================
# 百度千帆 API 参数:直接写在代码里
# ==========================================

API_URL = "https://qianfan.baidubce.com/v2/chat/completions"

AUTHORIZATION_STRING = "Bearer bce-v3/ALTAK-eGwh****ec6"

MAX_RETRIES = 5
BASE_DELAY = 1.0

HEADERS = {
    "Content-Type": "application/json",
    "Authorization": AUTHORIZATION_STRING
}


# System prompt
LOCAL_SYSTEM_PROMPT = """You are an intelligent assistant specializing in APT (Advanced Persistent Threat) threat intelligence analysis.
Based on the following threat intelligence sentence, identify and extract entities and relationships using only the specified types. 
All outputs must be in English and follow the strict format below.

If entities and relationships are found, output in this format:
Entities:(name, entity type), (name, entity type)...
Relations:(entity1, relation, entity2), (entity1, relation, entity2)...

If only entities are found:
Entities:(name, entity type), (name, entity type)...
Relations:No relevant relations

If nothing found:
No relevant entities or relations identified
"""


class LocalLLMWithKNN:
    def __init__(self, base_model_path, lora_model_path=None, jsonl_path=None, system_prompt=None, top_k=3):
        """
        这里保留原来的类名和参数名。
        但是 base_model_path 不再表示本地模型路径,而是百度在线模型名称。
        lora_model_path 保留参数,但在线 API 不需要使用。
        """

        self.top_k = top_k
        self.system_prompt = LOCAL_SYSTEM_PROMPT

        # 百度在线模型名
        self.model_name = base_model_path

        # 加载JSONL数据构建KNN
        self.example_instructions = []
        self.example_outputs = []

        if jsonl_path:
            self._load_jsonl_data(jsonl_path)
            print(f"Loaded {len(self.example_instructions)} examples from {jsonl_path}")

        # KNN相关初始化
        if self.example_instructions:
            self.vectorizer = TfidfVectorizer()
            self.knn = self._build_knn_model()
            print(f"KNN model built with {len(self.example_instructions)} examples")
        else:
            self.vectorizer = None
            self.knn = None
            print("No examples loaded, KNN will not be used")

        print(f"Using Baidu online model: {self.model_name}")

        if lora_model_path:
            print("Notice: lora_model_path is ignored because Baidu API model is used online.")

    def _load_jsonl_data(self, jsonl_path):
        """从JSONL文件加载示例数据:保持你的原逻辑"""
        try:
            with open(jsonl_path, 'r', encoding='utf-8') as f:
                for line in f:
                    line = line.strip()
                    if not line:
                        continue

                    data = json.loads(line)

                    if 'instruction' in data and 'output' in data:
                        self.example_instructions.append(data['instruction'])
                        self.example_outputs.append(data['output'])

        except Exception as e:
            print(f"Error loading JSONL data from {jsonl_path}: {e}")

    def _build_knn_model(self):
        """构建KNN模型:保持你的原逻辑"""
        if not self.example_instructions:
            return None

        vectors = self.vectorizer.fit_transform(self.example_instructions)
        n_neighbors = min(self.top_k + 1, len(self.example_instructions))

        knn = NearestNeighbors(
            n_neighbors=n_neighbors,
            metric='cosine'
        )

        knn.fit(vectors)
        return knn

    def get_similar_examples(self, input_sentence):
        """获取相似的示例:保持你的原逻辑"""
        if not self.knn or not self.vectorizer or not self.example_instructions:
            return []

        try:
            input_vector = self.vectorizer.transform([input_sentence])
            distances, indices = self.knn.kneighbors(input_vector)

            similar_examples = []

            for j in range(1, min(len(indices[0]), self.top_k + 1)):
                idx = indices[0][j]

                if idx < len(self.example_instructions):
                    similar_examples.append({
                        'instruction': self.example_instructions[idx],
                        'output': self.example_outputs[idx],
                        'distance': distances[0][j]
                    })

            return similar_examples

        except Exception as e:
            print(f"Error getting similar examples: {e}")
            return []

    def call_baidu_api_with_retry(self, user_text):
        """
        调用百度千帆 API,替代原来的本地 self.pipe 推理
        """

        payload = {
            "model": self.model_name,
            "messages": [
                {
                    "role": "system",
                    "content": self.system_prompt
                },
                {
                    "role": "user",
                    "content": user_text
                }
            ],
            "temperature": 0.0,
            "top_p": 1.0
        }

        retries = 0

        while retries < MAX_RETRIES:
            try:
                response = requests.post(
                    API_URL,
                    headers=HEADERS,
                    json=payload,
                    timeout=60
                )

                if response.status_code == 200:
                    return response.json()

                elif response.status_code == 429:
                    wait_time = (2 ** retries) + random.random()
                    print(f"    [!] 触发限速 429,等待 {wait_time:.2f} 秒后进行第 {retries + 1} 次重试...")
                    time.sleep(wait_time)
                    retries += 1

                else:
                    print(f"    [-] API 报错,状态码 {response.status_code}: {response.text}")
                    return None

            except requests.exceptions.RequestException as e:
                wait_time = (2 ** retries) + random.random()
                print(f"    [-] 网络异常: {e},等待 {wait_time:.2f} 秒后重试...")
                time.sleep(wait_time)
                retries += 1

        print("    [-] 已达到最大重试次数,放弃该条数据。")
        return None

    def generate_response(self, input_sentence):
        """生成响应:保持你的执行逻辑,只把模型调用换成百度 API"""

        # 获取相似示例
        similar_examples = self.get_similar_examples(input_sentence)

        # 构建prompt:保持你的原逻辑
        if similar_examples:
            examples_parts = []

            for i, ex in enumerate(similar_examples, 1):
                examples_parts.append(
                    f"Example {i}:\nInput: {ex['instruction']}\n {ex['output']}"
                )

            examples_text = "\n\n".join(examples_parts)
            userText = "\nExamples:\n" + examples_text + "\n\nInput: " + input_sentence
        else:
            userText = "\n\nInput: " + input_sentence

        try:
            print("\n[Prompt Sent to Baidu API]:")
            print(userText)

            api_result = self.call_baidu_api_with_retry(userText)

            generated_text = ""

            if api_result and "choices" in api_result:
                generated_text = api_result["choices"][0]["message"]["content"].strip()
            else:
                generated_text = "ERROR_OR_SKIPPED"

            print(f"\n[Model Response]:")
            print(generated_text)

            time.sleep(BASE_DELAY)

            return generated_text, similar_examples

        except Exception as e:
            print(f"Error generating response: {e}")
            return f"Error: {e}", []


class MITREExtractor:
    """MITRE数据抽取器"""

    def __init__(self, llm_model=None):
        """初始化MITRE抽取器"""
        self.llm_model = llm_model
        self.items = []

    def _load_items(self, csv_file='groups.csv'):
        """从CSV文件加载项目"""
        items = []

        try:
            with open(csv_file, 'r', encoding='utf-8-sig') as file:
                reader = csv.reader(file)
                next(reader)

                for row in reader:
                    if len(row) >= 2:
                        name = row[0].strip()
                        url = row[1].strip()

                        if name and url:
                            items.append({
                                'name': name,
                                'url': url
                            })

            print(f"Loaded {len(items)} items from {csv_file}")
            self.items = items
            return items

        except Exception as e:
            print(f"Error loading CSV file {csv_file}: {e}")
            return []

    def _save_result_to_jsonl(self, instruction, output, filename='extraction_results.jsonl'):
        """将抽取结果保存到JSONL文件"""
        try:
            data = {
                "instruction": instruction,
                "input": None,
                "output": output
            }

            with open(filename, 'a', encoding='utf-8') as f:
                f.write(json.dumps(data, ensure_ascii=False) + '\n')

            print(f"  [Saved to {filename}]")

        except Exception as e:
            print(f"  [Error saving to JSONL: {e}]")

    def _extract_item(self, item_name, url):
        """抽取单个项目的信息"""
        if not self.llm_model:
            print("Error: LLM model not set. Please set llm_model first.")
            return

        try:
            response = requests.get(url, timeout=30)
            soup = BeautifulSoup(response.text, 'html.parser')

            table = soup.find(
                'table',
                class_='table techniques-used background table-bordered'
            )

            if not table:
                print(f"No techniques table found for {item_name}")
                return

            rows = table.find_all('tr')

            for row_idx, row in enumerate(rows):
                td_elements = row.find_all('td')

                if td_elements:
                    last_td_text = td_elements[-1].get_text(strip=True)
                    cleaned_text = re.sub(r'\[\d+\]', '', last_td_text).strip()

                    if not cleaned_text:
                        continue

                    print(f"\n--- Sentence {row_idx}/{len(rows) - 1} ---")
                    print(f"[Input Sentence]: {cleaned_text[:120]}{'...' if len(cleaned_text) > 120 else ''}")

                    # 使用百度在线模型生成回答
                    llm_response, similar_examples = self.llm_model.generate_response(cleaned_text)

                    # 将结果保存到JSONL文件
                    if llm_response and not llm_response.startswith("Error:") and llm_response != "ERROR_OR_SKIPPED":
                        self._save_result_to_jsonl(cleaned_text, llm_response)

                    time.sleep(0.1)

        except Exception as e:
            print(f"Error extracting data from {item_name} ({url}): {e}")

    def extract(self, csv_file='groups.csv'):
        """抽取数据"""
        if not self.llm_model:
            print("Error: LLM model not set. Please set llm_model first.")
            return

        # 从CSV文件加载项目
        self._load_items(csv_file)

        if not self.items:
            print("Error: No items loaded from CSV file.")
            return

        # 抽取每个项目的信息
        for index, item in enumerate(self.items, 1):
            print(f"\n{'=' * 60}")
            print(f"Item {index}/{len(self.items)}: {item['name']}")

            self._extract_item(item['name'], item['url'])

            if index < len(self.items):
                time.sleep(0.5)


def run_extraction(base_model_path, lora_model_path=None, jsonl_path=None):
    """运行MITRE数据抽取流程"""

    # 这里仍然保留原来的调用方式
    # 但是 base_model_path 现在是百度在线模型名称
    llm_model = LocalLLMWithKNN(
        base_model_path=base_model_path,
        lora_model_path=lora_model_path,
        jsonl_path=jsonl_path,
        top_k=3
    )

    # 创建MITRE抽取器,传入LLM模型
    mitre_extractor = MITREExtractor(llm_model)

    # 抽取数据
    mitre_extractor.extract()


def main():
    # 这里不再写本地模型路径,而是写百度平台模型名称
    base_model_path = "百度配置的模型名称"

    # 在线 API 不需要 LoRA 路径,保留变量只是为了不改变原执行逻辑
    lora_model_path = None

    jsonl_path = "APTtest-Final-440.jsonl"

    print(f"Starting extraction")
    print(f"Base model: {base_model_path}")
    print(f"LoRA adapter: {lora_model_path if lora_model_path else 'Not used'}")
    print(f"KNN data: {jsonl_path if jsonl_path else 'Not used'}")

    run_extraction(base_model_path, lora_model_path, jsonl_path)

    print("\nExtraction complete!")


if __name__ == "__main__":
    main()

第四步,在本地CodeBuddy运行Python代码,成功调用精调大模型实现了对非结构威胁的知识抽取。

  • Entities: (admin@338actors, Attacker), (LOWBALL, MalwareFamily)
  • Relations: (admin@338actors, Use, LOWBALL)

在这里插入图片描述

其中下面展示APT32抽取的实体和关系信息:

在这里插入图片描述

{"instruction": "APT32enumerated administrative users using the commandsnet localgroup administrators.", "input": null, "output": "Entities: (APT32, Attacker), (net, Tool)\nRelations: (APT32, Use, net)"}

{"instruction": "APT32has set up and operated websites to gather information and deliver malware.", "input": null, "output": "Entities: (APT32, Attacker), (information gathering, Technique), (malware delivery, Technique)\nRelations: (APT32, Use, information gathering), (APT32, Use, malware delivery)"}

{"instruction": "APT32has set up Dropbox, Amazon S3, and Google Drive to host malicious downloads.", "input": null, "output": "Entities: (APT32, Attacker), (Dropbox, Tool), (Amazon S3, Tool), (Google Drive, Tool)\nRelations: (APT32, Use, Dropbox), (APT32, Use, Amazon S3), (APT32, Use, Google Drive)"}

{"instruction": "APT32has used JavaScript that communicates over HTTP or HTTPS to attacker controlled domains to download additional frameworks. The group has also used downloaded encrypted payloads over HTTP.", "input": null, "output": "Entities: (APT32, Attacker), (JavaScript, Tool), (HTTP, Technique), (HTTPS, Technique)\nRelations: (APT32, Use, JavaScript), (APT32, Use, HTTP), (APT32, Use, HTTPS)"}

最终其将抽取的知识存储至本地Json文件,为后续知识图谱构建提供支撑。

在这里插入图片描述


四.Codebuddy赋能威胁知识图谱构建

PS:由于篇幅和时间问题,该部分内容我们将在下一篇博客中详细概述,希望对您有帮助。


五.总结与展望

本文围绕大模型赋能网络威胁知识自动抽取这一主题,结合CodeBuddy与百度千帆精调大模型,构建了从威胁数据读取、在线模型调用,到实体关系抽取与JSONL结果存储的完整实践流程。实验表明,借助大语言模型的语义理解与结构化生成能力,可以从MITRE ATT&CK等非结构化威胁描述中自动识别攻击组织、恶意软件、攻击工具和攻击技术等关键实体,并抽取实体之间的语义关系。与此同时,CodeBuddy在代码生成、参数配置、接口调试和错误排查等环节发挥了重要辅助作用,有效降低了大模型安全应用的开发门槛,提高了网络威胁知识抽取的自动化程度和实验复现效率。

但从当前实现来看,该方法仍存在一定局限。

  • 首先,抽取结果在较大程度上依赖训练数据质量、提示模板设计及精调模型能力,对于跨句关系、隐含攻击行为和复杂指代仍可能出现实体遗漏、类型混淆及关系误判。
  • 其次,当前KNN检索主要基于TF-IDF文本相似度,难以充分刻画威胁行为之间的深层语义联系。
  • 再次,现阶段抽取结果主要以文本和JSONL形式保存,尚未完成实体规范化、同义名称对齐、重复知识融合及知识可信度验证。
  • 此外,API密钥管理、敏感情报保护、模型幻觉控制和人工复核机制也需要在实际应用中进一步完善。

未来可从以下几个方面持续优化:

  • 一是引入向量嵌入模型和检索增强生成机制,提升相似样本召回质量和复杂威胁语义理解能力;
  • 二是构建覆盖攻击组织、恶意软件、漏洞、基础设施、攻击工具及技战术的统一威胁知识本体,实现抽取结果的规范化表示;
  • 三是结合MITRE ATT&CK、CVE、CAPEC等外部知识库开展实体对齐、关系校验和技战术映射,降低模型幻觉与错误抽取风险;
  • 四是进一步引入多智能体协作机制,使不同智能体分别承担数据采集、知识抽取、结果校验、攻击链重构和风险研判任务;
  • 五是将抽取结果写入图数据库,构建可查询、可追踪和可更新的网络威胁知识图谱,并结合图推理、时间分析和关联挖掘技术,实现攻击组织归属分析、相似攻击发现和攻击路径重构。

总体而言,CodeBuddy与精调大模型的结合,为网络威胁情报的自动处理提供了一条具有较强可操作性和扩展性的技术路径。随着大模型、智能体、知识图谱和安全知识库的进一步融合,网络威胁分析将逐步从单一文本抽取向知识融合、因果推理和自主研判演进,为威胁狩猎、安全运营和应急响应提供更加智能、高效的技术支撑。

与此同时,Eastmount已正式开启《智能体攻防实战》专栏,将持续发布关于大模型辅助编程、国产AI IDE工具评测、AI自动化开发实战等系列内容,欢迎关注专栏,一起探索智能开发的前沿趋势,不断学习与精进。基础性文章,希望对您有所帮助,写得不好的地方还请海涵!


作者新书推荐
腾讯内部10倍产能提升的秘密是什么?AI编程如何真正落地到日常开发,让每位开发者都能享受效率红利?腾讯云CODING CEO刘毅等多位业内大咖给出了明确答案:选对工具,掌握方法。他们推荐的《CodeBuddy领航:AI辅助编程应用·架构·交付》,正是承载这套方法的最佳实践指南。

京东和当当搜索购买本书,欢迎大家交流!

在这里插入图片描述

本书立足国内开发者真实场景,以解决落地痛点为核心,不仅系统讲解AI编程的核心理念与方法,更依托深度集成大语言模型的本土化平台CodeBuddy,通过数十个完整实战项目,演示如何将AI能力应用于需求分析、界面设计、代码生成、测试部署等全链路开发流程。

书中最具亮点的是一套完整落地的实战内容:12个章节搭配数十个实战项目,将CodeBuddy的使用技巧与真实开发场景深度融合,覆盖当前主流热门开发方向,让读者学有所用、学完即可用。

在这里插入图片描述

与其在焦虑中观望,不如主动拥抱变革。《CodeBuddy领航:AI辅助编程应用·架构·交付》就是你开启AI编程之路的最佳伙伴——它不仅能帮你快速掌握CodeBuddy的使用方法,更能帮你建立“人机协同”的思维,在这场效率革命中提升自身价值,值得一读!

2024年4月28日是Eastmount的安全星球——『网络攻防和AI安全之家』正式创建和运营的日子,该星球目前主营业务为 安全零基础答疑、安全技术分享、AI安全技术分享、AI安全论文交流、威胁情报每日推送、网络攻防技术总结、系统安全技术实战、面试求职、安全考研考博、简历修改及润色、学术交流及答疑、人脉触达、认知提升等。下面是星球的新人券,欢迎新老博友和朋友加入,一起分享更多安全知识,比较良心的星球,非常适合初学者和换安全专业的读者学习。

目前收到了很多博友、朋友和老师的支持和点赞,尤其是一些看了我文章多年的老粉,购买来感谢,真的很感动,类目。未来,我将分享更多高质量文章,更多安全干货,真心帮助到大家。虽然起步晚,但贵在坚持,像十多年如一日的博客分享那样,脚踏实地,只争朝夕。继续加油,再次感谢!

(By:Eastmount 2026-06-16 周二写于贵阳 http://blog.csdn.net/eastmount/ )


Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐