当前位置: 首页 > news >正文

自动问答之白嫖文心一言大模型

声明

文章只用于学习探讨,请勿用于非法行为

实现原理

利用selenium操作文心一言对话页面,实现自动化问答和获取问答结果。

实现细节


'''
文心一言客户端
'''
import timefrom selenium.webdriver import Keysimport configfrom selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECfrom log_factory import get_logger
# 获取日志记录器
logger = get_logger('wenxin_log')class WEN_XIN_AI:def __init__(self, driver=None):self.driver = driverif self.driver is None:self.init_driver()def init_driver(self):'''初始化driver:return:'''selenium_config = config.Selenium_config()# 设置 ChromeDriver 的服务service = Service(selenium_config.chrome_driver_path)# 配置 ChromeDriver 的选项以连接到已经运行的 Chrome 实例chrome_options = Options()# 设置运行数据的存储目录,下次再运行时可以记住上一次的登录状态chrome_options.add_argument(f'--user-data-dir={selenium_config.user_data_dir}')# 配置Chrome选项options = webdriver.ChromeOptions()options.add_argument("--disable-blink-features=AutomationControlled")# options.add_argument("--headless")  # 无头模式options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")options.add_argument(f'--user-data-dir={selenium_config.user_data_dir}')# 初始化WebDriverdriver = webdriver.Chrome(service=service, options=options)driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})self.driver = driverdef open_index_page(self):'''打开文心一言首页:return:'''self.driver.get('https://yiyan.baidu.com/')# 等待页面加载完毕WebDriverWait(self.driver, 60).until(lambda d: d.execute_script('return document.readyState') == 'complete')logger.info(f'首页加载完成.... : {self.driver.title}')def answer_is_finish(self):try:# 等待包含"重新生成"文本的元素出现element = WebDriverWait(self.driver, 120).until(EC.presence_of_element_located((By.XPATH, "//*[contains(text(), '重新生成')]")))return Trueexcept:return Falsedef talk_to_ai(self, question):question = question.replace('\n', '')logger.info(f'文心一言问答,输入:{question}')editable_div = self.driver.find_element(By.CLASS_NAME, 'yc-editor')for char in question:editable_div.send_keys(char)# 模拟按下Enter键,防止按钮不生效editable_div.send_keys(Keys.RETURN)  # 或者 Keys.ENTER# 输入完之后,需要停顿一下time.sleep(3)if self.answer_is_finish():elements = self.driver.find_elements(By.XPATH, '//div[@class=\'custom-html\']')text = elements[0].textlogger.info(f'文心一言回答:{text}')return textif __name__ == "__main__":ai = WEN_XIN_AI(driver=None)try:ai.open_index_page()answer = ai.talk_to_ai('你好')logger.info(answer )time.sleep(200)finally:ai.driver.quit()

总结

以上就是代码的实现细节,对于目前市面上的其他大模型都可以采用这种思路。在使用过程中,缺少安装包就先pip install 安装一下。文心一言有一定的反扒机制,长时间使用可能会被短暂封号

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 卡拉OK歌唱比赛活动策划方案
  • 使用flutter做圆形进度条 (桌面端)
  • PicInsight - 制作精美的明信片! | 限时免费
  • 成都云飞浩容文化传媒有限公司领航电商新纪元
  • URL重写
  • 代码随想录算法训练营第四十五天| 115.不同的子序列 、583. 两个字符串的删除操作 、 72. 编辑距离
  • ElasticSearch搜索
  • 【实践出真知】使用Docusaurus将md文档组织起来就是一个网站(写API文档,写教程、写日记、写博客的有福了)
  • python使用selenium切换到了iframe
  • 理解 HTTP 请求中 Query 和 Body 的异同
  • Android经典面试题之Kotlin中 if 和 let的区别
  • C语言100基础拔高题(3)
  • 计算机系统操作系统简介
  • mac电脑安装 docker镜像 btpanel/baota
  • 企业安全生产管理是否将成为新的朝阳产业?
  • Babel配置的不完全指南
  • CSS 专业技巧
  • js
  • PAT A1120
  • Python_OOP
  • Python语法速览与机器学习开发环境搭建
  • Travix是如何部署应用程序到Kubernetes上的
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 数据科学 第 3 章 11 字符串处理
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小程序开发之路(一)
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​业务双活的数据切换思路设计(下)
  • # SpringBoot 如何让指定的Bean先加载
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #if和#ifdef区别
  • (1)(1.13) SiK无线电高级配置(五)
  • (1)Nginx简介和安装教程
  • (6)添加vue-cookie
  • (70min)字节暑假实习二面(已挂)
  • (pojstep1.1.2)2654(直叙式模拟)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (转)jQuery 基础
  • (转)重识new
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET 中的轻量级线程安全
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net分布式压力测试工具(Beetle.DT)
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [100天算法】-每个元音包含偶数次的最长子字符串(day 53)