智能对话助手

智能对话助手 1.定义工具import os from langchain_community.tools.tavily_search import TavilySearchResults # 定义 AVILY_KEY 密钥 os.environ[TAVILY_API_KEY] XXXXXXXXXXX # 查询 Tavily 搜索 API search TavilySearchResults(max_results1) # 执行查询 res search.invoke(今天上海天气怎么样) print(res)2 定义Retrieverfrom langchain_community.document_loaders import WebBaseLoader from langchain_community.vectorstores import FAISS from langchain_openai import OpenAIEmbeddings from langchain_text_splitters import RecursiveCharacterTextSplitter import os import dotenv dotenv.load_dotenv() # 1. 提供一个大模型 os.environ[OPENAI_API_KEY] os.getenv(OPENAI_API_KEY1) os.environ[OPENAI_BASE_URL] os.getenv(OPENAI_BASE_URL) embedding_model OpenAIEmbeddings() # 2.加载HTML内容为一个文档对象 loader WebBaseLoader(https://%E7%8C%AB) docs loader.load() #print(docs) # 3.分割文档 splitter RecursiveCharacterTextSplitter( chunk_size1000, chunk_overlap200 ) documents splitter.split_documents(docs) # 4.向量化 得到向量数据库对象 vector FAISS.from_documents(documents, embedding_model) # 5.创建检索器 retriever vector.as_retriever() # 测试检索结果 # print(retriever.invoke(猫的特征)[0])3 创建工具、工具集from langchain.tools.retriever import create_retriever_tool # 创建一个工具来检索文档 retriever_tool create_retriever_tool( retrieverretriever, namewiki_search, description搜索维基百科, ) # 构建工具集 tools [search, retriever_tool]4 语言模型调用工具from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage # 获取大模型 model ChatOpenAI(modelgpt-4o-mini) # 模型绑定工具 model_with_tools model.bind_tools(tools) # 根据输入自动调用工具 messages [HumanMessage(content今天上海天气怎么样)] response model_with_tools.invoke(messages) print(fContentString: {response.content}) print(fToolCalls: {response.tool_calls})5 创建Agent程序(使用通用方式)from langchain import hub prompt hub.pull(hwchase17/openai-functions-agent) print(prompt.messages)from langchain.agents import create_tool_calling_agent from langchain.agents import AgentExecutor # 创建Agent对象 agent create_tool_calling_agent(model, tools, prompt) # 创建AgentExecutor对象 agent_executor AgentExecutor(agentagent, toolstools,verboseTrue)6 运行Agentprint(agent_executor.invoke({input: 猫的特征})) print(agent_executor.invoke({input: 今天上海天气怎么样}))7 添加记忆from langchain_community.chat_message_histories import ChatMessageHistory from langchain_core.chat_history import BaseChatMessageHistory from langchain_core.runnables.history import RunnableWithMessageHistory store {} # 调取指定session_id对应的memory def get_session_history(session_id: str) - BaseChatMessageHistory: if session_id not in store: store[session_id] ChatMessageHistory() return store[session_id] agent_with_chat_history RunnableWithMessageHistory( runnableagent_executor, get_session_historyget_session_history, input_messages_keyinput, history_messages_keychat_history, ) response agent_with_chat_history.invoke( {input: Hi我的名字是Cyber}, config{configurable: {session_id: 123}}, ) print(response)response agent_with_chat_history.invoke( {input: 我叫什么名字?}, config{configurable: {session_id: 123}}, ) print(response)print(response) #%% response agent_with_chat_history.invoke( {input: 我叫什么名字?}, config{configurable: {session_id: 4566}}, ) print(response)