LangChain Invoke中取出对话内容
安装langchain
首先,你要安装好langchain
pip install langchain langchain-openai langchain-deepseek
接下来,正式开始创建一个简单的agent
from langchain.agents import create_agent
from langchain_deepseek import ChatDeepSeek
from tool import get_city_time
# create your agent instance here
llm = ChatDeepSeek(
model='deepseek-v4-flash',
temperature=0.2
)
def agent_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)
for i, msg in enumerate(response['messages']):
msg_type = type(msg).__name__
print(f'\n{"="*20} 第{i+1}条消息: {msg_type} {"="*20}')
# 1. 用户消息
if msg_type == 'HumanMessage':
print(f'【用户提问】\n{msg.content}')
# 2. AI消息
elif msg_type == 'AIMessage':
# 思考内容
reasoning = msg.additional_kwargs.get('reasoning_content')
if reasoning:
print(f'【思考内容】\n{reasoning}')
# AI回答内容
if msg.content:
print(f'【AI回答】\n{msg.content}')
# 工具调用
if msg.tool_calls:
print(f'【工具调用】')
for tc in msg.tool_calls:
print(f' 工具: {tc["name"]}')
print(f' 参数: {tc["args"]}')
print(f' 调用ID: {tc["id"]}')
# Token消耗
token_usage = msg.response_metadata.get('token_usage')
if token_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. 工具返回结果
elif msg_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
更多推荐


所有评论(0)