Langchian构建代理
文章目录
- 概要
- ReAct 代理
- ReAct 使用
- ReAct基本用法
- 提示词模板
- 内存使用
- 迭代使用
- 返回执行每一步情况
- 限制输出行数
- 设置运行超时时间
- 不使用代理下LLM如何结合工具
- 案例
- 案例2
概要
单靠语言模型无法采取行动 - 它们只输出文本。 LangChain 的一个重要用例是创建 代理。 代理是使用大型语言模型作为推理引擎的系统,以确定采取哪些行动以及这些行动的输入应该是什么。 这些行动的结果可以反馈到代理中,代理可以判断是否需要更多的行动,或者是否可以结束。
LangGraph 是 LangChain 的一个扩展,专门旨在创建高度可控和可定制的代理。
LangChain 中有一个遗留的 agent 概念,我们正朝着弃用的方向发展:AgentExecutor。 AgentExecutor 本质上是代理的运行时。 这是一个很好的入门地方,但随着你开始拥有更多自定义代理,它的灵活性不足。 为了解决这个问题,我们构建了 LangGraph,使其成为一个灵活且高度可控的运行时。
pip install langgraph 用来创建代理的API
ReAct 代理
构建代理的一种流行架构是 ReAct。 ReAct 在一个迭代过程中结合了推理和行动 - 实际上,名称 “ReAct” 代表 “Reason” 和 “Act”。
一般流程如下:
- 模型将“思考”在响应输入和任何先前观察时采取的步骤。
- 模型将从可用工具中选择一个动作(或选择回应用户)。
- 模型将为该工具生成参数。
- 代理运行时(执行器)将解析所选工具,并使用生成的参数调用它。
- 执行器将工具调用的结果作为观察返回给模型。
- 这个过程会重复,直到代理选择回应。
有一些基于通用提示的实现不需要任何特定于模型的特性,但最 可靠的实现使用像工具调用这样的特性来可靠地格式化输出 并减少方差。
ReAct 使用
ReAct基本用法
对于工具调用的 ReAct 风格代理的基本创建和使用,功能是相同的。首先,让我们定义一个模型和工具,然后我们将使用这些来创建一个代理。
import osfrom langchain_community.chat_models import ChatZhipuAI
from langchain_community.tools import TavilySearchResults
from langgraph.prebuilt import create_react_agent"""
使用 ReAct 创建一个简单的代理
"""
# 设置 TAVILY 的 API key
os.environ["TAVILY_API_KEY"] = "tvl--qYsyI7"
# 搜索工具。max_results=1 ==》每次只返回一个结果
search_tool = TavilySearchResults(max_results=1)
tools = [search_tool]
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5eb--dKxlr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()
# 创建个llm与tool的智能体
app = create_react_agent(llm,tools=tools)rest = app.invoke({"messages":[("human","2025年3月15日,成都市天气怎么样?")]})
print(rest)
print('-------------')
print(f"content:{rest['messages']}")print('================')
rest = app.invoke({"messages":[("human","中国首都是哪个?")]})
print(rest)
print('-------------')
print(f"content:{rest['messages']}")
结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\agent代理\代理案例ReAct.py
{'messages': [HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='edd4ae1a-dcb9-43d5-a09c-26a790f8b511'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891217097692793925', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-170472fb-85df-48be-9fee-616a1c27df5c-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891217097692793925', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转", "score": 0.96222496}]', name='tavily_search_results_json', id='103cd191-d86e-44c2-a541-e634c49d36f9', tool_call_id='call_-8891217097692793925', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转', 'score': 0.96222496, 'raw_content': None}], 'response_time': 2.57}), AIMessage(content='根据成都气象微博在2025年3月15日7时发布的天气预报,预计成都市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃。因此,2025年3月15日成都市的天气可能会比较阴冷,建议市民注意保暖。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 75, 'prompt_tokens': 285, 'total_tokens': 360}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-7c1f4fa4-886e-48a1-a4b4-dc18a8508149-0')]}
-------------
content:[HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='edd4ae1a-dcb9-43d5-a09c-26a790f8b511'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891217097692793925', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-170472fb-85df-48be-9fee-616a1c27df5c-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891217097692793925', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转", "score": 0.96222496}]', name='tavily_search_results_json', id='103cd191-d86e-44c2-a541-e634c49d36f9', tool_call_id='call_-8891217097692793925', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转', 'score': 0.96222496, 'raw_content': None}], 'response_time': 2.57}), AIMessage(content='根据成都气象微博在2025年3月15日7时发布的天气预报,预计成都市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃。因此,2025年3月15日成都市的天气可能会比较阴冷,建议市民注意保暖。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 75, 'prompt_tokens': 285, 'total_tokens': 360}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-7c1f4fa4-886e-48a1-a4b4-dc18a8508149-0')]
================
{'messages': [HumanMessage(content='中国首都是哪个?', additional_kwargs={}, response_metadata={}, id='078843fc-8698-4d37-bff4-bb2ee626e80b'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"中国首都"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891210466261617346', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 34, 'prompt_tokens': 142, 'total_tokens': 176}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-afb3a061-8104-41f3-83ea-1fdfc56decc7-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '中国首都'}, 'id': 'call_-8891210466261617346', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "中华人民共和国首都 - 维基百科", "url": "https://zh.wikipedia.org/zh-hans/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E9%A6%96%E9%83%BD", "content": "编辑 中共中央所在地的变迁[编辑] 中国共产党成立[编辑] 二七大罢工、迁往广州至北伐战争[编辑] 国民党清党运动[编辑] 中华苏维埃共和国成立[编辑] 红军长征[编辑] 国共谈判至第二次国共内战[编辑] 革命胜利前夕[编辑] 红色首都的变迁[编辑] 红都[编辑] 第二中央[编辑] 定都北京[编辑] 1949年前候选首都城市[编辑] 哈尔滨特别市[编辑] 毛泽东与王稼祥的讨论[编辑] 确定北京作为新中国首都[编辑] 北京非首都功能疏解[编辑] 宪法规定[编辑] 时间线[编辑] 1931年11月7日 瑞金(瑞京) 中国共产党领导的第一个红色政权——中华苏维埃共和国诞生。 1934年10月10日 — 中共中央撤离瑞金,随军踏上二万五千里长征路。 1935年11月7日 瓦窑堡 中共中央进驻瓦窑堡。 另见[编辑] 参考资料[编辑] (原始内容存档于2024-02-15). (原始内容存档于2011-01-18). (原始内容存档于2024-02-07) –通过新华网. (原始内容存档于2024-02-07). (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2009-05-01) –通过人民网. (原始内容存档于2013-05-22) –通过人民网. [2024年2月28日]. (原始内容存档于2024年2月28日) –通过人民网. (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2024-02-16) –通过中华人民共和国教育部. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-01-30) –通过人民网. (原始内容存档于2024-02-19) –通过人民网. (原始内容存档于2024-02-19) –通过中共中央党史和文献研究院. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2012-01-25) –通过人民网. (原始内容存档于2024-02-16). (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16). (原始内容存档于2024-02-16) –通过中国共产党新闻网. (原始内容存档于2022-10-21) –通过邓小平纪念网. (原始内容存档于2024-02-15) –通过西北政法大学新闻中心. (原始内容存档于2024-02-17) –通过陕甘宁边区红色记忆多媒体资料库. (原始内容存档于2024-02-17) –通过群众网. (原始内容存档于2024-02-15) –通过中国经济网. (原始内容存档于2024-02-15) –通过中国共产党新闻网. (原始内容存档于2024-02-15) –通过中国档案资讯网. (原始内容存档于2024-02-16) –通过中国共产党新闻网. (原始内容存档于2024-02-21) –通过中国共产党新闻网. (原始内容存档于2024-02-21) –通过中国领导干部资料库. (原始内容存档于2024-02-15). 2019-03-25 –通过中国共产党新闻网. (原始内容存档于2022-01-10). (原始内容存档于2024-03-12). (原始内容存档于2024-03-12) –通过新华网. (原始内容存档于2024-03-12) –通过人民网. 外部链接[编辑] (原始内容存档于2024-02-15). (原始内容存档于2024-05-15). (原始内容存档于2024-02-15) –通过河套学院纪检监察网. (原始内容存档于2024-02-15). (原始内容存档于2024-02-15). (原始内容存档于2024-05-19).", "score": 0.8282873}]', name='tavily_search_results_json', id='c87732b4-21af-46c9-b4af-53bb38a92b36', tool_call_id='call_-8891210466261617346', artifact={'query': '中国首都', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://zh.wikipedia.org/zh-hans/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E9%A6%96%E9%83%BD', 'title': '中华人民共和国首都 - 维基百科', 'content': '编辑 中共中央所在地的变迁[编辑] 中国共产党成立[编辑] 二七大罢工、迁往广州至北伐战争[编辑] 国民党清党运动[编辑] 中华苏维埃共和国成立[编辑] 红军长征[编辑] 国共谈判至第二次国共内战[编辑] 革命胜利前夕[编辑] 红色首都的变迁[编辑] 红都[编辑] 第二中央[编辑] 定都北京[编辑] 1949年前候选首都城市[编辑] 哈尔滨特别市[编辑] 毛泽东与王稼祥的讨论[编辑] 确定北京作为新中国首都[编辑] 北京非首都功能疏解[编辑] 宪法规定[编辑] 时间线[编辑] 1931年11月7日 瑞金(瑞京) 中国共产党领导的第一个红色政权——中华苏维埃共和国诞生。 1934年10月10日 — 中共中央撤离瑞金,随军踏上二万五千里长征路。 1935年11月7日 瓦窑堡 中共中央进驻瓦窑堡。 另见[编辑] 参考资料[编辑] (原始内容存档于2024-02-15). (原始内容存档于2011-01-18). (原始内容存档于2024-02-07) –通过新华网. (原始内容存档于2024-02-07). (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2009-05-01) –通过人民网. (原始内容存档于2013-05-22) –通过人民网. [2024年2月28日]. (原始内容存档于2024年2月28日) –通过人民网. (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2024-02-16) –通过中华人民共和国教育部. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-01-30) –通过人民网. (原始内容存档于2024-02-19) –通过人民网. (原始内容存档于2024-02-19) –通过中共中央党史和文献研究院. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2012-01-25) –通过人民网. (原始内容存档于2024-02-16). (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16). (原始内容存档于2024-02-16) –通过中国共产党新闻网. (原始内容存档于2022-10-21) –通过邓小平纪念网. (原始内容存档于2024-02-15) –通过西北政法大学新闻中心. (原始内容存档于2024-02-17) –通过陕甘宁边区红色记忆多媒体资料库. (原始内容存档于2024-02-17) –通过群众网. (原始内容存档于2024-02-15) –通过中国经济网. (原始内容存档于2024-02-15) –通过中国共产党新闻网. (原始内容存档于2024-02-15) –通过中国档案资讯网. (原始内容存档于2024-02-16) –通过中国共产党新闻网. (原始内容存档于2024-02-21) –通过中国共产党新闻网. (原始内容存档于2024-02-21) –通过中国领导干部资料库. (原始内容存档于2024-02-15). 2019-03-25 –通过中国共产党新闻网. (原始内容存档于2022-01-10). (原始内容存档于2024-03-12). (原始内容存档于2024-03-12) –通过新华网. (原始内容存档于2024-03-12) –通过人民网. 外部链接[编辑] (原始内容存档于2024-02-15). (原始内容存档于2024-05-15). (原始内容存档于2024-02-15) –通过河套学院纪检监察网. (原始内容存档于2024-02-15). (原始内容存档于2024-02-15). (原始内容存档于2024-05-19).', 'score': 0.8282873, 'raw_content': None}], 'response_time': 1.08}), AIMessage(content='中国首都是北京。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 7, 'prompt_tokens': 1368, 'total_tokens': 1375}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-a4b21500-f140-4d3d-92c2-9be7bb496177-0')]}
-------------
content:[HumanMessage(content='中国首都是哪个?', additional_kwargs={}, response_metadata={}, id='078843fc-8698-4d37-bff4-bb2ee626e80b'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"中国首都"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891210466261617346', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 34, 'prompt_tokens': 142, 'total_tokens': 176}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-afb3a061-8104-41f3-83ea-1fdfc56decc7-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '中国首都'}, 'id': 'call_-8891210466261617346', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "中华人民共和国首都 - 维基百科", "url": "https://zh.wikipedia.org/zh-hans/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E9%A6%96%E9%83%BD", "content": "编辑 中共中央所在地的变迁[编辑] 中国共产党成立[编辑] 二七大罢工、迁往广州至北伐战争[编辑] 国民党清党运动[编辑] 中华苏维埃共和国成立[编辑] 红军长征[编辑] 国共谈判至第二次国共内战[编辑] 革命胜利前夕[编辑] 红色首都的变迁[编辑] 红都[编辑] 第二中央[编辑] 定都北京[编辑] 1949年前候选首都城市[编辑] 哈尔滨特别市[编辑] 毛泽东与王稼祥的讨论[编辑] 确定北京作为新中国首都[编辑] 北京非首都功能疏解[编辑] 宪法规定[编辑] 时间线[编辑] 1931年11月7日 瑞金(瑞京) 中国共产党领导的第一个红色政权——中华苏维埃共和国诞生。 1934年10月10日 — 中共中央撤离瑞金,随军踏上二万五千里长征路。 1935年11月7日 瓦窑堡 中共中央进驻瓦窑堡。 另见[编辑] 参考资料[编辑] (原始内容存档于2024-02-15). (原始内容存档于2011-01-18). (原始内容存档于2024-02-07) –通过新华网. (原始内容存档于2024-02-07). (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2009-05-01) –通过人民网. (原始内容存档于2013-05-22) –通过人民网. [2024年2月28日]. (原始内容存档于2024年2月28日) –通过人民网. (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2024-02-16) –通过中华人民共和国教育部. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-01-30) –通过人民网. (原始内容存档于2024-02-19) –通过人民网. (原始内容存档于2024-02-19) –通过中共中央党史和文献研究院. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2012-01-25) –通过人民网. (原始内容存档于2024-02-16). (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16). (原始内容存档于2024-02-16) –通过中国共产党新闻网. (原始内容存档于2022-10-21) –通过邓小平纪念网. (原始内容存档于2024-02-15) –通过西北政法大学新闻中心. (原始内容存档于2024-02-17) –通过陕甘宁边区红色记忆多媒体资料库. (原始内容存档于2024-02-17) –通过群众网. (原始内容存档于2024-02-15) –通过中国经济网. (原始内容存档于2024-02-15) –通过中国共产党新闻网. (原始内容存档于2024-02-15) –通过中国档案资讯网. (原始内容存档于2024-02-16) –通过中国共产党新闻网. (原始内容存档于2024-02-21) –通过中国共产党新闻网. (原始内容存档于2024-02-21) –通过中国领导干部资料库. (原始内容存档于2024-02-15). 2019-03-25 –通过中国共产党新闻网. (原始内容存档于2022-01-10). (原始内容存档于2024-03-12). (原始内容存档于2024-03-12) –通过新华网. (原始内容存档于2024-03-12) –通过人民网. 外部链接[编辑] (原始内容存档于2024-02-15). (原始内容存档于2024-05-15). (原始内容存档于2024-02-15) –通过河套学院纪检监察网. (原始内容存档于2024-02-15). (原始内容存档于2024-02-15). (原始内容存档于2024-05-19).", "score": 0.8282873}]', name='tavily_search_results_json', id='c87732b4-21af-46c9-b4af-53bb38a92b36', tool_call_id='call_-8891210466261617346', artifact={'query': '中国首都', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://zh.wikipedia.org/zh-hans/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E9%A6%96%E9%83%BD', 'title': '中华人民共和国首都 - 维基百科', 'content': '编辑 中共中央所在地的变迁[编辑] 中国共产党成立[编辑] 二七大罢工、迁往广州至北伐战争[编辑] 国民党清党运动[编辑] 中华苏维埃共和国成立[编辑] 红军长征[编辑] 国共谈判至第二次国共内战[编辑] 革命胜利前夕[编辑] 红色首都的变迁[编辑] 红都[编辑] 第二中央[编辑] 定都北京[编辑] 1949年前候选首都城市[编辑] 哈尔滨特别市[编辑] 毛泽东与王稼祥的讨论[编辑] 确定北京作为新中国首都[编辑] 北京非首都功能疏解[编辑] 宪法规定[编辑] 时间线[编辑] 1931年11月7日 瑞金(瑞京) 中国共产党领导的第一个红色政权——中华苏维埃共和国诞生。 1934年10月10日 — 中共中央撤离瑞金,随军踏上二万五千里长征路。 1935年11月7日 瓦窑堡 中共中央进驻瓦窑堡。 另见[编辑] 参考资料[编辑] (原始内容存档于2024-02-15). (原始内容存档于2011-01-18). (原始内容存档于2024-02-07) –通过新华网. (原始内容存档于2024-02-07). (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2009-05-01) –通过人民网. (原始内容存档于2013-05-22) –通过人民网. [2024年2月28日]. (原始内容存档于2024年2月28日) –通过人民网. (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2024-02-08) –通过人民网. (原始内容存档于2024-02-16) –通过中华人民共和国教育部. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-01-30) –通过人民网. (原始内容存档于2024-02-19) –通过人民网. (原始内容存档于2024-02-19) –通过中共中央党史和文献研究院. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2012-01-25) –通过人民网. (原始内容存档于2024-02-16). (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16) –通过人民网. (原始内容存档于2024-02-16). (原始内容存档于2024-02-16) –通过中国共产党新闻网. (原始内容存档于2022-10-21) –通过邓小平纪念网. (原始内容存档于2024-02-15) –通过西北政法大学新闻中心. (原始内容存档于2024-02-17) –通过陕甘宁边区红色记忆多媒体资料库. (原始内容存档于2024-02-17) –通过群众网. (原始内容存档于2024-02-15) –通过中国经济网. (原始内容存档于2024-02-15) –通过中国共产党新闻网. (原始内容存档于2024-02-15) –通过中国档案资讯网. (原始内容存档于2024-02-16) –通过中国共产党新闻网. (原始内容存档于2024-02-21) –通过中国共产党新闻网. (原始内容存档于2024-02-21) –通过中国领导干部资料库. (原始内容存档于2024-02-15). 2019-03-25 –通过中国共产党新闻网. (原始内容存档于2022-01-10). (原始内容存档于2024-03-12). (原始内容存档于2024-03-12) –通过新华网. (原始内容存档于2024-03-12) –通过人民网. 外部链接[编辑] (原始内容存档于2024-02-15). (原始内容存档于2024-05-15). (原始内容存档于2024-02-15) –通过河套学院纪检监察网. (原始内容存档于2024-02-15). (原始内容存档于2024-02-15). (原始内容存档于2024-05-19).', 'score': 0.8282873, 'raw_content': None}], 'response_time': 1.08}), AIMessage(content='中国首都是北京。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 7, 'prompt_tokens': 1368, 'total_tokens': 1375}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-a4b21500-f140-4d3d-92c2-9be7bb496177-0')]进程已结束,退出代码为 0
提示词模板
LangGraph 的预构建 create_react_agent 并不直接将提示模板作为参数,而是接受一个 state_modifier 参数。这个参数在调用大型语言模型之前修改图的状态,可以是以下四个值之一:
- 一个 SystemMessage,它会被添加到消息列表的开头。
- 一个 string,它会被转换为 SystemMessage 并添加到消息列表的开头。
- 一个 Callable,它应该接受完整的图状态。输出将传递给语言模型。
- 或者一个 Runnable,它应该接受完整的图状态。输出将传递给语言模型。
import osfrom langchain_community.chat_models import ChatZhipuAI
from langchain_community.tools import TavilySearchResults
from langchain_core.prompts import ChatPromptTemplate
from langgraph.prebuilt import create_react_agent
from langgraph.prebuilt.chat_agent_executor import AgentState"""
使用 ReAct 创建一个简单的代理
"""
# 设置 TAVILY 的 API key
os.environ["TAVILY_API_KEY"] = "tv--YsyI7"
# 搜索工具。max_results=1 ==》每次只返回一个结果
search_tool = TavilySearchResults(max_results=1)
tools = [search_tool]
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5eb20--Kxlr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()
# 字符串提示词模版
prompt = ChatPromptTemplate.from_messages([("system", "你是一个著名气象学家"),("placeholder", "{messages}"),]
)def _modify_state_messages(state: AgentState):return prompt.invoke({"messages": state["messages"]}).to_messages() + [("user", "回答完后请说谢谢.")]# 创建个llm与tool的智能体
app = create_react_agent(llm, tools=tools, state_modifier=_modify_state_messages)rest = app.invoke({"messages": [("human", "2025年3月15日,成都市天气怎么样?")]})
print(rest)
print('-------------')
print(f"content:{rest['messages']}")
结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\agent代理\提示词模板.py
{'messages': [HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='3c93b52a-8440-4844-b10a-03e67ae9dcc7'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891215345345489039', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 164, 'total_tokens': 190}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-dd4b98c8-82e3-42d3-883c-1d2b3313040b-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891215345345489039', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转", "score": 0.96222496}]', name='tavily_search_results_json', id='8ed7a4fa-8132-4a5b-a29f-8fcc5f2a43ac', tool_call_id='call_-8891215345345489039', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转', 'score': 0.96222496, 'raw_content': None}], 'response_time': 1.51}), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气预报"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891214623790754219', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 300, 'total_tokens': 326}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-337daa83-7c81-4ab4-9054-8a5a70debffc-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气预报'}, 'id': 'call_-8891214623790754219', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?featurecode=newtitle%3Ffrom%3Dyn_cnxh", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散", "score": 0.964459}]', name='tavily_search_results_json', id='ba420e8e-c2ed-4c5e-8d2f-1396381c29d6', tool_call_id='call_-8891214623790754219', artifact={'query': '2025年3月15日成都市天气预报', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?featurecode=newtitle%3Ffrom%3Dyn_cnxh', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散', 'score': 0.964459, 'raw_content': None}], 'response_time': 1.56}), AIMessage(content='根据成都气象微博的信息,2025年3月15日成都市的天气预报是:白天有分散小雨转阴天,偏北风3~5级,东部局部地方风力可达6级以上,气温在9~14℃之间。主城区的天气也会是分散小雨转阴天。谢谢。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 67, 'prompt_tokens': 427, 'total_tokens': 494}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-485043fb-5d58-4cbf-8da1-049778bdc9ad-0')]}
-------------
content:[HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='3c93b52a-8440-4844-b10a-03e67ae9dcc7'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891215345345489039', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 164, 'total_tokens': 190}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-dd4b98c8-82e3-42d3-883c-1d2b3313040b-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891215345345489039', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转", "score": 0.96222496}]', name='tavily_search_results_json', id='8ed7a4fa-8132-4a5b-a29f-8fcc5f2a43ac', tool_call_id='call_-8891215345345489039', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转', 'score': 0.96222496, 'raw_content': None}], 'response_time': 1.51}), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气预报"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891214623790754219', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 300, 'total_tokens': 326}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-337daa83-7c81-4ab4-9054-8a5a70debffc-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气预报'}, 'id': 'call_-8891214623790754219', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?featurecode=newtitle%3Ffrom%3Dyn_cnxh", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散", "score": 0.964459}]', name='tavily_search_results_json', id='ba420e8e-c2ed-4c5e-8d2f-1396381c29d6', tool_call_id='call_-8891214623790754219', artifact={'query': '2025年3月15日成都市天气预报', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?featurecode=newtitle%3Ffrom%3Dyn_cnxh', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散', 'score': 0.964459, 'raw_content': None}], 'response_time': 1.56}), AIMessage(content='根据成都气象微博的信息,2025年3月15日成都市的天气预报是:白天有分散小雨转阴天,偏北风3~5级,东部局部地方风力可达6级以上,气温在9~14℃之间。主城区的天气也会是分散小雨转阴天。谢谢。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 67, 'prompt_tokens': 427, 'total_tokens': 494}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-485043fb-5d58-4cbf-8da1-049778bdc9ad-0')]进程已结束,退出代码为 0
内存使用
在 LangGraph 中内存只是 持久性,也称为 检查点。向代理添加一个 checkpointer,您将免费获得聊天内存。用于遇到相同问题时直接从内存中取出答案
import osfrom langchain_community.chat_models import ChatZhipuAI
from langchain_community.tools import TavilySearchResults
from langchain_core.prompts import ChatPromptTemplate
from langgraph.checkpoint.memory import MemorySaver
from langgraph.prebuilt import create_react_agent"""
使用 ReAct 创建一个简单的代理
"""
# 设置 TAVILY 的 API key
os.environ["TAVILY_API_KEY"] = "tvl--syI7"
# 搜索工具。max_results=1 ==》每次只返回一个结果
search_tool = TavilySearchResults(max_results=1)
tools = [search_tool]
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5eb2---Kxlr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()
# 内存对象
memory = MemorySaver()# 创建个llm与tool的智能体
app = create_react_agent(llm, tools=tools, checkpointer=memory)
config = {"configurable": {"thread_id": "test-1"}}
rest = app.invoke({"messages": [("human", "2025年3月15日,成都市天气怎么样?")]},config=config
)
print(rest)
print('-------------')
print(f"content:{rest['messages'][-1].content}")
print('1==============')
rest = app.invoke({"messages": [("human", "2025年3月15日,成都市天气怎么样?")]},config=config
)
print(rest)
print('-------------')
print(f"content:{rest['messages'][-1].content}")
print('2==============')
rest = app.invoke({"messages": [("human", "再说一遍")]},config=config
)
print(rest)
print('-------------')
print(f"content:{rest['messages'][-1].content}")
结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\agent代理\内存.py
{'messages': [HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='4f2a335b-9b38-48c1-a48d-ba5fb9eeb09a'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891209950865376404', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-b349018e-513d-4e7d-aef1-e16dec588917-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891209950865376404', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转", "score": 0.96222496}]', name='tavily_search_results_json', id='bb7aa60b-ca58-4f60-973a-32c982be3dbd', tool_call_id='call_-8891209950865376404', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转', 'score': 0.96222496, 'raw_content': None}], 'response_time': 1.69}), AIMessage(content='根据成都气象的微博,在2025年3月15日,成都市预计会有分散的小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温在9~14℃之间。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 51, 'prompt_tokens': 285, 'total_tokens': 336}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-7c2c4b44-2bd9-4b89-90b8-064795408c33-0')]}
-------------
content:根据成都气象的微博,在2025年3月15日,成都市预计会有分散的小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温在9~14℃之间。
1==============
{'messages': [HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='4f2a335b-9b38-48c1-a48d-ba5fb9eeb09a'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891209950865376404', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-b349018e-513d-4e7d-aef1-e16dec588917-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891209950865376404', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转", "score": 0.96222496}]', name='tavily_search_results_json', id='bb7aa60b-ca58-4f60-973a-32c982be3dbd', tool_call_id='call_-8891209950865376404', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转', 'score': 0.96222496, 'raw_content': None}], 'response_time': 1.69}), AIMessage(content='根据成都气象的微博,在2025年3月15日,成都市预计会有分散的小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温在9~14℃之间。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 51, 'prompt_tokens': 285, 'total_tokens': 336}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-7c2c4b44-2bd9-4b89-90b8-064795408c33-0'), HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='575a1019-2da7-4a27-a38b-a3c1a2a242fb'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891221908057171545', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 349, 'total_tokens': 375}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-1f9cade7-f968-4886-906c-39122ddea8f1-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891221908057171545', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转", "score": 0.96222496}]', name='tavily_search_results_json', id='85869044-fba4-4538-90a5-124ca5aad4e5', tool_call_id='call_-8891221908057171545', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转', 'score': 0.96222496, 'raw_content': None}], 'response_time': 0.97}), AIMessage(content='根据成都气象的微博,在2025年3月15日,成都市预计会有分散的小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温在9~14℃之间。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 51, 'prompt_tokens': 485, 'total_tokens': 536}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-a254bf04-47e4-4fc3-8eac-7d1f4a7ede1f-0')]}
-------------
content:根据成都气象的微博,在2025年3月15日,成都市预计会有分散的小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温在9~14℃之间。
2==============
{'messages': [HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='4f2a335b-9b38-48c1-a48d-ba5fb9eeb09a'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891209950865376404', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-b349018e-513d-4e7d-aef1-e16dec588917-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891209950865376404', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转", "score": 0.96222496}]', name='tavily_search_results_json', id='bb7aa60b-ca58-4f60-973a-32c982be3dbd', tool_call_id='call_-8891209950865376404', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转', 'score': 0.96222496, 'raw_content': None}], 'response_time': 1.69}), AIMessage(content='根据成都气象的微博,在2025年3月15日,成都市预计会有分散的小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温在9~14℃之间。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 51, 'prompt_tokens': 285, 'total_tokens': 336}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-7c2c4b44-2bd9-4b89-90b8-064795408c33-0'), HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='575a1019-2da7-4a27-a38b-a3c1a2a242fb'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891221908057171545', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 349, 'total_tokens': 375}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-1f9cade7-f968-4886-906c-39122ddea8f1-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891221908057171545', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271", "content": "早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转", "score": 0.96222496}]', name='tavily_search_results_json', id='85869044-fba4-4538-90a5-124ca5aad4e5', tool_call_id='call_-8891221908057171545', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5130591924390271', 'title': '成都气象 - 微博', 'content': '早安#早安##成都天气# 成都市气象台2025年3月15日7时发布天气预报:预计我市3月15日白天分散小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温9~14℃;主城区,分散小雨转', 'score': 0.96222496, 'raw_content': None}], 'response_time': 0.97}), AIMessage(content='根据成都气象的微博,在2025年3月15日,成都市预计会有分散的小雨转阴天,偏北风3~5级,东部局部地方可达6级以上,气温在9~14℃之间。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 51, 'prompt_tokens': 485, 'total_tokens': 536}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-a254bf04-47e4-4fc3-8eac-7d1f4a7ede1f-0'), HumanMessage(content='再说一遍', additional_kwargs={}, response_metadata={}, id='4cc2da29-7614-4e9a-ba7d-68a76880381f'), AIMessage(content='2025年3月15日,成都市的天气预报是白天有分散的小雨转阴天,偏北风3~5级,东部局部地方风力可能达到6级以上,气温预计在9~14℃之间。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 50, 'prompt_tokens': 539, 'total_tokens': 589}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-59d25004-ac8c-4228-832c-a6ee65a14c4a-0')]}
-------------
content:2025年3月15日,成都市的天气预报是白天有分散的小雨转阴天,偏北风3~5级,东部局部地方风力可能达到6级以上,气温预计在9~14℃之间。进程已结束,退出代码为 0
迭代使用
import osfrom langchain_community.chat_models import ChatZhipuAI
from langchain_community.tools import TavilySearchResults
from langgraph.prebuilt import create_react_agent"""
使用 ReAct 创建一个简单的代理
"""
# 设置 TAVILY 的 API key
os.environ["TAVILY_API_KEY"] = "tvl--YsyI7"
# 搜索工具。max_results=1 ==》每次只返回一个结果
search_tool = TavilySearchResults(max_results=1)
tools = [search_tool]
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5eb--lr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()# 创建个llm与tool的智能体
app = create_react_agent(llm, tools=tools)for chunk in app.stream({"messages": [("human", "2025年3月15日,成都市天气怎么样?")]}):print(chunk)print('---------')
结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\agent代理\迭代.py
{'agent': {'messages': [AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891222320374194891', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-574c4259-4d4f-4f9b-b15f-10200886cca5-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891222320374194891', 'type': 'tool_call'}])]}}
---------
{'tools': {'messages': [ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5114788504669709", "content": "#大风短临天气预报# 成都市气象台2025年3月15日1时30分发布大风短时临近天气预报:受冷空气影响,目前我市彭州和新都已出现大于10m/s的大风天气,预计未来12小时我市有偏北风3", "score": 0.915091}]', name='tavily_search_results_json', id='7741e23f-eb07-48e1-9d62-03d42f7ce189', tool_call_id='call_-8891222320374194891', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5114788504669709', 'title': '成都气象 - 微博', 'content': '#大风短临天气预报# 成都市气象台2025年3月15日1时30分发布大风短时临近天气预报:受冷空气影响,目前我市彭州和新都已出现大于10m/s的大风天气,预计未来12小时我市有偏北风3', 'score': 0.915091, 'raw_content': None}], 'response_time': 2.14})]}}
---------
{'agent': {'messages': [AIMessage(content='根据查询到的信息,2025年3月15日成都市气象台发布了大风短时临近天气预报,受冷空气影响,预计未来12小时有偏北风3。目前成都市彭州和新都已出现大于10m/s的大风天气。', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 53, 'prompt_tokens': 276, 'total_tokens': 329}, 'model_name': 'glm-4', 'finish_reason': 'stop'}, id='run-851339f3-2b99-40fa-9481-bcfbfd2ef409-0')]}}
---------进程已结束,退出代码为 0
返回执行每一步情况
默认情况下,LangGraph 中的 react agent executor 将所有消息附加到中央状态。因此,只需查看完整状态即可轻松查看任何中间步骤。也就是默认开启了执行步骤明细。
限制输出行数
recursion_limit 参数,允许用户中止超过指定迭代次数的运行。在 LangGraph 中,每一步都贡献于递归限制,因此我们需要乘以二(并加一)以获得等效结果。如果达到递归限制,LangGraph 会引发特定的异常类型,我们可以像处理 AgentExecutor 一样捕获和管理。
import osfrom langchain_community.chat_models import ChatZhipuAI
from langchain_community.tools import TavilySearchResults
from langgraph.errors import GraphRecursionError
from langgraph.prebuilt import create_react_agent"""
使用 ReAct 创建一个简单的代理
"""
# 设置 TAVILY 的 API key
os.environ["TAVILY_API_KEY"] = "tv--vqYsyI7"
# 搜索工具。max_results=1 ==》每次只返回一个结果
search_tool = TavilySearchResults(max_results=1)
tools = [search_tool]
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5eb--Kxlr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()# 创建个llm与tool的智能体
app = create_react_agent(llm, tools=tools)try:for chunk in app.stream({"messages": [("human", "2025年3月15日,成都市天气怎么样?")]},{"recursion_limit": 1 * 2 + 1},stream_mode="values"):print(chunk)print('---------')
except GraphRecursionError:# 结果会输出3行,但是这里限制2行,所以会报错print("GraphRecursionError 异常")
结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\agent代理\recursion_limit.py
{'messages': [HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='8b72fc19-8ef5-4166-a568-6ad2ecf55fdf')]}
---------
{'messages': [HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='8b72fc19-8ef5-4166-a568-6ad2ecf55fdf'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891212424767160994', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-9bd9dd5e-1589-43fb-a692-e88c2bdbd7c3-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891212424767160994', 'type': 'tool_call'}])]}
---------
{'messages': [HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='8b72fc19-8ef5-4166-a568-6ad2ecf55fdf'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891212424767160994', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-9bd9dd5e-1589-43fb-a692-e88c2bdbd7c3-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891212424767160994', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5114788504669709", "content": "#大风短临天气预报# 成都市气象台2025年3月15日1时30分发布大风短时临近天气预报:受冷空气影响,目前我市彭州和新都已出现大于10m/s的大风天气,预计未来12小时我市有偏北风3", "score": 0.915091}]', name='tavily_search_results_json', id='17a75d64-703e-4bd3-acf6-fdd5a9c09b0c', tool_call_id='call_-8891212424767160994', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5114788504669709', 'title': '成都气象 - 微博', 'content': '#大风短临天气预报# 成都市气象台2025年3月15日1时30分发布大风短时临近天气预报:受冷空气影响,目前我市彭州和新都已出现大于10m/s的大风天气,预计未来12小时我市有偏北风3', 'score': 0.915091, 'raw_content': None}], 'response_time': 2.19})]}
---------
{'messages': [HumanMessage(content='2025年3月15日,成都市天气怎么样?', additional_kwargs={}, response_metadata={}, id='8b72fc19-8ef5-4166-a568-6ad2ecf55fdf'), AIMessage(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891212424767160994', 'index': 0, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'}, id='run-9bd9dd5e-1589-43fb-a692-e88c2bdbd7c3-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891212424767160994', 'type': 'tool_call'}]), ToolMessage(content='[{"title": "成都气象 - 微博", "url": "https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5114788504669709", "content": "#大风短临天气预报# 成都市气象台2025年3月15日1时30分发布大风短时临近天气预报:受冷空气影响,目前我市彭州和新都已出现大于10m/s的大风天气,预计未来12小时我市有偏北风3", "score": 0.915091}]', name='tavily_search_results_json', id='17a75d64-703e-4bd3-acf6-fdd5a9c09b0c', tool_call_id='call_-8891212424767160994', artifact={'query': '2025年3月15日成都市天气', 'follow_up_questions': None, 'answer': None, 'images': [], 'results': [{'url': 'https://m.weibo.cn/u/2998934450?luicode=20000061&lfid=5114788504669709', 'title': '成都气象 - 微博', 'content': '#大风短临天气预报# 成都市气象台2025年3月15日1时30分发布大风短时临近天气预报:受冷空气影响,目前我市彭州和新都已出现大于10m/s的大风天气,预计未来12小时我市有偏北风3', 'score': 0.915091, 'raw_content': None}], 'response_time': 2.19}), AIMessage(content='Sorry, need more steps to process this request.', additional_kwargs={}, response_metadata={}, id='run-cc7dda18-296e-45b6-b8ba-fdf5b535202b-0')]}
---------
GraphRecursionError 异常进程已结束,退出代码为 0
设置运行超时时间
使用 LangGraph 的反应代理,您可以在两个级别上控制超时。
您可以设置一个 step_timeout 来限制每个 步骤:
import osfrom langchain_community.chat_models import ChatZhipuAI
from langchain_community.tools import TavilySearchResults
from langgraph.errors import GraphRecursionError
from langgraph.prebuilt import create_react_agent"""
使用 ReAct 创建一个简单的代理
"""
# 设置 TAVILY 的 API key
os.environ["TAVILY_API_KEY"] = "t---qYsyI7"
# 搜索工具。max_results=1 ==》每次只返回一个结果
search_tool = TavilySearchResults(max_results=1)
tools = [search_tool]
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5eb20f----dKxlr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()# 创建个llm与tool的智能体
app = create_react_agent(llm, tools=tools)
# 限制处理时间1s
app.step_timeout = 1try:for chunk in app.stream({"messages": [("human", "2025年3月15日,成都市天气怎么样?")]}):print(chunk)print('---------')
except TimeoutError:print("TimeoutError 运行超时")
结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\agent代理\step_timeout.py
TimeoutError 运行超时进程已结束,退出代码为 0
设置整个运行的单个最大超时的另一种方法是直接使用 Python 标准库 asyncio。
import asyncio
import osfrom langchain_community.chat_models import ChatZhipuAI
from langchain_community.tools import TavilySearchResults
from langgraph.prebuilt import create_react_agent"""
使用 ReAct 创建一个简单的代理
"""
# 设置 TAVILY 的 API key
os.environ["TAVILY_API_KEY"] = "tv--syI7"
# 搜索工具。max_results=1 ==》每次只返回一个结果
search_tool = TavilySearchResults(max_results=1)
tools = [search_tool]
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5eb20f1f1--xlr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()# 创建个llm与tool的智能体
app = create_react_agent(llm, tools=tools)async def stream(app, inputs):async for chunk in app.astream({"messages": [("human", "2025年3月15日,成都市天气怎么样?")]}):print(chunk)print("------")async def main():try:task = asyncio.create_task(stream(app, {"messages": [("human", "2025年3月15日,成都市天气怎么样?")]}))await asyncio.wait_for(task, timeout=1)except TimeoutError:print("任务超时.")asyncio.run(main())
结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\agent代理\超时.py
任务超时.进程已结束,退出代码为 0
在 LangGraph 中,您可以显式处理代理外的响应行为,因为可以访问完整状态。
不使用代理下LLM如何结合工具
使用 llm.bind_tools 生成一个带有tool的LLM对象
案例
让AI绑定工具,AI自动判断是否需要使用工具帮助回复
import osfrom langchain_community.chat_models import ChatZhipuAI
from langchain_community.tools import TavilySearchResults
"""
使用 TavilySearchResults 进行搜索,将查询结果打印出来
"""
# 设置 TAVILY 的 API key
os.environ["TAVILY_API_KEY"] = "tvly--vqYsyI7"
# 搜索工具。max_results=1 ==》每次只返回一个结果
search_tool = TavilySearchResults(max_results=1)
# 设置智普 AI 的 API 密钥
os.environ["ZHIPUAI_API_KEY"] = "5eb2---xlr"
# 初始化智普 AI 模型
llm = ChatZhipuAI()
# 带有搜索工具的LLM
llm_with_tool = llm.bind_tools([search_tool])rest = llm_with_tool.invoke("2025年3月15日,成都市天气怎么样?")
print(rest)
print('-------------')
print(f'content:{rest.content}')
print('-------------')
print(f'tool_calls:{rest.tool_calls}')print('================')
rest = llm_with_tool.invoke("中国首都是哪个?")
print(rest)
print('-------------')
print(f'content:{rest.content}')
print('-------------')
print(f'tool_calls:{rest.tool_calls}')
结果:
E:\learn_work_spaces\PythonProject1\.venv\Scripts\python.exe E:\learn_work_spaces\PythonProject1\agent代理\代理案例1.py
content='' additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query":"2025年3月15日成都市天气"}', 'name': 'tavily_search_results_json'}, 'id': 'call_-8891216066900221760', 'index': 0, 'type': 'function'}]} response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 149, 'total_tokens': 175}, 'model_name': 'glm-4', 'finish_reason': 'tool_calls'} id='run-3494341c-9a44-48b8-8825-ed8ba86254ea-0' tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891216066900221760', 'type': 'tool_call'}]
-------------
content:
-------------
tool_calls:[{'name': 'tavily_search_results_json', 'args': {'query': '2025年3月15日成都市天气'}, 'id': 'call_-8891216066900221760', 'type': 'tool_call'}]
================
content='中国首都是北京。' additional_kwargs={} response_metadata={'token_usage': {'completion_tokens': 7, 'prompt_tokens': 142, 'total_tokens': 149}, 'model_name': 'glm-4', 'finish_reason': 'stop'} id='run-4881ec52-40cb-4dbc-8fba-f12eca9b9ee8-0'
-------------
content:中国首都是北京。
-------------
tool_calls:[]进程已结束,退出代码为 0
content为空说明回复时使用了工具帮助回复
tool_calls为空说明回复来源于AI
案例2
相关文章:
Langchian构建代理
文章目录 概要ReAct 代理 ReAct 使用ReAct基本用法提示词模板内存使用迭代使用返回执行每一步情况限制输出行数设置运行超时时间 不使用代理下LLM如何结合工具案例案例2 概要 单靠语言模型无法采取行动 - 它们只输出文本。 LangChain 的一个重要用例是创建 代理。 代理是使用大…...
Vim软件使用技巧
目录 Demo Vim怎么看一个文件的行号,不用打开文件的前提下?进入文件后怎么跳转到某一行? 不打开文件查看行号(查看文件的方法) 方法1、使用命令行工具统计行数 方法2、通过vim的 - 参数查看文件信息 进入文件后跳转到指定行…...
SQL与NoSQL的区别
以下是SQL与NoSQL数据库的详细对比,涵盖核心特性、适用场景及技术选型建议: 一、核心区别对比 特性SQL(关系型数据库)NoSQL(非关系型数据库)数据模型基于表格,严格预定义模式(Schem…...
1191:流感传染--BFS
这里写目录标题 题目 解析代码BFS代码 题目 解析 在同一天对一个病原体进行处理时,如果直接更改数组,将直接影响到后续的遍历 方法一:那么我们可以定义一个数组用来存储坐标:vectoir<pair<int,int>>,遍历…...
gfortran编译器调试功能选项
在使用 gfortran 编译器进行调试时,以下选项可以帮助你更好地定位和解决问题: 1. 生成调试信息 -g:生成调试信息,供调试器(如 gdb)使用。-ggdb:生成更详细的调试信息,优化 gdb 的使…...
小程序配置
注册小程序账号和安装开发工具 参考文档:注册小程序账号和安装开发工具https://blog.csdn.net/aystl_gss/article/details/127878658 HBuilder新建项目 填写项目名称,选择UNI-APP,修改路径,点击创建 manifest.json 配置 需要分别…...
【Linux】进程(1)进程概念和进程状态
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、什么是进程 二、task_struct的内容 三、Linux下进程基本操作 四、父进程和子进程 1. 用fork函数创建子进程 五、进程状态 1. 三种重…...
MySQL(事物下)
目录 一 多版本并发控制( MVCC )是一种用来解决 读-写冲突 的无锁并发控制 1. 前置知识 示例: 二 Read View 1. 当事物进行快照读(读历史数据)会MySQL会创建一个Read Vidw类对象,用来记录和当前一起并发的事物(活跃的事物)&a…...
Springboot+mybatis实现增删改查效果
我们前面实现了增加效果,现在来写一下修改~我们首先在controller里面写update 接着在service和mapper写方法 最后我们测试一下 没问题~需要注意的是mapper的sql别写错了!...
【“以退为进“、“不得已而为之“与“风险对冲“的协同机制】
深度解析:“以退为进”、"不得已而为之"与"风险对冲"的协同机制 一、“以退为进”:空间重构的博弈艺术 1. 三维战略坐标系 权力维度:唐太宗"玄武门之变"后跪哭李渊,通过降维姿态化解道德危机&am…...
AUTOSAR 网络安全 架构
实现AUTOSAR网络安全架构的步骤指南 在当今汽车电子系统中,AUTOSAR(AUTomotive Open System ARchitecture)正在成为业界标准。结合网络安全要求,我们可以确保汽车在网络通信中保持安全。接下来,我们将讨论如何实现AUT…...
洛谷 P2801 教主的魔法 题解
之前学过 莫队 算法,其运用了分块思想;但是我居然是第一次写纯种的分块题目。 题意 给你一个长度为 n n n 的序列 a a a(一开始 ∀ a i ∈ [ 1 , 1000 ] \forall a_i\in[1,1000] ∀ai∈[1,1000])。要求执行 q q q 次操作&…...
Google最新生图模型Gemini-2.0-Flash-Exp免费用
Google发布新生图模型 Google释放出最新生图模型,在发布说明中提到: 2025年3月12日 在 Gemini-2.0-Flash-Exp 中发布原生图像输出功能 Gemini 2.0 Flash Experimental 模型发布,支持原生图像输出功能。开发者能够使用 Gemini 进行图像输出和…...
windows安装Elasticsearch
下载 下载最新版 https://www.elastic.co/downloads/elasticsearch 下载历史版本 安装 进入bin目录中 成功启动 访问 http://localhost:9200...
vulnhub靶场之stapler靶机
前言 靶机:stapler靶机,IP地址为192.168.10.12 攻击:kali,IP地址为192.168.10.6 靶机采用virtualbox,攻击机采用VMware虚拟机,都采用桥接网卡模式 文章涉及的靶机及工具,都可以自行访问官网或…...
2025年AI搜索引擎开源项目全景指南:从核心框架到生态工具
2025年AI搜索引擎开源项目全景指南:从核心框架到生态工具 在人工智能技术迅猛发展的当下,开源项目已成为构建AI搜索引擎的核心驱动力。本文整理9个具有代表性的开源项目,涵盖搜索框架、扩展生态及底层支持技术,助你快速搭建或优化…...
数字孪生像魔镜,映照出无限可能的未来
在当今科技飞速发展的时代,数字孪生作为一项极具潜力的前沿技术,正逐渐崭露头角,成为众多领域关注的焦点。它犹如一面神奇的魔镜,以数字化的方式精准映照出现实世界中的各种实体与系统,为我们开启了一扇通往无限可能未…...
PDF Reader
Acrobat Reader...
C++友元
1.什么是友元? 当我们需要在类的外部访问该类的私有成员和保护成员时,就可以利用友元来实现这一操作 在类中用 friend 关键字对函数或类进行声明 2.非成员函数友元 友元函数不是当前类的成员函数,而是当前类的外部函数,但是他可以…...
吴恩达机器学习笔记复盘(五)均方误差函数
只讲了线性回归的代价函数。 均方误差(Mean Squared Error, MSE) 均方误差(MSE)基于最小二乘法,通过计算预测值与真实值之间差值的平方的平均值来衡量模型的误差。 原理 假设我们有一组数据集,其中是第…...
使用 Docker 部署前端项目全攻略
文章目录 1. Docker 基础概念1.1 核心组件1.2 Docker 工作流程 2. 环境准备2.1 安装 Docker2.2 验证安装 3. 项目配置3.1 项目结构3.2 创建 Dockerfile 4. 构建与运行4.1 构建镜像4.2 运行容器4.3 访问应用 5. 使用 Docker Compose5.1 创建 docker-compose.yml5.2 启动服务5.3 …...
珠算与珠心算发展简介
珠算是中华传统优秀文化的科学遗产,它是我国劳动人民的伟大创造,被誉为中国的第五大发明,至今已有 1800 余年的历史。 珠算,是以算盘为工具,用手指拨动算珠进行数值计算的一门计算技术。同时,珠算又是一门科…...
基于SSM + JSP 的水果蔬菜商城
基于ssm的水果蔬菜商城系统前台和后台(源码安装视频数据库环境)计算机项目程序设计管理系统java小程序网站商城 一.相关技术 Java、Spring、Springboot、MVC、Mybatis、MySQL、SSM框架、Web、HTML、maven、JavaScript、css、vue 二.部署配置 1.IntelliJ …...
基于深度学习的蛀牙智能检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
Linux与深入HTTP序列化和反序列化
深入HTTP序列化和反序列化 本篇介绍 在上一节已经完成了客户端和服务端基本的HTTP通信,但是前面的传递并没有完全体现出HTTP的序列化和反序列化,为了更好得理解其工作流程,在本节会以更加具体的方式分析到HTTP序列化和反序列化 本节会在介绍…...
音视频入门基础:RTP专题(20)——通过FFprobe显示RTP流每个packet的信息
通过FFprobe命令: ffprobe -protocol_whitelist "file,rtp,udp" -of json -show_packets XXX.sdp 可以显示SDP描述的RTP流每个packet(数据包)的信息: 对于RTP流,上述的“packet”(数据包&#…...
Java Web 大文件上传优化:从困境到高效
文章目录 Java Web 大文件上传优化:从困境到高效一、优化前的困境(一)内存占用问题(二)上传速度缓慢(三)稳定性欠佳 二、优化后的实现方案(一)客户端(Vue&…...
C++——STL 常用的查找算法
算法简介: find //查找元素find_if //按条件查找元素adjacent_find //查找相邻重复元素binary_search //二分查找法count //统计元素个数count_if //按条件统计元素个数 1. find 功能描述: 查找指定元素,找到返回指定元素的迭…...
【一次成功】Win10本地化单机部署k8s v1.31.2版本及可视化看板
【一次成功】Win10本地化单机部署k8s v1.31.2版本及可视化看板 零、安装清单一、安装Docker Desktop软件1.1 安装前<启用或关闭Windows功能> 中的描红的三项1.2 查看软件版本1.3 配置Docker镜像 二、更新装Docker Desktop三、安装 k8s3.1 点击启动安装3.2 查看状态3.3 查…...
Vulkan视频解码decode显示display之同步
在ReleaseDisplayedPicture函数中消耗图片资源并且显示display完成,设置两个标志m_hasConsummerSignalFence true 和m_hasConsummerSignalSemaphore true virtual int32_t ReleaseDisplayedPicture(DecodedFrameRelease** pDecodedFramesRelease, uint32_t nu…...
专题|Python梯度提升实例合集:GBM、XGBoost、SMOTE重采样、贝叶斯、逻辑回归、随机森林分析信贷、破产数据...
全文链接:https://tecdat.cn/?p41051 分析师:Jiajie Shi,Yimeng Li 在当今数据驱动的时代,数据分析师和数据建模师面临着各式各样复杂且极具挑战性的任务。本专题合集便是围绕这些挑战展开的宝贵知识盛宴(点击文末“阅…...
4.0 相机引导XY轴控制螺丝枪打螺丝
假如一个产品的同一水平上要打6个螺钉,是通过伺服XY轴移动带动相机以及螺丝枪,由相机拍照,根据拍照后螺丝孔位置来引导伺服进行移动以对准螺丝孔位置的。步骤如下: 一、9点标定,即把相机与伺服的实际位置关联起来。步骤…...
【ElasticSearch】学习笔记
一、lucene的组成 segment是一个具备完整搜索功能的最小单元。 多个segment组成了一个单机文本检索库lucene。 inverted index:倒排索引,用于快速根据关键词找到对应的文章term index: 构建出关键词的目录树,解决了term dictionary数据量过大ÿ…...
Spring Boot整合RabbitMQ极简教程
一、消息队列能解决什么问题? 异步处理:解耦耗时操作(如发短信、日志记录)流量削峰:应对突发请求,避免系统过载应用解耦:服务间通过消息通信,降低依赖 二、快速整合RabbitMQ 1. 环…...
代码随想录-04-字符串-03.替换数字
替换数字 题目 给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anum…...
Tailwindcss开启黑夜模式
本篇讲述如何使用tailwindcss切换白天黑夜主题 tailwindcss自带的暗夜切换会比css自带的theme主体切换来得方便很多,学习成本也很低,只要求会用tailiwndcss 1,tailwindcss.config有两种暗夜模式切换,媒体查询和手动类切换。手动控…...
AI与人的智能,改变一生的思维模型【7】易得性偏差
目录 **易得性偏差思维模型:大脑的「热搜算法」与反操纵指南****病毒式定义:你的大脑正在被「热搜」劫持****四大核心攻击路径与史诗级案例****1. 信息过载时代的「认知短路」****2. 媒体放大器的「恐怖滤镜」****3. 个人经验的「数据暴政」****4. 社交茧…...
有序表--跳表
实现一种结构,支持如下操作,要求单次调用的时间复杂度O(log n) 1,增加x,重复加入算多个词频 2,删除x,如果有多个,只删掉一个 3,查询x的排名,x的排名为,比x小的…...
双指针---字符串替换数字(数字替换为“number“)
题目链接:替换数字 要求:时间复杂度为O(n) 思路: 1、先将字符串扩容到要输出串的长度。 2、从后向前替换数字字符,也就是双指针法,newIndex指向新长度的末尾,i指向旧长度的末尾。 #include<iostream&g…...
外星人入侵-Python-三
武装飞船 开发一个名为《外星人入侵》的游戏吧!为此将使用 Pygame,这是一组功能强大而有趣的模块,可用于管理图形、动画乃至声音, 让你能够更轻松地开发复杂的游戏。通过使用Pygame来处理在屏幕上绘制图像 等任务,可将…...
JavaScript相关面试题
以下是150道JavaScript相关面试题及详细答案: JavaScript基础 1.JavaScript是什么? JavaScript是一种直译式脚本语言,主要用于网页开发,也可用于服务器端开发(如Node.js)。它是一种动态类型、弱类型、基于原…...
常见的数学模型
数学模型的基本原理 简单来说,数学模型就是用数学语言来描述现实世界中的现象或规律。它就像一个“翻译器”,把复杂的现实问题转化成我们可以用数学方法解决的问题。 核心思想: 简化现实:现实世界太复杂,模型会抓住最…...
计算机四级 - 数据库原理 - 第3章 「关系数据库系统概述」
3.1 关系数据库系统概述 关系数据模型的三大要素:关系数据结构、关系操作集合(一次一个集合)和关系完整性约束 1. 关系语言的特点是高度非过程化的, DBMS会自动帮用户选择存取路径,用户不需要依靠循环和递归完成数据的重复操作。…...
使用PHP进行自动化测试:工具与策略的全面分析
使用PHP进行自动化测试:工具与策略的全面分析 引言 随着软件开发的复杂性不断增加,自动化测试已成为确保软件质量的关键环节。PHP作为一种广泛使用的服务器端脚本语言,拥有丰富的生态系统和工具支持,使其成为自动化测试的理想选…...
discuz门户文章允许游客评论
discuz开启游客评论 1、进入后台,用户--用户组--系统用户组--游客--编辑 2、论坛相关 设置未允许发表回复 3、门户相关--文章评论字数(设置此用户组发表文章评论字数限制,设置为0将禁止此用户组发表评论) 4、验证游客回复 测试站 http://jinzhu.zhaowo.…...
AtCoder Beginner Contest 003(A - 社の給料、B -トランプ、C -プログラミング講座、D - 社の冬 )题目讲解
前言 又更新AtCoder Beginner Contes 的题目讲解啦!! 希望能给诸位带来帮助。 话不多说,开始讲解: A - 社の給料←题目翻译 为了解决这个问题,我们需要计算青木每月完成正好N个任务时的平均工资。通过分析,我们可以发现这个问题可以通过数学公式直接求解,而不需要复…...
代码随想录二刷|图论11
图论 一、基础知识 1 无向图 (1)度:一个顶点连n条边就度为n (2)权 加权无向图:有边长的无向图 (3)通道:两个顶点之间有一些边和点,并且没有重复的边 路…...
农资出入库登记本,农药化肥库存出入库软件,佳易王农资管理庄稼医院开单管理系统操作教程
一、概述 本实例以佳易王农资管理庄稼医院开单管理系统为例说明,其他版本可参考本实例。试用版软件资源可到文章最后了解,下载的文件为压缩包文件,请使用免费版的解压工具解压即可试用。 软件特点: 1、功能实用,操作简…...
串的KMP算法详解
KMP算法深度解析 一、从暴力匹配到智能跳转: 在文本编辑器的搜索功能中,当我们在百万字的文档中查找特定关键词时,传统暴力匹配算法的时间复杂度高达O(mn)。KMP算法通过独创的部分匹配表(Partial Match Table)&#x…...
软件测试之测试分类
1. 为什么要对软件测试进行分类 软件测试是软件⽣命周期中的⼀个重要环节,具有较⾼的复杂性,对于软件测试,可以从不同的⻆度 加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进⾏更好的执⾏和管理测试 的分类⽅…...