news 2026/7/8 1:34:56

LangChain Invoke中取出对话内容

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain Invoke中取出对话内容

安装langchain

首先,你要安装好langchain

pip install langchain langchain-openai langchain-deepseek

接下来,正式开始创建一个简单的agent

fromlangchain.agentsimportcreate_agentfromlangchain_deepseekimportChatDeepSeekfromtoolimportget_city_time# create your agent instance herellm=ChatDeepSeek(model='deepseek-v4-flash',temperature=0.2)defagent_instance(question:str):agent=create_agent(model=llm,system_prompt=""" 你是一个专业的智能小助手。 """,tools=[get_city_time,])response=agent.invoke({'messages':[{'role':'user','content':question}]})print('='*40+"完整对话记录"+'='*40)fori,msginenumerate(response['messages']):msg_type=type(msg).__name__print(f'\n{"="*20}{i+1}条消息:{msg_type}{"="*20}')# 1. 用户消息ifmsg_type=='HumanMessage':print(f'【用户提问】\n{msg.content}')# 2. AI消息elifmsg_type=='AIMessage':# 思考内容reasoning=msg.additional_kwargs.get('reasoning_content')ifreasoning:print(f'【思考内容】\n{reasoning}')# AI回答内容ifmsg.content:print(f'【AI回答】\n{msg.content}')# 工具调用ifmsg.tool_calls:print(f'【工具调用】')fortcinmsg.tool_calls:print(f' 工具:{tc["name"]}')print(f' 参数:{tc["args"]}')print(f' 调用ID:{tc["id"]}')# Token消耗token_usage=msg.response_metadata.get('token_usage')iftoken_usage:print(f'【Token消耗】')print(f' 输入:{token_usage.get("prompt_tokens")}')print(f' 输出:{token_usage.get("completion_tokens")}')print(f' 总计:{token_usage.get("total_tokens")}')print(f' 缓存命中的输入: {token_usage.get("prompt_tokens_details", {}).get("cached_tokens")}')# 其他元信息print(f'【元信息】')print(f' 模型:{msg.response_metadata.get("model_name")}')print(f' 结束原因:{msg.response_metadata.get("finish_reason")}')# 3. 工具返回结果elifmsg_type=='ToolMessage':print(f'【工具返回】\n{msg.content}')print(f' 工具名:{msg.name}')# 4. 其他类型(预留)else:print(f'【内容】\n{msg.content}')

用的是 LangChain 的 BaseMessage 类型,这些字段都是标准属性,直接通过 . 访问即可

{'messages':[HumanMessage(content='北京的时间现在是多少?',additional_kwargs={},response_metadata={},id='16642f22-0ccd-428e-97f5-a09727697813'),AIMessage(content='好的,我来查询一下北京当前的时间。',additional_kwargs={'refusal': None,'reasoning_content':'用户想知道北京当前的时间。我可以调用get_city_time工具来获取北京的时间。'},response_metadata={'token_usage':{'completion_tokens': 72,'prompt_tokens': 298,'total_tokens': 370,'completion_tokens_details':{'accepted_prediction_tokens': None,'audio_tokens': None,'reasoning_tokens': 18,'rejected_prediction_tokens': None},'prompt_tokens_details':{'audio_tokens': None,'cached_tokens': 256},'prompt_cache_hit_tokens': 256,'prompt_cache_miss_tokens': 42},'model_provider':'deepseek','model_name':'deepseek-v4-flash','system_fingerprint':'fp_8b330d02d0_prod0820_fp8_kvcache_20260402','id':'fcf8e9c3-7261-474b-a818-a3adb6b33caf','finish_reason':'tool_calls','logprobs': None},id='lc_run--019f3ce3-9712-7582-98f7-3b1eab56b112-0',tool_calls=[{'name':'get_city_time','args':{'city':'北京'},'id':'call_00_HRU0VuqjCqNvriLVANVi6836','type':'tool_call'}],invalid_tool_calls=[],usage_metadata={'input_tokens': 298,'output_tokens': 72,'total_tokens': 370,'input_token_details':{'cache_read': 256},'output_token_details':{'reasoning': 18}}),ToolMessage(content="{'city': '北京', 'time': datetime.datetime(2026, 7, 7, 22, 2, 57, 890230, tzinfo=zoneinfo.ZoneInfo(key='Asia/Shanghai'))}",name='get_city_time',id='c5e10232-97b1-469b-8686-cbd2862945c7',tool_call_id='call_00_HRU0VuqjCqNvriLVANVi6836'),AIMessage(content='北京当前的时间是 **2026年7月7日 22:02(晚上10点02分)**。北京属于东八区(Asia/Shanghai),这就是标准的北京时间。🌃',additional_kwargs={'refusal': None,'reasoning_content':'北京的时间是2026年7月7日 22:02:57。让我用友好的方式告诉用户。'},response_metadata={'token_usage':{'completion_tokens': 67,'prompt_tokens': 432,'total_tokens': 499,'completion_tokens_details':{'accepted_prediction_tokens': None,'audio_tokens': None,'reasoning_tokens': 24,'rejected_prediction_tokens': None},'prompt_tokens_details':{'audio_tokens': None,'cached_tokens': 256},'prompt_cache_hit_tokens': 256,'prompt_cache_miss_tokens': 176},'model_provider':'deepseek','model_name':'deepseek-v4-flash','system_fingerprint':'fp_8b330d02d0_prod0820_fp8_kvcache_20260402','id':'42edd178-1795-46db-a934-5b0b62f74eb5','finish_reason':'stop','logprobs': None},id='lc_run--019f3ce3-9de3-7521-bd60-646d64c3efcf-0',tool_calls=[],invalid_tool_calls=[],usage_metadata={'input_tokens': 432,'output_tokens': 67,'total_tokens': 499,'input_token_details':{'cache_read': 256},'output_token_details':{'reasoning': 24}})]}

结果展示

agent_instance("北京的时间现在是多少?")

==================== 第1条消息: HumanMessage ====================
【用户提问】
北京的时间现在是多少?

==================== 第2条消息: AIMessage ====================
【思考内容】
用户想知道北京当前的时间。我可以使用get_city_time工具来获取北京的时间。
【AI回答】
好的,我来查一下北京当前的时间。
【工具调用】
工具: get_city_time
参数: {‘city’: ‘北京’}
调用ID: call_00_ZTbgenMF0JksDfbkeGC94507
【Token消耗】
输入: 298
输出: 72
总计: 370
缓存命中的输入: 256
【元信息】
模型: deepseek-v4-flash
结束原因: tool_calls

==================== 第3条消息: ToolMessage ====================
【工具返回】
{‘city’: ‘北京’, ‘time’: datetime.datetime(2026, 7, 7, 22, 6, 8, 185283, tzinfo=zoneinfo.ZoneInfo(key=‘Asia/Shanghai’))}
工具名: get_city_time

==================== 第4条消息: AIMessage ====================
【思考内容】
北京当前时间是2026年7月7日 22:06:08,时区是Asia/Shanghai(北京时间,UTC+8)。
【AI回答】
北京当前的准确时间是:

📅2026年7月7日(星期二)
22:06:08

即晚上10点06分左右,属于北京时间(东八区,UTC+8)。
【Token消耗】
输入: 432
输出: 80
总计: 512
缓存命中的输入: 384
【元信息】
模型: deepseek-v4-flash
结束原因: stop

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 1:33:24

AI大模型就业:把团队协作成本提前算清

这篇不先堆名词。我们把《AI大模型就业:把团队协作成本提前算清》拆成几级台阶,看完至少知道下一步该学什么、该练什么。 摘要 先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做,以及从哪里动手。 …

作者头像 李华
网站建设 2026/7/8 1:33:14

3分钟上手GHelper:华硕笔记本的轻量级性能控制中心

3分钟上手GHelper:华硕笔记本的轻量级性能控制中心 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exper…

作者头像 李华
网站建设 2026/7/8 1:32:31

【单片机毕业设计24-基于stm32_K210的人脸识别系统】

【单片机毕业设计24-基于stm32_K210的人脸识别系统】前言一、功能介绍二、硬件部分三、软件部分总结前言 🔥这里是小殷学长,单片机毕业设计24-基于stm32_K210的人脸识别系统 🧿创作不易,拒绝白嫖可私 一、功能介绍 --------------…

作者头像 李华
网站建设 2026/7/8 1:32:31

GBASE技术云享会演讲专辑-数据库产业态势及技术趋势观察.下

2026GBASE云享会(gbase database)上,中国信息通信研究院人工智能研究所大数据与智能化部主任姜春宇出席并发表《数据库产业态势及技术趋势观察》主题演讲,从产业发展、技术演进、行业应用三大维度,系统梳理了全球及我国…

作者头像 李华
网站建设 2026/7/8 1:29:54

15个实用的代码混淆工具,Python与Java

15个实用的代码混淆工具,Python与Java # 15个实用的代码混淆工具:全面保护你的Python与Java代码安全 在当今软件开发领域,代码安全越来越受到重视。无论是为了保护商业机密,还是为了防止逆向工程,代码混淆都是一种有…

作者头像 李华
网站建设 2026/7/8 1:29:02

麦弗逊 vs 双叉臂 vs 多连杆:3类主流独立悬架操控与舒适度量化对比

麦弗逊 vs 双叉臂 vs 多连杆:3类主流独立悬架操控与舒适度量化对比当你在4S店销售顾问口中听到"全系标配多连杆独立悬架"时,是否真正理解这组专业术语背后的驾驶体验差异?我们拆解了37款主流车型的底盘数据,在专业试车场…

作者头像 李华