這段程式碼是利用 LangChain 框架與 Groq API 來構建一個具有數學問題解決和資料查詢功能的聊天機器人應用。應用可以處理用戶輸入的數學問題,並且根據需求使用不同的工具來解決問題,如數學計...
這段程式碼是利用 LangChain 框架與 Groq API 來構建一個具有數學問題解決和資料查詢功能的聊天機器人應用。應用可以處理用戶輸入的數學問題,並且根據需求使用不同的工具來解決問題,如數學計算、邏輯推理以及從維基百科查詢相關資料。 程式碼詳解 1. 環境變數載入與 Streamlit 應用設置 from dotenv import load_dotenv load_dotenv(dotenv_path="/Users/kevinluo/vscode_workstation/Langchain/.env") st.set_page_config(page_title="Text To Math Problem Solver And Data Search Assistant", page_icon="🧮") st.title("Text To Math Problem Solver Using Google Gemma 2") load_dotenv:載入 .env 檔案中的環境變數,該檔案中可能包含您的 Groq API Key 或其他敏感資訊。 st.set_page_config:設置 Streamlit 應用的標題和圖標。 st.title:在頁面頂部顯示應用標題。 2. 輸入 Groq API Key 並初始化 LLM groq_api_key = st.sidebar.text_input(label="Groq API Key", type="password") if not groq_api_key: st.info("Please add your Groq API Key to continue") st.stop() llm = ChatGroq(model="Gemma2-9b-It", groq_api_key=groq_api_key) API Key 輸入:應用會提示使用者在側邊欄輸入 Groq API Key,如果沒有輸入 API Key,程式將會停止執行。 LLM 初始化:通過 ChatGroq 初始化語言模型,指定模型為 Gemma2-9b-It 並使用使用者提供的 API Key。 3. 定義工具與初始化 維基百科查詢工具 wikipedia_wrapper = WikipediaAPIWrapper() wikipedia_tool = Tool( name="Wikipedia", func=wikipedia_wrapper.run, description="A tool for searching the Internet to find the various information on the topics mentioned" ) WikipediaAPIWrapper:定義維基百科查詢工具,透過這個工具可以搜尋與指定話題相關的資料。 Tool:將這個工具包裝成一個可以供 Agent 使用的工具,並指定 func 為該工具的查詢方法。 數學計算工具 math_chain = LLMMathChain.from_llm(llm=llm) calculator = Tool( name="Calculator", func=math_chain.run, description="A tool for answering math related questions. Only input mathematical expressions need to be provided" ) LLMMathChain:這個鏈條用來處理數學計算,利用大語言模型(LLM)來解決數學相關問題。 Tool:定義計算器工具,處理數學表達式的輸入並進行計算。 邏輯推理工具 PromptTemplate:這裡定義了一個專門用於處理數學問題的提示模板。這個模板會接收用戶輸入的數學問題,並生成包含步驟的解答。 LLMChain:將這個模板與 LLM 結合起來,作為一個邏輯推理的工具鏈。 Tool:定義邏輯推理工具,使用定義好的 LLMChain 來回答推理和數學邏輯相關問題。 4. 代理初始化 assistant_agent = initialize_agent( tools=[wikipedia_tool, calculator, reasoning_tool], llm=llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=False, handle_parsing_errors=True ) initialize_agent:這裡初始化了一個 Agent,能夠根據用戶的輸入,判斷應該使用哪個工具來解決問題。AgentType.ZERO_SHOT_REACT_DESCRIPTION 是一個零射程反應代理類型,它根據描述來選擇適合的工具。 tools:該代理可以使用的工具包括維基百科查詢工具、計算器工具和邏輯推理工具。 5. 保存與展示消息歷史 if "messages" not in st.session_state: st.session_state["messages"] = [ {"role": "assistant", "content": "Hi, I'm a Math chatbot who can answer all your math questions"} ] for msg in st.session_state.messages: st.chat_message(msg["role"]).write(msg['content']) 消息歷史:利用 st.session_state 存儲聊天歷史,這樣可以在用戶多次交互時記住之前的對話。 st.chat_message:在應用中顯示歷史聊天消息。 6. 處理用戶輸入並生成答案 question = st.text_area("Enter your question:", "I have 5 bananas and 7 grapes...") if st.button("Find my answer"): if question: with st.spinner("Generating response..."): st.session_state.messages.append({"role": "user", "content": question}) st.chat_message("user").write(question) st_cb = StreamlitCallbackHandler(st.container(), expand_new_thoughts=False) response = assistant_agent.run(st.session_state.messages, callbacks=[st_cb]) st.session_state.messages.append({'role': 'assistant', "content": response}) st.write('### Response:') st.success(response) else: st.warning("Please enter the question") 問題輸入:使用者可以在 st.text_area 輸入一個問題,這個問題會被傳遞給聊天機器人處理。 assistant_agent.run:代理根據用戶的輸入消息來選擇使用哪個工具,計算並生成答案。 st.session_state.messages:將用戶輸入的問題和機器人生成的回答都存入消息歷史,並顯示在頁面上。 總結 這段程式碼的主要目的是透過一個使用 Google Gemma 2 模型的代理,結合不同工具來解決用戶的數學問題或提供資料查詢服務。這個應用具備: 數學計算:可以解決數學表達式的問題。 邏輯推理:可以提供步驟性邏輯推理答案。 資料查詢:使用維基百科進行知識查詢。 消息歷史管理:用戶與代理的對話會存儲在消息歷史中。 應用的可擴展性也非常強,可以根據需要進一步擴充更多的工具或功能。