AIGC入門,手搓大模型客戶端與MCP交互

概述

在現代應用開發中,將大語言模型(LLM)與專用工具服務相結合,可以構建出既能理解自然語言,又能準確執行專業任務的智能代理。本文介紹一個基于 MCP(Model Context Protocol)協議和 Ollama 本地大模型的時間查詢系統,它能夠智能識別用戶查詢意圖,并動態調用時間服務工具來提供準確的時區時間信息。

系統架構

該系統由兩個核心組件構成:

  1. 時間服務器 (time_server.py):基于 MCP 協議實現的專用時間服務,提供獲取當前時間和列出常見時區的工具函數
  2. 客戶端測試程序 (time_client_test3.py):使用 Ollama 本地大模型分析用戶查詢,智能決定是否需要調用時間服務工具

核心代碼解析

時間服務器實現

from mcp.server.fastmcp import FastMCP
from datetime import datetime
import pytz  # 用于處理時區,如果需要的話可以先安裝:uv add pytz / pip install pytz# 創建 MCP 服務器實例,命名為 "TimeServer"
mcp = FastMCP("TimeServer")@mcp.tool()
def get_current_time(timezone: str = "UTC") -> str:"""獲取指定時區的當前時間。參數:timezone (str): 時區名稱,例如 'Asia/Shanghai', 'UTC', 'America/New_York'。默認為 'UTC'。返回:str: 格式化后的當前時間字符串,包含時區信息。"""try:# 獲取指定時區tz = pytz.timezone(timezone)# 獲取該時區的當前時間now = datetime.now(tz)# 格式化時間字符串formatted_time = now.strftime("%Y-%m-%d %H:%M:%S %Z")return f"當前時間 ({timezone}) 是: {formatted_time}"except pytz.UnknownTimeZoneError:return f"錯誤:未知的時區 '{timezone}'。請提供有效的時區名稱,例如 'Asia/Shanghai', 'UTC'。"# 可選:再添加一個工具,獲取所有支持的時區列表(例如列出一些常見的)
@mcp.tool()
def list_common_timezones() -> list:"""獲取常見的時區列表。返回:list: 包含常見時區名稱的列表。"""common_timezones = ['UTC', 'Asia/Shanghai', 'Asia/Tokyo', 'America/New_York', 'Europe/London', 'Australia/Sydney']return common_timezonesif __name__ == "__main__":# 運行 MCP 服務器mcp.run(transport='stdio')

關鍵特性:
● 使用 @mcp.tool() 裝飾器將函數暴露為 MCP 工具
● 支持動態時區處理,使用 pytz 庫處理全球時區
● 包含完整的錯誤處理機制,對未知時區提供友好提示

客戶端智能代理

import asyncio
import json
import re
from typing import Dict, Any, Optional, Tuple
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
import ollamaclass OllamaMCPClient:def __init__(self, server_script_path: str):self.server_params = StdioServerParameters(command="python",args=[server_script_path],)self.available_tools = []self.tool_info = {}self._session = Noneself._stdio_ctx = Noneasync def __aenter__(self):"""異步上下文管理器入口 - 初始化連接"""try:# 創建 stdio 客戶端上下文self._stdio_ctx = stdio_client(self.server_params)read_stream, write_stream = await self._stdio_ctx.__aenter__()# 創建會話self._session = ClientSession(read_stream, write_stream)await self._session.initialize()# 獲取可用工具列表tools_response = await self._session.list_tools()self.available_tools = [tool.name for tool in tools_response.tools]print(f"可用工具: {self.available_tools}")# 獲取每個工具的詳細信息for tool in tools_response.tools:self.tool_info[tool.name] = {"description": tool.description,"inputSchema": tool.inputSchema}return selfexcept Exception as e:await self.__aexit__(None, None, None)raise Exception(f"初始化 MCP 服務器時出錯: {e}")async def __aexit__(self, exc_type, exc_val, exc_tb):"""異步上下文管理器出口 - 清理資源"""try:if self._session:await self._session.close()if self._stdio_ctx:await self._stdio_ctx.__aexit__(exc_type, exc_val, exc_tb)except Exception as e:print(f"關閉連接時出錯: {e}")def extract_tool_call(self, model_response: str) -> Tuple[Optional[str], Optional[Dict[str, Any]]]:"""從模型響應中提取工具調用信息。使用多種策略處理不穩定的參數格式。"""# 策略1: 嘗試解析整個響應為JSONtry:data = json.loads(model_response.strip())if isinstance(data, dict) and "name" in data:tool_name = data["name"]arguments = data.get("arguments", {})if tool_name in self.available_tools:validated_args = self.validate_arguments(tool_name, arguments)return tool_name, validated_argsexcept json.JSONDecodeError:pass# 策略2: 嘗試查找JSON片段json_patterns = [r'\{[^{}]*"name"[^{}]*:[^{}]*"[^"]*"[^{}]*\}',r'\{.*"name":\s*"([^"]+)".*"arguments":\s*(\{.*?\}).*\}',]for pattern in json_patterns:matches = re.finditer(pattern, model_response, re.DOTALL)for match in matches:try:if match.lastindex == 2:tool_name = match.group(1)arguments = json.loads(match.group(2))else:data = json.loads(match.group(0))tool_name = data.get("name")arguments = data.get("arguments", {})if tool_name and tool_name in self.available_tools:validated_args = self.validate_arguments(tool_name, arguments)return tool_name, validated_argsexcept (json.JSONDecodeError, AttributeError):continue# 策略3: 基于關鍵詞的啟發式匹配for tool_name in self.available_tools:if tool_name.lower() in model_response.lower():arguments = self.extract_arguments_heuristic(model_response, tool_name)validated_args = self.validate_arguments(tool_name, arguments)return tool_name, validated_argsreturn None, Nonedef validate_arguments(self, tool_name: str, arguments: Dict[str, Any]) -> Dict[str, Any]:"""驗證參數是否符合工具的要求,并提供默認值"""if not arguments:arguments = {}if tool_name == "get_current_time" and "timezone" not in arguments:arguments["timezone"] = "UTC"return argumentsdef extract_arguments_heuristic(self, response: str, tool_name: str) -> Dict[str, Any]:"""使用啟發式方法從響應中提取參數"""arguments = {}if tool_name == "get_current_time":timezone_patterns = [r'(asia/\w+|europe/\w+|america/\w+|australia/\w+|utc)',r'(上海|北京|紐約|倫敦|東京|悉尼)',r'(\bUTC\b|\bCST\b|\bEST\b|\bPST\b)']for pattern in timezone_patterns:match = re.search(pattern, response, re.IGNORECASE)if match:timezone = match.group(1)if timezone == "上海" or timezone == "北京":timezone = "Asia/Shanghai"elif timezone == "紐約":timezone = "America/New_York"elif timezone == "倫敦":timezone = "Europe/London"elif timezone == "東京":timezone = "Asia/Tokyo"elif timezone == "悉尼":timezone = "Australia/Sydney"arguments["timezone"] = timezonebreakreturn argumentsasync def chat_with_tools(self, user_query: str, model: str = "phi3:mini") -> str:"""與模型聊天,并處理可能的工具調用"""if not self._session:return "錯誤: MCP 會話未初始化"# 構建提示prompt = f"""用戶查詢: {user_query}你可用的工具: {json.dumps(list(self.tool_info.keys()), indent=2)}如果需要使用工具來回答問題,請以以下JSON格式回復:{{"name": "工具名稱","arguments": {{"參數名": "參數值"}}}}例如,對于查詢"現在上海是幾點?",你可以回復:{{"name": "get_current_time","arguments": {{"timezone": "Asia/Shanghai"}}}}如果不需要使用工具,請直接回復答案。"""try:# 調用Ollamaresponse = ollama.chat(model=model, messages=[{"role": "user", "content": prompt}])model_response = response['message']['content']print(f"模型初始響應: {model_response}")# 嘗試提取工具調用信息tool_name, arguments = self.extract_tool_call(model_response)if tool_name and tool_name in self.available_tools:print(f"檢測到工具調用: {tool_name}, 參數: {arguments}")# 調用工具try:tool_result = await self._session.call_tool(tool_name, arguments)tool_output = tool_result.contentprint(f"工具執行結果: {tool_output}")# 將工具結果發送回模型獲取最終答案follow_up_prompt = f"""你之前決定調用工具 {tool_name} 來回答問題。工具執行結果: {tool_output}請基于這個結果生成對用戶的最終回復。"""final_response = ollama.chat(model=model,messages=[{"role": "user", "content": follow_up_prompt}])return final_response['message']['content']except Exception as e:return f"調用工具時出錯: {e}"else:return model_responseexcept Exception as e:return f"與模型通信時出錯: {e}"async def main():# 替換為您的 time_server.py 的實際路徑server_script_path = "/Users/mac/work/gitstudy/mcp-helloword/lzc-mcp/time_server.py"try:# 使用異步上下文管理器創建客戶端并進行多次調用async with OllamaMCPClient(server_script_path) as client:# 測試查詢 - 多次調用示例test_queries = ["現在上海是幾點鐘?","請問UTC時間現在是多少?","告訴我紐約的當前時間","你好,今天天氣怎么樣?"]for i, query in enumerate(test_queries, 1):print(f"\n{'=' * 50}")print(f"查詢 #{i}: {query}")response = await client.chat_with_tools(query)print(f"最終回答: {response}")except Exception as e:print(f"程序執行出錯: {e}")if __name__ == "__main__":asyncio.run(main())

智能決策流程:

  1. 提示工程:通過系統提示明確告知模型可用工具和調用格式
  2. 意圖識別:模型分析用戶查詢,判斷是否需要調用工具
  3. JSON 解析:從模型響應中提取結構化工具調用指令
  4. 工具執行:通過 MCP 會話調用相應工具并返回結果

工作流程示例

時間查詢場景

  1. 用戶詢問:“紐約現在是什么時間?”
  2. 大模型識別意圖,生成工具調用指令:
{"action": "call_tool","tool_name": "get_current_time","arguments": {"timezone": "America/New_York"}
}
  1. 客戶端調用 MCP 工具獲取紐約當前時間
  2. 返回結果:“當前時間 (America/New_York) 是: 2024-01-15 10:30:45 EST”

無需工具場景

用戶詢問:“講一個關于時間旅行的故事”
● 大模型識別無需調用工具,直接生成創意響應

附:上述客戶端智能代理執行日志

處理查詢: 現在幾點了?(處理失敗)

============================================================
處理查詢: 現在幾點了?
Connected to: <socket.socket fd=3, family=2, type=1, proto=0, laddr=('127.0.0.1', 57699), raddr=('127.0.0.1', 57696)>.
[09/16/25 21:27:36] INFO     Processing request of type            server.py:624ListToolsRequest                                   
已連接到時間服務器,可用工具: ['get_current_time', 'list_common_timezones']
大模型提示詞: 你是一個AI助手,可以回答用戶問題并決定是否需要調用時間服務。你可以使用的工具:- get_current_time: 獲取指定時區的當前時間,參數: timezone (時區名稱)- list_common_timezones: 獲取常見時區列表,無參數調用格式:如果需要調用工具,請以以下JSON格式回復:{"action": "call_tool","tool_name": "工具名稱","arguments": {參數鍵: 參數值}}如果不需要調用工具,請直接回復答案。當前可用工具: ['get_current_time', 'list_common_timezones']用戶查詢: 現在幾點了?
詢問大模型是否需要調用工具...
大模型初始響應: {"action": "call_tool","tool_name": "get_current_time","arguments": {"timezone": "Asia/Shanghai" // Assuming you're looking for the time in Shanghai, China.}
}
解析大模型響應時出錯: Expecting ',' delimiter: line 5 column 37 (char 121)最終響應:
{"action": "call_tool","tool_name": "get_current_time","arguments": {"timezone": "Asia/Shanghai" // Assuming you're looking for the time in Shanghai, China.}
}
============================================================

處理查詢: 紐約現在是什么時間?(處理成功)


============================================================
處理查詢: 紐約現在是什么時間?
Connected to: <socket.socket fd=3, family=2, type=1, proto=0, laddr=('127.0.0.1', 57731), raddr=('127.0.0.1', 57696)>.
[09/16/25 21:27:41] INFO     Processing request of type            server.py:624ListToolsRequest                                   
已連接到時間服務器,可用工具: ['get_current_time', 'list_common_timezones']
大模型提示詞: 你是一個AI助手,可以回答用戶問題并決定是否需要調用時間服務。你可以使用的工具:- get_current_time: 獲取指定時區的當前時間,參數: timezone (時區名稱)- list_common_timezones: 獲取常見時區列表,無參數調用格式:如果需要調用工具,請以以下JSON格式回復:{"action": "call_tool","tool_name": "工具名稱","arguments": {參數鍵: 參數值}}如果不需要調用工具,請直接回復答案。當前可用工具: ['get_current_time', 'list_common_timezones']用戶查詢: 紐約現在是什么時間?
詢問大模型是否需要調用工具...
大模型初始響應: 
{"action": "call_tool","tool_name": "get_current_time","arguments": {"timezone": "America/New_York"}
}根據JSON格式回答,你需要獲取紐約當前的時間。為此,調用了“get_current_time”工具并指定了時區為“America/New_York”。現在請等待該API調用的結果后,你可以得到紐約當前的時間。大模型決定調用工具: get_current_time, 參數: {'timezone': 'America/New_York'}
[09/16/25 21:27:44] INFO     Processing request of type            server.py:624CallToolRequest                                    
工具調用結果: 當前時間 (America/New_York) 是: 2025-09-16 09:27:44 EDT最終響應:
當前時間 (America/New_York) 是: 2025-09-16 09:27:44 EDT
============================================================

處理查詢: 給我列出一些常見的時區(處理失敗)

============================================================
處理查詢: 給我列出一些常見的時區
Connected to: <socket.socket fd=3, family=2, type=1, proto=0, laddr=('127.0.0.1', 57734), raddr=('127.0.0.1', 57696)>.
[09/16/25 21:27:45] INFO     Processing request of type            server.py:624ListToolsRequest                                   
已連接到時間服務器,可用工具: ['get_current_time', 'list_common_timezones']
大模型提示詞: 你是一個AI助手,可以回答用戶問題并決定是否需要調用時間服務。你可以使用的工具:- get_current_time: 獲取指定時區的當前時間,參數: timezone (時區名稱)- list_common_timezones: 獲取常見時區列表,無參數調用格式:如果需要調用工具,請以以下JSON格式回復:{"action": "call_tool","tool_name": "工具名稱","arguments": {參數鍵: 參數值}}如果不需要調用工具,請直接回復答案。當前可用工具: ['get_current_time', 'list_common_timezones']用戶查詢: 給我列出一些常見的時區
詢問大模型是否需要調用工具...
大模型初始響應: {"action": "call_tool","tool_name": "list_common_timezones",
}根據常規時區的列表:
北美時區: America/New_York, America/Los_Angeles
澳大利亞時區: Australia/Sydney
東南亞時區: Asia/Shanghai, Asia/Kolkata
澳洲西部時區: Pacific/Noumea, Pacific/Guam
澳洲東部時區: Pacific/Auckland
澳洲北部時區: Pacific/Bougainville
澳洲南部時區: Pacific/Chuuk
澳洲西部時區: Pacific/Kiritimati
澳洲中部時區: Pacific/Pohnpei
澳洲南部時區: Pacific/Majuro
澳洲北部時區: Pacific/Galapagos
澳洲東部時區: Pacific/Enderbury
東盟時區: Asia/Bangkok
華北時區: Asia/Urumqi, Asia/Beijing
華南時區: Asia/Shanghai
中國東部時區: Asia/Chongqing
中國西部時區: Asia/Urumqi
香港時區: Asia/Hong Kong
臺灣時區: Asia/Taipei, Asia/Macau
日本時區: Asia/Tokyo
東非時區: Africa/Johannesburg, Africa/Harare, Asia/Kuwait
中東時區: Asia/Riyadh, Europe/London
歐洲時區: Europe/Berlin, Europe/Istanbul
亞太時區: Asia/Dubai, Australia/Sydney
東南亞時區: Asia/Hong Kong, Indochina Time (ICT), Myanmar Standard Time (MST)
日內班島時區: Asia/Ulan Bator
斯里蘭大時區: America/Los_Angeles, Europe/London
澳洲:Asia/Sydney, Australia/Sydney
北美洲:America/New_York, America/Chicago對于一個非常規的時區,如北京時間(UTC+8),我們可以直接寫下回答:
北京時區是北方時間(UTC+8)。
解析大模型響應時出錯: Illegal trailing comma before end of object: line 3 column 41 (char 69)最終響應:
{"action": "call_tool","tool_name": "list_common_timezones",
}根據常規時區的列表:
北美時區: America/New_York, America/Los_Angeles
澳大利亞時區: Australia/Sydney
東南亞時區: Asia/Shanghai, Asia/Kolkata
澳洲西部時區: Pacific/Noumea, Pacific/Guam
澳洲東部時區: Pacific/Auckland
澳洲北部時區: Pacific/Bougainville
澳洲南部時區: Pacific/Chuuk
澳洲西部時區: Pacific/Kiritimati
澳洲中部時區: Pacific/Pohnpei
澳洲南部時區: Pacific/Majuro
澳洲北部時區: Pacific/Galapagos
澳洲東部時區: Pacific/Enderbury
東盟時區: Asia/Bangkok
華北時區: Asia/Urumqi, Asia/Beijing
華南時區: Asia/Shanghai
中國東部時區: Asia/Chongqing
中國西部時區: Asia/Urumqi
香港時區: Asia/Hong Kong
臺灣時區: Asia/Taipei, Asia/Macau
日本時區: Asia/Tokyo
東非時區: Africa/Johannesburg, Africa/Harare, Asia/Kuwait
中東時區: Asia/Riyadh, Europe/London
歐洲時區: Europe/Berlin, Europe/Istanbul
亞太時區: Asia/Dubai, Australia/Sydney
東南亞時區: Asia/Hong Kong, Indochina Time (ICT), Myanmar Standard Time (MST)
日內班島時區: Asia/Ulan Bator
斯里蘭大時區: America/Los_Angeles, Europe/London
澳洲:Asia/Sydney, Australia/Sydney
北美洲:America/New_York, America/Chicago對于一個非常規的時區,如北京時間(UTC+8),我們可以直接寫下回答:
北京時區是北方時間(UTC+8)。
============================================================

處理查詢: Invalid/Timezone 現在的時間是多少?(處理失敗)


============================================================
處理查詢: Invalid/Timezone 現在的時間是多少?
Connected to: <socket.socket fd=3, family=2, type=1, proto=0, laddr=('127.0.0.1', 57766), raddr=('127.0.0.1', 57696)>.
[09/16/25 21:27:57] INFO     Processing request of type            server.py:624ListToolsRequest                                   
已連接到時間服務器,可用工具: ['get_current_time', 'list_common_timezones']
大模型提示詞: 你是一個AI助手,可以回答用戶問題并決定是否需要調用時間服務。你可以使用的工具:- get_current_time: 獲取指定時區的當前時間,參數: timezone (時區名稱)- list_common_timezones: 獲取常見時區列表,無參數調用格式:如果需要調用工具,請以以下JSON格式回復:{"action": "call_tool","tool_name": "工具名稱","arguments": {參數鍵: 參數值}}如果不需要調用工具,請直接回復答案。當前可用工具: ['get_current_time', 'list_common_timezones']用戶查詢: Invalid/Timezone 現在的時間是多少?
詢問大模型是否需要調用工具...
大模型初始響應: 
{"action": "call_tool","tool_name": "get_current_time","arguments": {"timezone": "Asia/Shanghai" // Assuming the user wants to know the current time in Shanghai, China. You would need to replace this with the correct timezone based on the context of your question or if you are unsure about it ask for a list first using `list_common_timezones`.}
}
如果你不確定該哪個時區,可以先調用這個工具來獲取常見的時區列表:{"action": "call_tool","tool_name": "list_common_timezones"
}
然后根據你的意愿或需求選擇合適的時區,再使用 `get_current_time`。
解析大模型響應時出錯: Expecting ',' delimiter: line 5 column 37 (char 121)最終響應:
{"action": "call_tool","tool_name": "get_current_time","arguments": {"timezone": "Asia/Shanghai" // Assuming the user wants to know the current time in Shanghai, China. You would need to replace this with the correct timezone based on the context of your question or if you are unsure about it ask for a list first using `list_common_timezones`.}
}
如果你不確定該哪個時區,可以先調用這個工具來獲取常見的時區列表:{"action": "call_tool","tool_name": "list_common_timezones"
}
然后根據你的意愿或需求選擇合適的時區,再使用 `get_current_time`。
============================================================

處理查詢: 講一個關于時間旅行的故事(處理成功)


============================================================
處理查詢: 講一個關于時間旅行的故事
Connected to: <socket.socket fd=3, family=2, type=1, proto=0, laddr=('127.0.0.1', 57770), raddr=('127.0.0.1', 57696)>.
[09/16/25 21:28:02] INFO     Processing request of type            server.py:624ListToolsRequest                                   
已連接到時間服務器,可用工具: ['get_current_time', 'list_common_timezones']
大模型提示詞: 你是一個AI助手,可以回答用戶問題并決定是否需要調用時間服務。你可以使用的工具:- get_current_time: 獲取指定時區的當前時間,參數: timezone (時區名稱)- list_common_timezones: 獲取常見時區列表,無參數調用格式:如果需要調用工具,請以以下JSON格式回復:{"action": "call_tool","tool_name": "工具名稱","arguments": {參數鍵: 參數值}}如果不需要調用工具,請直接回復答案。當前可用工具: ['get_current_time', 'list_common_timezones']用戶查詢: 講一個關于時間旅行的故事
詢問大模型是否需要調用工具...
大模型初始響應: 在黑洞漩曲中,李明和他的朋友小王發現了一個亞特僭的機器。這臺機器能夠將人們送回任何時代,無論是古老的三國時期還有未來。不久之后,李明和小王決定拓寬他們的視野,去遇見貴公主孫權。帶著機器在古龍時代出行,兩人以不可告別的身份和立場與其他同一時代的人物交流,試圖改變歷史中的不公正事件。在無數次的奇跡里找到了機會—-在一個有關科技知識傳遞和對未來發展影若的巨大突變時,他們被發現了并逃亡。不幸的是,他們無法通過這臺機器抵御時間流變化,最終被各自的歷史中心人物所強大的力量殺死了。然而,他們在其生命中的智慧和對時間旅行的深入了解,未來的科技家們會基于這些原則重新開發時間旅行機器,帶來一個更加互聯互信的世界。李明和小王的故事被記錄在遺傳編碼中以后,成為了時間旅行理論和技術發展的一部分。盡管他們無法改變過去,但他們的決心和智慧對于科學界的進步與世界未來發展仍然有著永遠的影響。最終響應:
在黑洞漩曲中,李明和他的朋友小王發現了一個亞特僭的機器。這臺機器能夠將人們送回任何時代,無論是古老的三國時期還有未來。不久之后,李明和小王決定拓寬他們的視野,去遇見貴公主孫權。帶著機器在古龍時代出行,兩人以不可告別的身份和立場與其他同一時代的人物交流,試圖改變歷史中的不公正事件。在無數次的奇跡里找到了機會—-在一個有關科技知識傳遞和對未來發展影若的巨大突變時,他們被發現了并逃亡。不幸的是,他們無法通過這臺機器抵御時間流變化,最終被各自的歷史中心人物所強大的力量殺死了。然而,他們在其生命中的智慧和對時間旅行的深入了解,未來的科技家們會基于這些原則重新開發時間旅行機器,帶來一個更加互聯互信的世界。李明和小王的故事被記錄在遺傳編碼中以后,成為了時間旅行理論和技術發展的一部分。盡管他們無法改變過去,但他們的決心和智慧對于科學界的進步與世界未來發展仍然有著永遠的影響。
============================================================

技術亮點

  1. 模塊化設計:服務與客戶端分離,符合微服務架構理念
  2. 協議標準化:使用 MCP 協議,確保工具調用的規范性和互操作性
  3. 本地化部署:使用 Ollama 和本地模型,保障數據隱私和響應速度
  4. 智能路由:大模型作為智能路由層,動態決定是否需要調用專業工具
  5. 錯誤恢復:完善的異常處理機制,確保系統穩定性

應用價值

這種架構模式具有廣泛的適用性:

  1. 企業級應用:可擴展為包含多種專業工具的企業智能助手
  2. 教育場景:演示如何將 LLM 與專業工具結合的教學案例
  3. 原型開發:快速構建領域特定智能應用的參考架構
  4. 研究平臺:探索工具使用和智能代理行為的實驗平臺

總結

本文介紹的系統展示了如何將大語言模型與專業工具服務通過 MCP 協議有機結合,創建出既能理解自然語言又能準確執行專業任務的智能代理。這種架構模式為構建下一代智能應用提供了可行路徑,既發揮了 LLM 的語言理解優勢,又保證了專業任務的執行準確性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/97998.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/97998.shtml
英文地址,請注明出處:http://en.pswp.cn/web/97998.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習:從預備知識到未來展望

在當今數字化時代&#xff0c;深度學習正以前所未有的速度改變著我們的生活和工作方式。從智能語音助手到自動駕駛汽車&#xff0c;從精準醫療到個性化推薦系統&#xff0c;深度學習的應用無處不在。本文將從深度學習的預備知識入手&#xff0c;探討其發展歷程、關鍵技術和未來…

軟考高級系統架構設計師之構件與中間件技術篇

一、構件的定義 定義1:軟件構件是一種組裝單元&#xff0c;它具有規范的接口規約和顯式的語境依賴。軟件構件可以被獨立地部署并由第三方任意地組裝。 定義2:構件是某系統中有價值的、幾乎獨立的并可替換的一個部分&#xff0c;它在良好定義的體系結構語境內滿足某清晰的功能。…

Node.js 文件上傳中文文件名亂碼問題,為什么只有Node會有亂碼問題,其他后端框架少見?

問題現象當用戶上傳包含中文字符的文件時&#xff0c;在服務器端獲取到的文件名可能變成類似 ????.txt 這樣的亂碼&#xff0c;而不是預期的中文文件名。為什么只有Node會亂碼&#xff1f;很多后端框架&#xff08;如 Java Spring Boot、Python Django、PHP Laravel&#x…

學習英語音標 (從漢語角度看英語音標發音差異)

僅供參考, 跟著教學視頻看不懂時再來看以下引導 以下只寫容易出錯的音標 發音視頻: https://www.jiwake.com/yinbiaofayin/ 音標規則單詞??類似漢語e, 餓~urge?類似漢語e, 餓go??類似漢語o, 哦~walk?類似漢語o, 哦wash?/i?/的短語, 不止發聲短,舌頭不用隆起it?類似漢…

論文筆記(九十一)GWM: Towards Scalable Gaussian World Models for Robotic Manipulation

GWM: Towards Scalable Gaussian World Models for Robotic Manipulation文章概括摘要1. 引言2. 相關工作3. 高斯世界模型&#xff08;Gaussian World Model&#xff09;3.1. 世界狀態編碼&#xff08;World State Encoding&#xff09;3.2. 基于擴散的動態建模&#xff08;Dif…

apache phoenix sql 命令大全詳解

這是一份非常詳細的 Apache Phoenix SQL 命令大全和詳解。Phoenix 作為 HBase 上的 SQL 層&#xff0c;其語法大部分與標準 SQL 兼容&#xff0c;但也有許多針對 HBase 的特性擴展。核心概念 在開始之前&#xff0c;請記住 Phoenix 的兩個核心概念&#xff1a; 主鍵&#xff08…

【代碼講解】SO-ARM100 雙場景演示:手柄驅動 Mujoco 仿真 + 實機控制

視頻講解&#xff1a; 【代碼講解】SO-ARM100 雙場景演示&#xff1a;手柄驅動 Mujoco 仿真 實機控制今天介紹下使用使用北通手柄通過控制 Mujoco 中的 SO-ARM100 機械臂&#xff0c;然后將關節數據通過 zmq 通信轉發控制實際機械臂。 本期中會涉及如下點&#xff0c;需要注意…

「數據獲取」《中國教育經費統計年鑒》(1997-2024)

01、數據簡介《中國教育經費統計年鑒》作為我國教育經費領域的核心統計典籍&#xff0c;全面系統地呈現了全國各級各類教育經費的來源構成、分配流向與使用成效。其統計范圍覆蓋學前教育、基礎教育、中等職業教育、高等教育及特殊教育等全學段&#xff0c;數據維度涵蓋財政性教…

使用 Logspout 收集所有容器的

1.將所有容器的輸出路由到遠程 rsyslog 服務器1.修改 rsyslog 配置文件/etc/rsyslog.conf, 從中找到 “# Provides UDP sysilog recepion"語句。并將該處的以下兩行配置代碼行首的“#”字符刪除&#xff08;取消注釋&#xff09;[roothost1 ~]# vi /etc/rsyslog.conf [roo…

【智能化解決方案】基于多目標優化檢索增強生成的智能行程規劃方案

&#x1f4dd; 基于多目標優化的智能行程規劃方案 1 用戶需求分析與矩陣構建 1.1 核心用戶信息提取 根據用戶提供的年齡、出發地、目的地、出行時間等基本信息&#xff0c;我們首先構建一個用戶特征向量&#xff1a; U {Age, Origin, Destination, TravelDate, Duration, Budg…

軟件研發的演變

軟件研發從一門手工作坊式的藝術&#xff0c;逐步演進為一門系統化、工程化、智能化的現代學科。其發展歷程不僅體現了技術的飛躍&#xff0c;更反映了方法論、協作模式和思維方式的深刻變革。一、發展演變歷程軟件研發的演變可以大致劃分為以下幾個階段&#xff1a;1. 軟件作坊…

「日拱一碼」091 機器學習——集成學習

目錄 集成學習介紹 1. 核心思想 2. 為什么有效&#xff1f; 3. 主要流派與方法 A. 并行方法&#xff1a;Bagging (Bootstrap Aggregating) B. 串行方法&#xff1a;Boosting C. 堆疊法&#xff1a;Stacking 代碼示例 Bagging 的代表 —— 隨機森林 (Random Forest) 集成…

vscode實現第三方包的使用,cmake結合vcpkg(跨平臺)

要使用cmake和vcpkg組織一個完整的現代cpp項目&#xff0c;一般來說需要三個文件vcpkg.json描述第三方依賴項//vcpkg.json {"dependencies": ["fmt"] }//安裝,在vcpkg.json目錄執行 vcpkg installCMakePresets.json定義項目的本質屬性&#xff08;What&…

DevExpress中Word Processing Document API學習記錄

文章目錄1 文檔結構劃分2 文檔操作基礎2.1 Positions and Ranges2.2 Secitions2.3 Paragraphs2.4 Tables2.5 Lists2.6 Hyperlinks and Bookmarks2.7 Comments2.8 Headers and Footers2.9 Shapes and Pictures2.10 Watermarks2.11 Charts2.12 OLE Objects2.13 ActiveX Controls2…

Roo Code 的差異_快速編輯功能

什么是差異編輯&#xff1f; 簡單來說&#xff0c;差異編輯就像是一位細心的裝修師傅&#xff1a;他不會把整個房子拆掉重蓋&#xff0c;而是精準地只修補需要改動的部分。Roo Code 的這項功能默認開啟&#xff0c;它通過比對代碼差異&#xff08;diff&#xff09;來實施修改&a…

【Axure高保真原型】標簽樹分類查詢案例

今天和大家分享標簽樹分類查詢案例的原型模版&#xff0c;效果包括&#xff1a; 樹形分類——點擊左側樹形里的箭頭&#xff0c;可以展開或收起子級選項&#xff1b; 查詢表格——點擊標簽樹里的選項&#xff0c;如果是末級選項&#xff0c;可以篩選右側表格用戶標簽&#xf…

容器化部署項目05

一、工作原理 鏡像&#xff1a;容器的模板&#xff0c;包括容器運行時所需的數據 容器&#xff1a;運行中的進程&#xff0c;依賴鏡像運行&#xff0c;鏡像的具現化 鏡像你可以把它看成Python中的類&#xff0c;而容器可以看做是類的實例化對象。 一個類可以有多個對象&#xf…

微信小程序 工作日歷 周計劃日報 修改等提報和狀態展示功能,支持h5,Android ,ios,基于uniapp,適配vue2和vue3

Work-calendar 介紹 &#xff08;底部附鏈接&#xff09; 基于uni-calendar做的定制化開發&#xff0c;主要功能為工作日歷展示和提報組件 ? 1.支持周計劃日報狀態展示且可配置 ? 2.支持農歷展示配置&#xff0c;回到當日&#xff0c;月份切換 ? 3.日歷&#xff0c;周報…

openharmony 鴻蒙 下 利用藍牙API(a2dp模塊-高級音頻,ble模塊-低功耗藍牙等)完成對藍牙音響的控制(藍牙廣播)

1.首先是登錄頁面&#xff08;利用webapi 和本地數據存儲完成登陸操作&#xff09; 2.添加設備&#xff08;利用ble.startBLEScan 和 ble.on("BLEDeviceFind", onReceiveEvent);完成藍牙掃描與顯示&#xff09; 3.藍牙ble連接&#xff08;利用ble.createGattClientDe…

17、邏輯回歸與分類評估 - 從連續到離散的智能判斷

學習目標:理解分類問題的本質和評估方法,掌握邏輯回歸的數學原理和概率解釋,學會二分類和多分類問題的處理方法,熟練使用分類評估指標,理解過擬合和正則化的基本概念。 > 從第16章到第17章:從預測數值到判斷類別 在第16章中,我們學習了線性回歸,解決的是預測連續數…