根据上下文中的用户信息,切换提示词

from langchain.agents import create_agent

from langchain.agents.middleware import wrap_model_call, ModelRequest, ModelResponse,dynamic_prompt

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_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)

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

)

@dynamic_prompt

def dynamic_prompt(request:ModelRequest) ->str:

user_type=(request.runtime.context'user_type')

if user_type == 'vip':

prompt="回答用户之前,首先称呼,尊敬的vip客户你好,然后再回答问题"

else:

prompt="回答之前,首选称呼普通用户,然后回答问题"

return prompt

@wrap_model_call()

def dynamic_model_selection(request:ModelRequest,handler:function) -> ModelResponse:

"""根据用户输入动态选择模型"""

if "股票" in request.messages-1"content":

request.model = "deepseek_llm_stock"

elif "新闻" in request.messages-1"content":

else:

request.model = "deepseek_llm"

return handler(request)

print(type(request))

print(request)

message_count=len(request.state'messages')

if message_count >=3 :

model=advance_model

print('2222222222222222222222')

print(request.state'messages')

else:

model=base_model

print('11111111111111111111111')

print(request.state'messages')

return handler(request.override(model=model))

agent=create_agent(

model=deepseek_llm,

tools=get_stock_price, search_news,

middleware=dynamic_model_selection,dynamic_prompt

)

resp=agent.invoke({"messages":{"role":"user","content":"比较一下微软和苹果的股价"}},context={"user_type":"xxxx"})

print(resp)

{'messages': HumanMessage(content='比较一下微软和苹果的股价', additional_kwargs={}, response_metadata={}, id='52460d71-932f-4600-9e6b-b3b00087fd70'), AIMessage(content='好的!我来帮你查询微软和苹果公司最新的股价信息。', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 125, 'prompt_tokens': 421, 'total_tokens': 546, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 421}, 'model_provider': 'deepseek', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_8b330d02d0_prod0820_fp8_kvcache_20260402', 'id': 'b33de424-8bd8-4ccc-925f-9af332492a44', 'finish_reason': 'tool_calls', 'logprobs': None}, id='lc_run--019e7717-5425-7442-be6f-b9c6f1d08c92-0', tool_calls=\[{'name': 'get_stock_price', 'args': {'company': '微软公司', 'timeframe': 'today'}, 'id': 'call_00_Ud5Tme5UKczU9APsXP5Y7560', 'type': 'tool_call'}, {'name': 'get_stock_price', 'args': {'company': '苹果公司', 'timeframe': 'today'}, 'id': 'call_01_ZlFttQSgtJJSyGh6F4hE4247', 'type': 'tool_call'}, invalid_tool_calls=\[\], usage_metadata={'input_tokens': 421, 'output_tokens': 125, 'total_tokens': 546, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}}), ToolMessage(content='微软公司 today价格: 415.86美元', name='get_stock_price', id='e0d0df5f-89d3-4d66-a5b9-27c919b6fc85', tool_call_id='call_00_Ud5Tme5UKczU9APsXP5Y7560'), ToolMessage(content='苹果公司 today价格: 185.2美元', name='get_stock_price', id='c5b6e531-f7e4-4732-b038-afa0c67a20be', tool_call_id='call_01_ZlFttQSgtJJSyGh6F4hE4247'), AIMessage(content='普通用户,以下是微软和苹果公司今日(today)的股价对比:\n\n- **微软公司**:415.86 美元 \n- **苹果公司**:185.20 美元 \n\n可以看出,微软当前股价显著高于苹果。不过需要注意的是,股价受多种因素影响(如市值、股票分割历史、行业定位等),单纯比较单价不能直接反映公司整体价值(例如苹果总市值仍长期位居全球前列)。如果您需要进一步分析(如本周/本月涨跌幅、市盈率或新闻背景),欢迎随时告诉我!', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 123, 'prompt_tokens': 432, 'total_tokens': 555, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}}, 'model_provider': 'openai', 'model_name': 'qwen-plus', 'system_fingerprint': None, 'id': 'chatcmpl-6790cb66-0f32-9f80-8d72-db789d6ea9e2', 'finish_reason': 'stop', 'logprobs': None}, id='lc_run--019e7717-58e3-75a1-acc3-376c7c395792-0', tool_calls=\[\], invalid_tool_calls=\[\], usage_metadata={'input_tokens': 432, 'output_tokens': 123, 'total_tokens': 555, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}})]}

相关推荐
xywww1684 小时前
大模型 API 选型实战:GPT、Gemini、Claude 接入时该看哪些指标?
运维·服务器·人工智能·python·gpt·langchain
夜雪一千9 小时前
Python enumerate() 函数完整详解:遍历同时获取索引,告别手动计数
服务器·windows·python
能有时光9 小时前
PyTorch KernelAgent 源码解读 ---(4)--- ExtractorAgent
人工智能·pytorch·python
_Jimmy_10 小时前
Python 协程库如何使用以及有哪些使用场景
python
aqi0010 小时前
15天学会AI应用开发(十七)使用LangGraph实现会话记忆功能
人工智能·python·大模型·ai编程·ai应用
第一程序员10 小时前
Rust Agent 子进程执行:Command 之前,先定义输入和超时
python·rust·github
skywalk816311 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
weixin_BYSJ198711 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
EQUINOX112 小时前
【论文阅读】| MoCo精读
论文阅读·人工智能·python·深度学习·机器学习
用户83562907805113 小时前
使用 Python 自动化 Excel 公式和函数:完整指南
后端·python