分类: 代码如诗

  • 网站改版升级:更快、更稳、更简洁

    大家好!最近我对个人网站进行了一次全面的改版升级,目的是为了解决长期以来困扰我的一些问题。如果你之前访问过我的网站,可能会注意到一些变化;如果是新朋友,那么欢迎来到这个全新的空间!

    为什么需要改版?

    原来的网站完全基于 WordPress 搭建,为了保持首页的版式和功能,我使用了大量的建站插件。虽然这些插件在初期帮助我快速实现了设计效果,但也带来了一些明显的弊端:

    • 运行速度慢:插件越多,网站加载时间越长,影响用户体验。
    • 访问延迟高:特别是对于移动端用户,页面响应不够流畅。
    • 兼容性问题:每次 WordPress 或插件更新时,总有可能出现冲突,导致网站临时宕机或功能异常。

    这些问题不仅让我作为站长头疼,也可能影响了大家的浏览体验。因此,我决定对网站架构进行一次彻底的优化。

    改版的具体变化

    本次改版的核心思路是“动静分离”:将动态内容和静态内容拆分开,以提升整体性能。

    1. 全新主页入口 现在,网站的主页(二级域名 guohao.asia)采用纯 HTML + CSS 的静态部署方式。这样做的好处是页面加载速度极快,且几乎不存在兼容性风险。无论是电脑还是手机访问,都能获得一致的流畅体验。
    2. 博客系统保留并优化 我的个人博客部分依旧基于 WordPress,但现已迁移至三级域名 blog.guohao.asia。通过 WordPress 提供的 REST API,主页与博客实现了无缝对接,既保留了 WordPress 强大的内容管理功能,又避免了插件冗余。
    3. 文章链接更新 所有历史文章都完好保留,但访问链接需要稍作调整:原链接前需加上 blog 改为三级域名。例如,原来的 guohao.asia/post-name 现在变为 blog.guohao.asia/post-name。如果你收藏了某些旧链接,只需简单修改即可继续访问。

    改版带来的好处

    这次改版后,最直观的提升包括:

    • 速度显著加快:由于减少了插件依赖,页面加载时间大幅缩短。
    • 稳定性增强:静态主页几乎无需维护,博客系统也因插件精简而更稳定。
    • 用户体验优化:无论是浏览主页还是阅读博客,操作都更加顺畅。

    当然,改版过程中我也遇到了一些技术挑战,比如数据迁移和链接重定向的处理,但最终的结果让我非常满意。如果你在访问过程中遇到任何问题,欢迎随时通过博客的留言功能告诉我!

    写在最后

    网站优化是一个持续的过程,这次改版只是第一步。未来我还会继续关注性能和数据安全,为大家提供更优质的内容和服务。如果你对这次改版有任何建议或想法,也欢迎在评论区分享交流。

    感谢大家的支持,希望新网站能给你带来更好的体验!


  • 使用ExcelVBA审计钉钉原始打卡记录(代码优化)

    Sub FindMultiUserDevicesWithCount()
        ' 声明变量
        Dim wsSource As Worksheet, wsResult As Worksheet
        Dim dict As Object ' 用于存储设备号和对应的员工集合
        Dim lastRow As Long, i As Long
        Dim deviceID As String, employeeName As String
        Dim key As Variant, empKey As Variant
        Dim outputRow As Long
        Dim nameList As String
    
        ' 设置源数据工作表 (假设数据在原始记录)
        On Error Resume Next
        Set wsSource = ThisWorkbook.Worksheets("原始记录")
        On Error GoTo 0
    
        If wsSource Is Nothing Then
            MsgBox "找不到工作表 '原始记录',请修改代码中的工作表名称。", vbExclamation
            Exit Sub
        End If
    
        ' 创建或清空结果工作表
        Application.DisplayAlerts = False
        On Error Resume Next
        ThisWorkbook.Worksheets("异常设备报告").Delete
        On Error GoTo 0
        Application.DisplayAlerts = True
    
        Set wsResult = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
        wsResult.Name = "异常设备报告"
    
        ' 在结果表创建标题
        With wsResult
            .Range("A1").Value = "设备编号"
            .Range("B1").Value = "使用员工数量"
            .Range("C1").Value = "使用员工名单及打卡次数"
            .Range("D1").Value = "设备持有人"
            .Range("E1").Value = "代打卡员工"
            .Range("A1:E1").Font.Bold = True
            .Columns("A:E").AutoFit
        End With
    
        outputRow = 2 ' 从第2行开始输出结果
    
        ' 创建字典对象来存储数据
        Set dict = CreateObject("Scripting.Dictionary")
    
        ' 找出源数据的最后一行 (使用P列确定行数)
        lastRow = wsSource.Cells(wsSource.Rows.Count, "P").End(xlUp).Row
    
        ' 检查是否有数据
        If lastRow < 2 Then
            wsResult.Cells(2, 1).Value = "源数据表中没有找到有效数据。"
            wsResult.Columns("A:E").AutoFit
            wsResult.Activate
            Exit Sub
        End If
    
        ' 遍历所有数据行 (假设第1行是标题,从第2行开始)
        For i = 2 To lastRow
            On Error Resume Next ' 防止类型转换错误
            deviceID = Trim(CStr(wsSource.Cells(i, "P").Value)) ' P列是设备号
            employeeName = Trim(CStr(wsSource.Cells(i, "A").Value)) ' A列是员工姓名
            On Error GoTo 0
    
            ' 跳过空设备号或空姓名的行
            If deviceID = "" Or employeeName = "" Then GoTo NextRow
    
            ' 如果字典中没有这个设备号,则添加一个新字典
            If Not dict.Exists(deviceID) Then
                dict.Add deviceID, CreateObject("Scripting.Dictionary")
            End If
    
            ' 如果该设备号的字典中没有这个员工,则添加并初始化计数为1
            If Not dict(deviceID).Exists(employeeName) Then
                dict(deviceID).Add employeeName, 1
            Else
                ' 如果已存在,则计数加1
                dict(deviceID)(employeeName) = dict(deviceID)(employeeName) + 1
            End If
    
    NextRow:
        Next i
    
        ' 遍历字典,找出使用员工数 > 1 的设备
        For Each key In dict.Keys
            If dict(key).Count > 1 Then
                ' 输出到结果表
                wsResult.Cells(outputRow, 1).Value = key ' 设备号
                wsResult.Cells(outputRow, 2).Value = dict(key).Count ' 员工数量
    
                ' 将员工姓名和打卡次数集合连接成一个字符串
                nameList = ""
                For Each empKey In dict(key).Keys
                    nameList = nameList & empKey & "(" & dict(key)(empKey) & "次), "
                Next empKey
    
                ' 去掉最后一个逗号和空格
                If Len(nameList) > 0 Then
                    nameList = Left(nameList, Len(nameList) - 2)
                End If
    
                wsResult.Cells(outputRow, 3).Value = nameList ' 员工名单及打卡次数
    
                ' 新增功能:识别设备持有人和代打卡员工
                Dim maxCount As Long
                Dim holder As String
                Dim proxyEmployees As String
    
                ' 找出打卡次数最多的员工
                maxCount = 0
                holder = ""
                For Each empKey In dict(key).Keys
                    If dict(key)(empKey) > maxCount Then
                        maxCount = dict(key)(empKey)
                        holder = empKey
                    End If
                Next
    
                ' 构建代打卡员工名单(包含打卡次数)
                proxyEmployees = ""
                For Each empKey In dict(key).Keys
                    If empKey <> holder Then
                        proxyEmployees = proxyEmployees & empKey & "(" & dict(key)(empKey) & "次), "
                    End If
                Next
    
                ' 去掉最后一个逗号和空格
                If Len(proxyEmployees) > 0 Then
                    proxyEmployees = Left(proxyEmployees, Len(proxyEmployees) - 2)
                End If
    
                ' 写入持有人和代打卡员工信息
                wsResult.Cells(outputRow, 4).Value = holder & "(" & maxCount & "次)"
                wsResult.Cells(outputRow, 5).Value = proxyEmployees
    
                outputRow = outputRow + 1
            End If
        Next key
    
        ' 如果没有找到异常设备,提示用户
        If outputRow = 2 Then
            wsResult.Cells(2, 1).Value = "未发现一个设备对应多个员工的情况。"
        Else
            ' 对结果表进行排序(按员工数量降序)
            With wsResult
                If outputRow > 2 Then
                    .Range("A1:E" & outputRow - 1).Sort Key1:=.Range("B2"), Order1:=xlDescending, Header:=xlYes
                End If
            End With
        End If
    
        ' 自动调整列宽
        wsResult.Columns("A:E").AutoFit
        wsResult.Activate ' 切换到结果工作表
    
        MsgBox "分析完成!共找到 " & (outputRow - 2) & " 个异常设备。结果已输出到工作表【异常设备报告】。", vbInformation
    End Sub

    主要功能:

    • 数据源处理:从名为“原始记录”的工作表中读取数据,其中设备编号位于P列,员工姓名位于A列。
    • 数据统计:使用字典对象高效地统计每个设备编号对应的员工及其打卡次数。
    • 报告生成:创建一个名为“异常设备报告”的新工作表,列出所有异常设备(即被多个员工使用的设备),包括以下信息:
    • 设备编号:设备的唯一标识。
    • 使用员工数量:使用该设备的员工总数。
    • 使用员工名单及打卡次数:列出所有使用该设备的员工姓名及其打卡次数(例如:张三(5次), 李四(3次))。
    • 设备持有人:打卡次数最多的员工(被视为主要使用者)。
    • 代打卡员工:其他使用该设备的员工(可能涉及代打卡行为)。
    • 排序和格式化:报告按员工数量降序排序,并自动调整列宽以便阅读。
    • 用户反馈:运行完成后,显示消息框提示找到的异常设备数量。

    适用场景:

    • 企业考勤系统分析,检测异常打卡行为。
    • 设备使用审计,确保设备分配合规。
    • 人力资源或安全管理,防止代打卡或未授权设备使用。

    如何使用:

    1. 确保Excel工作簿中有一个名为“原始记录”的工作表,且包含员工姓名(A列)和设备编号(P列)数据。
    2. 在Excel中运行此宏(通过VBA编辑器或按钮触发)。
    3. 宏将自动生成“异常设备报告”工作表,并提供分析结果。
  • Excel VBA 审计钉钉原始打卡记录(优化版代码)

    Sub FindMultiUserDevicesWithCount()
        ' 声明变量
        Dim wsSource As Worksheet, wsResult As Worksheet
        Dim dict As Object ' 用于存储设备号和对应的员工集合
        Dim lastRow As Long, i As Long
        Dim deviceID As String, employeeName As String
        Dim key As Variant, empKey As Variant
        Dim outputRow As Long
        Dim nameList As String
    
        ' 设置源数据工作表 (假设数据在原始记录)
        On Error Resume Next
        Set wsSource = ThisWorkbook.Worksheets("原始记录")
        On Error GoTo 0
    
        If wsSource Is Nothing Then
            MsgBox "找不到工作表 '原始记录',请修改代码中的工作表名称。", vbExclamation
            Exit Sub
        End If
    
        ' 创建或清空结果工作表
        Application.DisplayAlerts = False
        On Error Resume Next
        ThisWorkbook.Worksheets("异常设备报告").Delete
        On Error GoTo 0
        Application.DisplayAlerts = True
    
        Set wsResult = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
        wsResult.Name = "异常设备报告"
    
        ' 在结果表创建标题
        With wsResult
            .Range("A1").Value = "设备编号"
            .Range("B1").Value = "使用员工数量"
            .Range("C1").Value = "使用员工名单及打卡次数"
            .Range("A1:C1").Font.Bold = True
            .Columns("A:C").AutoFit
        End With
    
        outputRow = 2 ' 从第2行开始输出结果
    
        ' 创建字典对象来存储数据
        Set dict = CreateObject("Scripting.Dictionary")
    
        ' 找出源数据的最后一行 (使用P列确定行数)
        lastRow = wsSource.Cells(wsSource.Rows.Count, "P").End(xlUp).Row
    
        ' 检查是否有数据
        If lastRow < 2 Then
            wsResult.Cells(2, 1).Value = "源数据表中没有找到有效数据。"
            wsResult.Columns("A:C").AutoFit
            wsResult.Activate
            Exit Sub
        End If
    
        ' 遍历所有数据行 (假设第1行是标题,从第2行开始)
        For i = 2 To lastRow
            On Error Resume Next ' 防止类型转换错误
            deviceID = Trim(CStr(wsSource.Cells(i, "P").Value)) ' P列是设备号
            employeeName = Trim(CStr(wsSource.Cells(i, "A").Value)) ' A列是员工姓名
            On Error GoTo 0
    
            ' 跳过空设备号或空姓名的行
            If deviceID = "" Or employeeName = "" Then GoTo NextRow
    
            ' 如果字典中没有这个设备号,则添加一个新字典
            If Not dict.Exists(deviceID) Then
                dict.Add deviceID, CreateObject("Scripting.Dictionary")
            End If
    
            ' 如果该设备号的字典中没有这个员工,则添加并初始化计数为1
            If Not dict(deviceID).Exists(employeeName) Then
                dict(deviceID).Add employeeName, 1
            Else
                ' 如果已存在,则计数加1
                dict(deviceID)(employeeName) = dict(deviceID)(employeeName) + 1
            End If
    
    NextRow:
        Next i
    
        ' 遍历字典,找出使用员工数 > 1 的设备
        For Each key In dict.Keys
            If dict(key).Count > 1 Then
                ' 输出到结果表
                wsResult.Cells(outputRow, 1).Value = key ' 设备号
                wsResult.Cells(outputRow, 2).Value = dict(key).Count ' 员工数量
    
                ' 将员工姓名和打卡次数集合连接成一个字符串
                nameList = ""
                For Each empKey In dict(key).Keys
                    nameList = nameList & empKey & "(" & dict(key)(empKey) & "次), "
                Next empKey
    
                ' 去掉最后一个逗号和空格
                If Len(nameList) > 0 Then
                    nameList = Left(nameList, Len(nameList) - 2)
                End If
    
                wsResult.Cells(outputRow, 3).Value = nameList ' 员工名单及打卡次数
                outputRow = outputRow + 1
            End If
        Next key
    
        ' 如果没有找到异常设备,提示用户
        If outputRow = 2 Then
            wsResult.Cells(2, 1).Value = "未发现一个设备对应多个员工的情况。"
        Else
            ' 对结果表进行排序(按员工数量降序)
            With wsResult
                If outputRow > 2 Then
                    .Range("A1:C" & outputRow - 1).Sort Key1:=.Range("B2"), Order1:=xlDescending, Header:=xlYes
                End If
            End With
        End If
    
        ' 自动调整列宽
        wsResult.Columns("A:C").AutoFit
        wsResult.Activate ' 切换到结果工作表
    
        MsgBox "分析完成!共找到 " & (outputRow - 2) & " 个异常设备。结果已输出到工作表【异常设备报告】。", vbInformation
    End Sub

  • 使用Excel VBA高效审计钉钉打卡记录,快速识别代打卡行为

    近期,我们在某项目的考勤核查中发现,存在员工通过他人手机登录钉钉进行虚假定位打卡的违规情况。经深入调查,该问题已得到证实。

    在处理相关违纪员工的同时,我们意识到集团拥有7000余名在职员工,此类作弊行为存在的风险较高。因此,决定对全部员工的原始打卡记录展开全面审计。

    image-20250828163228328

    每月7000名员工产生的打卡记录接近20万条,数据量庞大,人工核对几乎不可行。通过分析代打卡行为的业务逻辑,我们发现:如果单一设备编码(手机硬件标识)对应多个不同的员工账号,即可判定存在代打卡嫌疑。

    基于这一规律,开发了以下Excel VBA解决方案,实现快速、自动化的审计流程:

    Sub FindMultiUserDevices()
        ' 声明变量
        Dim wsSource As Worksheet, wsResult As Worksheet
        Dim dict As Object ' 用于存储设备号和对应的员工集合
        Dim lastRow As Long, i As Long
        Dim deviceID As String, employeeName As String
        Dim key As Variant, empKey As Variant
        Dim outputRow As Long
        Dim nameList As String
    
        ' 设置源数据工作表 (假设数据在原始记录)
        On Error Resume Next
        Set wsSource = ThisWorkbook.Worksheets("原始记录")
        On Error GoTo 0
    
        If wsSource Is Nothing Then
            MsgBox "找不到工作表 '原始记录',请修改代码中的工作表名称。", vbExclamation
            Exit Sub
        End If
    
        ' 创建或清空结果工作表
        Application.DisplayAlerts = False
        On Error Resume Next
        ThisWorkbook.Worksheets("异常设备报告").Delete
        On Error GoTo 0
        Application.DisplayAlerts = True
    
        Set wsResult = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
        wsResult.Name = "异常设备报告"
    
        ' 在结果表创建标题
        With wsResult
            .Range("A1").Value = "设备编号"
            .Range("B1").Value = "使用员工数量"
            .Range("C1").Value = "使用员工名单"
            .Range("A1:C1").Font.Bold = True
            .Columns("A:C").AutoFit
        End With
    
        outputRow = 2 ' 从第2行开始输出结果
    
        ' 创建字典对象来存储数据
        Set dict = CreateObject("Scripting.Dictionary")
    
        ' 找出源数据的最后一行 (使用P列确定行数)
        lastRow = wsSource.Cells(wsSource.Rows.Count, "P").End(xlUp).Row
    
        ' 检查是否有数据
        If lastRow < 2 Then
            wsResult.Cells(2, 1).Value = "源数据表中没有找到有效数据。"
            wsResult.Columns("A:C").AutoFit
            wsResult.Activate
            Exit Sub
        End If
    
        ' 遍历所有数据行 (假设第1行是标题,从第2行开始)
        For i = 2 To lastRow
            On Error Resume Next ' 防止类型转换错误
            deviceID = Trim(CStr(wsSource.Cells(i, "P").Value)) ' P列是设备号
            employeeName = Trim(CStr(wsSource.Cells(i, "A").Value)) ' A列是员工姓名
            On Error GoTo 0
    
            ' 跳过空设备号或空姓名的行
            If deviceID = "" Or employeeName = "" Then GoTo NextRow
    
            ' 如果字典中没有这个设备号,则添加一个新集合
            If Not dict.Exists(deviceID) Then
                dict.Add deviceID, CreateObject("Scripting.Dictionary")
            End If
    
            ' 将员工姓名添加到该设备号对应的集合中
            If Not dict(deviceID).Exists(employeeName) Then
                dict(deviceID).Add employeeName, Nothing
            End If
    
    NextRow:
        Next i
    
        ' 遍历字典,找出使用员工数 > 1 的设备
        For Each key In dict.Keys
            If dict(key).Count > 1 Then
                ' 输出到结果表
                wsResult.Cells(outputRow, 1).Value = key ' 设备号
                wsResult.Cells(outputRow, 2).Value = dict(key).Count ' 员工数量
    
                ' 将员工姓名集合连接成一个字符串,用逗号隔开
                nameList = ""
                For Each empKey In dict(key).Keys
                    nameList = nameList & empKey & ", "
                Next empKey
    
                ' 去掉最后一个逗号和空格
                If Len(nameList) > 0 Then
                    nameList = Left(nameList, Len(nameList) - 2)
                End If
    
                wsResult.Cells(outputRow, 3).Value = nameList ' 员工名单
                outputRow = outputRow + 1
            End If
        Next key
    
        ' 如果没有找到异常设备,提示用户
        If outputRow = 2 Then
            wsResult.Cells(2, 1).Value = "未发现一个设备对应多个员工的情况。"
        Else
            ' 对结果表进行排序(按员工数量降序)
            With wsResult
                If outputRow > 2 Then
                    .Range("A1:C" & outputRow - 1).Sort Key1:=.Range("B2"), Order1:=xlDescending, Header:=xlYes
                End If
            End With
        End If
    
        ' 自动调整列宽
        wsResult.Columns("A:C").AutoFit
        wsResult.Activate ' 切换到结果工作表
    
        MsgBox "分析完成!共找到 " & (outputRow - 2) & " 个异常设备。结果已输出到工作表【异常设备报告】。", vbInformation
    End Sub

    实际运行结果如下图:

    image-20250828163810601
  • WordPress文章发布热力图插件 – 以GitHub风格可视化内容活跃度

    WordPress文章发布热力图插件 – 以GitHub风格可视化内容活跃度

    GitHub release
    WordPress兼容版本

     

    image-20250409100151329

    核心功能亮点 ✨

    • GitHub同款视觉体验 – 完美复刻全球开发者熟悉的贡献图样式
    • 智能数据可视化 – 通过色彩层级直观呈现全年发文频率分布
    • 零配置快速部署 – 安装即用,自动抓取全站文章数据
    • 响应式设计 – 完美适配桌面/移动端浏览
    • 无依赖原生实现 – 纯PHP+CSS3开发,不依赖第三方库
    • 深度定制能力 – 支持颜色方案/时间范围/交互效果自定义

    功能特性 🚀

    1. 简约交互设计
      • 智能隐藏日期坐标(保留悬停提示)
      • 自适应周数排列算法
      • Hover动态显示精确日期与发文量
    2. 高效数据聚合
    3. 可视化配置项 配置维度说明默认值色彩梯度4级色彩过渡GitHub同款绿统计时间范围最近1年动态范围自动计算容器尺寸响应式百分比宽度100%

    快速上手指南 🛠️

    安装部署

    1. GitHub仓库下载最新版本
    2. 在WordPress后台:插件 → 安装插件 → 上传ZIP
    3. 激活后自动开始数据统计

    调用方式

    在文章/页面中:

    [post_heatmap]

    在主题模板中:

     <?php echo do_shortcode('[post_heatmap]'); ?>

    视觉定制

    修改assets/css/heatmap.css

    /* 四级颜色梯度配置 */
       .pah-heatmap-day[data-level="1"] { background: #9be9a8; }
       .pah-heatmap-day[data-level="2"] { background: #40c463; }
       .pah-heatmap-day[data-level="3"] { background: #30a14e; }
       .pah-heatmap-day[data-level="4"] { background: #216e39; }

    开发者支持 🤝

    欢迎通过以下方式参与项目:

    • 提交Issue报告问题
    • Fork仓库提交PR
    • Star⭐支持项目发展
    GitHub Repo stars

     


    • 技术架构:PHP7.4+ | WordPress REST API | CSS Grid布局
    • 数据安全:全站数据本地处理,无需外联请求
    • 性能影响:数据库查询优化,首次加载后缓存30天

    提示:热力图数据每日凌晨自动更新,如需立即刷新可清空站点缓存

  • Chatbox AI与腾讯云知识引擎原子能力结合使用DeepSeek

    Chatbox AI与腾讯云知识引擎原子能力结合使用DeepSeek

    Chatbox AI与腾讯云知识引擎原子能力结合使用DeepSeek

    Chatbox AI

    Chatbox AI 界面

    Chatbox AI 是一款多平台 AI 客户端应用和智能助手,支持多种先进的 AI 模型和 API。它兼容 Windows、MacOS、Android、iOS、Linux 和网页版,为用户提供便捷的智能交互体验。

    Chatbox AI 不仅提供丰富的付费功能,还允许用户通过下载客户端后进行自定义配置,使用 API 调用各种 AI 功能。值得注意的是,Chatbox AI 对自定义的 API 功能不收取额外费用,用户只需在对应的 AI 平台购买 API 使用额度即可。

    腾讯云『知识引擎原子能力』

    知识引擎原子能力大模型的对话 API 兼容 OpenAI 的接口规范,这意味着您可以直接使用 OpenAI 官方提供的 SDK 来调用大模型对话接口。您只需将 base_urlapi_key 替换为腾讯云的相关配置,无需对应用进行额外修改,即可无缝切换至腾讯云的大模型服务。

    配置信息:

    • base_url:https://api.lkeap.cloud.tencent.com/v1
    • api_key:请参考 API KEY 管理 获取

    接口完整路径:
    https://api.lkeap.cloud.tencent.com/v1/chat/completions

    已支持的模型

    DeepSeek-V3(model 参数值为 deepseek-v3

    • 模型特点: DeepSeek-V3 是一个 671B 参数的 MoE(Mixture of Experts)模型,在百科知识、数学推理等多项任务上表现出色。
    • 上下文长度: 支持 64K 上下文长度,最大支持 8K 输出长度。

    DeepSeek-R1(model 参数值为 deepseek-r1

    • 模型特点: DeepSeek-R1 同样是一个 671B 参数模型,采用强化学习训练,推理过程中包含大量反思和验证,思维链长度可达数万字。该模型在数学、代码及复杂逻辑推理任务上表现优异,并为用户提供完整的思考过程。
    • 上下文长度: 支持 64K 上下文长度,最大支持 8K 输出长度。

    [!CAUTION]
    限时免费通知:
    即日起至北京时间 2025 年 2 月 25 日 23:59:59,所有腾讯云用户均可免费使用 DeepSeek-V3 和 DeepSeek-R1 模型,单账号接口并发上限为 5。此后,模型将恢复至原价。

    注册腾讯云『知识引擎原子能力』

    1. 访问注册页面:
      点击 https://curl.qcloud.com/Qekavj1h 登录或注册腾讯云账号(支持微信扫码登录),并完成个人认证。
    2. 开通服务并创建 API KEY:
      开通『知识引擎原子能力』服务,并创建 API KEY。
      创建 API KEY
    3. 复制 API KEY:
      点击『查看 API KEY』并复制您的 API KEY。
      查看 API KEY

    配置 Chatbox AI

    1. 下载并安装 Chatbox AI:
      下载并安装 Chatbox AI 客户端后,点击『设置』。
      Chatbox AI 设置
    2. 添加自定义提供方:
      在『模型提供方』中选择『添加自定义提供方』。
      添加自定义提供方
    3. 配置 API 信息:
    • API 域名: https://api.lkeap.cloud.tencent.com/v1
    • 模型: 选择 deepseek-v3deepseek-r1(模型区别详见前文『已支持的模型』)
    1. 保存配置:
      完成配置后,保存设置即可在 2025 年 2 月 25 日 23:59:59 前免费调用腾讯云提供的 DeepSeek API。

    总结

    通过以上步骤,您可以轻松将 Chatbox AI 与腾讯云的 DeepSeek 大模型结合使用,享受强大的 AI 对话和推理能力。无论是百科知识、数学推理,还是复杂逻辑任务,DeepSeek 系列模型都能为您提供卓越的解决方案。抓住限时免费的机会,立即体验吧!

  • Mermaid图表示例

    Mermaid图表示例

    Mermaid图表示例

    ---
    title: 效果演示
    config:
      layout: elk
      look: handDrawn
      theme: neutral
      fontFamily: 霞鹜文楷
    ---
    flowchart LR
        classDef NodeStyle-1 fill:#2376b8,stroke:#333,stroke-width:2px
        classDef NodeStyle-2 fill:#126E82,stroke:#333,stroke-width:2px
      A[Start] --> B{Decision}
      B -->|Yes| C[Continue]
      B -->|No| D[Stop]
        class A,C NodeStyle-1
        class B NodeStyle-2

    效果演示:

    ---
    title: 效果演示
    config:
      layout: elk
      look: handDrawn
      theme: neutral
      fontFamily: 霞鹜文楷
    ---
    flowchart LR
        classDef NodeStyle-1 fill:#2376b8,stroke:#333,stroke-width:2px
        classDef NodeStyle-2 fill:#126E82,stroke:#333,stroke-width:2px
      A[Start] --> B{Decision}
      B -->|Yes| C[Continue]
      B -->|No| D[Stop]
        class A,C NodeStyle-1
        class B NodeStyle-2
    

  • 一个用于MediaWIki使用腾讯云COS文件预览的扩展

    一个用于MediaWIki使用腾讯云COS文件预览的扩展

    一个用于MediaWIki使用腾讯云COS文件预览的扩展

    image-20241121123042728
    image-20241121123056733

    示例页面:全国社平、最低工资标准及社保比例 – null (blog.guohao.asia/)

    使用说明

    安装

    1. 上传至extensions并解压;
    2. 在本地MediaWiki中搜索MediaWiki:Common.css,将以下CSS填入页面:
       .responsive-iframe {
           width: 100%; /* 宽度自适应 */
           height: 100vh; /* 高度设置为视窗高度 */
           border: none;
       }
    1. LocalSettings.php中加入以下代码启用扩展:
    wfLoadExtension('CosPreview');

    使用

    <cospreview id="cdn-1253443493" path="picgo/202411201059195.xlsx" region="ap-beijing" />

    Usage Instructions

    Installation

    1. Upload to the extensions directory and unzip;
    2. Search for MediaWiki:Common.css in your local MediaWiki, and add the following CSS to the page:
       .responsive-iframe {
           width: 100%; /* Full width responsiveness */
           height: 100vh; /* Height set to viewport height */
           border: none;
       }
    1. Add the following code to LocalSettings.php to enable the extension:
    wfLoadExtension('CosPreview');

    用法

    <cospreview id="cdn-1253443493" path="picgo/202411201059195.xlsx" region="ap-beijing" />

    显示效果:

    Document Preview

    https://wwoi.lanzoub.com/iyJZ72gihtmf
    密码:afo8

    CC-BY-NC-SA

    一个用于MediaWIki使用腾讯云COS文件预览的扩展 is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license.

  • 一个用于MediaWIki使用腾讯云COS文件预览的扩展

    一个用于MediaWIki使用腾讯云COS文件预览的扩展

    一个用于MediaWIki使用腾讯云COS文件预览的扩展

    image-20241121123042728
    image-20241121123056733

    示例页面:全国社平、最低工资标准及社保比例 – null (blog.guohao.asia/)

    使用说明

    安装

    1. 上传至extensions并解压;
    2. 在本地MediaWiki中搜索MediaWiki:Common.css,将以下CSS填入页面:
       .responsive-iframe {
           width: 100%; /* 宽度自适应 */
           height: 100vh; /* 高度设置为视窗高度 */
           border: none;
       }
    1. LocalSettings.php中加入以下代码启用扩展:
    wfLoadExtension('CosPreview');

    使用

    <cospreview id="cdn-1253443493" path="picgo/202411201059195.xlsx" region="ap-beijing" />

    Usage Instructions

    Installation

    1. Upload to the extensions directory and unzip;
    2. Search for MediaWiki:Common.css in your local MediaWiki, and add the following CSS to the page:
       .responsive-iframe {
           width: 100%; /* Full width responsiveness */
           height: 100vh; /* Height set to viewport height */
           border: none;
       }
    1. Add the following code to LocalSettings.php to enable the extension:
    wfLoadExtension('CosPreview');

    用法

    <cospreview id="cdn-1253443493" path="picgo/202411201059195.xlsx" region="ap-beijing" />

    显示效果:

    Document Preview

    https://wwoi.lanzoub.com/iyJZ72gihtmf
    密码:afo8

    CC-BY-NC-SA

    一个用于MediaWIki使用腾讯云COS文件预览的扩展 is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license.

  • MediaWiki配置文件分享

    MediaWiki配置文件分享

    MediaWiki配置文件分享

    MediaWiki的配置文件位于/path/mediawiki/LocalSettings.php

    以下是https://docs.guohao.asia/ 经脱敏的配置文件内容(修改配置前请务必做好备份)

    <?php
    # 防止直接通过网页访问
    if ( !defined( 'MEDIAWIKI' ) ) {
    	exit;
    }
    
    ## 基本设置
    $wgSitename = "null";  # 站点名称
    $wgMetaNamespace = "Null";  # 站点命名空间
    $wgScriptPath = "";  # 脚本路径
    $wgServer = "https://docs.guohao.asia";  # 服务器地址
    $wgResourceBasePath = $wgScriptPath;  # 静态资源路径
    $wgLogos = [
    	'1x' => "$wgResourceBasePath/resources/assets/logo.png",  # 站点logo
    	'icon' => "$wgResourceBasePath/resources/assets/logo.png",
    ];
    
    ## 用户和邮件设置
    $wgEnableEmail = true;  # 启用邮件功能
    $wgEnableUserEmail = true;  # 用户邮件通知
    $wgEmergencyContact = "";  # 紧急联系邮箱
    $wgPasswordSender = "x@xx.xxx";  # 密码发送者邮箱
    $wgEnotifUserTalk = false;  # 用户对话通知
    $wgEnotifWatchlist = false;  # 观察列表通知
    $wgEmailAuthentication = true;  # 启用邮件认证
    
    ## 数据库设置
    $wgDBtype = "mysql";  # 数据库类型
    $wgDBserver = "localhost";  # 数据库服务器
    $wgDBname = "xxxx";  # 数据库名称
    $wgDBuser = "xxxx";  # 数据库用户名
    $wgDBpassword = "xxxx";  # 数据库密码
    $wgDBprefix = "xxxx";  # 数据库表前缀
    $wgDBssl = false;  # 是否使用SSL
    $wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";  # 数据库表选项
    $wgSharedTables[] = "actor";  # 共享数据库表
    
    ## 缓存设置
    $wgMainCacheType = CACHE_MEMCACHED;  # 主缓存类型
    $wgParserCacheType = CACHE_MEMCACHED;  # 解析器缓存类型
    $wgMessageCacheType = CACHE_MEMCACHED;  # 消息缓存类型
    $wgMemCachedServers = array("127.0.0.1:11211");  # Memcached服务器地址
    
    ## 文件和上传设置
    $wgEnableUploads = true;  # 启用文件上传
    $wgUseImageMagick = true;  # 使用ImageMagick处理图片
    $wgImageMagickConvertCommand = "/usr/bin/convert";  # ImageMagick命令路径
    $wgUseInstantCommons = false;  # 是否使用即时共享图片
    
    ## 语言和时区设置
    $wgLanguageCode = "zh-cn";  # 语言代码
    $wgLocaltimezone = "PRC";  # 时区设置
    
    ## 安全和性能设置
    $wgSecretKey = "26abb9898bb4cb347aa8cc71bcxxxxxxxxxxxxxxxx9824f6078771c5d40b0cb44765cf8bbf";  # 安全密钥
    $wgAuthenticationTokenVersion = "1";  # 认证令牌版本
    $wgUpgradeKey = "d0ddxxxx07b2xxxx";  # 升级密钥
    
    ## 版权和皮肤设置
    $wgRightsPage = "";  # 版权页面
    $wgRightsUrl = "";  # 版权链接
    $wgRightsText = "";  # 版权文本
    $wgRightsIcon = "";  # 版权图标
    $wgDefaultSkin = "vector-2022";  # 默认皮肤
    wfLoadSkin( 'MinervaNeue' );  # 加载皮肤
    wfLoadSkin( 'MonoBook' );
    wfLoadSkin( 'Timeless' );
    wfLoadSkin( 'Vector' );
    
    ## 页脚和工具栏设置
    unset($wgFooterIcons['poweredby']);  # 去掉底部的Powered by
    $wgDefaultUserOptions['usebetatoolbar'] = 1;  # 启用测试工具栏
    
    ## 访问和内容设置
    $wgShowIPinHeader = false;  # 不在头部显示IP
    $wgAllowHttpsExternalImages = true;  # 允许外链HTTPS图片
    $wgAllowCopyUploads = true;  # 允许通过URL上传图片
    $wgAllowExternalImages = true;  # 允许外链图片
    $wgFileExtensions = array('png','gif','jpg','jpeg','doc','ppt','pptx','pdf','docx','xls','xlsx','webp','svg','mp4','mp3');  # 允许的文件扩展名
    $wgVerifyMimeType = false;  # 不验证MIME类型
    
    ## 钩子和脚本设置
    $wgHooks['BeforePageDisplay'][] = function( OutputPage &$out, Skin &$skin ) {
        // 添加Mermaid.js脚本
        $out->addScript( '<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.9.1/mermaid.min.js" integrity="sha512-6a80OTZVmEJhqYJUmYd5z8yHUCDlYnj6q9XwB/gKOEyNQV/Q8u+XeSG59a2ZKFEHGTYzgfOQKYEBtrZV7vBr+Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>' );
    
        // 添加Google AdSense脚本
        $out->addScript( '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-36xxxx78343xxxx0" crossorigin="anonymous"></script>' );
    
        // 添加统计代码
        $out->addScript( '<script type="text/javascript" src="//api.tongjiniao.com/c?_=7xxxx772xxxx819968" async></script>' );
    };
    
    ## 编辑和页面创建权限设置
    $wgGroupPermissions['*']['edit'] = false;  # 禁止未登录用户编辑
    $wgGroupPermissions['*']['createpage'] = false;  # 禁止未登录用户创建页面
    $wgGroupPermissions['sysop']['edit'] = true;  # 允许管理员编辑
    $wgGroupPermissions['sysop']['createpage'] = true;  # 允许管理员创建页面
    
    ## 移动和默认皮肤设置
    wfLoadSkin( 'Citizen' );  # 加载移动皮肤
    $wgDefaultMobileSkin = 'citizen';  # 默认移动皮肤
    
    ## HTML和内容安全策略设置
    $wgContentSecurityPolicy = "
        default-src 'self';
        img-src 'self' https://*;
        media-src 'self' https://www.guohao.asia https://blog.guohao.asia/ https://docs.guohao.asia;  
        script-src 'self';
        style-src 'self';
    ";
    $wgAllowIframeTag = true;  # 允许iframe标签
    $wgHTML5Video = true;  # 启用HTML5视频
    $wgRawHtml = true;  # 允许解析HTML
    
    ## 管理员权限设置
    $wgGroupPermissions['sysop']['deleterevision'] = true;  # 允许管理员删除修订记录
    $wgGroupPermissions['sysop']['deletelogentry'] = true;  # 允许管理员删除日志条目
    
    ## 邮件服务器设置
    $wgSMTP = [
        'host'      => 'smtp-relay.brevo.com',  # SMTP服务器地址
        'IDHost'    => 'smtp-relay.brevo.com',  # 通常是网站域名
        'localhost' => 'smtp-relay.brevo.com',  # 某些邮件服务器需要此参数
        'port'      => 587,  # 连接到SMTP服务器的端口
        'auth'      => true,  # 是否使用SMTP认证
        'username'  => 'xxxx8xxxx@smtp-brevo.com',  # SMTP认证用户名
        'password'  => 'xxxxMxxxxsxxxxpO'  # SMTP认证密码
    ];
    
    ## 未登录用户的缓存设置
    $wgUseFileCache = true;  # 启用文件缓存
    $wgFileCacheDirectory = "$IP/images/cache";  # 文件缓存目录
    $wgMainCacheType = CACHE_MEMCACHED;  # 主缓存类型
    $wgParserCacheType = CACHE_MEMCACHED;  # 解析器缓存类型
    $wgMessageCacheType = CACHE_MEMCACHED;  # 消息缓存类型
    $wgMemCachedServers = [ '127.0.0.1:11211' ];  # Memcached服务器地址
    $wgSessionsInObjectCache = true;  # 启用对象缓存会话
    $wgSessionCacheType = CACHE_MEMCACHED;  # 会话缓存类型
    
    ## 扩展设置
    wfLoadExtension( 'SyntaxHighlight_GeSHi' );  # 语法高亮扩展
    wfLoadExtension( 'ImageMap' );  # 图片地图扩展
    wfLoadExtension( 'HeaderFooter' );  # 页眉页脚扩展
    wfLoadExtension( 'EmbedVideo' );  # 视频嵌入扩展
    wfLoadExtension( 'VisualEditor' );  # 可视化编辑器扩展
    wfLoadExtension( 'AdminLinks' );  # 管理链接扩展
    wfLoadExtension( 'Widgets' );  # 小部件扩展
    wfLoadExtension( 'Cite' );  # 引用扩展
    wfLoadExtension( 'ParserFunctions' );  # 解析器函数扩展
    wfLoadExtension( 'PageImages' );  # 页面图片扩展
    wfLoadExtension( 'Math' );  # 数学公式扩展
    wfLoadExtension( 'PdfHandler' );  # PDF处理扩展
    wfLoadExtension( 'ImportOfficeFiles' );  # 导入办公文件扩展
    wfLoadExtension( 'MultimediaViewer' );  # 多媒体查看器扩展
    wfLoadExtension( 'OATHAuth' );  # OATH认证扩展
    ?>
AI 助手