大模型调用多个工具

from langchain_openai import ChatOpenAI

from langchain_core.tools import tool

from langchain_core.messages import HumanMessage, AIMessage, ToolMessage

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)

1. 初始化模型并绑定工具

tools = get_stock_price, search_news

model_with_tools = deepseek_llm.bind_tools(tools)

message = \[\]

#human_message = HumanMessage(content="苹果公司今天的股价是多少?最近有什么新闻?")

human_message = HumanMessage(content="比较一下微软和苹果的股价")

#human_message = HumanMessage(content="腾讯最近有什么重大新闻?")

human_message = HumanMessage(content="海水为什么是咸的?")

message.append(human_message)

2. 工具调用

while True:

response = model_with_tools.invoke(message)

message.append(response)

如果有调用工具,处理工具调用响应

3.开发者根据模型的响应,调用工具并获取结果

if response.tool_calls:

for tool_call in response.tool_calls:

if tool_call"name" == "get_stock_price":

stock_result = get_stock_price.invoke(tool_call)

print("stock_result", stock_result)

message.append(stock_result)

if tool_call"name" == "search_financial_news":

news_result = search_news.invoke(tool_call)

print("news_result", news_result)

message.append(news_result)

else:

print("没有工具调用,直接返回答案")

break

print(message)

[HumanMessage(content='比较一下微软和苹果的股价', additional_kwargs={}, response_metadata={}),

AIMessage(content='我来帮你查询微软和苹果的股票价格信息。', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 124, 'prompt_tokens': 410, 'total_tokens': 534, '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': 'eb47ca2a-3af3-43b7-91fa-0a2f7ca05a7e', 'finish_reason': 'tool_calls', 'logprobs': None}, id='lc_run--019e6979-41a4-7403-b875-88285ac2f716-0',

tool_calls=[

{'name': 'get_stock_price', 'args': {'company': '微软公司', 'timeframe': 'today'}, 'id': 'call_00_GLN3fxNaweLSYa6EBQc57191', 'type': 'tool_call'},

{'name': 'get_stock_price', 'args': {'company': '苹果公司', 'timeframe': 'today'}, 'id': 'call_01_idWsFLNdofWtrHquw6gh3359', 'type': 'tool_call'}], invalid_tool_calls=\[\], usage_metadata={'input_tokens': 410, 'output_tokens': 124, 'total_tokens': 534, 'input_token_details': {'cache_read': 384}, 'output_token_details': {}}),

ToolMessage(content='微软公司 today价格: 415.86美元', name='get_stock_price', tool_call_id='call_00_GLN3fxNaweLSYa6EBQc57191'),

ToolMessage(content='苹果公司 today价格: 185.2美元', name='get_stock_price', tool_call_id='call_01_idWsFLNdofWtrHquw6gh3359'),

AIMessage(content='好的,以下是微软和苹果今日股价的对比:\n\n---\n\n## 📊 微软 vs 苹果 股价对比\n\n| 公司 | 今日股价(美元) |\n|------|:--------------:|\n| **🟢 微软(Microsoft)** | **415.86\*\* \|\\n\| \*\*🍎 苹果(Apple)\*\* \| \*\*185.20** |\n\n### 对比分析:\n- **微软** 当前股价为 **415.86\*\*,远高于苹果的 \*\*185.20**,单价差距约为 **$230.66**。\n- 不过需要注意的是,股价高低并不直接代表公司价值大小,因为还要考虑总股本数量(市值 = 股价 × 总股本)。\n\n如果你想进一步了解它们的市值或近期新闻动态,也可以告诉我!😊', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 165, 'prompt_tokens': 573, 'total_tokens': 738, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 384}, 'prompt_cache_hit_tokens': 384, 'prompt_cache_miss_tokens': 189}, 'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402', 'id': '86849b24-5baa-4603-a837-5f2b2af92b32', 'finish_reason': 'stop', 'logprobs': None}, id='lc_run--019e6979-4932-7b00-9f9a-084788de16f1-0', tool_calls=\[\], invalid_tool_calls=\[\], usage_metadata={'input_tokens': 573, 'output_tokens': 165, 'total_tokens': 738, 'input_token_details': {'cache_read': 384}, 'output_token_details': {}})]

相关推荐
大模型码小白10 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
麻雀飞吧10 小时前
最新量化学习路径,交易认知和技术实现要并行
人工智能·python
C^h14 小时前
python函数学习
人工智能·python·机器学习
Fanta丶14 小时前
4.Python set()集合、dict(字典、映射)、 数据容器的通用功能
python
决战灬14 小时前
langgraph之interrupt(理论篇)
人工智能·python·agent
兜客互动15 小时前
2026年AI关键词拓展挖掘软件,高效助力内容创作精准获流
人工智能·python
weixin_5386019715 小时前
智能体测开Day30pytest测试框架
python
MC皮蛋侠客15 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
邪神与厨二病15 小时前
牛客周赛 Round 153
python·算法
yaoxin52112315 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python