大模型调用多个工具
from langchain.agents import create_agent
from langchain.agents.middleware import wrap_model_call, ModelRequest, ModelResponse
from langchain.chat_models import init_chat_model
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain_core.messages import HumanMessage, AIMessage, ToolMessage, function
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_data[company].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)
from dotenv import load_dotenv
import os
load_dotenv(override=True)
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
DEEPSEEK_BASE_URL = os.getenv("DEEPSEEK_BASE_URL")
base_model = init_chat_model(
model="deepseek-chat",
model_provider="deepseek",
api_key=DEEPSEEK_API_KEY,
base_url=DEEPSEEK_BASE_URL
)
DASHSCOPE_API_KEY=os.getenv("DASHSCOPE_API_KEY")
DASHSCOPE_BASE_URL=os.getenv("DASHSCOPE_BASE_URL")
advance_model=init_chat_model(
model="qwen-plus",
model_provider="openai",
api_key=DASHSCOPE_API_KEY,
base_url=DASHSCOPE_BASE_URL
)
model_with_tools = deepseek_llm.bind_tools([get_stock_price, search_news])
messages=[]
human_message=HumanMessage(content="苹果公司股票价格怎么样,最近一个月的新闻有哪些")
messages.append(human_message)
response1=model_with_tools.invoke((messages))
messages.append(response1)
print(response1)
if response1.tool_calls:
for tool_call in response1.tool_calls:
if tool_call["name"]=="get_stock_price":
tool_result=get_stock_price.invoke(tool_call)
messages.append(tool_result)
print(type(tool_result))
print(tool_result)
elif tool_call["name"]=="search_news":
tool_result=search_news.invoke(tool_call)
messages.append(tool_result)
print(type(tool_result))
print(tool_result)
print(messages)
response3=model_with_tools.invoke((messages))
print(response3)
[HumanMessage(content='苹果公司股票价格怎么样,最近一个月的新闻有哪些', additional_kwargs={}, response_metadata={}),
AIMessage(content='我来帮您查询苹果公司的股票价格和最近一个月的新闻。', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 109, 'prompt_tokens': 414, 'total_tokens': 523, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 384}, 'prompt_cache_hit_tokens': 384, 'prompt_cache_miss_tokens': 30}, 'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402', 'id': '83d2e61d-4284-4fd5-a647-fc58dc82fd71', 'finish_reason': 'tool_calls', 'logprobs': None}, id='lc_run--019e7dd6-f797-7672-bdee-6b4db2410f7b-0',
tool_calls=[{'name': 'get_stock_price', 'args': {'company': '苹果公司', 'timeframe': 'month'}, 'id': 'call_00_0skIlAEJaEKBLbruoVab4397', 'type': 'tool_call'}, {'name': 'search_news', 'args': {'company': '苹果公司'}, 'id': 'call_01_FGGHmJ0ZXriqaWRQE8nQ5781', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 414, 'output_tokens': 109, 'total_tokens': 523, 'input_token_details': {'cache_read': 384}, 'output_token_details': {}}), ToolMessage(content='苹果公司 month价格: 180.75美元', name='get_stock_price', tool_call_id='call_00_0skIlAEJaEKBLbruoVab4397'),
ToolMessage(content='苹果发布新款iPhone,股价上涨3%\n苹果与欧盟达成反垄断和解协议\n苹果将在印度扩大生产规模', name='search_news', tool_call_id='call_01_FGGHmJ0ZXriqaWRQE8nQ5781')]
更多推荐




所有评论(0)