iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
生成式 AI

LLM與生成式AI筆記系列 第 28

Day 27:自動化script參考: rpaForLLM

  • 分享至 

  • xImage
  •  

前言:

這是我想不使用 api token 調用大模型的才做的一個調查,今天在網路上看了下,這個是專案的網址。昨天那個要做的前端我也會找時間開始實作,不過因為這個比較跟生成式AI無關所以就不列出了,畢竟這次鐵人賽是以生成式AI相關的內容為主就是了,另外 30天之後的日誌應該我也會移到 medium 或 blogger 上,畢竟這兩個平台我用的比較習慣。


主要的程式碼 - rpaForChatGPT.ipynb

1. 載入必要套件

from langchain.llms.base import LLM
from typing import List, Optional
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
import re
import time
from selenium.webdriver.support.wait import WebDriverWait
import win32gui
import os
  • 載入 langchain 中的 LLM 基類,用於建立自定義的語言模型。
  • 載入 typing 模組中的 ListOptional,用於類型提示。
  • 載入 requests 套件,用於發送 HTTP 請求。
  • 載入 selenium 套件,用於自動化控制瀏覽器。
  • 載入 re 套件,用於正規表達式匹配。
  • 載入 time 套件,用於暫停程式執行。
  • 載入 WebDriverWait,用於等待網頁元素出現。
  • 載入 win32gui,用於獲取 Windows 視窗資訊。
  • 載入 os 套件,用於操作環境變數。

2. 設定環境變數

os.environ["NEW_CHAT_TOPIC"] = 'no'
  • 設定環境變數 NEW_CHAT_TOPIC 為 'no',表示預設不開啟新的聊天主題。

3. 定義全域變數

nowPageTitle = ""
  • 定義全域變數 nowPageTitle,用於儲存目前活動視窗的標題。

4. 定義 callback 函式

def callback(hwnd, _):
    global nowPageTitle
    title = win32gui.GetWindowText(hwnd)
    if " - Google Chrome" in title:
        nowPageTitle = title.replace(" - Google Chrome", "")
  • 定義一個回撥函式 callback,用於枚舉所有視窗,並將目前活動的 Chrome 視窗標題儲存到 nowPageTitle

5. 定義 getChromeDriver 函式

def getChromeDriver():
    # ... (程式碼內容請參考前面的分析)
  • 嘗試使用 webdriver_manager 自動下載 ChromeDriver。
  • 如果自動下載失敗,則從錯誤訊息中提取 Chrome 版本號,然後手動從 Google 的 ChromeDriver 儲存庫下載對應版本的驅動程式。

6. 定義 getDriver 函式

def getDriver(pageUrl=None, pageTitle=None, debugPort=9222):
    # ... (程式碼內容請參考前面的分析)
  • 使用 win32gui.EnumWindows 遍歷所有視窗,並呼叫 callback 函式獲取目前活動的 Chrome 視窗標題。
  • 配置 Chrome 選項,啟用除錯模式,並連接到指定的除錯埠。
  • 啟動 Chrome 瀏覽器。
  • 遍歷所有開啟的視窗,根據提供的 URL 或標題找到目標視窗。

7. 定義 getAnswer 函式

def getAnswer(prompt):
    # ... (程式碼內容請參考前面的分析)
  • 呼叫 getDriver 函式獲取已開啟的 ChatGPT 視窗,或開啟一個新的 ChatGPT 視窗。
  • 如果環境變數 NEW_CHAT_TOPIC 為 'yes',則點擊 "New chat" 按鈕開始新對話。
  • 找到輸入框元素,將 prompt 中的內容逐行輸入,並在每行末尾模擬 Shift+Enter 組合鍵。
  • 發送 Enter 鍵提交輸入。
  • 等待 ChatGPT 生成回答,直到 "Regenerate response" 按鈕出現。
  • 獲取回答內容,切換回之前的活動視窗,並關閉瀏覽器。

8. 定義 rpaForChatGPT 類別

class rpaForChatGPT(LLM):
    # ... (程式碼內容請參考前面的分析)
  • 繼承自 LLM,實現了 _call 方法。
  • _call 方法呼叫 getAnswer 獲取回答,並將歷史對話保存到 history 列表中。

目前主要要做的side project

1.side project - 能多開chat bot 並總結的應用 - 進度:

  • [ ] 架構設計
  • [ ] 前端實作
    • [ ] Flutter 嘗試
    • [ ] Electron 嘗試
  • [ ] 伺服器以及容器端實作
    • [ ]後端實作
    • [ ]容器實作
  • [ ] 開源專案參考
    • [x] search_with_lepton 程式碼解讀
    • [ ] search_with_lepton 修改應用
    • [X] rpaForLLM 程式碼解讀
    • [ ] rpaForLLM 修改應用
    • [ ] anything-llm 程式碼解讀
    • [ ] anything-llm 修改應用
  1. 其他今年在鐵人賽中有說要完成的事情的大致方向,希望LLM 方向起碼有一半以上能真的完成,支票開太大,之後真的就是要做到再開支票,呵呵。

    • [ ] 算法資結查漏補缺

    • [ ] 刷100題 leetcode 以上

    • [ ] 機器學習(非深度學習)中,資料分析的各個重要演算法觀念跟實際實作

      • [ ] 使用chatGPT 等機器人在資料分析中
    • [ ] 深度學習中,各個重要演算法觀念跟實際實作(CV, NLP, 語音辨識以及其他大方向)

    • [ ] LLM ,LVM ,生成式繪畫 中重要的演算法, 模型應用跟實際範例

      • [ ] LLM - 從資料收集, 清理, 模型微調, 壓縮, 部署 , 搭配 agent , rag 以及 prompt工程
      • [ ] LLM - 程式碼生成 LLM + Agent 的應用
      • [ ] LLM - 玩具級預訓練專案
      • [ ] LLM - 多模態模型應用
      • [ ] 生成式繪畫 - LLM 跟 diffusion 模型的聯合運作
    • [ ] Agent, RAG 的主流框架使用跟應用



上一篇
Day 26: search_with_lepton 程式解讀 (post 部分)+ 目前項目的思考
下一篇
Day 28: anything-llm 程式碼解讀
系列文
LLM與生成式AI筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言