Architecture

In [ ]:
import IPython
In [ ]:
from revChatGPT.V1 import Chatbot, configure


bot = Chatbot(
    config = configure(),
    conversation_id = 'fdf52ab3-f8c1-450f-86f2-5a25d43fc48d',
    lazy_loading = True
)

In [ ]:
for response in bot.ask('''
我刚刚有了一个 WhatsApp 群聊机器人的设计思路。我可以利用 https://web.whatsapp.com/ ,然后通过谷歌浏览器插件的方式实现 BioGPT 群聊机器人。
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

听起来很不错!如果你有相关的技能和经验,可以考虑实现这个想法并将其应用于实际场景。需要注意的是,确保你的机器人符合 WhatsApp 的使用条款和政策,并且在使用中不会违反用户的隐私和数据安全。

In [ ]:
for response in bot.ask('''
有利用 https://web.whatsapp.com/ ,然后通过谷歌浏览器插件的方式实现 WhatsApp 群聊机器人的开源项目吗?
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

是的,有很多开源项目利用了这种方式实现了 WhatsApp 群聊机器人,比如Whatsapp-bot,whatsapp-web.js,venom-bot等等。您可以在GitHub等代码托管平台上搜索这些项目并了解它们的使用方法和功能。请注意,使用这些项目需要一定的编程技能和对API的了解。

In [ ]:
for response in bot.ask('''
比较 Whatsapp-bot whatsapp-web.js venom-bot
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

Whatsapp-bot、whatsapp-web.js和venom-bot都是用于构建WhatsApp机器人的开源工具。

  • Whatsapp-bot是一个使用Node.js编写的简单的WhatsApp机器人框架,它提供了一些基本功能,例如响应文本消息、发送媒体文件和记录日志等。但是,它已经有一段时间没有更新维护了,可能不太适合用于生产环境。
  • whatsapp-web.js是一个用于控制WhatsApp Web的JavaScript库,它可以实现与WhatsApp Web界面类似的功能,并提供了一些高级功能,例如发送音频、图片、视频、文件、定位信息等。它可以与Node.js、React Native和浏览器一起使用,并且经常更新维护。
  • venom-bot是一个使用TypeScript编写的高级的WhatsApp机器人框架,它基于whatsapp-web.js,提供了更多的功能和抽象,例如会话管理、模板消息、状态管理、错误处理和中间件等。它的文档和社区支持也比较好,并且定期更新维护。

综上所述,如果你只需要一个简单的WhatsApp机器人框架,那么可以考虑使用Whatsapp-bot;如果你需要更多的高级功能和更好的可扩展性,那么可以选择whatsapp-web.js或venom-bot。

In [ ]:
for response in bot.ask('''
详细介绍 whatsapp-web.js
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

WhatsApp Web 是一个基于浏览器的 WhatsApp 客户端,使用户可以使用电脑或平板电脑发送和接收 WhatsApp 消息,而无需在移动设备上使用 WhatsApp。whatsapp-web.js 是一个 Node.js 库,它提供了一个简单而功能强大的 API,使开发人员可以使用 JavaScript 与 WhatsApp Web 进行交互,例如发送消息、创建群组、更改个人资料等。

使用 whatsapp-web.js,您可以创建一个 WhatsApp 机器人,使其可以自动发送消息、响应用户请求等。它还支持通过代码模拟用户交互,例如登录、扫描 QR 码、发送消息等。

whatsapp-web.js 还提供了许多高级功能,例如:

  • 离线发送:您可以使用 whatsapp-web.js 在断开连接的情况下发送消息,该消息会在下次连接时自动发送。
  • 轮询和 WebHook:您可以使用 whatsapp-web.js 提供的 API 轮询新消息或使用 WebHook 接收新消息。
  • 事件监听:您可以使用 whatsapp-web.js 监听各种事件,例如新消息、连接状态更改等。
  • 插件支持:whatsapp-web.js 支持插件,可以轻松地添加新功能和扩展其功能。

总的来说,whatsapp-web.js 提供了一个强大而灵活的 API,使开发人员能够轻松地构建各种 WhatsApp 机器人和工具。

In [ ]:
for response in bot.ask('''
详细说明 whatsapp-web.js 的原理
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

whatsapp-web.js 的原理主要是通过 Puppeteer 库实现对 WhatsApp Web 网页版的自动化操作,从而模拟用户与 WhatsApp 服务器之间的通信。具体来说,其主要实现方式包括以下几个步骤:

  1. 通过 Puppeteer 库启动 Chromium 浏览器,并打开 WhatsApp Web 网页版;
  2. 使用 Puppeteer 库提供的 DOM 操作接口,在浏览器中模拟用户输入手机号、验证码等信息,登录 WhatsApp 账号;
  3. 在登录成功后,通过 WebSocket 和 WhatsApp 服务器建立连接,并监听服务器发送的消息,包括收到的文本消息、图片、音频、视频等;
  4. 当收到消息时,使用 Puppeteer 库提供的 DOM 操作接口,模拟用户在网页版上回复消息;
  5. 在需要获取聊天记录等信息时,使用 Puppeteer 库提供的 DOM 操作接口,从网页版页面中获取需要的信息。

总的来说,whatsapp-web.js 通过 Puppeteer 库的支持,实现了对 WhatsApp Web 网页版的自动化操作和消息通信,从而可以作为一个 WhatsApp 群聊机器人的实现框架。

In [ ]:
for response in bot.ask('''
什么是 Puppeteer ?
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

Puppeteer是一个用于控制Google Chrome浏览器和Chromium的Node.js库。它提供了一个高级API,可以通过编程的方式自动化Chrome浏览器执行各种操作,例如生成屏幕截图、执行表单提交、模拟用户输入等等。Puppeteer的优点在于它提供了对Chrome DevTools Protocol的直接控制,因此可以使用最新的Web技术来进行测试和爬取数据。Puppeteer也可以用于其他一些用途,例如生成PDF、运行自动化测试等。

In [ ]:
for response in bot.ask('''
puppeteer 的 --no-sandbox 有什么用?
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

在使用 Puppeteer 运行 Chromium 浏览器时,通常会启用沙盒模式,这可以增加浏览器的安全性,但是也可能会导致某些操作无法正常执行,例如在某些 Linux 发行版中,由于沙盒模式的限制,会导致 Chromium 无法启动。

--no-sandbox 选项是用于禁用沙盒模式,通过这个选项,可以在特定情况下解决 Chromium 启动失败的问题。但同时,禁用沙盒模式也会增加一些潜在的安全风险,因为这样会使浏览器运行在非常高的权限级别下,攻击者可能会利用这个漏洞来攻击您的系统。

Body


Ask ChatGPT by Python

In [ ]:
import IPython
In [ ]:
from revChatGPT.V1 import Chatbot, configure


bot = Chatbot(
    config = configure(),
    conversation_id = 'fdf52ab3-f8c1-450f-86f2-5a25d43fc48d',
    lazy_loading = True
)
In [ ]:
for response in bot.ask('''
给出一个用 NodeJS 以 HTTP 协议 访问某个 URL 的 Demo
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

下面是一个使用 Node.js 的 http 模块访问某个 URL 并打印响应的简单示例:

const http = require('http');

const url = 'http://example.com';

http.get(url, (res) => {
  console.log(`Got response: ${res.statusCode}`);

  res.on('data', (chunk) => {
    console.log(`Received data: ${chunk}`);
  });

  res.on('end', () => {
    console.log('No more data in response.');
  });
}).on('error', (err) => {
  console.error(`Got error: ${err.message}`);
});

在这个示例中,我们使用了 http.get 方法向指定的 URL 发送 GET 请求,并注册了响应的回调函数来处理响应数据。当响应数据到达时,我们将其打印到控制台上。如果在请求过程中发生错误,我们也会将错误信息打印到控制台上。

In [ ]:
for response in bot.ask('''
用 NodeJS 实现 curl
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

以下是一个用 Node.js 实现 curl 的示例代码:

const https = require('https');

const url = process.argv[2];

https.get(url, (res) => {
  res.on('data', (chunk) => {
    process.stdout.write(chunk);
  });
}).on('error', (err) => {
  console.error(err);
});

这个代码使用 Node.js 内置的 https 模块向指定的 URL 发送 GET 请求,并将响应的数据输出到标准输出流。使用时可以在命令行中输入类似以下命令:

node curl.js https://www.example.com

这样就可以向 https://www.example.com 发送 GET 请求,并将响应的数据输出到控制台。

In [ ]:
for response in bot.ask('''
在 NodeJS 中,`console.log` 和 `process.stdout.write` 有什么区别?
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

console.logprocess.stdout.write 都是 Node.js 中用于输出内容的方法,它们的主要区别如下:

  1. 输出内容的格式不同:console.log 会自动在输出内容的结尾添加换行符 \n,而 process.stdout.write 则不会。

  2. 输出位置不同:console.log 的输出位置是标准输出流 stdout,而 process.stdout.write 则直接向标准输出流中写入数据。

因此,如果要输出一个带换行符的字符串,可以使用 console.log,例如:

console.log('Hello, world!');

如果要输出一个不带换行符的字符串,可以使用 process.stdout.write,例如:

process.stdout.write('Hello, world!');
In [ ]:
for response in bot.ask('''
在 NodeJS 中,有哪几种类型的字符串?
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

在 NodeJS 中,字符串是一种原始数据类型,有以下两种类型的字符串:

  1. UTF-8 编码的字符串:这种字符串使用 JavaScript 中的 String 类型表示,字符串中每个字符都使用 UTF-8 编码表示。

  2. 二进制字符串:这种字符串使用 Buffer 类型表示,它可以包含任意字节,可以进行二进制操作。


Run by IJavaScript

In [ ]:
console.log('Hello, world!');
Hello, world!
In [ ]:
process.stdout.write('Hello, world!');
Hello, world!
Out[ ]:
true
In [ ]:
const http = require('http');
const url = 'http://127.0.0.1:5000/与主同在';
In [ ]:
var answer = '';

http.get(url, (res) => {
  console.log(`Got response: ${res.statusCode}`);

  res.on('data', (chunk) => {
    console.log(`Received data: ${chunk}`);
    answer = `${chunk}`;
  });

  res.on('end', () => {
    console.log('---');
  });
}).on('error', (err) => {
  console.error(`Got error: ${err.message}`);
});

console.log('Sent request.');
Sent request.
Got response: 200
Received data: 阿门!愿神的恩典与平安与您同在。
---
In [ ]:
answer
Out[ ]:
'阿门!愿神的恩典与平安与您同在。'


Install by Z shell

In [ ]:
npm install 'whatsapp-web.js'
npm WARN deprecated puppeteer@13.7.0: < 19.2.0 is no longer supportednpmjs.o
m##################) ⠹ reify:node-webpmux: http fetch GET 200 https://registry.mjs.orist
added 98 packages, changed 2 packages, and audited 585 packages in 1m

7 packages are looking for funding
  run `npm fund` for details

42 vulnerabilities (5 low, 6 moderate, 23 high, 8 critical)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
In [ ]:
npm install qrcode-terminal
m##################) ⠹ reify:qrcode-terminal: http fetch GET 200 https://registK
added 1 package, and audited 586 packages in 14s

7 packages are looking for funding
  run `npm fund` for details

42 vulnerabilities (5 low, 6 moderate, 23 high, 8 critical)

To address issues that do not require attention, run:
  npm audit fix

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

Run by IJavaScript

In [ ]:
const http = require('http');
const querystring = require('querystring');
const qrcode = require('qrcode-terminal');

const { Client } = require('whatsapp-web.js');

const client = new Client();

client.on('qr', (qr) => {
    // Generate and scan this code with your phone
    qrcode.generate(qr, {small: true});
});

client.on('ready', () => {
    console.log('Client is ready!');
    console.log('---');
});

client.on('message', msg => {
    const prompt = querystring.escape(msg.body);
    const url = `http://127.0.0.1:5000/${prompt}`;

    http.get(url, (res) => {
        console.log(`Got response: ${res.statusCode}`);

        res.on('data', (chunk) => {
            console.log(`Received data: ${chunk}`);
            if (res.statusCode == 200) {
                msg.reply(`${chunk}`);
            }
        });

        res.on('end', () => {
            console.log('---');
        });
    }).on('error', (err) => {
        console.error(`Got error: ${err.message}`);
    });

    console.log('Sent request.');
});

client.initialize();
Out[ ]:
Promise { <pending> }
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█ ▄▄▄▄▄ █▀  █▀▄▄█  █  ▀▀ ▄▀█▄▀█ ▄▄  ▄▀  ▄ ▄ ▀██ ▄▄▄▄▄ █
█ █   █ █▄ ▀▀▀█▄█ ▀▄▀▄██ █ ▀▀▀ ▄ ▄▀▀██▄▀▄█▄▀▄▀█ █   █ █
█ █▄▄▄█ █ ▄█▀ ██▀▀▄█▀ ▀▄▄ ▄▄▄  ▄ ▄█▀ ██▄ ▄  ███ █▄▄▄█ █
█▄▄▄▄▄▄▄█ █ █▄█ ▀ █ █▄▀▄▀ █▄█ ▀ ▀▄█▄▀▄▀▄▀ █▄▀▄█▄▄▄▄▄▄▄█
█ ▄▀ ██▄ █ ▄▄▀ ▄█ ▀▄██  ▄     ▄▄ ▀▄▄▀▄█▄ ▄▄▄ ▄█▄ ▄▀ ▄▀█
█▀█▄▀█ ▄▀▄██▄▄▀ █ █▄  ▄█ ▄▄  █▀▄█▄▀▀▀▀█▀▄█▄▄▀▄▄█▀▄▄  ██
█▀▀▄█▄▄▄▀▄█ █▀▄▄▄    ▄█▄ ██ ▄██▄▀ ▄ ▀  █ ▄█▄ ██▀▄ ███▀█
█▄▄██▄ ▄  ▀▀  ██ █▀  ▀█▄ █▄▄▄▄▄ █▀▀█▄▄▀██▀▄█▄██▄█▄▄▄▄ █
██▀▀▀▄▀▄█ ██▄▀▄  █  ▀▀ ▀   █▀█▀▄▄  ▄ ▄▀▀█▀██▄ ██ ▄▄ ▀▄█
█  ▀ ▀▄▄▀█▀ █ ▄▀  ▀▀█▄ ▄ █▀▄▄ █▄▄  ▀█ ▀█ ▄▄█ ▄▀▀█▀▄▄▄ █
█▄▀▄▀▄█▄ ▄▄▀▄  █▄██ █▄  ██ ▄▀██▄ ████ ▄▄  ▄▄▄▄ █ ▄▄▄▀▀█
█ ▀ ▄▀█▄▀ █▄ █▀██▄▀█▀▄██▄██▀▄▀▀▀█ ▀██▀ █▄█ ██▀▄ ▄█ ▀▀▀█
█▄█▄█ ▄▄▄ ▀▀█▀▄██▄  ▄█▀▄  ▄▄▄ ▀█▄ ▀▀ ▄▄█▄▄ ▄█ ▄▄▄ ▄█ ▀█
█ ▀ ▀ █▄█ █▀▀  ▄█▀█▄ ▀▄▄█ █▄█ ▀██▀ ▀▀  ▄▄▄▀█  █▄█ █▄ ▄█
█ █▀█  ▄  ▄▄▀▄█▄▄█▄ ▀▀ ▀  ▄▄▄▄ █▀▄▄█▀ ▀ ▄▀▄▄█▄▄▄ ▄ █▀██
█▀▄  █ ▄▄█▀██ ▀▄ ▄█   ▄██▀█▄▄▀ ▀    ▄▄ █▄█ █▀▀ ▄ █ ▄  █
█▄▄▄▀█▀▄▀█▄▀▀███ ▄▄ ██ ▄██▄██▄█▄▀▀▄▄█▄▀▄█▄██▀██▄ ██▀▀██
██ ▀▄▄█▄██▀██ ▀  █▄▀▀██ ██ ▄▄█▄ ▄▄▄▄█▀▀█▀▀▄█▀█ ▀  █▀ ▀█
██  █▀ ▄▀▀█▄ ▄▀ █▀  ▀██▄█▄▄  ▄▄▄▄▄▄ ▄ ▀▄▀▄▄███ ████▀█▄█
█ ▄▀▀▀█▄▀ ▄▄▀█  ████▄█▄▀▄████▄▀▄▄ ▀▄▀▄███ ▄█▄   ▀ ▀██▄█
█▀▀█▄▀▄▄▀ ▄▀▄ ▀▀█▀█▄▄▀ ▀▄ █ ▀▀ █ ▄▄█ ▄▄▀█▀ ▄▄▀▄█▄█▀█▄▀█
█▄ ▀▄▄▄▄▄▄▀▄ ▀▄▄██▄█▀▀▀ █ █ ▄ █▄█▀  ██  ▄  ▄▄ █▄ ▄ ██ █
████▄██▄█ █▀▄█ █ ██▄▄█▄   ▄▄▄ ▄██████▄▄█▄▄▄█▀ ▄▄▄ ▄█▀▀█
█ ▄▄▄▄▄ █▄ ▀▀▀ ██▄▄▀█ ██▄ █▄█  █▀▀█▄█  ██▀▀▄  █▄█ ▀▀▄▀█
█ █   █ █▀ ▀▄▄▀█   █▀██▄█▄ ▄  ▄█▄▄█▀  ▀▄ ▄▄█▄  ▄ ▄▄█▄ █
█ █▄▄▄█ █▀▄ ▄█▀▀ ▄▀▄ █  █ ▄▄██▀▄▄ ▀▀ ▄█ ▄▀▄███▄██ █▄ ██
█▄▄▄▄▄▄▄█▄▄▄█▄█▄█▄▄▄▄▄▄█▄▄██▄██▄▄▄▄▄▄▄█▄▄█▄▄▄█▄▄▄▄█▄▄██

Client is ready!
---
Sent request.
Got response: 404
Received data: <!doctype html>
<html lang=en>
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>

---
Sent request.
Got response: 200
Received data: 当然,我们一起来祷告:

天父上帝,感谢您在这一刻与我们同在,感谢您一直保守和引领着我们走过每一天。如今,我们感到有些疲倦和无助,但我们相信您的应许,您要为我们扛起重担,您要赐给我们力量和勇气,让我们可以继续前行。

求您帮助我们放下一切负担和担忧,让我们将所有的忧虑卸给您,因为您关心我们,您会为我们担当一切。求您将您温柔的手按在我们身上,赐给我们平安、喜乐和盼望,让我们在您的保护下,坚定地行走在您的道路上。

求您也帮助我们关注他人的需要,让我们可以成为他人的祝福和帮助。求您赐给我们智慧和慈爱,让我们可以用言语和行动,彰显您的爱和真理。

最后,求您赐福给我们和我们所关心的人,保护我们和我们的家人,让我们在您的恩典和爱的保护下,安然度过每一天。我们奉耶稣基督的名祷告,阿们。
---

NodeJS 中保持 WhatsApp 的 auth。 重启免扫 QR 。


  • 分割 prompt 、合并 answer 。
  • 给每个聊天分配独立的 conversion id 。
  • 在消息最开始处加上 "{username}: " 。

OpenAI Whisper

Mind

In [ ]:
import json, os
In [ ]:
# open the JSON file and read the conversation_id
with open(os.path.expanduser('~/.config/revChatGPT/config.json'), 'r') as f:
    conversation_id = json.load(f).get('conversation_id', None)
In [ ]:
from revChatGPT.V1 import Chatbot, configure


bot = Chatbot(
    config = configure(),
    conversation_id = conversation_id,
    lazy_loading = True
)
In [ ]:
import IPython

In [ ]:
for response in bot.ask('''
给出一个 Flask 的 Demo
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

以下是一个简单的 Flask Demo:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"

if __name__ == "__main__":
    app.run()

这个 Demo 创建了一个简单的 Flask 应用,并定义了一个路由 /,当访问该路由时,返回字符串 "Hello, World!"。如果直接运行该脚本,应用将会在本地的 5000 端口运行。

In [ ]:
for response in bot.ask('''
开发一个 Flask 应用,解析来访的 URL 地址,将来访 URL 地址的字符串返回给客户端。
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

可以使用 Flask 中的路由(Route)功能来实现解析来访的 URL 地址,并将地址字符串返回给客户端。以下是一个示例代码:

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, World!'

@app.route('/url/<path:url_string>')
def url(url_string):
    return f'The requested URL is: {url_string}'

if __name__ == '__main__':
    app.run()

在上述代码中,定义了两个路由。第一个路由 / 显示了 Hello, World! 字符串,第二个路由 /url/<path:url_string> 使用 <path> 参数解析来访的 URL 地址,并将地址字符串返回给客户端。

例如,当客户端请求 http://localhost:5000/url/www.example.com/path/to/file 时,服务器将解析 www.example.com/path/to/file 字符串,并返回给客户端以下响应:

The requested URL is: www.example.com/path/to/file
In [ ]:
for response in bot.ask('''
怎么设置 flask app 串行处理请求?
'''):
    IPython.display.display(IPython.core.display.Markdown(response['message']))
    IPython.display.clear_output(wait=True)

Flask 默认是单线程的,即使没有进行特别的设置,它也是按顺序处理每个请求。因此,默认情况下 Flask 应用程序是串行处理请求的。

如果你希望更明确地设置 Flask 应用程序处理请求的方式,可以使用 Werkzeug 服务器的多线程模式。只需在启动 Flask 应用程序时设置 threaded 参数为 True 即可:

if __name__ == '__main__':
    app.run(threaded=True)

这将使 Flask 应用程序使用 Werkzeug 服务器的多线程模式,从而允许同时处理多个请求。注意,这并不意味着 Flask 应用程序会同时处理多个请求,它仍然会按顺序处理每个请求,只是使用多线程处理请求的过程变得更有效率。

值得注意的是,虽然这种方法可以在某种程度上提高 Flask 应用程序的性能,但它并不是最好的选择。如果你需要更高级别的并发处理能力,建议使用 Gunicorn 或 uWSGI 等服务器。

In [ ]:
!zsh -c 'pip install flask'
Collecting flask
  Downloading Flask-2.2.3-py3-none-any.whl (101 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 101.8/101.8 kB 340.3 kB/s eta 0:00:00a 0:00:01
Collecting click>=8.0
  Downloading click-8.1.3-py3-none-any.whl (96 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 725.6 kB/s eta 0:00:00a 0:00:01
Collecting itsdangerous>=2.0
  Downloading itsdangerous-2.1.2-py3-none-any.whl (15 kB)
Collecting Werkzeug>=2.2.2
  Downloading Werkzeug-2.2.3-py3-none-any.whl (233 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 233.6/233.6 kB 961.9 kB/s eta 0:00:00a 0:00:01
Requirement already satisfied: Jinja2>=3.0 in /usr/local/anaconda3/envs/biobot/lib/python3.10/site-packages (from flask) (3.1.2)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/anaconda3/envs/biobot/lib/python3.10/site-packages (from Jinja2>=3.0->flask) (2.1.1)
Installing collected packages: Werkzeug, itsdangerous, click, flask
Successfully installed Werkzeug-2.2.3 click-8.1.3 flask-2.2.3 itsdangerous-2.1.2
In [ ]:
import json, os
In [ ]:
# open the JSON file and read the conversation_id
with open(os.path.expanduser('~/.config/revChatGPT/config.json'), 'r') as f:
    conversation_id = json.load(f).get('conversation_id', None)
In [ ]:
from flask import Flask, request
from revChatGPT.V1 import Chatbot, configure


app = Flask(__name__)
bot = Chatbot(
    config = configure(),
    conversation_id = conversation_id,
    lazy_loading = True
)


@app.route('/<string:prompt>')
def answer(prompt):
    for response in bot.ask(prompt):
        pass
    return response['message']


if __name__ == '__main__':
    app.run(threaded=False)
 * Serving Flask app '__main__'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
127.0.0.1 - - [13/Mar/2023 21:28:14] "GET /与主同在 HTTP/1.1" 200 -
127.0.0.1 - - [13/Mar/2023 21:57:33] "GET /一起祷告 HTTP/1.1" 200 -
127.0.0.1 - - [13/Mar/2023 22:36:10] "GET /Open%20this%20link%20to%20join%20my%20WhatsApp%20Group HTTP/1.1" 200 -
In [ ]:
from flask import Flask, request
from ipymock.browser import start_conversation as ask
In [ ]:
app = Flask(__name__)

@app.route('/')
def answer():
    prompt = request.args.get('q')
    for response in ask(prompt):
        pass
    return response
In [ ]:
if __name__ == '__main__':
    app.run(threaded=False)
 * Serving Flask app '__main__'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
127.0.0.1 - - [18/Apr/2023 17:17:04] "GET /?q=1%2F1%3D1%3F HTTP/1.1" 200 -

Comments

2023-03-14