智能体多个工具调用

from langchain.chat_models import init_chat_model

from langchain_core.output_parsers import JsonOutputParser

from langchain_core.prompts import ChatPromptTemplate

from pydantic import BaseModel, Field

from env_utils import DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL

from langchain.agents import create_agent,AgentState

from langchain.agents.middleware import SummarizationMiddleware, before_model, after_model

from langchain_core.messages import ToolMessage

from langchain_core.tools import tool

from langgraph.checkpoint.memory import InMemorySaver

from langgraph.prebuilt import ToolRuntime

from langgraph.prebuilt import ToolRuntime

from langgraph.types import Command

from init_llm import deepseek_llm

大模型使用工具前,需要通过"bind_tools()"方法将工具与模型绑定,让模型能够识别可用工具,绑定后,模型会根据输入内容自动判断是否需要调用工具:

from langchain.tools import tool

from langchain_core.messages import HumanMessage

from init_llm import deepseek_llm

定义股票查询工具

@tool

def get_stock_price(company: str, timeframe: str = "today") -> str:

"""获取指定公司的股票价格信息

Args:

company: 公司名称(如:苹果公司, 微软公司, 谷歌公司)

timeframe: 时间范围(today-今日, week-本周, month-本月)

"""

模拟股票数据

mock_data = {

"苹果公司": {"today": 185.20, "week": 183.50, "month": 180.75},

"微软公司": {"today": 415.86, "week": 412.30, "month": 405.42},

"谷歌公司": {"today": 15.42, "week": 15.20, "month": 14.85}

}

if company in mock_data:

price = mock_datacompany.get(timeframe, "未知时间范围")

return f"{company} {timeframe}价格: {price}美元"

else:

return f"未找到股票代码 {company} 的数据"

定义新闻搜索工具

@tool

def search_news(company: str) -> str:

"""搜索指定公司的财经新闻

Args:

company: 公司名称

Return:

公司的财经新闻,每个新闻占一行

"""

模拟新闻数据

mock_news = {

"苹果公司": [

"苹果发布新款iPhone,股价上涨3%",

"苹果与欧盟达成反垄断和解协议",

"苹果将在印度扩大生产规模"

],

"微软公司": [

"微软Azure云业务季度增长超预期",

"微软完成对Nuance的收购",

"微软推出新一代AI助手Copilot"

],

"谷歌公司": [

"谷歌发布新AI模型,性能提升20%",

"谷歌与OpenAI合作,开发新的AI助手",

"谷歌在欧洲展开AI研究项目"

]

}

news_list = mock_news.get(company, f"未找到{company}的相关新闻")

return "\n".join(news_list)

agent=create_agent(

model=deepseek_llm,

tools=get_stock_price, search_news

)

resp=agent.invoke({"messages":{"role": "user", "content": "谷歌公司的股价和新闻是什么?"}})

print(resp)

{'messages': [

HumanMessage(content='谷歌公司的股价和新闻是什么?', additional_kwargs={}, response_metadata={}, id='dca5d4ed-3fc6-479c-87d9-f7379b948656'),

AIMessage(content='我来帮您查询谷歌公司的股价和最新新闻,先获取这两项信息。', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 112, 'prompt_tokens': 410, 'total_tokens': 522, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 384}, 'prompt_cache_hit_tokens': 384, 'prompt_cache_miss_tokens': 26}, 'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402', 'id': '2bbec9f3-fe00-4a81-9133-e6083aad7698', 'finish_reason': 'tool_calls', 'logprobs': None}, id='lc_run--019e3030-8a13-7d31-b182-620eef87f117-0', tool_calls={'name': 'get_stock_price', 'args': {'company': '谷歌公司', 'timeframe': 'today'}, 'id': 'call_00_hQg6iYmwYKoPEL4zN1me4618', 'type': 'tool_call'}, {'name': 'search_news', 'args': {'company': '谷歌公司'}, 'id': 'call_01_kS6NsF6YiYOYp6IvULAb1198', 'type': 'tool_call'}, invalid_tool_calls=\[\], usage_metadata={'input_tokens': 410, 'output_tokens': 112, 'total_tokens': 522, 'input_token_details': {'cache_read': 384}, 'output_token_details': {}}),

ToolMessage(content='谷歌公司 today价格: 15.42美元', name='get_stock_price', id='b454c4bf-984f-405f-831d-bb28bc040aea', tool_call_id='call_00_hQg6iYmwYKoPEL4zN1me4618'),

ToolMessage(content='谷歌发布新AI模型,性能提升20%\n谷歌与OpenAI合作,开发新的AI助手\n谷歌在欧洲展开AI研究项目', name='search_news', id='17200f34-b3fd-4dee-bb21-a36df39290f9', tool_call_id='call_01_kS6NsF6YiYOYp6IvULAb1198'), AIMessage(content='以下是谷歌公司(Alphabet Inc.)的最新信息汇总:\n\n---\n\n### 📊 股价信息\n- **当前股价**:**15.42 美元**(今日价格)\n\n---\n\n### 📰 最新新闻\n1. **谷歌发布新AI模型,性能提升20%** --- 谷歌推出了新一代AI模型,在性能上实现了20%的提升,进一步巩固其在人工智能领域的领先地位。\n\n2. **谷歌与OpenAI合作,开发新的AI助手** --- 谷歌与OpenAI强强联手,共同开发新的AI助手产品,这可能会给智能助手市场带来新的变数。\n\n3. **谷歌在欧洲展开AI研究项目** --- 谷歌持续扩大其全球AI布局,在欧洲启动了新的AI研究项目,推动技术创新。\n\n---\n\n从这些新闻可以看出,**人工智能(AI)**仍然是谷歌当前的核心战略方向,无论是在模型研发、产品合作还是全球研究布局上都在积极投入。', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 190, 'prompt_tokens': 578, 'total_tokens': 768, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 384}, 'prompt_cache_hit_tokens': 384, 'prompt_cache_miss_tokens': 194}, 'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402', 'id': '35bb25cb-8f35-41c2-a8ef-65cef974c2c1', 'finish_reason': 'stop', 'logprobs': None}, id='lc_run--019e3030-8f78-7e73-956a-bfc7f0466cb7-0', tool_calls=\[\], invalid_tool_calls=\[\], usage_metadata={'input_tokens': 578, 'output_tokens': 190, 'total_tokens': 768, 'input_token_details': {'cache_read': 384}, 'output_token_details': {}})]}

相关推荐
珺毅同学2 小时前
YOLO生成预测json标签迁移问题
python·yolo·json
骑士雄师2 小时前
18.4 长期记忆可修改版
python
~小先生~2 小时前
Python从入门到放弃(一)
开发语言·python
天佑木枫3 小时前
第2天:变量与数据类型 —— 让程序记住信息
python
Dust-Chasing4 小时前
Claude Code源码剖析 - Claude Code 上下文压缩机制
人工智能·python·ai
Cloud_Shy6184 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 33 - 35)
开发语言·人工智能·笔记·python·学习方法
abcy0712135 小时前
python pandas csv异步后台清洗前端优先返回成功信息
前端·python·pandas
颜酱5 小时前
LangChain使用RAG 入门:让大模型读懂你的私有文档
python·langchain
天天进步20156 小时前
Python全栈项目--校园智能宿舍管理系统
开发语言·python
测试员周周6 小时前
【AI测试智能体-面试】AI测试面试60题(附回答思路)
人工智能·python·功能测试·测试工具·单元测试·自动化·测试用例