重构产生问题和回答的方式 电报防广告机器人 telegram antispam bot
上一期我们实现了防广告机器人的基本框架
如果我们想实现丰富的 问题-答案 生成方式, 怎么做呢?
看一下目前的代码.
是生成了 问题-答案 后, 保存起来, 然后新成员再回答问题, 并检查答案.那么, 我们来做这样一件事.
在一个python文件 main.py 的目录下, 有一个 pset 目录.pset 目录下有多份 .py 文件.这些 .py 文件中, 都至少包含1个函数. buildQAbuildQA 返回2个字符串, 一个是 question, 一个是 correct_answer我要在 main.py 中随机调用 pset 目录下的一个 .py 文件中的 buildQA 函数
把这段文字丢给 M$ copilot (或者你手边的任意一个GPT), 很容易就得到答案.
把修改方案应用到项目中.
主 py 文件中. 增加这样一个函数
def get_random_module():# 找出 pset 目录下的所有 .py 文件(排除 __init__.py)files = [f[:-3] for f in os.listdir("pset")if f.endswith(".py") and f != "__init__.py"]# 随机选择一个chosen = random.choice(files)# 动态导入module = importlib.import_module(f"pset.{chosen}")return module
再把原来生成 问题-答案的地方改成这样
# 生成验证问题和答案mod = get_random_module()question, correct_answer = mod.buildQA()
然后在 pset 目录下, 新建一个 add.py 文件. 内容如下:
import randomdef buildQA():num1 = random.randint(1, 10)num2 = random.randint(1, 10)question = f"{num1} + {num2}"correct_answer = num1 + num2return question, correct_answer
你看, 是不是很简单? 修改的代码量 才 25行(含注释和空行)
同样的方式, pset 目录下多建几个文件, 实现不同的 问题-答案.
如, youtube.py
def buildQA():question = '我的Youtube频道url是什么?'correct_answer = 'https://www.youtube.com/@crazypeace'return question, correct_answer
最后, 调试的过程中, 解决一些上一个版本中的, 比如 HTML 格式改成 Markdown 格式, 整数转换为字符串之类的小问题.
最终效果
Github
* 考虑到后续还会有几期更新. 所以本期的代码也复制了一份 tg-join-group-exam-bot2.py 在项目里.
部署方法见项目 readme
目前项目的好处是, 使用者如果看不懂200多行的主程序文件, 也没关系, 可以通过一个简单的4行 .py 文件 定义适合自己的 问题-答案.
现在除了算术问题, 其它 问题-答案 还比较死板. 后续我们再想一些灵活的方案.
欢迎关注我的博客
评论
发表评论