当前位置: 首页 > news >正文

基于MCP协议调用的大模型agent开发04

目录

MCP客户端Client开发流程

uv工具

uv安装流程

uv的基本用法介绍

MCP极简客户端搭建流程

MCP客户端接入OpenAI、DeepSeek在线模型流程


参考来源及学习推荐:

Anthropic MCP发布通告:https://www.anthropic.com/news/model-context-protocol

MCP GitHub主页:https://github.com/modelcontextprotocol

本系列:

https://blog.csdn.net/yuange1666/article/details/147095760?spm=1001.2014.3001.5502
https://blog.csdn.net/yuange1666/article/details/147095853?spm=1001.2014.3001.5502
https://blog.csdn.net/yuange1666/article/details/147127585?spm=1001.2014.3001.5501
https://blog.csdn.net/yuange1666/article/details/147127981?spm=1001.2014.3001.5501

MCP客户端Client开发流程

uv工具

MCP开发要求借助uv进行虚拟环境创建和依赖管理。uv 是一个Python 依赖管理工具,类似于 pip 和 conda,但它更快、更高效,并且可以更好地管理 Python 虚拟环境和依赖项。它的核心目标是替代 pip、venv 和 pip-tools,提供更好的性能和更低的管理开销。

uv 的特点:

  1. 速度更快:相比 pip,uv 采用 Rust 编写,性能更优
  2. 支持 PEP 582:无需 virtualenv,可以直接使用 __pypackages__ 进行管理
  3. 兼容 pip:支持 requirements.txt 和 pyproject.toml 依赖管理
  4. 替代 venv:提供 uv venv 进行虚拟环境管理,比 venv 更轻量
  5. 跨平台:支持 Windows、macOS 和 Linux

uv安装流程

1、使用 pip 安装

pip install uv

2、使用 curl 直接安装

curl -LsSf https://astral.sh/uv/install.sh | sh

uv的基本用法介绍

安装 uv 后,可以像 pip 一样使用它,它的语法更简洁,速度也更快。

示例

安装 Python 依赖

uv pip install numpy

与 pip install numpy 类似,但更快。

创建虚拟环境

uv venv mcpenv

等效于 python -m venv mcpenv,但更高效。

激活虚拟环境

source mcpenv/bin/activate  # Linux/macOS
mcpenv\Scripts\activate     # Windows

安装 requirements.txt

uv pip install -r requirements.txt

直接运行 Python 项目

如果项目中包含 pyproject.toml,可以直接运行:

uv run python script.py

这等效于:

pip install -r requirements.txt
python script.py

MCP是个让AI模型和外部工具协作的协议,就像给AI搭了个“工具箱”。但要管理这个工具箱里的东西,用传统的pip就像用手动拧螺丝,慢不说还容易出错。uv(虚拟环境管理工具)就厉害了,它就像个智能工具箱,能自动帮你搞定所有模块的安装和管理

uv通过一个叫pyproject.toml的文件,把所有依赖都整得明明白白,就像给工具箱里的每个工具贴了标签,想找啥一目了然。而且uv的速度比pip快得多,安装东西就像开跑车,嗖一下就搞定了。对于MCP这种需要频繁折腾依赖的项目,uv简直是救星。

所以,MCP更推荐用uv来管理环境。接下来,咱们可以先搭个MCP客户端,就像先搭个积木架子,看看能不能跑起来。等客户端能正常工作了,再慢慢搭MCP服务器,就像给积木架子添砖加瓦。这样分阶段来,万一有问题也能一步步排查,不会一上来就被复杂性搞得晕头转向。

MCP极简客户端搭建流程

创建 MCP 客户端项目

# 创建项目目录
uv init mcp-client
cd mcp-client

建议在autodl上租用云算力进行测试部署

创建MCP客户端虚拟环境

# 创建虚拟环境
uv venv# 激活虚拟环境
source .venv/bin/activate

这里需要注意的是,相比pip,uv会自动识别当前项目主目录并创建虚拟环境。

然后即可通过add方法在虚拟环境中安装相关的库。

# 安装 MCP SDK
uv add mcp

编写基础 MCP 客户端

然后在当前项目主目录中**创建 client.py **

写入代码

import asyncio
from mcp import ClientSession
from contextlib import AsyncExitStackclass MCPClient:
    def __init__(self):
        """初始化 MCP 客户端"""
        self.session = None
        self.exit_stack = AsyncExitStack()    async def connect_to_mock_server(self):
        """模拟 MCP 服务器的连接(暂不连接真实服务器)"""
        print(" MCP 客户端已初始化,但未连接到服务器")    async def chat_loop(self):
        """运行交互式聊天循环"""
        print("\nMCP 客户端已启动!输入 'quit' 退出")        while True:
            try:
                query = input("\nQuery: ").strip()
                if query.lower() == 'quit':
                    break
                print(f" [Mock Response] 你说的是:{query}")
            except Exception as e:
                print(f" 发生错误: {str(e)}")    async def cleanup(self):
        """清理资源"""
        await self.exit_stack.aclose()async def main():
    client = MCPClient()
    try:
        await client.connect_to_mock_server()
        await client.chat_loop()
    finally:
        await client.cleanup()if __name__ == "__main__":
    asyncio.run(main())

这段代码能够初始化 MCP 客户端(但不连接服务器),并提供一个交互式 CLI,可以输入查询(但只返回模拟回复),通过输入 quit 退出程序。需要注意的是,此时客户端没有接入任何大模型,只会重复用户的输入。

代码解释:

MCP客户端基本代码结构

初始化 MCP 客户端

*提供一个命令行交互界面

模拟 MCP 服务器连接

支持用户输入查询并返回「模拟回复」

支持安全退出

首先是导入必要的库

import asyncio  # 让代码支持异步操作
from mcp import ClientSession  # MCP 客户端会话管理
from contextlib import AsyncExitStack  # 资源管理(确保客户端关闭时释放资源)

asyncio:Python 内置的异步编程库,让 MCP 可以非阻塞地执行任务(比如聊天、查询)。

mcp.ClientSession:用于管理 MCP 客户端会话(但目前我们先不连接 MCP 服务器)。

AsyncExitStack:自动管理资源,确保程序退出时正确关闭 MCP 连接。

然后创建 MCPClient 类

class MCPClient:
    def __init__(self):
        """初始化 MCP 客户端"""
        self.session = None  # 先不连接 MCP 服务器
        self.exit_stack = AsyncExitStack()  # 创建资源管理器

self.session = None:暂时不连接 MCP 服务器,后续可以修改来真正连接。

self.exit_stack = AsyncExitStack():管理 MCP 客户端的资源,确保程序退出时可以正确释放资源。

模拟 MCP 服务器连接

async def connect_to_mock_server(self):
    """模拟 MCP 服务器的连接(暂不连接真实服务器)"""
    print(" MCP 客户端已初始化,但未连接到服务器")

这个函数不会真的连接 MCP 服务器,只是打印一条信息,表示客户端已经初始化。

async def:因为我们用的是 异步编程,所以需要用 async 关键字。

创建交互式聊天循环

async def chat_loop(self):
    """运行交互式聊天循环"""
    print("\nMCP 客户端已启动!输入 'quit' 退出")    while True:  # 无限循环,直到用户输入 'quit'
        try:
            query = input("\nQuery: ").strip()  # 让用户输入问题
            if query.lower() == 'quit':  # 如果用户输入 quit,退出循环
                break
            print(f" [Mock Response] 你说的是:{query}")  # 返回模拟回复
        except Exception as e:  # 发生错误时捕获异常
            print(f" 发生错误: {str(e)}")

while True:无限循环,让用户可以不断输入查询。

query = input("\nQuery: ").strip():获取用户输入的查询。

if query.lower() == 'quit':如果用户输入 quit,退出循环。

print(f" [Mock Response] 你说的是:{query}"):模拟 MCP 服务器的响应,暂时只是回显用户输入的内容。

async def cleanup(self):
    """清理资源"""
    await self.exit_stack.aclose()  # 关闭资源管理器

aclose() 确保程序退出时正确关闭 MCP 连接(尽管目前没有真正的连接)。

并定义**main() 主函数**

async def main():
    client = MCPClient()  # 创建 MCP 客户端
    try:
        await client.connect_to_mock_server()  # 连接(模拟)服务器
        await client.chat_loop()  # 进入聊天循环
    finally:
        await client.cleanup()  # 确保退出时清理资源

client = MCPClient():创建一个 MCP 客户端实例。

await client.connect_to_mock_server():初始化 MCP 客户端(暂不连接服务器)。

await client.chat_loop():启动交互式聊天。

finally: 确保 不管程序是否异常退出,都会正确释放资源。

运行代码脚本

if __name__ == "__main__":
    asyncio.run(main())

if __name__ == "__main__"::确保代码只能在 Python 直接运行时执行(而不是作为库导入时)

asyncio.run(main()):启动 main(),运行 MCP 客户端

MCP中一个基础的客户端代码结构总结如下:

运行 MCP 客户端

接下来尝试运行这个极简的MCP客户端:

uv run client.py

MCP客户端接入OpenAI、DeepSeek在线模型流程

接下来尝试在客户端中接入OpenAI和DeepSeek等在线模型进行对话。由于OpenAI和DeepSeek调用方法几乎完全一样,因此定义好一套的服务器client代码可以同时适用于GPT模型和DeepSeek模型。

新增依赖

为了支持调用OpenAI模型,以及在环境变量中读取API-KEY等信息,需要先安装如下依赖:

uv add mcp openai python-dotenv

创建.env文件

接下来创建.env文件,并写入OpenAI的API-Key,以及反向代理地址。借助反向代理,国内可以无门槛直连OpenAI官方服务器,并调用官方API。

写入

BASE_URL="反向代理地址"
MODEL=gpt-4o
OPENAI_API_KEY="OpenAI-API-Key"

而如果是使用DeepSeek模型,则需要在.env中写入如下内容:

BASE_URL=https://api.deepseek.com
MODEL=deepseek-chat      
OPENAI_API_KEY="DeepSeek API-Key"

import asyncio
import os
from openai import OpenAI
from dotenv import load_dotenv
from contextlib import AsyncExitStack# 加载 .env 文件,确保 API Key 受到保护
load_dotenv()class MCPClient:def __init__(self):"""初始化 MCP 客户端"""
        self.exit_stack = AsyncExitStack()
        self.openai_api_key = os.getenv("OPENAI_API_KEY")  # 读取 OpenAI API Key
        self.base_url = os.getenv("BASE_URL")  # 读取 BASE YRL
        self.model = os.getenv("MODEL")  # 读取 modelif not self.openai_api_key:raise ValueError(" 未找到 OpenAI API Key,请在 .env 文件中设置 OPENAI_API_KEY")        self.client = OpenAI(api_key=self.openai_api_key, base_url=self.base_url) async def process_query(self, query: str) -> str:"""调用 OpenAI API 处理用户查询"""
        messages = [{"role": "system", "content": "你是一个智能助手,帮助用户回答问题。"},{"role": "user", "content": query}]try:# 调用 OpenAI API
            response = await asyncio.get_event_loop().run_in_executor(None,lambda: self.client.chat.completions.create(
                    model=self.model,
                    messages=messages))return response.choices[0].message.contentexcept Exception as e:return f" 调用 OpenAI API 时出错: {str(e)}"async def chat_loop(self):"""运行交互式聊天循环"""print(" MCP 客户端已启动!输入 'quit' 退出")while True:try:
                query = input("\n你: ").strip()if query.lower() == 'quit':break                response = await self.process_query(query)  # 发送用户输入到 OpenAI APIprint(f" OpenAI: {response}")except Exception as e:print(f" 发生错误: {str(e)}")async def cleanup(self):"""清理资源"""await self.exit_stack.aclose()async def main():
    client = MCPClient()try:await client.chat_loop()finally:await client.cleanup()if __name__ == "__main__":
    asyncio.run(main())

运行client.py

然后即可输入如下命令开始运行对话客户端:

uv run client.py

clint.py代码解释

加载 OpenAI API Key

from dotenv import load_dotenv
import os# 加载 .env 文件,确保 API Key 受到保护
load_dotenv()self.openai_api_key = os.getenv("OPENAI_API_KEY")  # 读取 API Key
if not self.openai_api_key:raise ValueError(" 未找到 OpenAI API Key,请在 .env 文件中设置 OPENAI_API_KEY")

load_dotenv():自动加载 .env 文件,避免在代码中直接暴露 API Key。

os.getenv("OPENAI_API_KEY"):从环境变量中读取 OPENAI_API_KEY。

raise ValueError(...):如果 API Key 为空,则抛出错误,提醒用户必须配置 API Key。

创建 .env 文件

touch .env

在 .env 文件中添加 API Key

OPENAI_API_KEY=你的OpenAI API Key

发送用户输入到 OpenAI API

async def process_query(self, query: str) -> str:
    """调用 OpenAI API 处理用户查询"""
    messages = [
        {"role": "system", "content": "你是一个智能助手,帮助用户回答问题。"},
        {"role": "user", "content": query}
    ]    try:
        # 调用 OpenAI GPT-4 API
        response = await asyncio.get_event_loop().run_in_executor(
            None,
            lambda: openai.ChatCompletion.create(
                model="gpt-4",
                messages=messages,
                max_tokens=1000,
                temperature=0.7
            )
        )
        return response["choices"][0]["message"]["content"].strip()
    except Exception as e:
        return f" 调用 OpenAI API 时出错: {str(e)}"

messages:创建对话上下文,让 OpenAI 知道如何回答问题:

system 角色:设定 AI 角色(如“你是一个智能助手”)。

user 角色:存储用户输入。

openai.ChatCompletion.create(...)

model="gpt-4":使用 OpenAI 的 GPT-4 进行对话。

messages=messages:提供聊天记录,让 AI 生成回答。

max_tokens=1000:限制 AI 生成的最大字数。

temperature=0.7:控制 AI 回答的随机性(越高越随机)。

run_in_executor(...):

因为 OpenAI API 是同步的,但我们用的是异步代码

这里用 asyncio.get_event_loop().run_in_executor(...) 将 OpenAI API 变成异步任务,防止程序卡顿。

交互式聊天

async def chat_loop(self):"""运行交互式聊天循环"""print(" MCP 客户端已启动!输入 'quit' 退出")while True:try:
            query = input("\n你: ").strip()if query.lower() == 'quit':break            response = await self.process_query(query)  # 发送用户输入到 OpenAI APIprint(f" OpenAI: {response}")except Exception as e:print(f" 发生错误: {str(e)}")

输入查询 query = input("\n你: ").strip(),支持多轮对话。

调用 process_query(),将用户输入发送到 OpenAI API 并获取回复。

显示 OpenAI 生成的回复:print(f" OpenAI: {response}")

用户输入 quit 退出。

需要注意的是,由于MCP的client SDK主要规定了client和server之间的通信方法,因此在没有创建server之前,一个单纯对话的client甚至不需要用到mcp功能。但本段代码的学习仍是有必要的,为了熟悉各类大模型本地调用对话流程。而后我们只需要围绕上述代码稍作修改,即可调用外部的server。

相关文章:

基于MCP协议调用的大模型agent开发04

目录 MCP客户端Client开发流程 uv工具 uv安装流程 uv的基本用法介绍 MCP极简客户端搭建流程 MCP客户端接入OpenAI、DeepSeek在线模型流程 参考来源及学习推荐: Anthropic MCP发布通告:https://www.anthropic.com/news/model-context-protocol MC…...

ComfyUI_Echomimic部署问题集合

本博客总结自己在从WebUI转到ComfyUI的过程配置Echomimic遇到的一些问题和解决方法。 默认大家已经成功安装ComfyUI,我之前装的是ComfyU桌面版,现在用的是B站秋葉大佬的整合包。但内核都一样,错误也是通用的。遇到问题时,应该先去…...

音频转文本:如何识别音频成文字

Python脚本:MP4转MP3并语音识别为中文 以下是一个完整的Python脚本,可以将MP4视频转换为MP3音频,然后使用语音识别模型将音频转换为中文文本。 准备工作 首先需要安装必要的库: pip install moviepy pydub SpeechRecognition openai-whisper完整脚本 import os from m…...

脑科学与人工智能的交叉:未来智能科技的前沿与机遇

引言 随着科技的迅猛发展,脑科学与人工智能(AI)这两个看似独立的领域正在发生深刻的交汇。脑机接口、神经网络模型、智能机器人等前沿技术,正带来一场跨学科的革命。这种结合不仅推动了科技进步,也在医疗、教育、娱乐等…...

Linux | I.MX6ULL外设功能验证(11)

01 CSI 摄像头测试 I.MX6ULL 终结者开发板引出了一路 CSI 的摄像头接口,支持【007】的 OV5640 摄像头模块。首先我们连接OV5640 摄像头模块到开发板上,如下图所示(大家在连接的时候一定要注意方向,摄像头朝向开发板的内侧,千万不要接反):...

AI助手:Claude

一、简介 Claude 是由 Anthropic 公司开发的一款人工智能助手,类似于 OpenAI 的 ChatGPT。它以 Anthropic 提出的“宪法式 AI(Constitutional AI)”为核心设计理念,强调安全性、透明性和可控性。以下是对 Claude 的一个简要介绍&…...

vue项目proxy代理的方式

以下是一个详细的 Vue 项目配置 Proxy 代理 的示例和说明,用于解决开发环境跨域问题: 1. 基础代理配置 vue.config.js 配置文件 // vue.config.js module.exports {devServer: {proxy: {// 代理所有以 /api 开头的请求/api: {target: http://localhos…...

多项目并行时如何避免资源冲突

多项目并行时避免资源冲突需做到:精确的资源规划与调度、建立统一的资源管理体系、设置清晰的优先级策略、实时监控资源使用状况、优化团队沟通与协调。其中,精确的资源规划与调度尤其重要,它决定了项目资源能否高效利用,防止资源…...

求x的c(n,m)次方

近期看到一类很有趣的题啊,其最基础的表现形式为求 mod P的值。 所以我们来拿一道小例题讲讲。 题面:给定 x,n,m,求: mod 1000003471的值。 首先我们注意到,题目给定的模数1000003471为质数,根据费马…...

VS Code 的 .S 汇编文件里面的注释不显示绿色

1. 确认文件语言模式 打开 .S 文件后,查看 VS Code 右下角的状态栏,确认当前文件的识别模式(如 Assembly、Plain Text 等)。如果显示为 Plain Text 或其他非汇编模式: 点击状态栏中的语言模式(如 Plain Te…...

Apipost自定义函数深度实战:灵活处理参数值秘籍

在开发过程中,为了更好地处理传递给接口的参数值,解决在调试过程中的数据处理问题,我们经常需要用到函数处理数据。 过去,我们通过预执行脚本来处理数据,先添加脚本,然后将处理后的结果再赋值给请求参数。…...

ADI的BF561双核DSP怎么做开发,我来说一说(十)驱动直流电机和步进电机

作者的话 ADI的双核DSP,最早的一颗是Blackfin系列的BF561,这颗DSP我用了很久,比较熟悉,且写过一些给新手的教程。 硬件准备 ADZS-BF561-EZKIT开发板:ADI原厂评估板 AD-ICE20000仿真器:ADI现阶段性能最好…...

JS包装类型Object

包装类型 1 对象 Object 声明普通对象 学习静态方法,只能由Object自己调用 1.获得所有属性 2.获得所有属性值 3.对象拷贝...

【C++初阶】--- vector容器功能模拟实现

1.什么是vector? 在 C 里,std::vector 是标准模板库(STL)提供的一个非常实用的容器类,它可以看作是动态数组 2.成员变量 iterator _start;:指向 vector 中第一个元素的指针。 iterator _finish;&#x…...

FreeRTOS项目工程完善指南:STM32F103C8T6系列

FreeRTOS项目工程完善指南:STM32系列 本文是FreeRTOS STM32开发系列教程的一部分。我们将完善之前移植的FreeRTOS工程,添加串口功能并优化配置文件。 更多优质资源,请访问我的GitHub仓库:https://github.com/Despacito0o/FreeRTO…...

多值字典表设计:优雅处理一对多关系的数据库方案

在数据库设计中,我们经常需要处理一对多的关系数据。传统做法是创建关联表,但有时这种方式会显得过于复杂。今天,我将分享一种简单而实用的多值字典表设计方案,它适用于那些不需要对单个值进行复杂操作的场景。 为什么需要多值字典表? 在许多应用场景中,我们需要存储一…...

如何在Linux系统Docker部署Dashy并远程访问内网服务界面

## 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。一款功能超强大,颜值爆表的可定制专属导航页工…...

GRBL运动控制算法(五)脉冲生成Bresenham算法

前言 在数控系统和运动控制领域,脉冲信号的精确生成是实现高精度位置控制的核心。GRBL作为一款高效、开源的嵌入式运动控制固件,其底层脉冲生成机制直接决定了步进电机的运动平滑性、响应速度及整体性能。而这一机制的核心,正是经典的Bresen…...

Java学习手册:Java发展历史与版本特性

Java作为全球最流行的编程语言之一,其发展历程不仅见证了技术的演进,也反映了软件开发模式的变革。从1995年的首次发布到如今的持续更新,Java始终保持着强大的生命力和广泛的影响力。本文将简要回顾Java的发展历程,并重点介绍其关…...

25年时代电服社招入职Verify测评SHL题库语言理解数字推理考什么?

宁德时代语言理解 语言理解部分主要考察应聘者的语言表达和逻辑思维能力,题型包括阅读理解、逻辑填空和语句排序。阅读理解要求应聘者快速捕捉文章的主旨和细节信息,能够迅速把握文章的核心观点;逻辑填空需要在给定的语句中填入最合适的词汇…...

【C++】右值引用、移动语义与完美转发

左值、右值是C常见的概念,那么什么是右值引用,移动语义,完美转发呢?本UP带大家了解一下C校招常问的C11新特性。 左值与右值 左值:明确存储未知、可以取地址的表达式 右值:临时的、即将被销毁的&#xff…...

AIGC3——AIGC的行业应用与生产力变革:医疗、教育、影视与工业设计的突破

引言 人工智能生成内容(AIGC)技术正在深刻改变多个行业的生产方式,从医疗诊断到影视创作,从个性化教育到工业设计,其应用不仅提升了效率,还创造了全新的工作模式。本文将聚焦医疗、教育、影视、工业设计四…...

Java从入门到“放弃”(精通)之旅——启航①

🌟Java从入门到“放弃 ”精通之旅🚀 今天我将要带大家一起探索神奇的Java世界!希望能帮助到同样初学Java的你~ (๑•̀ㅂ•́)و✧ 🔥 Java是什么?为什么这么火? Java不仅仅是一门编程语言,更…...

Web前端之Vue+Element实现表格动态不同列合并多行、localeCompare、forEach、table、push、sort、Map

MENU 效果图公共数据数据未排序时&#xff08;需要合并的行数据未处于相邻位置&#xff09;固定合并行&#xff08;写死&#xff09;动态合并行方法&#xff08;函数&#xff09;执行 效果图 公共数据 Html <el-table :data"tableData" :span-method"chang…...

JavaScript(JS进阶)

目录 00闭包 01函数进阶 02解构赋值 03通过forEach方法遍历数组 04深入对象 05内置构造函数 06原型 00闭包 <!-- 闭包 --><html><body><script>// 定义&#xff1a;闭包内层函数&#xff08;匿名函数&#xff09;外层函数的变量&#xff08;s&…...

学习51单片机Day02---实验:点亮一个LED灯

目录 1.先看原理图 2.思考一下&#xff08;sbit的使用&#xff09;&#xff1a; 3.给0是要让这个LED亮&#xff08;LED端口设置为低电平&#xff09; 4.完成的代码 1.先看原理图 比如我们要让LED3亮起来&#xff0c;对应的是P2^2。 2.思考一下&#xff08;sbit的使用&…...

线性回归模型--California房价预测

#利用线性回归模型california房价预测 #调用API from sklearn.datasets import fetch_california_housing from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression,SGDRe…...

c++进阶之----异常

1. 异常处理的基本概念 异常处理是 C 中一种用于处理运行时错误的机制&#xff0c;允许程序在遇到错误时优雅地处理问题&#xff0c;而不是直接崩溃。异常处理的核心是通过 try、catch 和 throw 关键字来实现&#xff0c;它允许程序在遇到错误时优雅地处理问题&#xff0c;而不…...

SmolDocling:一种超紧凑的视觉语言模型,用于端到端多模态文档转换

paper地址:SmolDocling: An ultra-compact vision-language model for end-to-end multi-modal document conversion Huggingface地址:SmolDocling-256M-preview 代码对应的权重文件:SmolDocling-256M-preview权重文件 一、摘要 以下是文章摘要的总结: SmolDocling 是一…...

多模态大模型在目标检测领域的最新进展

1. 技术融合创新 多模态数据融合&#xff1a; 传感器融合&#xff1a;整合图像、激光雷达&#xff08;LiDAR&#xff09;、毫米波雷达等数据&#xff0c;提升检测精度和鲁棒性。例如&#xff0c;在自动驾驶中&#xff0c;通过融合视觉与LiDAR数据&#xff0c;实现三维目标检测…...

KWDB创作者计划—KWDB技术重构:重新定义数据与知识的神经符号革命

引言&#xff1a;数据洪流中的范式危机 在AI算力突破千卡集群、大模型参数量级迈向万亿的时代&#xff0c;传统数据库系统正面临前所未有的范式危机。当GPT-4展现出跨领域推理能力&#xff0c;AlphaFold3突破蛋白质预测精度时&#xff0c;数据存储系统却仍在沿用基于关系代数的…...

我开源了一个“宝藏”开源项目

我开源了一个“宝藏”开源项目 - AI需求分析项目 | 适合交作业和学习 &#x1f680; 前言 大家好&#xff01;最近在学习软件工程和大模型应用开发的过程中&#xff0c;我发现许多学生都遇到了需求分析AI的题目。把一份需求文档转化为用户故事、实体关系或数据库设计&#xff…...

从零实现Agent智能体配置使用(Ragflow)

从零实现Agent智能体配置使用&#xff08;Ragflow&#xff09; 1. 创建智能体2. 配置智能体2.1 配置问题识别2.2 配置问题分类2.3 不同问题进行单独配置2.4 保存Agent 3. 体验效果 1. 创建智能体 2. 配置智能体 2.1 配置问题识别 2.2 配置问题分类 2.3 不同问题进行单独配置 当…...

Fluent VOF水下固体火箭发射仿真

本案例利用VOF模型对水下固体火箭&#xff08;10m水深&#xff09;发动机点火初期的流场进行了仿真。该案例所用模型为假设模型&#xff0c;且缺少相关燃气参数&#xff0c;仅作计算设置参考。通过此案例后续跨可以对不同水深、不同模型的工况展开类似仿真计算。 1 假设说明 …...

电脑死机/锁屏后死机无法唤醒

电脑死机/锁屏后死机无法唤醒 导航 文章目录 电脑死机/锁屏后死机无法唤醒导航一、系统日志分析二、电源管理与睡眠模式问题1、禁用快速启动2、调整电源计划&#xff08;开启高性能模式&关闭硬盘休眠&#xff09;若是没有禁用睡眠和关闭显示器方法一&#xff1a;方法二&am…...

爱普生可编程晶振SG8201CJ和SG8200CJ在胃镜机器人发挥重要作用

在医疗机器人技术高速发展的今天&#xff0c;胃镜机器人作为胃肠道疾病诊断与治疗的创新设备&#xff0c;正逐渐改变传统诊疗模式。其复杂精密的系统需要精准的时间同步与稳定的信号输出&#xff0c;胃镜机器人是一种先进的医疗设备&#xff0c;用于无创性地检查胃部疾病。与传…...

按规则批量修改文件名称,支持替换或删除文件名称中的内容

文件重命名的需求在我们工作中是非常常见的一个需求&#xff0c;也非常的重要的一个需求&#xff0c;我相信很多小伙伴在工作中都会碰到需要进行文件重命名的场景。今天就给大家介绍一个文件重命名的方法&#xff0c;支持多种方式批量修改文件名称。功能非常的强大&#xff0c;…...

scrum详细理解

Scrum与传统瀑布模型区别 瀑布模型&#xff1a;需要花费几个月来规划产品----->在花费几个月时间进行研发----->产品测试、评审----->最终发布产品 缺点&#xff1a;①如果市场需求发生变化&#xff0c;研发的产品可能无法满足市场需求 ②产品规划必须早于后续工作之…...

数据结构(五)——AVL树(平衡二叉搜索树)

目录 前言 AVL树概念 AVL树的定义 AVL树的插入 右旋转 左旋转 左右双旋 右左双旋 插入代码如下所示 AVL树的查找 AVL树的遍历 AVL树的节点个数以及高度 判断平衡 AVL树代码如下所示 小结 前言 前面我们在数据结构中介绍了二叉搜索树&#xff0c;其中提到了二叉搜…...

Linux文件传输:让数据飞起来!

一、前置任务 为了便于实验&#xff0c;我用母盘的虚拟机克隆出两台虚拟机来模拟两台主机进行文件传输 查询两台主机的IP BL1 192.168.163.130/24 BL2 192.168.88.129/24 二、文件传输 scp命令 不填选项正常显示进度的传输-q静默传输-r递归传输&#xff08;用于传输目录及目…...

repo仓库文件清理

1. repo 仓库内文件清理 # 清理所有Git仓库中的项目 repo forall -c git clean -dfx # 重置所有Git 仓库中的项目 repo forall -c git reset --hard 解释&#xff1a; repo forall -c git clean -dfx&#xff1a; repo forall 是一个用于在所有项目中执行命令的工具。-c 后…...

MyBatis-Plus 的 FieldStrategy 属性

前几天做个需求的时候&#xff0c;有几个字段在更新的时候&#xff0c;可能为空。想着MyBatis-Plus有注解可以直接使用&#xff0c;就找寻了一下。此处记录一下。我用的MyBatis-Plus的版本是 3.5.1。版本之间对于 TableField 中的方法定义有些区别&#xff0c;但大体相差不大。…...

解锁塔能科技,开启工厂绿色转型与可持续发展双引擎

在全球积极推进可持续发展的大背景下&#xff0c;能源的高效利用与节能减排&#xff0c;已成为各行各业迈向高质量发展进程中无法回避的核心任务。工厂作为能源消耗大户与污染排放重点源头&#xff0c;其绿色转型迫在眉睫&#xff0c;这不仅关乎企业自身的长远发展&#xff0c;…...

c++进阶--智能指针

大家好&#xff0c;今天我们来学习一下c中的智能指针部分。 智能指针的使⽤及其原理 1. 智能指针的使⽤场景分析 下⾯程序中我们可以看到&#xff0c;new了以后&#xff0c;我们也delete了&#xff0c;但是因为抛异常导&#xff0c;后⾯的delete没有得到执⾏&#xff0c;所以…...

五种常用的web加密算法

文章目录 五种常用Web加密算法实战及原理详解1. AES (高级加密标准)原理详解应用场景实战代码&#xff08;Node.js&#xff09; 2. RSA (非对称加密)原理详解应用场景实战代码&#xff08;Node.js&#xff09; 3. SHA-256 (安全哈希算法)原理详解应用场景实战代码&#xff08;浏…...

LeetCode 题目 「二叉树的右视图」 中,如何从「中间存储」到「一步到位」实现代码的优化?

背景简介 在 LeetCode 的经典题目 「二叉树的右视图」 中&#xff0c;我们需要返回从右侧看一棵二叉树时所能看到的节点集合。每一层我们只能看到最右边的那个节点。 最初&#xff0c;我采用了一个常规思路&#xff1a;层序遍历 每层单独保存节点值 最后提取每层最后一个节…...

MySQL——存储过程、索引

一、存储过程 1、存储过程使用的场景 例如&#xff1a;有一个购物网站&#xff0c;要验证查询商品的性能&#xff0c;测试之前肯定要准备大量的测试数据&#xff0c;如果是通过 执行 insert 语句一条一条进行插入&#xff0c;效率很低。这种情况下&#xff0c;写一个存储过程…...

【项目管理】第9章 项目范围管理

相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 (二)知识笔记 第9章 项目范围管理 1.管理基础 1.1 产品范围…...

无人机隐身技术难点要点!

全频段雷达隐身 频段覆盖挑战&#xff1a;传统隐身材料&#xff08;如铁氧体、掺杂半导体&#xff09;多针对特定频段&#xff08;如X波段&#xff09;&#xff0c;难以应对米波至毫米波的宽频段探测。 低频段突破&#xff1a;低频雷达&#xff08;如米波雷达&#xff09;波长…...

gerrit配置及使用git-lfs

gerrit服务器端配置 下载git-lfs插件 登录Dashboard [Jenkins] (gerritforge.com)&#xff0c;下载对应版本的插件 配置gerrit 将下载的lfs.jar插件放到${GERRIT_SITE}/plugins/下面为所有仓库启用git-lfs 此步骤需要修改 All-projects 仓库配置&#xff0c;步骤如下 1、克隆仓…...