目錄
一、功能簡述
代碼功能概括
🎯 核心能力
二、運作流程
三、核心代碼
四、運行結果?
五、代碼功能拆解
?? 1. 環境準備與依賴導入
? 2. 加載網頁文檔并處理為向量
? 3. 創建檢索工具與搜索工具
? 4. 初始化語言模型與 Agent
? 5. 封裝支持多輪記憶的 Agent
? 6. 啟動主程序:進行多輪對話
? 總結:模塊劃分
一、功能簡述
?這段代碼構建了一個基于 LangChain 的 網頁文檔+搜索結合的多輪對話智能體系統,可以理解用戶問題,通過調用文檔檢索工具或在線搜索工具智能作答,并具備記住對話歷史的能力。下面是簡要概括:
代碼功能概括
該程序通過以下步驟完成一個帶記憶的多輪對話智能體:
環境設置:加載
.env
環境變量、設置 User-Agent 以防網頁請求失敗。網頁加載與處理:
讀取指定網頁內容(例如一篇關于 iPhone 的新聞)。
使用文本切割器切分為小段落。
用 OpenAI 嵌入模型將其向量化,存入 FAISS 向量數據庫。
工具創建:
創建一個用于搜索本地文檔的檢索工具(Retriever Tool)。
加載一個第三方網絡搜索工具(Tavily Search Tool)。
大模型初始化:
加載一個 ChatOpenAI 對象(使用
qwen-plus
模型)。智能體構建:
從 LangChain Hub 加載一個標準函數式 agent 的 Prompt。
用上述工具和大模型創建一個函數式 Agent。
包裝成 AgentExecutor,可處理工具調用。
多輪對話支持:
用
RunnableWithMessageHistory
將 AgentExecutor 包裝為支持歷史記憶的智能體。使用
FileChatMessageHistory
將歷史記錄持久保存為 JSON 文件,按用戶 session 區分。運行交互主程序:
啟動一個命令行循環,接收用戶輸入,調用智能體進行回復,支持連續上下文對話。
用戶輸入 "exit"/"quit" 即可退出。
🎯 核心能力
? 文檔問答(從網頁構建知識庫)
? 實時搜索(Tavily 網絡搜索)
? 多輪對話(有記憶能力)
? 支持多個工具聯動(Tool Calling)
? 面向用戶輸入動態響應(CLI 循環交互)
二、運作流程
+------------------------------------------------------------+
| ? ? ? ? ? ? ? ? ? ?1. 環境初始化? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
|--------------------------------------------------------------|
| - 載入 .env 文件? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| - 設置 User-Agent 防止網頁請求失敗? ? ? ? ? ? ? ?|
+-------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+--------------------------------------------------------------------+
| ? ? ? ? ? ? ? 2. 加載網頁內容 (WebBaseLoader) ? ? ? ? ? ?|
+--------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+------------------------------------------------------------------------+
| ? ? ? ? 3. 文本切分 (RecursiveCharacterTextSplitter)? ? ? ? |
| ? ? ? ? - chunk_size=512, chunk_overlap=200? ? ? ? ? ? ? ? ?|
+------------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+----------------------------------------------------------------------------------+
| ? ? 4. 文檔向量化 (OpenAIEmbeddings + FAISS VectorStore) ? |
+----------------------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+--------------------------------------------------------------------------+
| ? ? ? ? 5. 創建檢索工具 (Retriever + create_retriever_tool) |
+--------------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+---------------------------------------------------------------------+
| ? ? ? ? ? ? ? 6. 加載搜索工具 (TavilySearchResults) ? ? ? ?|
+---------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+-----------------------------------------------------------------------------+
| ? ? ? ?7. 初始化 LLM (ChatOpenAI with qwen-plus 模型) ? ? ?|
+-----------------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+--------------------------------------------------------------------------+
| ? ? ? ?8. 加載 Agent Prompt (from LangChain Hub) ? ? ? ? ? |
+--------------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+--------------------------------------------------------------------------+
| ? ? 9. 創建 Agent (create_openai_functions_agent) ? ? ? ? ?|
+--------------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+--------------------------------------------------------------------------+
| ? ? ? 10. 創建執行器 AgentExecutor(支持多工具) ? ? ? ? ?|
+--------------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+----------------------------------------------------------------------------------+
| 11. 創建歷史記錄函數 (FileChatMessageHistory per session) ?|
+----------------------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+----------------------------------------------------------------------------------+
| 12. 包裝為多輪對話代理 (RunnableWithMessageHistory) ? ? ? ?|
+----------------------------------------------------------------------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? v
+------------------------------------------------------------+
| 13. 啟動交互主循環 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
|--------------------------------------------------------------|
| while True:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| ? ? - 輸入:input()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| ? ? - 調用 agent_with_memory.invoke? ? ? ? ? ? ? ?|
| ? ? - 輸出:print(response) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
| ? ? - 退出條件:輸入 exit / quit ? ? ? ? ? ? ? ? ? ? ? ? ? |
+------------------------------------------------------------+
三、核心代碼
運行前準備
1、訪問Tavily(用于在線搜索)注冊賬號并登錄,獲取API 密鑰
TAVILY_API_KEY申請:Tavily
2、.env文件配置:
# DashScope 兼容 OpenAI API 的接口地址 OPENAI_API_BASE2=https://dashscope.aliyuncs.com/compatible-mode/v1# 你的 DashScope API 密鑰(記得替換為你自己的) OPENAI_API_KEY2=sk-.....# 可選:設置用戶代理,防止 WebBaseLoader 請求失敗 USER_AGENT=Mozilla/5.0 (Windows NT 10.0; Win64; x64)
import os
from dotenv import load_dotenv# 設置環境變量,防止網頁請求失敗
os.environ["USER_AGENT"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"load_dotenv()# 導入 LangChain 相關模塊
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain.tools.retriever import create_retriever_tool
from langchain_community.tools.tavily_search import TavilySearchResultsfrom langchain import hub
from langchain.agents import create_openai_functions_agent, AgentExecutor# 多輪對話相關
from langchain_community.chat_message_histories import FileChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory# 1. 初始化大模型
llm = ChatOpenAI(temperature=0.95,model="qwen-plus",openai_api_key=os.getenv("OPENAI_API_KEY2"),openai_api_base=os.getenv("OPENAI_API_BASE2")
)# 2. 加載網頁文檔
loader = WebBaseLoader("https://new.qq.com/rain/a/20240920A07Y5Y00")
docs = loader.load()# 3. 分割文檔
documents = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=200).split_documents(docs)# 4. 向量化
vector_store = FAISS.from_documents(documents, OpenAIEmbeddings())# 5. 創建檢索器和檢索工具
retriever = vector_store.as_retriever()retriever_tool = create_retriever_tool(retriever,"iPhone_price_search","搜索有關 iPhone 16 的價格信息。對于iPhone 16的任何問題,您必須使用此工具!"
)# 6. 加載Tavily搜索工具
search_tool = TavilySearchResults()# 7. 組合工具
tools = [search_tool, retriever_tool]# 8. 拉取agent prompt
prompt = hub.pull("hwchase17/openai-functions-agent")# 9. 創建OpenAI函數式Agent
agent = create_openai_functions_agent(llm, tools, prompt)# 10. 創建單輪執行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True,handle_parsing_errors=True)# 11. 構造歷史存儲函數,按 session_id 存儲文件
def get_session_history(session_id: str):return FileChatMessageHistory(f"chat_history_{session_id}.json")# 12. 用 RunnableWithMessageHistory 包裝 agent_executor 支持多輪對話
agent_with_memory = RunnableWithMessageHistory(agent_executor,get_session_history,input_messages_key="input", # 傳入用戶輸入的 keyhistory_messages_key="chat_history" # 歷史消息key,和agent executor內部兼容
)# 13. 啟動多輪對話交互
if __name__ == "__main__":session_id = "user1" # 多用戶時可動態設定print("歡迎使用多輪對話智能體,輸入 exit 或 quit 退出。\n")while True:user_input = input("你:")if user_input.lower() in ["exit", "quit", "退出"]:print("已退出對話。")breakresult = agent_with_memory.invoke({"input": user_input},config={"configurable": {"session_id": session_id}})print("AI:", result["output"])
?
四、運行結果?
說明:紅色為用戶問題,橙色為AI回復,藍色為分析過程?
歡迎使用多輪對話智能體,輸入 exit 或 quit 退出。
你:你好
> Entering new AgentExecutor chain...
你好!有什么可以幫您的嗎?> Finished chain.
AI: 你好!有什么可以幫您的嗎?
你:我是ship,你是誰
> Entering new AgentExecutor chain...
你好,ship!我是通義千問,阿里巴巴集團旗下的超大規模語言模型。我能夠幫助你回答問
題、創作文字,比如寫故事、寫公文、寫郵件、寫劇本,進行邏輯推理、編程等等。很高興
見到你,有什么需要幫忙的嗎?> Finished chain.
AI: 你好,ship!我是通義千問,阿里巴巴集團旗下的超大規模語言模型。我能夠幫助你?
回答問題、創作文字,比如寫故事、寫公文、寫郵件、寫劇本,進行邏輯推理、編程等等。
很高興見到你,有什么需要幫忙的嗎?
你:蘋果16有哪些型號
> Entering new AgentExecutor chain...
蘋果 iPhone 16 系列共有四款不同的型號,每款都提供了不同的屏幕尺寸、處理器性能以
及相機配置,以滿足不同用戶的需求。以下是具體的型號信息:### 1. **iPhone 16**
? ?- **屏幕**:6.1 英寸 Super Retina XDR 顯示屏
? ?- **處理器**:A18 仿生芯片
? ?- **存儲選項**:128GB, 256GB, 512GB
? ?- **相機**:雙攝系統(4800萬像素主攝 + 1200萬像素超廣角)
? ?- **特色**:適合日常使用,輕便且性價比高。### 2. **iPhone 16 Plus**
? ?- **屏幕**:6.7 英寸 Super Retina XDR 顯示屏
? ?- **處理器**:A18 仿生芯片
? ?- **存儲選項**:128GB, 256GB, 512GB
? ?- **相機**:雙攝系統(4800萬像素主攝 + 1200萬像素超廣角)
? ?- **特色**:大屏幕設計,適合喜歡觀看視頻或玩游戲的用戶。### 3. **iPhone 16 Pro**
? ?- **屏幕**:6.1 英寸 ProMotion Super Retina XDR 顯示屏(支持 120Hz 刷新率) ?
? ?- **處理器**:A18 Pro 仿生芯片
? ?- **存儲選項**:128GB, 256GB, 512GB, 1TB
? ?- **相機**:三攝系統(4800萬像素主攝 + 4800萬像素超廣角 + 1200萬像素長焦) ??
? ?- **特色**:鈦金屬邊框,更高端的設計和更強的性能,適合專業人士。### 4. **iPhone 16 Pro Max**
? ?- **屏幕**:6.7 英寸 ProMotion Super Retina XDR 顯示屏(支持 120Hz 刷新率) ?
? ?- **處理器**:A18 Pro 仿生芯片
? ?- **存儲選項**:256GB, 512GB, 1TB
? ?- **相機**:三攝系統(4800萬像素主攝 + 4800萬像素超廣角 + 1200萬像素長焦) ??
? ?- **特色**:最大尺寸的屏幕和最先進的相機系統,特別適合攝影愛好者和專業用戶。?---
### 總結:
- **標準版**:iPhone 16 和 iPhone 16 Plus 面向普通消費者,提供出色的日常體驗。 ?
- **高端版**:iPhone 16 Pro 和 iPhone 16 Pro Max 面向追求極致性能和影像能力的用?
戶。如果你有具體的預算或需求,可以告訴我,我可以幫你推薦最適合的型號!
> Finished chain.
AI: 蘋果 iPhone 16 系列共有四款不同的型號,每款都提供了不同的屏幕尺寸、處理器性
能以及相機配置,以滿足不同用戶的需求。以下是具體的型號信息:### 1. **iPhone 16**
? ?- **屏幕**:6.1 英寸 Super Retina XDR 顯示屏
? ?- **處理器**:A18 仿生芯片
? ?- **存儲選項**:128GB, 256GB, 512GB
? ?- **相機**:雙攝系統(4800萬像素主攝 + 1200萬像素超廣角)
? ?- **特色**:適合日常使用,輕便且性價比高。### 2. **iPhone 16 Plus**
? ?- **屏幕**:6.7 英寸 Super Retina XDR 顯示屏
? ?- **處理器**:A18 仿生芯片
? ?- **存儲選項**:128GB, 256GB, 512GB
? ?- **相機**:雙攝系統(4800萬像素主攝 + 1200萬像素超廣角)
? ?- **特色**:大屏幕設計,適合喜歡觀看視頻或玩游戲的用戶。### 3. **iPhone 16 Pro**
? ?- **屏幕**:6.1 英寸 ProMotion Super Retina XDR 顯示屏(支持 120Hz 刷新率) ?
? ?- **處理器**:A18 Pro 仿生芯片
? ?- **存儲選項**:128GB, 256GB, 512GB, 1TB
? ?- **相機**:三攝系統(4800萬像素主攝 + 4800萬像素超廣角 + 1200萬像素長焦) ??
? ?- **特色**:鈦金屬邊框,更高端的設計和更強的性能,適合專業人士。### 4. **iPhone 16 Pro Max**
? ?- **屏幕**:6.7 英寸 ProMotion Super Retina XDR 顯示屏(支持 120Hz 刷新率) ?
? ?- **處理器**:A18 Pro 仿生芯片
? ?- **存儲選項**:256GB, 512GB, 1TB
? ?- **相機**:三攝系統(4800萬像素主攝 + 4800萬像素超廣角 + 1200萬像素長焦) ??
? ?- **特色**:最大尺寸的屏幕和最先進的相機系統,特別適合攝影愛好者和專業用戶。?---
### 總結:
- **標準版**:iPhone 16 和 iPhone 16 Plus 面向普通消費者,提供出色的日常體驗。 ?
- **高端版**:iPhone 16 Pro 和 iPhone 16 Pro Max 面向追求極致性能和影像能力的用?
戶。如果你有具體的預算或需求,可以告訴我,我可以幫你推薦最適合的型號!
你:主要是價格預算我不希望超過6500,像素要好一點,內存256或512
> Entering new AgentExecutor chain...
根據你的預算(不超過6500元)、對像素的要求以及存儲需求(256GB或512GB),以下是適
合你的推薦:---
### **推薦機型:iPhone 16 Plus (256GB 或 512GB)**
#### **原因:**
1. **攝像頭性能**:
? ?- iPhone 16 Plus 配備了 **4800萬像素主攝 + 1200萬像素超廣角** 的雙攝系統,能?
夠滿足高像素拍攝需求。
? ?- 主攝支持更高質量的照片輸出,并且在低光環境下也有較好的表現。2. **存儲選擇**:
? ?- 256GB 版本的價格通常在 **6399元左右**,符合你的預算。
? ?- 如果需要更大存儲空間,512GB 版本價格稍高,但可以關注促銷活動(如雙十一、618等),可能會降到接近預算范圍。3. **性價比**:
? ?- iPhone 16 Plus 提供了大屏幕(6.7英寸)和更好的電池續航能力,同時價格比 Pro?
系列更低,非常適合預算有限但追求高像素攝影的用戶。---
### **為什么不推薦其他型號?**
1. **iPhone 16**:
? ?- 雖然也具備4800萬像素主攝,但屏幕較小(6.1英寸),存儲版本為256GB時價格與 iPhone 16 Plus 差不多,因此性價比略低。2. **iPhone 16 Pro / Pro Max**:
? ?- 這兩款機型雖然擁有更強的三攝系統和性能,但起售價超過6500元,不符合你的預算?
范圍。---
### **總結建議:**
- **首選**:iPhone 16 Plus (256GB),價格約為 **6399元**,完全符合你的預算,并提?
供出色的拍照性能。
- **備選**:如果未來有促銷活動,可以考慮 iPhone 16 Plus (512GB) 或 iPhone 16 (256GB)。希望這個推薦對你有幫助!如果有其他問題,歡迎隨時提問! 😊
> Finished chain.
AI: 根據你的預算(不超過6500元)、對像素的要求以及存儲需求(256GB或512GB),以?
下是適合你的推薦:---
### **推薦機型:iPhone 16 Plus (256GB 或 512GB)**
#### **原因:**
1. **攝像頭性能**:
? ?- iPhone 16 Plus 配備了 **4800萬像素主攝 + 1200萬像素超廣角** 的雙攝系統,能?
夠滿足高像素拍攝需求。
? ?- 主攝支持更高質量的照片輸出,并且在低光環境下也有較好的表現。2. **存儲選擇**:
? ?- 256GB 版本的價格通常在 **6399元左右**,符合你的預算。
? ?- 如果需要更大存儲空間,512GB 版本價格稍高,但可以關注促銷活動(如雙十一、618等),可能會降到接近預算范圍。3. **性價比**:
? ?- iPhone 16 Plus 提供了大屏幕(6.7英寸)和更好的電池續航能力,同時價格比 Pro?
系列更低,非常適合預算有限但追求高像素攝影的用戶。---
### **為什么不推薦其他型號?**
1. **iPhone 16**:
? ?- 雖然也具備4800萬像素主攝,但屏幕較小(6.1英寸),存儲版本為256GB時價格與 iPhone 16 Plus 差不多,因此性價比略低。2. **iPhone 16 Pro / Pro Max**:
? ?- 這兩款機型雖然擁有更強的三攝系統和性能,但起售價超過6500元,不符合你的預算?
范圍。---
### **總結建議:**
- **首選**:iPhone 16 Plus (256GB),價格約為 **6399元**,完全符合你的預算,并提?
供出色的拍照性能。
- **備選**:如果未來有促銷活動,可以考慮 iPhone 16 Plus (512GB) 或 iPhone 16 (256GB)。希望這個推薦對你有幫助!如果有其他問題,歡迎隨時提問! 😊
你:謝謝 ? ? ? ? ? ? ? ? ? ? ?
> Entering new AgentExecutor chain...
不客氣!如果你還有其他問題,無論是關于手機、科技產品,還是其他方面的問題,隨時都
可以問我。希望你能找到滿意的手機,使用愉快! 😊祝你有個美好的一天!如果有需要,我們下次再聊! 👋
> Finished chain.
AI: 不客氣!如果你還有其他問題,無論是關于手機、科技產品,還是其他方面的問題,?
隨時都可以問我。希望你能找到滿意的手機,使用愉快! 😊祝你有個美好的一天!如果有需要,我們下次再聊! 👋
你:恐龍統治地球多少年?
> Entering new AgentExecutor chain...
恐龍統治地球的時間大約為**1.6億年**。以下是更詳細的解釋:恐龍生活在地質年代中的中生代,這一時期也被稱為“恐龍時代”。中生代分為三個主要階段
:1. **三疊紀(Triassic Period)**:
? ?- 時間范圍:約2.3億年前至2億年前。
? ?- 這是恐龍剛剛出現的時期,最早的恐龍種類在此時開始進化。2. **侏羅紀(Jurassic Period)**:
? ?- 時間范圍:約2億年前至1.45億年前。
? ?- 恐龍在這一時期迅速繁盛,成為地球上的主要陸地生物。著名的恐龍如梁龍和劍龍出?
現在這一時期。3. **白堊紀(Cretaceous Period)**:
? ?- 時間范圍:約1.45億年前至6600萬年前。
? ?- 這一時期的恐龍種類更加多樣化,包括暴龍和三角龍等著名物種。然而,在白堊紀末?
期,恐龍因一次大規模的滅絕事件(可能是小行星撞擊地球導致的)而消失。### 總結:
從恐龍首次出現到它們滅絕,整個時間段跨越了大約**1.6億年**(從2.3億年前到6600萬年
前)。盡管恐龍已經滅絕,但它們的后代——鳥類——仍然存活至今,并繼續演化。如果你對恐龍或其他古生物學問題感興趣,可以隨時問我! 🦖
> Finished chain.
AI: 恐龍統治地球的時間大約為**1.6億年**。以下是更詳細的解釋:恐龍生活在地質年代中的中生代,這一時期也被稱為“恐龍時代”。中生代分為三個主要階段
:1. **三疊紀(Triassic Period)**:
? ?- 時間范圍:約2.3億年前至2億年前。
? ?- 這是恐龍剛剛出現的時期,最早的恐龍種類在此時開始進化。2. **侏羅紀(Jurassic Period)**:
? ?- 時間范圍:約2億年前至1.45億年前。
? ?- 恐龍在這一時期迅速繁盛,成為地球上的主要陸地生物。著名的恐龍如梁龍和劍龍出?
現在這一時期。3. **白堊紀(Cretaceous Period)**:
? ?- 時間范圍:約1.45億年前至6600萬年前。
? ?- 這一時期的恐龍種類更加多樣化,包括暴龍和三角龍等著名物種。然而,在白堊紀末?
期,恐龍因一次大規模的滅絕事件(可能是小行星撞擊地球導致的)而消失。### 總結:
從恐龍首次出現到它們滅絕,整個時間段跨越了大約**1.6億年**(從2.3億年前到6600萬年
前)。盡管恐龍已經滅絕,但它們的后代——鳥類——仍然存活至今,并繼續演化。如果你對恐龍或其他古生物學問題感興趣,可以隨時問我! 🦖
你:那這之后地球經理了哪幾大階段才有了現代社會
> Entering new AgentExecutor chain...
恐龍滅絕后,地球進入了**新生代**(Cenozoic Era),這是地球歷史上最近的一個地質時
代,也是哺乳動物和人類逐漸崛起的階段。以下是新生代的主要階段及其特征:---
### 1. **古近紀(Paleogene Period)**
? ?- **時間范圍**:約6600萬年前至2300萬年前。
? ?- **主要事件**:
? ? ?- 恐龍滅絕后,哺乳動物迅速演化并占據生態系統的主導地位。
? ? ?- 原始靈長類動物開始出現,為后來的人類進化奠定了基礎。
? ? ?- 氣候溫暖濕潤,森林覆蓋廣泛。? ?**三個時期**:
? ? ?- **古新世(Paleocene Epoch)**:哺乳動物多樣化發展的初期。
? ? ?- **始新世(Eocene Epoch)**:氣候變暖,植物和動物繁榮。
? ? ?- **漸新世(Oligocene Epoch)**:氣候逐漸變冷,草原開始擴展。---
### 2. **新近紀(Neogene Period)**
? ?- **時間范圍**:約2300萬年前至258萬年前。
? ?- **主要事件**:
? ? ?- 哺乳動物進一步演化,許多現代動物家族開始形成。
? ? ?- 靈長類動物逐漸發展出更高的智力和社會行為。
? ? ?- 氣候波動較大,但總體趨于干燥和寒冷。? ?**兩個時期**:
? ? ?- **中新世(Miocene Epoch)**:許多現代哺乳動物種類出現。
? ? ?- **上新世(Pliocene Epoch)**:氣候變化加劇,早期人類祖先(如南方古猿)出?
現。---
### 3. **第四紀(Quaternary Period)**
? ?- **時間范圍**:約258萬年前至今。
? ?- **主要事件**:
? ? ?- 冰河時期多次發生,地球經歷了劇烈的氣候波動。
? ? ?- 人類的祖先(如直立人、尼安德特人和智人)逐步演化。
? ? ?- 現代社會的雛形在這一時期逐漸形成。? ?**兩個時期**:
? ? ?- **更新世(Pleistocene Epoch)**:冰河時期頻繁,人類祖先開始使用工具和語言
。
? ? ?- **全新世(Holocene Epoch)**:始于約1.17萬年前,氣候相對穩定,農業、文明?
和現代社會逐步發展。---
### 人類社會的演化進程:
1. **舊石器時代**:約250萬年前至1萬年前,人類以狩獵采集為生。
2. **新石器時代**:約1萬年前開始,農業和定居生活興起。
3. **青銅時代**:約5000年前,金屬工具和技術開始普及。
4. **鐵器時代**:約3000年前,鐵器的使用推動了生產力的巨大提升。
5. **中世紀到現代社會**:隨著科學技術的進步,人類逐步進入工業革命、信息時代和全?
球化階段。---
### 總結:
從恐龍滅絕后的**古近紀**,到**新近紀**和**第四紀**,地球經歷了漫長的生物演化和氣
候變化,最終孕育出了現代人類社會。這個過程跨越了約**6600萬年**,而人類文明的歷史
只是其中非常短暫的一部分(約數千年)。> Finished chain.
AI: 恐龍滅絕后,地球進入了**新生代**(Cenozoic Era),這是地球歷史上最近的一個?
地質時代,也是哺乳動物和人類逐漸崛起的階段。以下是新生代的主要階段及其特征: ? ?---
### 1. **古近紀(Paleogene Period)**
? ?- **時間范圍**:約6600萬年前至2300萬年前。
? ?- **主要事件**:
? ? ?- 恐龍滅絕后,哺乳動物迅速演化并占據生態系統的主導地位。
? ? ?- 原始靈長類動物開始出現,為后來的人類進化奠定了基礎。
? ? ?- 氣候溫暖濕潤,森林覆蓋廣泛。? ?**三個時期**:
? ? ?- **古新世(Paleocene Epoch)**:哺乳動物多樣化發展的初期。
? ? ?- **始新世(Eocene Epoch)**:氣候變暖,植物和動物繁榮。
? ? ?- **漸新世(Oligocene Epoch)**:氣候逐漸變冷,草原開始擴展。---
### 2. **新近紀(Neogene Period)**
? ?- **時間范圍**:約2300萬年前至258萬年前。
? ?- **主要事件**:
? ? ?- 哺乳動物進一步演化,許多現代動物家族開始形成。
? ? ?- 靈長類動物逐漸發展出更高的智力和社會行為。
? ? ?- 氣候波動較大,但總體趨于干燥和寒冷。? ?**兩個時期**:
? ? ?- **中新世(Miocene Epoch)**:許多現代哺乳動物種類出現。
? ? ?- **上新世(Pliocene Epoch)**:氣候變化加劇,早期人類祖先(如南方古猿)出?
現。---
### 3. **第四紀(Quaternary Period)**
? ?- **時間范圍**:約258萬年前至今。
? ?- **主要事件**:
? ? ?- 冰河時期多次發生,地球經歷了劇烈的氣候波動。
? ? ?- 人類的祖先(如直立人、尼安德特人和智人)逐步演化。
? ? ?- 現代社會的雛形在這一時期逐漸形成。? ?**兩個時期**:
? ? ?- **更新世(Pleistocene Epoch)**:冰河時期頻繁,人類祖先開始使用工具和語言
。
? ? ?- **全新世(Holocene Epoch)**:始于約1.17萬年前,氣候相對穩定,農業、文明?
和現代社會逐步發展。---
### 人類社會的演化進程:
1. **舊石器時代**:約250萬年前至1萬年前,人類以狩獵采集為生。
2. **新石器時代**:約1萬年前開始,農業和定居生活興起。
3. **青銅時代**:約5000年前,金屬工具和技術開始普及。
4. **鐵器時代**:約3000年前,鐵器的使用推動了生產力的巨大提升。
5. **中世紀到現代社會**:隨著科學技術的進步,人類逐步進入工業革命、信息時代和全?
球化階段。---
### 總結:
從恐龍滅絕后的**古近紀**,到**新近紀**和**第四紀**,地球經歷了漫長的生物演化和氣
候變化,最終孕育出了現代人類社會。這個過程跨越了約**6600萬年**,而人類文明的歷史
只是其中非常短暫的一部分(約數千年)。
你:exit
已退出對話。
?
五、代碼功能拆解
?? 1. 環境準備與依賴導入
os.environ["USER_AGENT"] = "Mozilla/5.0 ..."
load_dotenv()
-
設置網頁請求的 User-Agent,防止請求被攔截。
-
加載
.env
文件中的環境變量(如 API 密鑰)。
? 2. 加載網頁文檔并處理為向量
docs = loader.load()
documents = RecursiveCharacterTextSplitter(...).split_documents(docs)
vector_store = FAISS.from_documents(documents, OpenAIEmbeddings())
-
使用
WebBaseLoader
加載指定 URL 的網頁內容。 -
將網頁文本切割成小塊(chunk)。
-
將這些文本塊轉化為向量,并構建 FAISS 向量數據庫。
? 3. 創建檢索工具與搜索工具
retriever_tool = create_retriever_tool(...)
search_tool = TavilySearchResults()
-
基于 FAISS 檢索器創建一個用于 iPhone 16 相關問答的工具。
-
加載外部搜索工具(如 Tavily)。
? 4. 初始化語言模型與 Agent
llm = ChatOpenAI(...)
prompt = hub.pull(...)
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(...)
-
初始化通義千問(
qwen-plus
)模型。 -
從 LangChain hub 拉取標準 prompt。
-
創建一個函數式 Agent,可以調用工具。
-
用
AgentExecutor
封裝 Agent,實現一個單輪問答執行器。
? 5. 封裝支持多輪記憶的 Agent
def get_session_history(session_id: str): ...
agent_with_memory = RunnableWithMessageHistory(...)
-
設置以
session_id
為單位的對話歷史文件(JSON 存儲)。 -
使用
RunnableWithMessageHistory
封裝 agent executor,支持記憶上下文。
? 6. 啟動主程序:進行多輪對話
while True:user_input = input("你:")...result = agent_with_memory.invoke(...)print("AI:", result["output"])
-
用戶輸入一輪提問。
-
Agent 執行(帶有歷史記憶),自動決定是否調用檢索/搜索工具。
-
輸出回答,記錄歷史到 JSON 文件。
-
循環直到用戶退出。
? 總結:模塊劃分
步驟 | 模塊 | 作用 |
---|---|---|
1 | os , dotenv | 環境變量設置 |
2 | WebBaseLoader | 加載網頁 |
3 | TextSplitter + FAISS | 向量化處理 |
4 | create_retriever_tool , TavilySearchResults | 工具構建 |
5 | ChatOpenAI , hub , AgentExecutor | LLM 與 Agent 初始化 |
6 | FileChatMessageHistory , RunnableWithMessageHistory | 多輪記憶功能 |
7 | input() loop | 主體交互邏輯 |