安装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