【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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/…