本文编写于 600 天前,最后修改于 600 天前,其中某些信息可能已经过时。

typecho添加AI摘要功能以及我的二改博客功能

typecho添加AI摘要功能

众所周知GPT目前已经覆盖到了方方面面,博客作为大段落的文字,如果写的过多,反而没有重点,不如用一段摘要来概括他,然后选择合适的部分进行阅读,typecho的AIContentSummary项目便应运而生。

它可以在博主发布博文的时候自动调用ai接口,生成ai摘要来提供简要概括

但是AIContentSummary有个缺点就是它是将生成的摘要放在了文章简介当中,如果正文页面没有这个简介的显示则不会显示在正文中,只会放在首页目录页的文章摘要当中,非常不方便,于是乎想到了二次开发

二次开发实现的效果

通过AIContentSummary+easyTyper.js+typecho标签调用实现在正文页首页通过打字机的形式,展示出当前文章的AI摘要

AIContentSummery

github地址如下Rockytkg/AIContentSummary: AIContentSummary 是一个用于通过调用AI接口,根据文章内容生成摘要的 Typecho 插件 (github.com)

然后去国内数一数二的GPT:KimiAI页面自己去申请API账号,新账号会给15元免费不会过期的使用额度,基本上够用了,kimiai的api和chatgpt几乎一致,可以直接无缝调用,API申请地址Moonshot AI - 开放平台

然后配置完毕后,每次提交博文的时候就会去调用并生成ai摘要,要注意的是在保存文章时,请不要刷新网页。因为提交文章时会调用API接口等待返回,刷新网页可能导致摘要生成失败。

调用生成内容

在对应的页面位置我这里是post.php,添加如下php代码

AI摘要:
<?php 
  $content = $this->fields->content;
  if (!isset($content)) {
    echo "还没有生成摘要!Ciallo~ (∠・ω<)⌒☆";
  } else {
    echo $content;
  }
?>'

要注意$this->fields->content是不输出摘要的,如果是$this->fields->content()加上了括号的这个,会直接带一个print效果,会直接输出

加上打字机效果

用过gpt的都知道,gpt是慢慢说话的,加上打字机效果会有比较好的交互作用

这里找到一个easyTyper.js供使用easy-typer-js: 功能十分强大打字机插件,兼容原生JS和MVVM类框架(Vue,React,angular),随心所欲的输出任何你想输出的内容。 (gitee.com)

先引入,之后在post.php调用即可,我这里是输出到一个id叫abstract的div里,可以参考

<script src="<?php Utils::indexTheme('assets/js/easyTyper.min.js'); ?>"></script>
<script>
var obj = {
    output: '', // 输出内容  使用MVVM框架时可以直接使用
    type: 'normal',
    isEnd: false,
    speed: 15, //数值越小越快
    backSpeed: 40,
    sleep: 3000,
    singleBack: false,
    sentencePause: false
  }
  var content = ['AI摘要:<?php 
                    $content = $this->fields->content;
                    if (!isset($content)) {
                        echo "还没有生成摘要!Ciallo~ (∠・ω<)⌒☆";
                    } else {
                        echo $content;
                    }
                ?>']
  var typing = new EasyTyper(obj, content, ()=>{
    // 此回调结束了easyTyper的生命周期
    console.log('结束了,我的使命!')
    typing.close()
  }, (output, instance) => {
    // 钩子函数,每一帧的数据获取和实例EasyTyper的获取
    console.log(output)
    document.getElementById('abstract').innerHTML = `${output}`
  })
</script>

存在的BUG

由于是采用了pjax的无缝刷新的方式,所以在打字机还没打字结束时就切到其他页面就会报错,因为找不到id=abstract这个div了,如果此时再进入某个页面,就会跟这个页面自身的abstract打架,页面会不停抖动。

解决方法1. 调高打字机输出速度

解决方法2. 在跳出页面的时候结束打字机进程,但我懒得弄

主题魔改目录

我要记录一下miracle这个主题到底我自己修改了哪些东西,以便之后升级的时候还能改过来

  1. gravatar改crvartar

  2. 代码框改成mac主题样式的

  3. 添加开往以及upyun的head和footer标签

  4. post添加了这个aicomment

  5. 上下文插件在post页面添加内容
<div class="post-share" style="border-bottom:none;margin-bottom:-10px;">
    <div class="nextprev" style="margin-bottom:20px;">
        上一篇:<?php @CategoryNext_Plugin::thePrev('%s', '没有了', array(), $this); ?>
    </div>
    <div class="nextprev">
        下一篇:<?php @CategoryNext_Plugin::theNext('%s', '没有了', array(), $this); ?>
    </div>
</div>