首页
看点啥
插画图片
首页 看点啥 自动化工程实践:基于 Hardhat 与 DeepSeek 的 Web3 技术长文生成 Skill 实现

自动化工程实践:基于 Hardhat 与 DeepSeek 的 Web3 技术长文生成 Skill 实现

2026-07-18 0

一、 前言

二、 项目介绍

该工具本质上是一个 LLM 驱动的模块化流水线 (Pipeline) 。它解决了开发者在进行 Web3 技术调研时的三个核心痛点:

  1. 架构与规范脱节:许多旧项目仍在使用过时的 Solidity 版本,该工具强制统一升级至 ^0.8.24OpenZeppelin V5,确保代码具备现代安全性。
  2. 工程化交付门槛:很多文章仅提供代码片段,缺乏配套的 Hardhat Ignition 部署模块与 loadFixture 驱动的单元测试,难以直接落地。
  3. 上下文衔接断层:通过多阶段链式提示词(Chain-of-Thought),确保后续生成的测试脚本与部署脚本能够精准匹配前序生成的合约逻辑。

三、 核心智能合约(设计逻辑)

该 Skill 的核心设计思想是模块化提示词工程(Modular Prompt Engineering) 。为了保证生产级代码质量,合约生成环节采用了严谨的约束:

四、 测试与部署脚本(工程化实现)

在第二阶段,工具联动生成了工程化代码:

五、web3技术长文生成器skill实现

 复制代码import { OpenAI } from 'openai';
import * as fs from 'fs';
import * as path from 'path';
import 'dotenv/config';const deepseek = new OpenAI({
    apiKey: process.env.LLM_API_KEY,
    baseURL: process.env.LLM_BASE_URL,
});// 使用稳定、代码能力极强的模型生成结构化内容
const MODEL_NAME = 'deepseek-chat'; /**
 * 工业级防御工具函数:带有指数退避自动重试的大模型请求包装器
 */
async function callDeepSeekWithRetry(options, maxRetries = 3, baseDelay = 2000) {
    for (let attempt = 1; attempt <= maxRetries; attempt++) {
        try {
            const response = await deepseek.chat.completions.create(options);
            const content = response?.choices?.[0]?.message?.content;
            
            if (content && content.trim() !== '') {
                return content; // 成功获取到内容,直接返回
            }
            
            console.warn(`️ [API 预警] 响应内容为空,准备开展第 ${attempt}/${maxRetries} 次重试...`);
        } catch (error) {
            console.warn(`️ [API 异常] 第 ${attempt}/${maxRetries} 次请求遭遇错误: ${error.message}`);
            // 如果已经是最后一次尝试,则不再等待,直接向上抛出
            if (attempt === maxRetries) {
                console.error(" [API 溃败] 完整错误响应:", JSON.stringify(error));
                throw error;
            }
        }
        
        // 计算退避延迟时间:2s -> 4s -> 8s
        const delay = baseDelay * Math.pow(2, attempt - 1);
        console.log(`⏳ 正在等待 ${delay / 1000} 秒后重新送入请求...`);
        await new Promise(resolve => setTimeout(resolve, delay));
    }
    throw new Error("大模型在多次尝试后均未返回有效响应。");
}/**
 * 核心 Skill 处理器:按照指定大纲全自动分段组装 Web3 技术长文
 */
async function generateFullWeb3Article(projectName, projectKeywords) {
    const outputDir = path.join(process.cwd(), 'output_articles');
    if (!fs.existsSync(outputDir)) {
        fs.mkdirSync(outputDir, { recursive: true });
    }    console.log(`n [Skill 启动] 正在为热门 Web3 项目 [${projectName}] 全自动撰写深度技术长文...`);    const systemPrompt = `你是一个精通 Solidity 合约开发、智能合约安全审计与 Hardhat v3 工程化交付的 Web3 技术大牛。
请严格按照用户指定的目录大纲输出技术文章。代码部分必须符合 Solidity ^0.8.24 与 OpenZeppelin V5 标准。
只输出纯粹的 Markdown 文本,绝不能带有任何 HTML/Script 网页杂质代码。`;    // ────────────────────────────────────────────────────────
    // 阶段 1:生成 前言 + 项目介绍 + 核心智能合约
    // ────────────────────────────────────────────────────────
    console.log('▶️ [Step 1/3] 正在生成:前言、项目介绍与重构后的核心智能合约源码...');
    const stage1Prompt = `
    请针对热门 Web3 项目 [${projectName}],编写技术文章的第一部分。
    该项目的核心关键词为:【${projectKeywords}】。
    
    请严格遵循以下大纲输出 Markdown:
    
    #  热门 Web3 项目现代化重构实战:深度解析 ${projectName}
    
    ## 一、 前言
    - 阐述该项目在当前 Web3 行业引发的热潮、行业地位与技术风向。
    - 说明本次技术重构的极客初衷(将其升级至现代安全的 Solidity ^0.8.24 与 OpenZeppelin V5 规范)。
    
    ## 二、 项目介绍
    - 深度拆解该项目的宏观业务逻辑、它解决了什么行业核心痛点。
    - 详细剖析该协议底层最核心的 3 个业务交互流程与资产流转路径。
    
    ## 三、 核心智能合约
    - 请为该项目编写一个生产级、高可读性的主智能合约 Solidity 源码(要求必须使用 Solidity ^0.8.24,且全面适配 OpenZeppelin V5,如废弃 _beforeTokenTransfer 钩子,改用 _update 实现转账拦截逻辑;权限管理采用 Ownable2Step 等)。
    - 代码请包裹在 ```solidity ... ``` 块中。并在代码下方用精炼的语言对该合约的关键安全机制和优化点进行 200 字的技术点评。
    `;    //  替换为高抗震重试请求
    const part1Text = await callDeepSeekWithRetry({
        model: MODEL_NAME,
        messages: [
            { role: 'system', content: systemPrompt },
            { role: 'user', content: stage1Prompt }
        ],
        temperature: 0.2
    });    // ────────────────────────────────────────────────────────
    // 阶段 2:联动生成 测试脚本 + 部署脚本
    // ────────────────────────────────────────────────────────
    console.log('▶️ [Step 2/3] 正在基于核心合约,联动生成 Hardhat v3 测试脚本与部署脚本...');
    const stage2Prompt = `
    你现在是高级测试与运维工程师。基于上面已经写好的项目背景与核心业务逻辑,请为 [${projectName}] 继续撰写文章的工程化部分。
    
    请严格遵循以下大纲输出 Markdown(不要输出一级标题,直接从第四章开始):
    
    ## 四、 测试脚本
    - 请编写一个配套该合约的、功能完整的 Hardhat v3 JavaScript 测试脚本。
    - 必须引入 "@nomicfoundation/hardhat-toolbox/network-helpers" 中的 loadFixture 优化快照。
    - 包含至少 3 个核心业务用例测试(必须包含异常权限或条件拦截的 expect(...).to.be.reverted 异常断言)。
    - 代码请包裹在 ```javascript ... ``` 块中。
    
    ## 五、 部署脚本
    - 请基于现代 Hardhat 推荐的标准,编写一个符合规范的 Hardhat Ignition 声明式 JavaScript 部署模块(使用 buildModule 定义并通过 module.exports 导出)。
    - 代码请包裹在 ```javascript ... ``` 块中。
    `;    //  替换为高抗震重试请求
    const part2Text = await callDeepSeekWithRetry({
        model: MODEL_NAME,
        messages: [
            { role: 'system', content: systemPrompt },
            { role: 'user', content: `这是项目的上下文信息:n${part1Text}nn现在请为我续写第四章和第五章:n${stage2Prompt}` }
        ],
        temperature: 0.2
    });    // ────────────────────────────────────────────────────────
    // 阶段 3:生成 总结
    // ────────────────────────────────────────────────────────
    console.log('▶️ [Step 3/3] 正在撰写收尾总结并开展全景组装...');
    const stage3Prompt = `
    请为全篇关于 [${projectName}] 的拆解文章撰写收尾的总结章节。
    
    请遵循以下大纲:
    
    ## 六、 总结
    - 从系统架构师和开发者的双重视角,高度总结该项目的创新亮点和代码健壮性。
    - 给出开发者在基于该项目做二次开发或迁移生产环境时的工程踩坑防范建议(不少于 3 条)。
    `;    //  替换为高抗震重试请求
    const part3Text = await callDeepSeekWithRetry({
        model: MODEL_NAME,
        messages: [
            { role: 'system', content: systemPrompt },
            { role: 'user', content: stage3Prompt }
        ],
        temperature: 0.3
    });    // ────────────────────────────────────────────────────────
    // 成果汇编与静态清洗写盘
    // ────────────────────────────────────────────────────────
    const fullArticle = `${part1Text}nn${part2Text}nn${part3Text}`;
    
    let cleanedArticle = fullArticle;
    if (fullArticle.includes('') || fullArticle.includes('__next_f')) {
        cleanedArticle = fullArticle.split('