iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
生成式 AI

RAG自己來系列:客服機器人系列 第 22

[Day 22] 新增設定參數區塊

  • 分享至 

  • xImage
  •  

使用者問的問題,也是有很多細部的子參數可以調整,例如:使用者發送訊息時,可以設定 Qdrant 要整理幾筆資訊給 LLM 做資訊整理,而這個部分可以在使用者送出訊息前給予,具體實現方法如下

  1. 提供一個輸入框,讓使用者依照不同情境給予不同的參數值
  2. 一同將參數傳到後端,並在搜尋時套用這些參數

這次想用一點不一樣的呈現方式,當使用者勾選 Checkbox 後才顯示該設定區塊,Gradio 也提供了 visible 這個元件參數,而當使用者改變網頁元素時,可以依照當前的事件改變是否顯示該元素


主要是稍微移動了元件的位置,並且監聽 Checkbox 的狀態,根據該元件的勾選狀態決定要不要顯示參數調整的區塊

而參數調整區塊則分別有 "模型溫度"、"搜尋筆數" 以及 "語言模型" 等參數,對於不同的參數,會影響不同的輸出風格

  • 模型溫度(temperature)
    影響模型的輸出隨機性,0 代表固定,1 代表讓模型每次回覆都不一樣,數值越高,模型回覆越多樣化

  • 搜尋筆數(top-k)
    如同前面所說的,決定要給語言模型幾筆從向量資料庫搜尋出來的結果

  • 語言模型(language model)
    除了使用 Gemma2 來協助我們使用 RAG,其實也有其他表現也不錯的語言模型,如 mistral

所以我將 main.py 中的部分程式碼修改成以下的樣子

import ...


def more_options_onchange(value):
    if value:
        yield gr.update(visible=True)
    else:
        yield gr.update(visible=False)

with gr.Blocks() as demo:
    with gr.Tab(label="chat"):
        with gr.Row():
            with gr.Column():
                textbox = gr.Textbox(
                    placeholder="請在這邊輸入文字..."
                )
                more_options = gr.Checkbox(
                    label="更多選項",
                    value=False
                )
                submit_btn = gr.Button(
                    value="送出"
                )
                
            with gr.Column(visible=False) as more_options_row:
                temperature = gr.Slider(
                    label="模型溫度",
                    value=0,
                    minimum=0,
                    maximum=1,
                    step=0.01,
                )
                
                k = gr.Slider(
                    label="搜尋筆數",
                    value=1,
                    minimum=1,
                    maximum=10,
                    step=1,
                    )
                
                model = gr.Dropdown(
                    label="語言模型",
                    choices=["gemma2", "mistral"],
                    value="gemma2",
                    interactive=True
                )
                
        with gr.Row():
            with gr.Column():
                chatbot = gr.Chatbot(
                    layout="bubble",
                    show_label=False
                )
            
        submit_btn.click(
            Chat.send_query, 
            inputs=[textbox, chatbot, temperature, k, model], 
            outputs=[textbox, chatbot]
        )
            
        more_options.change(
            more_options_onchange,
            inputs=[more_options],
            outputs=[more_options_row]
        )
            
            
    with gr.Tab(label="upload"):
        with gr.Row():
            with gr.Row():
                upload = gr.Files(
                    label="上傳檔案"
                )
                
            with gr.Row():
                upload_status = gr.Markdown(value="")
        
        upload.upload(
            File.upload_file,
            inputs=[upload],
            outputs=[upload_status]
        )
...

而 utils.py 也需要套用前端的參數設定,修改內容如下

class Chat:
    def send_query(search_content: str, history: list, temperature: float, k: int, model: str):
        history.append([search_content, ""])
        yield "", history
        
        # 搜尋相似向量
        result = qdrant_client.query(
            collection_name="iron",
            query_text=search_content,
            limit=k
        )
        
        # 遍歷所有搜尋結果,並將檔案名稱、頁碼、段落資訊組合成一個字串
        content = "\n\n--------------------------\n\n".join(point.metadata["document"] for point in result)
        
        llm = ChatOllama(
            model=model,
            base_url=os.getenv("OLLAMA_SERVER_URL"),
            temperature=temperature
        )
        ...

而經調整後的畫面如下

https://ithelp.ithome.com.tw/upload/images/20240930/20146555BcVMxrmm56.png

在勾選更多選項後

https://ithelp.ithome.com.tw/upload/images/20240930/20146555SQh7lkmUZT.png


上一篇
[Day 21] 設計移除文件頁面
下一篇
[Day 23] 新增附屬功能 - 投票系統(上)
系列文
RAG自己來系列:客服機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言