用Python基于Google Bard做一个交互式的聊天机器人

之前已经通过浏览器试过了 Google Bard ,更多细节请看: Try out Google Bard, Will Google Bard beat the ChatGPT?.

现在我们想实现自动化,所以我用Python做一个交互式的聊天机器人。

获取Session ID

通过浏览器先拿到SessionID,它是一个cookie,名为 __Secure-1PSID,然后复制一下对应的值:

Python代码

先做一些初始化,主要是一些请求头和请求参数:

def __init__(self, session_id):
headers = {
"Host": "bard.google.com",
"X-Same-Domain": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"Origin": "https://bard.google.com",
"Referer": "https://bard.google.com/",
}
self._reqid = int("".join(random.choices(string.digits, k=4)))
self.conversation_id = ""
self.response_id = ""
self.choice_id = ""
self.session = requests.Session()
self.session.headers = headers
self.session.cookies.set("__Secure-1PSID", session_id)
self.SNlM0e = self.__get_snlm0e()

发送请求的时候,把之前准备的参数和数据发一个POST请求到 bard.google.com

resp = self.session.post(
"https://bard.google.com/_/BardChatUi/data/assistant.lamda.BardFrontendService/StreamGenerate",
params=params,
data=data,
timeout=120,
)

返回了之后,需要解析消息体,获取我们所需要的信息:

chat_data = json.loads(resp.content.splitlines()[3])[0][2]
if not chat_data:
return {"content": f"Google Bard encountered an error: {resp.content}."}
json_chat_data = json.loads(chat_data)
results = {
"content": json_chat_data[0][0],
"conversation_id": json_chat_data[1][0],
"response_id": json_chat_data[1][1],
"factualityQueries": json_chat_data[3],
"textQuery": json_chat_data[2][0] if json_chat_data[2] is not None else "",
"choices": [{"id": i[0], "content": i[1]} for i in json_chat_data[4]],
}

运行与尝试

python Bard.py --session 'UgiXYPjpaIYuE9K_3BSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

它一个交互式的终端,我随便问了几个问题:

ChatGPT - A command-line interface to Google's Bard (https://bard.google.com/)

You:
What is terrible-two? Google Bard:
Terrible-two is a term used to describe the behavior of a child around the age of 2. It is a normal developmental phase that all children go through. During this time, children
are learning to assert their independence and explore the world around them. This can lead to tantrums, defiance, and other challenging behavior. There are a few things that parents can do to help manage the terrible twos: • Be patient and understanding. Remember that this is a normal phase and that your child is not trying to be difficult.
• Set clear boundaries and expectations. Children need to know what is expected of them.
• Be consistent with your discipline. If you are not consistent, your child will not learn what is right and wrong.
• Offer positive reinforcement. Praise your child for good behavior and help them feel good about themselves.
• Talk to your child's doctor if you are concerned about their behavior. Your doctor can offer advice and support. The terrible twos can be a challenging time for parents, but it is important to remember that this is a normal phase and that your child will eventually grow out of it. You:
how far is the moon? Google Bard:
The Moon is an average of 238,855 miles (384,400 km) away from Earth. This distance varies slightly because the Moon's orbit is not a perfect circle. The Moon is closest to Earth
at perigee, which is when it is about 225,623 miles (363,104 km) away. It is farthest from Earth at apogee, which is when it is about 252,088 miles (405,696 km) away. You:
how far is the sun? Google Bard:
The Sun is about 93 million miles (150 million kilometers) away from Earth. That's about 1 Astronomical Unit (AU). The Sun is the center of our solar system. All of the planets and other objects in our solar system orbit around the Sun. The Sun is a very large star. It is about 109 times the
diameter of Earth and about 330,000 times more massive than Earth. The Sun is made up of mostly hydrogen and helium. It is so hot that the hydrogen and helium are constantly
fusing together to create heavier elements. This process is called nuclear fusion. Nuclear fusion releases a lot of energy, which is what powers the Sun. You:
how to cure a flu? Google Bard:
There is no cure for the flu, but there are treatments that can help relieve symptoms and prevent complications. The most effective way to prevent the flu is to get a flu vaccine
every year. If you get the flu, there are a few things you can do to feel better: • Rest. Get plenty of sleep and avoid strenuous activity.
• Drink plenty of fluids. Water, juice, and soup are all good choices.
• Take over-the-counter pain relievers like acetaminophen or ibuprofen.
• Use a humidifier. The moisture can help soothe your throat and make it easier to breathe.
• See a doctor if you have severe symptoms or are at high risk of complications. Here are some tips to help you prevent the flu: • Get a flu vaccine every year. The flu vaccine is the best way to prevent the flu.
• Wash your hands often with soap and water. This helps to prevent the spread of germs.
• Avoid close contact with people who are sick. If you must be around someone who is sick, wear a mask.
• Clean and disinfect surfaces that may be contaminated with germs.
• Stay home from work or school if you are sick. This will help to prevent the spread of the flu.
• Eat a healthy diet and exercise regularly. A healthy immune system is better able to fight off infection. You: Exiting...

代码

相关代码请查看: GitHUb LarryDpk/pkslow-samples


References:

Bard

用Python基于Google Bard做一个交互式的聊天机器人的更多相关文章

  1. 基于trie树做一个ac自动机

    基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...

  2. 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室

    原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  3. 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室

    原文:与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  4. 用ServletContext做一个简单的聊天室

    这里主要是ServletContext的一个特性:ServletContext是一个公共的空间,可以被所有的客户访问.由此可见ServletContext比cookie和session的作用范围要大[ ...

  5. 基于websocket实现的一个简单的聊天室

    本文是基于websocket写的一个简单的聊天室的例子,可以实现简单的群聊和私聊.是基于websocket的注解方式编写的.(有一个小的缺陷,如果用户名是中文,会乱码,不知如何处理,如有人知道,请告知 ...

  6. TensorFlow练习13: 制作一个简单的聊天机器人

    现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...

  7. 用Go语言实现一个简单的聊天机器人

    一.介绍 目的:使用Go语言写一个简单的聊天机器人,复习整合Go语言的语法和基础知识. 软件环境:Go1.9,Goland 2018.1.5. 二.回顾 Go语言基本构成要素:标识符.关键字.字面量. ...

  8. python 结合redis 队列 做一个例子

    结合redis 队列 做了一个例子 #!/usr/bin/env python # coding: utf-8 # @Time : 2018/12/21 0021 13:57 # @Site : # ...

  9. 基于thinkphp5框架做一个可以区别开发、测试、生产三种环境的配置加载

    在日常的开发测试中我们经常会遇到本地开发和测试或者线上配置参数不同的场景,必要你要是使用一个三方的支付,它的本地测试和线上的key值或者账号存在不同.最基本的做法是本地用测试参数,提交到测试的时候再改 ...

  10. python爬虫系列:做一个简单的动态代理池

    自动 1.设置动态的user agent import urllib.request as ure import urllib.parse as upa import random from bs4 ...

随机推荐

  1. python机器学习——SVM支持向量机

    背景与原理: 支持向量机是一种用来解决分类问题的算法,其原理大致可理解为:对于所有$n$维的数据点,我们希望能够找到一个$n$维的直线(平面,超平面),使得在这个超平面一侧的点属于同一类,另一侧的点属 ...

  2. python读取Excel文件的操作

    ①通过xlutils在已有表中写数据(这种方法会改变excel的样式) import xlrd,xlwt from xlutils.copy import copy 将已存在的Excel表格赋值给变量 ...

  3. Console对象的实例方法

    1.console.table 将数据以表格的形式显示. 这个方法需要一个必须参数 data,data 必须是一个数组或者是一个对象:还可以使用一个可选参数 columns. // Output an ...

  4. CentOS7/6 关闭防火墙(转载)

    CentOS6关闭防火墙使用以下命令, //临时关闭 service iptables stop //禁止开机启动 chkconfig iptables off CentOS7中若使用同样的命令会报错 ...

  5. 4组-Beta冲刺-4/5

    一.基本情况 队名:摸鲨鱼小队 组长博客:https://www.cnblogs.com/smallgrape/p/15604878.html github链接:https://github.com/ ...

  6. 4组-Beta冲刺-1/5

    一.基本情况 队名:摸鲨鱼小队 组长博客:https://www.cnblogs.com/smallgrape/p/15590583.html github链接:https://github.com/ ...

  7. WPF Toolbox 添加image

    //public  Toolbox()        //{  //          ItemsControl items = this as ItemsControl;  //          ...

  8. StarUML画用例图

    好久没画图在StarUML里都找不到useCase了,记下来不然又忘了 右击Untitled->Add Diagram->UseCase Diagram,然后左边就有UseCase了就可以 ...

  9. Python爬虫之用Selenium做爬虫

    我们在用python做爬虫的时候,除了直接用requests的架构,还有Scrapy.Selenium等方式可以使用,那么今天我们就来聊一聊使用Selenium如何实现爬虫. Selenium是什么? ...

  10. 转 oracle 无法使用sys用户登录 connection as SYS should be as SYSDBA OR SYSOPER

    转自:  https://blog.csdn.net/u012004128/article/details/80781979 安装Oracle11g后,为了测试安装是否成功,通过cmd命令打开了sql ...