【用AI写周报,“卷死”同事】打造一款自动生成周报的微信小程序

文章目录

  • 前言
  • 步骤1:创建一个ChatGPT账号
  • 步骤2:创建一个小程序>微信小程序并配置API。
  • 步骤3:在微信开发者工具中创建一个新的小程序>微信小程序项目
  • 步骤4:创建ChatGPT API云函数
  • 步骤5:创建UI界面
  • 步骤6:创建发送邮件的云函数
  • 步骤7:部署并测试
  • 总结
  • 写在最后

在这里插入图片描述

前言

在这里插入图片描述

作为一名打工人,每天提交日报、每周周报,成为公司考核的要求。可是作为一名程序猿,不知道大家有没有像我一样,下班之后都要绞尽脑汁去思考如何提交一份工作内容丰富的日报?而且想写出一份内容丰富、情文并茂的日报都会消耗大量时间。

今天就带大家基于OpenAI开发一个生成周报的小程序>微信小程序,只需通过AI就可以帮助大家在公司卷出新高度。

下面是实现小程序>微信小程序接入ChatGPT,根据前端、后端、设计师、产品、架构师等职位实现一个周报生成器的具体步骤和示例代码。

步骤1:创建一个ChatGPT账号

创建一个ChatGPT账号并获取API密钥。您需要访问ChatGPT官网(https://www.openai.com/)注册一个账号,并在控制台中创建一个API密钥。

步骤2:创建一个小程序>微信小程序并配置API。

您需要访问微信公众平台(https://mp.weixin.qq.com/)创建一个小程序,并在小程序后台中配置ChatGPT API密钥。具体步骤如下:

小程序后台中打开开发设置,将服务端口配置为443,并在“服务器域名”中添加“api.openai.com”和“api.chat-api.com”

步骤3:在微信开发者工具中创建一个新的小程序>微信小程序项目

首先,您需要在微信开发者工具中创建一个新的小程序>微信小程序项目。然后,您可以使用微信开发者工具中的代码编辑器创建UI界面和逻辑。

步骤4:创建ChatGPT API云函数

小程序>微信小程序中,您可以使用云开发来创建云函数。首先,您需要打开微信开发者工具中的云开发控制台,然后单击“函数服务”>“新建函数”。接下来,您可以选择Node.js作为运行环境,并输入以下代码:

const axios = require('axios');

exports.main = async (event) => {
  const { text, model } = event;

  const headers = {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`,
  };

  const data = {
    'model': model,
    'prompt': text,
    'temperature': 0.5,
    'max_tokens': 256,
    'stop': ['\n'],
  };

  const response = await axios.post('https://api.openai.com/v1/engines/davinci-codex/completions', data, { headers });

  return response.data.choices[0].text.trim();
};

这是调用ChatGPT API的云函数代码。请确保将OPENAI_API_KEY替换为您自己的API密钥。

步骤5:创建UI界面

小程序>微信小程序中,您可以使用WXML、WXSS和JavaScript来创建UI界面。以下是一个简单的示例,用于在前端页面中选择职位和输入工作内容:

wxml

<view class="container">
  <view class="title">请选择您的职位:</view>
  <view class="position-buttons">
    <button wx:for="{{positions}}" wx:key="{{item}}" bindtap="selectPosition">{{item}}</button>
  </view>
  <view wx:if="{{selectedPosition}}">
    <view class="title">本周工作:</view>
    <textarea bindinput="onWorkInput"></textarea>
    <view class="title">下周计划:</view>
    <textarea bindinput="onPlanInput"></textarea>
    <view class="title">问题与困难:</view>
    <textarea bindinput="onProblemInput"></textarea>
    <view class="title">周报预览:</view>
    <view class="report">{{report}}</view>
    <button class="send-button" bindtap="sendReport">发送到邮箱</button>
  </view>
</view>

javascript

Page({
  data: {
    positions: ['前端工程师', '后端工程师', '设计师', '产品经理', '测试工程师', '架构师'],
    selectedPosition: '',
    workContent: '',
    planContent: '',
    problemContent: '',
    report: '',
  },
  selectPosition(e) {
    this.setData({ selectedPosition: e.currentTarget.dataset.position });
  },
  onWorkInput(e) {
    this.setData({ workContent: e.detail.value });
    this.generateReport();
  },
  onPlanInput(e) {
    this.setData({ planContent: e.detail.value });
    this.generateReport();
  },
  onProblemInput(e) {
    this.setData({ problemContent: e.detail.value });
    this.generateReport();
  },
  generateReport() {
    const { selectedPosition, workContent, planContent, problemContent } = this.data;
    if (!selectedPosition || !workContent || !planContent || !problemContent) return;
    wx.cloud.callFunction({
      name: 'chatgpt',
      data: {
        text: `${selectedPosition}本周工作:${workContent}\n下周计划:${planContent}\n问题与困难:${problemContent}`,
        model: 'davinci-codex-002',
      },
      success: (res) => {
        this.setData({ report: res.result });
      },
      fail: console.error,
    });
  },
  sendReport() {
    const { report } = this.data;
    if (!report) return;
    wx.cloud.callFunction({
      name: 'sendReport',
      data: {
        report,
      },
      success: () => {
        wx.showToast({
          title: '发送成功',
          icon: 'success',
        });
      },
      fail: console.error,
    });
  },
});

步骤6:创建发送邮件的云函数

您可以使用第三方库如nodemailer来创建一个发送邮件的云函数。以下是一个简单的示例:

const nodemailer = require('nodemailer');

exports.main = async (event) => {
  const { report } = event;

  const transporter = nodemailer.createTransport({
    host: 'smtp.ethereal.email',
    port: 587,
    auth: {
      user: process.env.EMAIL_USER,
      pass: process.env.EMAIL_PASSWORD,
    },
  });

  const info = await transporter.sendMail({
    from: 'Weekly Report Generator <noreply@example.com>',
    to: process.env.EMAIL_TO,
    subject: 'Weekly Report',
    text: report,
  });

  return info.messageId;
};

请确保将EMAIL_USER、EMAIL_PASSWORD和EMAIL_TO替换为您自己的信息。

步骤7:部署并测试

您可以在微信开发者工具中使用“上传并部署”功能来部署您的小程序

自测:选择您的职位、填写工作内容、下周计划和问题与困难,然后点击“生成周报”按钮,等待程序返回生成的周报。如果一切正常,您将看到一个包含周报的文本框。然后,您可以点击“发送周报”按钮,程序将使用您的邮箱发送周报。

总结

代码实现中还有一些细节需要注意,例如错误处理和数据验证。您可以根据您的需求进行修改和完善。

这是一个比较完整的实现,希望对您有所帮助!

写在最后

✨原创不易,希望各位大佬多多支持。

👍点赞,你的认可是我创作的动力。

⭐️收藏,感谢你对本文的喜欢。

✏️评论,你的反馈是我进步的财富。


http://www.niftyadmin.cn/n/218867.html

相关文章

中国人工智能领军企业飞瞳引擎集装箱识别云服务4千企业用户,集装箱箱号识别API免费,小程序拍照识别或API集成中国人工智能企业

中国人工智能领军企业飞瞳引擎集装箱识别云服务4千企业用户&#xff0c;集装箱箱号识别API免费&#xff0c;小程序拍照识别或API集成二次开发全球港航人工智能/集装箱人工智能领军者 CIMCAI完成全球250万次人工智能验箱&#xff0c;上亿箱信息识别&#xff0c;生产环境累计运行…

如何面对游戏工业化时代的到来?资产管理的整体解决方案

“游戏工业化”、“游戏工业管线建立”、“大规模生产”—— 这些都是近几年在游戏研发行业越来越常听到的用词。 游戏工业化&#xff0c;是否意味着未来游戏产业会像生产流水线一样&#xff0c;游戏从业者在线上的不同节点分工合作&#xff0c;进行重复劳动&#xff1f;实际上…

文心一言 VS chatgpt (8)-- 算法导论2.3 5~6题

五、回顾查找问题(参见练习 2.1-3)&#xff0c;注意到&#xff0c;如果序列 A 已排好序&#xff0c;就可以将该序列的中点与v进行比较。根据比较的结果&#xff0c;原序列中有一半就可以不用再做进一步的考虑了。二分查找算法重复这个过程&#xff0c;每次都将序列剩余部分的规…

node版本管理之n和nvm

n和nvm区别 在 node 的版本管理工具中&#xff0c;nvm 自然声名远扬&#xff0c;然而我们也不能忘了来自 TJ 的 n。这两种&#xff0c;是目前最主流的方案。 关于这两个工具如何安装和使用&#xff0c;这里不再多说&#xff0c;请见它们各自的主页&#xff1a; creationix/n…

企业工程项目管理系统+spring cloud 系统管理+java 系统设置+二次开发

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

STL源码剖析阅读笔记——序列式容器stack

文章目录前言一、stack概述二、stack定义完整列表三、以list作为stack的底层容器前言 由于stack系以底部容器完成其所有工作&#xff0c;而具有这种"修改某物接口&#xff0c;形成另一种风貌"之性质者&#xff0c;称为adapter&#xff08;配接器&#xff09;。因此&…

IDEA虚拟机参数配置【自我总结】

idea内存溢出问题 最近自己在跑一个大一点的微服务项目时候,发生了这样的一个现象,就是启动idea的时候,首先发现电脑的CPU小风扇急速的飞转,电脑的运行内存也快要飙升到100%了,而且最重要的是光是加载项目就加载了几分钟啊(我当时就炸锅锅)像下图一样,一直加载一直加载 想了想,…

Java 管道 (学习代码)

目录 上代码&#xff1a; 输出&#xff1a; 执行流程可以总结如下&#xff1a; 上代码&#xff1a; package cn.net.cdsz.ccb.test;import java.io.IOException; import java.io.PipedReader; import java.io.PipedWriter;public class test {static class ReaderThread imp…