Commit 31a35b96 authored by 何家明's avatar 何家明

优化模型

parent 57779c7f
...@@ -2,6 +2,7 @@ import uvicorn ...@@ -2,6 +2,7 @@ import uvicorn
from fastapi import FastAPI from fastapi import FastAPI
from QueryParam import QueryParam from QueryParam import QueryParam
from config_read import config
from mcp_client import user_query from mcp_client import user_query
app = FastAPI(name=["BME MCP服务"]) app = FastAPI(name=["BME MCP服务"])
...@@ -16,4 +17,4 @@ async def query(query_param: QueryParam): ...@@ -16,4 +17,4 @@ async def query(query_param: QueryParam):
if __name__ == "__main__": if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000) uvicorn.run(app, host="0.0.0.0", port=config["port"])
active: deepseek_v3_bme port: 8000
active: bme-qwen2.5-32b
model: model:
# deepseek-r1公司模型 # 公司:deepseek-r1-671b
deepseek_r1_bme: bme-deepseek-r1-671b:
api_key: Tc7sY47hiU5d1LNGbJjGBfqfY13IE3khIc0uBvpJ11U
base_url: http://10.10.10.14:30000/v1
model_name: deepseek-r1
# 公司:qwen2.5-32b
bme-qwen2.5-32b:
api_key: Tc7sY47hiU5d1LNGbJjGBfqfY13IE3khIc0uBvpJ11U api_key: Tc7sY47hiU5d1LNGbJjGBfqfY13IE3khIc0uBvpJ11U
base_url: http://10.10.10.12:30070/v1 base_url: http://10.10.10.12:30070/v1
model_name: deepseek-r1 model_name: deepseek-r1
# deepseek-v3公司模型 # 公司:deepseek-v3-0324-671b
deepseek_v3_bme: bme-deepseek-v3-0324-671b:
api_key: Tc7sY47hiU5d1LNGbJjGBfqfY13IE3khIc0uBvpJ11U api_key: Tc7sY47hiU5d1LNGbJjGBfqfY13IE3khIc0uBvpJ11U
base_url: http://10.10.10.12:30100/v1 base_url: http://10.10.10.12:30100/v1
model_name: deepseek-v3 model_name: deepseek-v3
......
import yaml
with open("config.yaml", "r", encoding="utf-8") as yml_file:
config = yaml.safe_load(yml_file)
import json
from contextlib import AsyncExitStack from contextlib import AsyncExitStack
from datetime import datetime from datetime import datetime
from typing import Optional from typing import Optional
from loguru import logger from loguru import logger
from mcp import ClientSession, StdioServerParameters from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client from mcp.client.stdio import stdio_client
...@@ -9,15 +11,10 @@ from openai.types.chat import ChatCompletionToolParam, ChatCompletionAssistantMe ...@@ -9,15 +11,10 @@ from openai.types.chat import ChatCompletionToolParam, ChatCompletionAssistantMe
ChatCompletionMessageToolCallParam, ChatCompletionToolMessageParam ChatCompletionMessageToolCallParam, ChatCompletionToolMessageParam
from openai.types.chat.chat_completion_message_tool_call_param import Function from openai.types.chat.chat_completion_message_tool_call_param import Function
from openai.types.shared_params import FunctionDefinition from openai.types.shared_params import FunctionDefinition
import json
import yaml
from pydantic import AnyUrl from pydantic import AnyUrl
from QueryParam import QueryParam from QueryParam import QueryParam
from config_read import config
with open("config.yaml", "r", encoding="utf-8") as yml_file:
config = yaml.safe_load(yml_file)
if config["log"]["base_path"]: if config["log"]["base_path"]:
logger.add(config["log"]["base_path"] + "/mcp_client/log_{time:%Y-%m-%d}.log", rotation="1 day", encoding="utf-8", logger.add(config["log"]["base_path"] + "/mcp_client/log_{time:%Y-%m-%d}.log", rotation="1 day", encoding="utf-8",
...@@ -138,7 +135,8 @@ class McpClient: ...@@ -138,7 +135,8 @@ class McpClient:
ai_response = self.client.chat.completions.create( ai_response = self.client.chat.completions.create(
model=self.model_name, model=self.model_name,
messages=messages, messages=messages,
tools=self.available_tools tools=self.available_tools,
tool_choice="auto"
) )
logger.info(f"--> ai response: {ai_response}") logger.info(f"--> ai response: {ai_response}")
...@@ -181,7 +179,8 @@ class McpClient: ...@@ -181,7 +179,8 @@ class McpClient:
ai_response = self.client.chat.completions.create( ai_response = self.client.chat.completions.create(
model=self.model_name, model=self.model_name,
messages=messages, messages=messages,
tools=self.available_tools tools=self.available_tools,
tool_choice="auto"
) )
logger.info(f"----> ai response: {ai_response}") logger.info(f"----> ai response: {ai_response}")
......
import requests import requests
import yaml
from mcp.server.fastmcp import FastMCP from mcp.server.fastmcp import FastMCP
mcp = FastMCP("BME-MCP") from config_read import config
with open("config.yaml", "r", encoding="utf-8") as yml_file: mcp = FastMCP("BME-MCP")
config = yaml.safe_load(yml_file)
base_url = config["remote"]["base_url"] base_url = config["remote"]["base_url"]
...@@ -62,9 +60,12 @@ def get_air_pm_10_month_focus(customer_id: int) -> []: ...@@ -62,9 +60,12 @@ def get_air_pm_10_month_focus(customer_id: int) -> []:
@mcp.tool() @mcp.tool()
def get_air_pm_rank(customer_id: int, order: int=1, statistic_type: int=1) -> []: def get_air_pm_rank(customer_id: int, order: int, statistic_type: int) -> []:
""" """
根据客户id获取空气质量微站排行(包含PM2.5和PM10标准) 根据客户id获取空气质量微站排行(包含PM2.5和PM10标准),其中
order如果没有指定,默认值是1;
statistic_type如果没有指定,默认值是1;
:param customer_id: 客户id :param customer_id: 客户id
:param order: 排序规则:按统计区间的类型进行排序,升序排序传1,降序排序传2,默认为1 :param order: 排序规则:按统计区间的类型进行排序,升序排序传1,降序排序传2,默认为1
:param statistic_type: 统计区间:按小时统计传1,按日统计传2,要按月统计传3,默认为1 :param statistic_type: 统计区间:按小时统计传1,按日统计传2,要按月统计传3,默认为1
...@@ -97,9 +98,13 @@ def get_air_pm_rank(customer_id: int, order: int=1, statistic_type: int=1) -> [] ...@@ -97,9 +98,13 @@ def get_air_pm_rank(customer_id: int, order: int=1, statistic_type: int=1) -> []
@mcp.tool() @mcp.tool()
def get_tsp_rank(customer_id: int, order: int=1, statistic_type: int=1, size: int=10) -> []: def get_tsp_rank(customer_id: int, order: int, statistic_type: int, size: int) -> []:
""" """
根据客户id获取TSP监测排行 根据客户id获取TSP监测排行,其中
order如果没有指定,默认值是1;
statistic_type如果没有指定,默认值是1;
size如果没有指定,默认值是10;
:param customer_id: 客户id :param customer_id: 客户id
:param order: 排序规则:按统计区间的类型进行排序,升序排序传1,降序排序传2,默认为1 :param order: 排序规则:按统计区间的类型进行排序,升序排序传1,降序排序传2,默认为1
:param statistic_type: 统计区间:按小时统计传1,按日统计传2,要按月统计传3,默认为1 :param statistic_type: 统计区间:按小时统计传1,按日统计传2,要按月统计传3,默认为1
...@@ -157,15 +162,21 @@ def get_governance_process_statistics(customer_id: int) -> {}: ...@@ -157,15 +162,21 @@ def get_governance_process_statistics(customer_id: int) -> {}:
@mcp.tool() @mcp.tool()
def get_governance_process_records(customer_id: int, instruct_type: str, device_name: str, start_time: str, def get_governance_process_records(customer_id: int, instruct_type: str, device_name: str,
end_time: str, size: int) -> []: start_time: str, end_time: str, size: int) -> []:
""" """
根据客户id查询治理过程全记录列表 根据客户id查询治理过程全记录,其中:
instruct_type如果没有指定,默认值是空字符串;
device_name如果没有指定,默认值是空字符串;
start_time如果没有指定,默认值是当前时间的七天前,如:2025-04-23 16:18:00;
end_time如果没有指定,默认值是当前时间,如:2025-04-30 16:18:00;
size如果没有指定,默认值是10;
:param customer_id: 客户id :param customer_id: 客户id
:param instruct_type: 触发机制:智能联动为0,手动开启为1,全部为空 :param instruct_type: 触发机制:当传入智能联动时,转换为0;当传入手动开启时,转换为1;其他值都转换为空字符串
:param device_name: 设备名称 :param device_name: 设备名称
:param start_time: 开始时间,格式为yyyy-MM-dd HH:mm:ss,如:2025-04-27 17:30:00,默认为七天前的时间 :param start_time: 开始时间,格式为yyyy-MM-dd HH:mm:ss
:param end_time: 结束时间,格式为yyyy-MM-dd HH:mm:ss,如:2025-04-27 17:30:00,默认为当前时间 :param end_time: 结束时间,格式为yyyy-MM-dd HH:mm:ss
:param size: 查询数量,默认10 :param size: 查询数量,默认10
:return: 返回结构中的字段名解释: :return: 返回结构中的字段名解释:
total:总数(由于该接口是分页查询,所以这里返回总数) total:总数(由于该接口是分页查询,所以这里返回总数)
...@@ -223,7 +234,7 @@ def get_default_system_prompt() -> str: ...@@ -223,7 +234,7 @@ def get_default_system_prompt() -> str:
return ( return (
"你可以结合一系列的工具(tool)来回答用户的问题。\n" "你可以结合一系列的工具(tool)来回答用户的问题。\n"
"以下是你应该始终遵循的规则:\n" "以下是你应该始终遵循的规则:\n"
"1.始终传入类型正确的参数,如果从输入中没有解析到参数,则取工具对应参数描述的默认值,如果也没有默认值,则结束流程并告知用户信息不全\n" "1.始终传入类型正确的参数,如果从用户输入中没有解析到参数,直接使用描述中提到的参数默认值,不需要询问用户\n"
"2.只在需要时调用工具,如果你不需要额外信息,不要调用搜索代理,尽量自己解决任务。\n" "2.只在需要时调用工具,如果你不需要额外信息,不要调用搜索代理,尽量自己解决任务。\n"
"3.如果不需要调用工具,直接回答问题即可。\n" "3.如果不需要调用工具,直接回答问题即可。\n"
"4.永远不要用完全相同的参数重新进行之前的工具调用。\n" "4.永远不要用完全相同的参数重新进行之前的工具调用。\n"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment