【LangchainAgent】Agent基本構建與使用

目錄

一、功能簡述

代碼功能概括

🎯 核心能力

二、運作流程

三、核心代碼

四、運行結果?

五、代碼功能拆解

?? 1. 環境準備與依賴導入

? 2. 加載網頁文檔并處理為向量

? 3. 創建檢索工具與搜索工具

? 4. 初始化語言模型與 Agent

? 5. 封裝支持多輪記憶的 Agent

? 6. 啟動主程序:進行多輪對話

? 總結:模塊劃分


一、功能簡述

?這段代碼構建了一個基于 LangChain 的 網頁文檔+搜索結合的多輪對話智能體系統,可以理解用戶問題,通過調用文檔檢索工具或在線搜索工具智能作答,并具備記住對話歷史的能力。下面是簡要概括:

代碼功能概括

該程序通過以下步驟完成一個帶記憶的多輪對話智能體:

  1. 環境設置:加載 .env 環境變量、設置 User-Agent 以防網頁請求失敗。

  2. 網頁加載與處理

    • 讀取指定網頁內容(例如一篇關于 iPhone 的新聞)。

    • 使用文本切割器切分為小段落。

    • 用 OpenAI 嵌入模型將其向量化,存入 FAISS 向量數據庫。

  3. 工具創建

    • 創建一個用于搜索本地文檔的檢索工具(Retriever Tool)。

    • 加載一個第三方網絡搜索工具(Tavily Search Tool)。

  4. 大模型初始化

    • 加載一個 ChatOpenAI 對象(使用 qwen-plus 模型)。

  5. 智能體構建

    • 從 LangChain Hub 加載一個標準函數式 agent 的 Prompt。

    • 用上述工具和大模型創建一個函數式 Agent。

    • 包裝成 AgentExecutor,可處理工具調用。

  6. 多輪對話支持

    • RunnableWithMessageHistory 將 AgentExecutor 包裝為支持歷史記憶的智能體。

    • 使用 FileChatMessageHistory 將歷史記錄持久保存為 JSON 文件,按用戶 session 區分。

  7. 運行交互主程序

    • 啟動一個命令行循環,接收用戶輸入,調用智能體進行回復,支持連續上下文對話。

    • 用戶輸入 "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 文件。

  • 循環直到用戶退出。


? 總結:模塊劃分

步驟模塊作用
1os, dotenv環境變量設置
2WebBaseLoader加載網頁
3TextSplitter + FAISS向量化處理
4create_retriever_tool, TavilySearchResults工具構建
5ChatOpenAI, hub, AgentExecutorLLM 與 Agent 初始化
6FileChatMessageHistory, RunnableWithMessageHistory多輪記憶功能
7input() loop主體交互邏輯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84061.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84061.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【云安全】以Aliyun為例聊云廠商服務常見利用手段

目錄 OSS-bucket_policy_readable OSS-object_public_access OSS-bucket_object_traversal OSS-Special Bucket Policy OSS-unrestricted_file_upload OSS-object_acl_writable ECS-SSRF 云攻防場景下對云廠商服務的利用大同小異,下面以阿里云為例 其他如騰…

完成一個可交互的k8s管理平臺的頁面開發

使用deepseek完成設計一個k8s管理平臺,關鍵詞如下: 完成一個可交互的k8s管理平臺的頁面開發Kubernetes 管理平臺頁面設計 下面是一個基于現代Web技術的可交互Kubernetes管理平臺的頁面設計方案,使用React作為前端框架,配合Ant De…

TDengine 支持的平臺匯總

TDengine 服務端支持的平臺列表 注:1) ● 表示經過官方測試驗證, ○ 表示非官方測試驗證,E 表示僅企業版支持。 2) 社區版僅支持主流操作系統的較新版本,包括 Ubuntu 18/CentOS 7/CentOS Stream/RedHat/Debian/CoreOS/FreeBSD/Op…

使用 HTML + JavaScript 實現文章逐句高亮朗讀功能

在這個信息爆炸的時代,我們每天都要面對大量的文字閱讀。無論是學習、工作還是個人成長,閱讀都扮演著至關重要的角色。然而,在快節奏的生活中,我們往往難以找到足夠的安靜時間專注于閱讀。本文用 HTML JavaScript 實現了一個基于…

理解非結構化文檔:將 Reducto 解析與 Elasticsearch 結合使用

作者:來自 Elastic Adel Wu 演示如何將 Reducto 的文檔處理與 Elasticsearch 集成以實現語義搜索。 Elasticsearch 與業界領先的生成式 AI 工具和提供商有原生集成。歡迎觀看我們的網絡研討會,了解如何超越 RAG 基礎,或使用 Elastic 向量數據…

從Copilot到Agent,AI Coding是如何進化的?

編程原本是一項具有一定門檻的技能,但借助 AI Coding 產品,新手也能寫出可運行的代碼,非專業人員如業務分析師、產品經理,也能在 AI 幫助下直接生成簡單應用。 這一演變對軟件產業產生了深遠影響。當 AI 逐步參與代碼生成、調試乃…

UGUI Text/TextMeshPro字體組件

UGUI Text組件的不當使用及其性能瓶頸與優化 在Unity UGUI系統中,Text 組件(或其升級版 TextMeshPro)是顯示文本信息的核心元素。然而,如果不當使用,它極易成為UI性能瓶頸的罪魁禍首,尤其是在預制體、屬性…

淺談 React Hooks

React Hooks 是 React 16.8 引入的一組 API,用于在函數組件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通過簡潔的函數接口,解決了狀態與 UI 的高度解耦,通過函數式編程范式實現更靈活 Rea…

【個人筆記】數據庫原理(西電)

寫在前面:文中提到的頁面指向(如“p45”),除特別說明,都是指對應ppt上的頁面,非同款ppt的友友可忽略 第一章 ER圖和關系分解見課本p69 ER圖是常用的 概念模型 方形:實體圓形:屬性…

SDC命令詳解:使用set_propagated_clock命令進行約束

相關閱讀 SDC命令詳解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 目錄 指定端口列表/集合 簡單使用 注意事項 傳播時鐘是在進行了時鐘樹綜合后,使用set_propagated_clock命令可以將一個理想時鐘轉換為傳播時鐘&#x…

關于華為倉頡編程語言

文章目錄 一、基本概況二、技術特點1. 多范式編程2. 原生智能化3. 高性能與安全4. 全場景兼容 三、編譯器與開發工具四、語言相似性對比五、行業應用實例總結 最近經常看到這個東西,于是搜了一下,整理了一些內容,水一篇,以后慢慢研…

【STM32F1標準庫】理論——定時器中的輸出比較

目錄 一、定時器的輸出比較介紹(Output Compare) 1.整體簡介 2.輸出比較單元具體功能框圖 3.以PWM模式1舉例 二、雜談 1.CCR的全名 2.PWM簡介 3.舵機簡介 4.直流電機及驅動模塊TB6612簡介 一、定時器的輸出比較介紹(Output Compare…

前端開發面試題總結-HTML篇

文章目錄 HTML面試高頻問答一、HTML 的 src 和 href 屬性有什么區別?二、什么是 HTML 語義化?三、HTML的 script 標簽中 defer 和 async 有什么區別?四、HTML5 相比于 HTML有哪些更新?五、HTML行內元素有哪些? 塊級元素有哪些? 空(void)元素有哪些?六、iframe有哪些優點…

Scrapy爬蟲教程(新手)

1. Scrapy的核心組成 引擎(engine):scrapy的核心,所有模塊的銜接,數據流程梳理。 調度器(scheduler):本質可以看成一個集合和隊列,里面存放著一堆即將要發送的請求&#…

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型時序預測

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型時序預測 目錄 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型時序預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五…

歷史數據分析——唐山港

個股簡介 公司簡介: 唐山港口投資有限公司、北京京泰投資管理中心、河北利豐燕山投資管理中心、國富投資公司、唐山市建設投資公司、河北省建設投資公司、國投交通實業公司7家發起人共同發起設立。 經營分析: 港口經營一般項目:港口貨物裝卸搬運活動;普通貨物倉儲服務(不含…

云端回聲消除:讓超低端硬件能玩實時打斷

傳統認知里“優質交互 高性能硬件”的等式正在被打破? 超低端開發板也能實現高配置硬件才有的實時打斷語音交互? 網易云信推出的云端回聲消除技術不僅解決了硬件配置對交互體驗的限制,更以系統性解決方案重構了嵌入式設備的實時對話體驗。 困…

堆排序的詳細解讀

一.堆的基本概念 1.什么是堆 堆是一種特殊的完全二叉樹,滿足一下性質: 最大堆:每個節點的值都大于或等于其子節點的值(堆頂元素最大)最小堆:每個節點的值都小于或等于其子節點的值(堆頂元素最小…

hmdp知識點

1. 前置知識 1.1 MyBatisPlus的基本使用 1.1.1 引入依賴 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version> </dependency> 1.1.2 建立實體類和數…

分享5個免費5個在線工具網站:Docsmall、UIED Tool在線工具箱、草料二維碼、圖片在線壓縮、表情符號

01. Docsmall 它是一個免費的在線圖片與PDF處理工具&#xff0c;功能主要包含Ai圖片處理工具&#xff0c;圖片壓縮工具&#xff0c;圖片PDF格式轉換工具等&#xff0c;如下圖&#xff0c;我認為比較實用的是自動摳圖、圖片變高清、圖片壓縮和PDF壓縮。 https://docsmall.com/…