← 返回蜂巢洞察

如何利用Claude与MCP构建以隐私保护为首要目标的医学图像去标识化系统

想象一下,让人工智能助手来处理成千上万的医学图像。它能够运行整个处理流程,跟踪进度,总结每一项决策,并告诉你哪些文件需要人工审核——而这一切过程,它根本不需要看到任何患者的个人信息。 乍一听,这似乎是不可能的。因为通常情况下,人工智能助手需要访问它们所要帮助处理的数据。 在这个教程中,你将构建一个不会直接查看敏感医学图像的人工智能系统。相反,它会通过精心设计的工具来协调整个去标识化处理流程,确保患者的所有数据都保留在你的机器上。 使这一切成为可能的技术是“模型上下文协议”(Model Context Protocol,简称MCP)。这一开放标准允许人工智能模型调用外部工具,而不仅仅依赖它们内置

想象一下,让人工智能助手来处理成千上万的医学图像。它能够运行整个处理流程,跟踪进度,总结每一项决策,并告诉你哪些文件需要人工审核——而这一切过程,它根本不需要看到任何患者的个人信息。

乍一听,这似乎是不可能的。因为通常情况下,人工智能助手需要访问它们所要帮助处理的数据。

在这个教程中,你将构建一个不会直接查看敏感医学图像的人工智能系统。相反,它会通过精心设计的工具来协调整个去标识化处理流程,确保患者的所有数据都保留在你的机器上。

使这一切成为可能的技术是“模型上下文协议”(Model Context Protocol,简称MCP)。这一开放标准允许人工智能模型调用外部工具,而不仅仅依赖它们内置的功能。

在我之前的文章《如何为临床研究构建基于人工智能的医学图像去标识化处理系统》中,我们已经了解了如何开发这种去标识化工具——Aegis。这款开源工具利用MONAI(PyTorch)框架,通过OCR和NER技术从DICOM元数据和图像像素中去除患者的个人信息。

后来,我为Aegis添加了对本地MCP服务器的支持。在这篇文章中,我们将使用FastMCP从零开始构建这样的服务器。然后,我们会将其与Claude Desktop连接起来,从而让Claude成为一个能够通过自然语言对话来运行、监控和审核去标识化处理任务的人工智能系统。

在开始之前需要说明一点:虽然在整个教程中我们以Aegis为例进行讲解,但这种技术方法其实适用于任何你希望让人工智能系统访问的Python工具。如果你有自己的处理流程、命令行界面或库,也可以按照这些步骤来使用它们。

目录

你将构建什么

完成本教程后,你将会拥有:

  • 一个本地MCP服务器,该服务器会将Aegis去标识化流程拆分为六个独立的工具供使用。

  • 与上述服务器连接的Claude Desktop软件,每个操作都需要经过人工审核。

  • 一个可以使用普通英语与之交流的智能代理:你可以让它执行“删除这个文件夹中的敏感信息,并告诉我是否需要人工审查某些内容”这样的指令。

  • 磁盘上会保存一份可验证的审计记录,你可以用它来核对智能代理报告的所有操作结果。

先决条件

要学习本教程,你需要具备以下条件:

  • 具备中级水平的Python编程能力

  • Aegis代码库(或你自己开发的用于封装该功能的Python工具):https://github.com/lakshmi-mahabaleshwara/aegis

  • Python 3.10或更高版本

  • 已安装Claude Desktop软件(适用于macOS或Windows系统);对于本地MCP服务器来说,使用免费的Claude账户即可。

  • Node.js(仅用于测试工具,并非用于构建服务器本身)

我们将使用的工具包括:

  • MCP Python SDK (mcp)

  • FastMCP(包含在SDK中)

  • MCP Inspector用于测试

  • Claude Desktop作为MCP服务器的运行平台

如果你还没有阅读之前的文章,也不必从头开始重新构建整个流程。只需克隆Aegis代码库即可,不过之前的文章已经详细解释了该流程的具体工作原理。

Aegis的功能

Aegis是一种医疗图像去标识化工具,它能够从DICOM元数据和图像像素中删除敏感信息,同时会将所有操作记录在审计报告中,并将那些存在疑点的案例转交给人工进行审核。

如何安装Aegis

在开始构建服务器之前,请先安装Aegis。我们在后续步骤中要编写的服务器代码会导入这个软件包,因此必须先确保它已经安装完成。

# 下载代码
git clone https://github.com/lakshmi-mahabaleshwara/aegis.git
cd aegis

# 创建并激活虚拟环境
python3 -m venv venv
source venv/bin/activate
# 在Windows系统中:venv\Scripts\activate

# 一步完成Aegis软件包及MCP服务器的安装。
# [mcp]会自动下载并安装MCP SDK,同时也会安装`aegis-mcp`控制命令,
# 这个命令后续会被Claude Desktop使用。
pip install -e ".[mcp]"

# 一次性操作:下载OCR和NER模型的权重文件
python scripts/prefetch_models.py

使用`-e`选项进行安装后,monai_aegis包就可以从任何目录被导入,同时`aegis-mcp`控制命令也会被添加到你的PATH环境变量中(这个路径是在虚拟环境中设定的)。MCP服务器的运行依赖于这个设置,因为Claude Desktop是从其自身的工作目录来启动该服务的,而不是从代码库的根目录开始运行的。

现在软件包已经安装完成,我们可以开始构建用于部署这些功能的服务器了。

什么是MCP,为什么使用它?

模型上下文协议(MCP)是一种开放标准,它允许人工智能应用程序调用外部工具。人工智能模型无需尝试从自身已有的信息中解决所有问题,而是可以调用由外部程序提供的功能。

这一过程中涉及三个角色:

  • 宿主——人工智能应用程序(在我们的例子中是Claude Desktop)

  • 服务器——你编写的一个用于提供这些工具的小程序

  • 工具——具有名称、参数和描述信息的Python函数,人工智能模型可以调用这些函数

当Claude Desktop启动时,它会运行你的MCP服务器并识别该服务器提供的工具。它只能看到每个工具的名称、参数结构以及文档字符串,而看不到你的实现代码。实际上,这些文档字符串就成为了帮助Claude决定何时调用某个工具的依据。

那么,为什么要使用MCP呢?》如果你熟悉Python,可以直接在自己的脚本中调用Aegis库。但当你希望人工智能助手能够通过自然对话来操作整个处理流程时,MCP就显得非常有用了。你无需编写复杂的脚本或记住命令行参数,只需简单地提问即可:

  • “将这个文件夹中的文件进行去标识化处理。”

  • “批处理任务已经完成了吗?”

  • “哪些文件需要人工审核?”

  • “总结一下今天的处理结果。”

底层的处理流程本身并不会发生变化。MCP只是为人工智能与你的软件之间提供了一个安全的接口,使模型能够协调整个工作流程,而实际的处理操作仍然在你的本地Python应用程序中完成。

我们会选择使用Claude Desktop作为宿主,因为它原生支持MCP。无需配置任何额外的服务或网络端口,服务器就可以通过标准的输入/输出机制与Claude Desktop进行通信,整个设置过程仅需通过一个JSON文件来完成。

架构的工作原理

架构图显示Claude Desktop与本地MCP服务器进行通信,该服务器会调用Aegis去标识化处理流程。医疗图像会在本地进行处理,最终只会有计数结果、决策结论以及文件路径等信息被返回给人工智能模型。

Claude Desktop与MCP服务器进行通信,该服务器会在本机调用Aegis处理流程。医疗图像会在你的机器上被处理,最终只会有计数结果、决策结论以及文件路径等信息被返回给Claude。

步骤1:设计工具界面

在开始编写代码之前,先确定人工智能助手能够执行哪些操作。我们的服务器提供了六种工具:

工具 用途
warm_up 预先加载Aegis中的OCR模型和NER模型,以便后续的操作能够快速进行。
deidentify_file 使用Aegis的处理流程来对单个DICOM/JPEG/PNG文件进行去标识化处理。
start_batch_job 在后台自动检测并处理指定目录中的所有DICOM图像文件。
get_job_status 查看之前启动的批处理作业的当前进度。
summarize_run 根据报告文件对已完成的处理任务进行总结分析。
list_review_queue 列出那些需要人工审核的文件。

我们根据以下三个简单原则设计了这些工具:

  • 返回摘要信息,而非敏感数据。

  • 对于耗时较长的任务,使用后台作业来处理。

  • 保持工具界面简洁明了,避免功能过于复杂。

步骤 2:使用 FastMCP 构建 MCP 服务器

现在,让我们将这个设计转化为一个可运行的 MCP 服务器。我们会分步构建它,这样你就可以将自己的 Python 工具也按照同样的模式来开发了。完整的实现代码位于 src/monai_aegis/mcp_server.py 文件中;以下内容会说明这些代码是如何组合在一起构成整个服务器的。

1. 服务器实例

FastMCP(随 MCP Python SDK 一起提供)能够将经过特殊处理的 Python 函数转换成实用的工具。

from mcp.server/fastmcp import FastMCP

# 创建一个 FastMCP 服务器实例
mcp = FastMCP("aegis-mcp")

字符串 "aegis-mcp" 只是服务器的名称,Claude Desktop 在其工具列表中也会显示这个名称。从这里开始的每一个工具,其实都是使用了 @mcp.tool() 这个装饰器进行处理的函数。

2. 你的第一个工具

一个工具主要由三个部分组成:装饰器、类型注解以及文档字符串。下面这个例子展示了如何实现一个能够对单个文件进行去标识化处理的工具:

@mcp.tool()
def deidentify_file(input_path: str, output_dir: str = "") -> dict:
    """对单个医学图像(DICOM、JPEG 或 PNG 格式)进行去标识化处理。

    该函数会删除 DICOM 文件头中的个人信息,同时利用 OCR 和 NER 技术去除图像中嵌入的个人信息。最终只返回统计结果及输出文件的位置,而不会泄露被删除的文本或任何像素数据。
    """
    ...
    return {
        "status": "success",
        "source_file": src.name,
        "output_dir": str(out),
        "pixel_regions Detected": len(pixel_rows),
        "pixel_decisions": decisions,   # 例如 {"redacted": 4, "safelisted": 10}
        "header_tags_scrubbed": tags_scrubbed,
        "needs_manual_review": decisions.get("low_confidence", 0) > 0,
    }

需要注意的是,Claude 只会看到文档字符串,而工具本身返回的其实是统计结果,而不是图像数据或提取出的文本。

3. 绝不要将输出结果显示到 stdout 中

在 MCP 服务器中,请不要使用 print() 函数,因为 stdout 是专门用于 JSON-RPC 消息传递的。应该将日志信息发送到 stderr 中。

4>耗时较长的任务需要异步处理模式

处理整个目录文件可能需要几分钟时间,而这种操作所花费的时间显然超过了 MCP 工具正常运行所需的时间。因此,不应该同步等待处理结果,而应该使用 start_batch_job 函数创建一个后台线程,立即返回一个 job_id,然后让 Claude 通过 get_job_status() 方法来查询处理进度。

import threading, uuid

jobs = {}

@mcp.tool()
def start_batch_job(input_dir: str, output_dir: str = "", mode: str = "auto") -> dict:
    """启动一个后台任务,用于对指定目录中的所有DICOM图像文件进行去标识化处理。该任务会立即返回一个job_id;可以通过get_job_status函数来查看处理进度,无需同步等待结果。"""
    job_id = uuid.uuid4().hex[:8]
    _jobs[job_id] = {"job_id": job_id, "state": "queued",
                     "processed": 0, "total": None,
                     "decisions": {}, "errors": []}
    threading.Thread(
        target=_batch_worker, args=(job_id, input_dir, output_dir),
        daemon=True,
    ).start()
    return {"status": "started", "job_id": job_id,
            "next_step": f"使用job_id '{job_id}'调用get_job_status函数。"}

在处理每个文件时,工作线程会更新_jobs[job_id],而轮询工具则只是读取这些数据而已:

@mcp.tool()
def get_job_status(job_id: str) -> dict:
    """返回某项工作的当前状态、进度以及决策次数等信息。"""
    return _jobs.get(job_id, {"status": "unknown", "job_id": job_id})

由于MCP服务器是一个长期运行的进程,因此它可以在整个运行过程中将作业信息保存在内存中。如果服务器重新启动,当前正在处理的作业ID会丢失,但那些已经去标识化的文件以及审计报告仍然会安全地存储在磁盘上。

5. 大型模型需要预热

Aegis会加载EasyOCR模型和斯坦福大学的NER模型,而这些模型的加载需要一定的时间。服务器会延迟构建处理流程并将其缓存起来,这样只需一次性完成这些初始化操作,之后在首次真正调用相关函数时,模型就已经加载完毕了,从而避免了等待时间过长的问题:

@mcp.tool()
def warm_up() -> dict:
    """预先加载OCR模型和NER模型,以便第一次调用时能够快速开始处理。"""
    _get_pipeline()   # 在首次使用时构建并缓存处理流程
    return {"status": "ready"}

6. 审计工具读取的是记录而非图像

其余的工具会读取Aegis已经生成的报告和审核文件夹中的内容。由于这些工具只是对现有的审计记录进行汇总分析,而不会重新处理原始图像,因此Claude可以在不访问医疗图像的情况下,回答关于已完成审核任务的各种问题。

@mcp.tool()
def summarize_run(run_dir: str) -> dict:
    """根据CSV报告对某次审核任务进行统计分析。只返回统计结果,不会提供文本内容或标签信息。"""
    run = Path(run_dir).expanduser().resolve()
    pixels = _read_csv_rows(run / "aegis_pixel_detections.csv")
    tags = _read_csv_rows(run / "aegis_tag_actions.csv")
    return {
        "pixel_decisions": Counter(r["decision"] for r in pixels),  # 包含被标记为“已编辑”“安全”或“低置信度”的数据
        "tag Actions": Counter(r["action"] for r in tags),          # 包含“删除”“重新映射”“置零”“虚拟标签”等操作
    }
@mcp.tool()
def list_review_queue() -> dict:
    """列出那些需要人工审核的文件——只显示文件名,不包含文件内容。"""
    names = sorted(f for _, _, fs in os.walk(REVIEW_DIR) for f in fs if not f.startswith("."))
    return {"count": len(names), "files": names[:50]}

步骤3:在使用任何AI工具之前,先使用MCP Inspector进行测试

如果你对这一切还抱有疑虑(我当初就是这么想的),那么这个步骤非常适合你。MCP Inspector是一个调试工具界面,它可以连接到你的服务器,让你亲自手动操作各种工具。

npx @modelcontextprotocol/inspector //aegis/venv/bin/aegis-mcp

打开服务器界面后,你会看到自己的aegis-mcp服务器被列在列表中。点击切换按钮进行连接,当服务器正常运行时,该按钮会变为绿色。

MCP Inspector显示通过STDIO连接的Aegis MCP服务器,服务器状态为活跃且已准备好进行测试。

接下来,打开工具选项卡。你会看到MCP服务器提供的六种工具。首先运行warm_up命令,然后观察启动Inspector的终端窗口,看看OCR和NER模型是否已经加载完成。

接着,使用测试图像的路径运行deidentify_file命令。结果面板会显示该工具返回的JSON响应数据,而消息面板则会显示与服务器之间交换的请求和响应信息。

MCP Inspector展示了deidentify_file工具及其输入字段,以及处理测试医学图像后返回的JSON响应结果。

步骤4:连接Claude Desktop

打开Claude Desktop,然后进入设置 → 开发者 → 编辑配置。这样就会打开(或创建)MCP配置文件。在macOS系统中,该文件的路径为~/Library/Application Support/Claude/claude_desktop_config.json;在Windows系统中,则为%APPDATA%\Claude\claude_desktop_config.json。

在mcpServers部分添加以下aegis配置项:

{
  "mcpServers": {
    "aegis": {
      "command": "/<AEGIS的安装路径>/aegis/venv/bin/aegis-mcp",
      "args": [],
      "env": {
        "AEGIS_OUTPUT_DIR": "/<AEGIS的输出目录>/aegis/staging_output",
        "AEGIS_REVIEW_DIR": "/<AEGIS的审核目录>/aegis/staging_not_processed",
        "AEGIS_DEVICE": "mps"
      }
    }
  }
}

这是用于配置Claude Desktop与Aegis MCP服务器连接的设置。

在保存配置文件之前,需要检查以下几点:

  • 请使用绝对路径来指定命令路径、AEGIS_OUTPUT_DIR以及AEGIS_REVIEW_DIR。

  • 确保命令指向虚拟环境中的aegis-mcp可执行文件,这样Claude才能使用正确的Python版本及依赖库。

  • 对于Apple Silicon设备,请将AEGIS_DEVICE设置为mps;对于Intel Mac或Linux系统,则设置为cpu;如果拥有NVIDIA GPU,应将其设置为cuda。

保存文件后,完全退出并重新启动Claude Desktop(仅仅关闭窗口是不够的)。在新的聊天界面中,打开搜索与工具菜单,此时你应该能够看到Aegis MCP服务器及其提供的六种工具了。

Claude桌面应用程序中的搜索与工具菜单,其中显示了Aegis MCP服务器及其可用的工具,包括warm_up、deidentify_file、start_batch_job、get_job_status、summarize_run和list_review_queue等功能。

步骤5:与您的代理进行沟通

现在是进行第一次沟通的时候了。请发送如下内容:

启动Aegis去标识化服务器。

Claude在调用这些工具之前会请求您的许可。这一设计是为了确保您对代理所使用的每一项功能都给予明确授权;您可以针对每次调用或具体工具来决定是否允许其使用这些功能。

获得授权后,模型会被加载进来,Claude会告知处理所花费的时间。

如果要去标识化单个文件,请输入:

去标识化文件

Claude会执行deidentify_file命令,并反馈处理结果:检测到了多少文本区域,其中哪些被删除了,哪些被标记为可安全使用的临床文本,以及有多少DICOM标签被清除掉了,同时还会说明是否需要人工审核。值得一提的是,Claude在整个过程中从未看过该文件的内容。

Claude桌面应用程序中的对话场景,用户请求Aegis MCP服务器对医学图像进行去标识化处理,Claude则会报告检测到的文本区域数量、删除内容的情况以及是否需要人工审核等信息。

接下来,可以批量处理:

现在为文件启动一批去标识化作业吧。

该工具会立即返回一个作业ID,后续处理会在后台继续进行。稍后您可以询问作业进度:

那项作业进展如何了?

Claude会记住之前的作业ID,然后通过调用get_job_status来获取文件处理情况、决策结果以及任何出现的错误信息。

当作业完成后,您可以让Claude总结整个处理过程,列出需要人工审核的文件,或者根据处理记录生成一份报告,以便在会议中使用。

总结这次完成的处理任务。是否有任何文件需要人工审核?

对于文件,具体进行了哪些操作?哪些头部标签被修改了?

为这次处理任务起草一份简短的总结报告,适合在会议上使用。报告中应包括总处理数量、各项决策的详细情况,以及尚未完成人工审核的文件列表。

下面这份总结中的所有信息都来源于工具的处理结果,以及从处理流程中获取的统计数据和决策结果。

Claude桌面应用程序中的对话场景,展示了批量去标识化作业的进展情况,包括已处理的文件数量、各项决策的结果,以及MCP服务器返回的当前作业状态。Claude桌面程序正在生成已完成去标识化处理的汇总报告,其中包含各项统计数据、决策分析结果,以及根据Aegis审计记录需要人工审核的文件列表。

验证

将Claude生成的汇总报告与CSV文件以及job_summary_.json文件进行对比。各项数据应该是一致的,这样你就可以轻松地验证代理程序报告的所有内容了。

AI是否会查看患者数据?

不会。这些工具从不会返回图像像素、OCR提取的文本或DICOM标签值,因此Claude无法访问任何患者的隐私信息。

例如,如果你询问:

“请显示该文件中检测到的患者姓名。”

Claude是无法回答这个问题的,因为MCP工具根本不会暴露这些信息。

不过,对话过程中的元数据确实会传递给模型。文件名、目录路径、数据数量以及工具的输出结果,都会像普通聊天内容一样被Claude处理。请记住以下几点:

  • 避免在文件名中使用患者隐私信息。如果文件中包含患者姓名或标识符,请重新命名这些文件。

  • 保持错误信息的简洁性。工具返回的异常信息中不要包含敏感的DICOM数据。

  • 在开发过程中使用模拟数据。本教程使用的都是虚假的患者隐私信息。在实际处理真实患者数据之前,请确保遵守你所在机构的安全与合规要求。

安全注意事项

如果你将自己的工具基于这个模板进行开发,建议遵循以下最佳实践:

  • 限制文件访问权限。只允许工具访问指定的目录,而不得访问任何可读路径。

  • 仔细审核工具的权限设置。像get_job_status这样的只读工具可以随时被使用,但那些会修改文件的工具则应该需要经过审批才能运行。

  • 返回结构化的数据结果。相比原始文本,提供统计数据和分类信息能更有效地降低敏感信息泄露的风险。

  • 固定OCR和NER模型的版本。使用固定的模型版本可以让你的处理流程更加稳定且可预测。

关于“去标识化”这个词的说明

在HIPAA等法规中,“去标识化”具有明确的法律含义和具体的操作要求。本教程主要是介绍如何构建用于去标识化处理的AI代理接口,而非如何确保系统符合相关监管规定。实际上,该处理流程会将那些存在不确定性的数据案例转交给人工进行审核;任何实际应用都应先根据你所在机构的规定和相关法律法规进行验证。

适用场景与后续发展方向

MCP并不会改变Aegis检测敏感信息的能力,而是改变了人们使用该工具的方式。用户不再需要通过命令行来运行任务、查看结果或提出问题,而可以直接用自然语言来完成这些操作。

对于夜间批量处理等自动化工作流程来说,命令行仍然是更好的选择。MCP更适合那些需要人工参与、交互性强的任务,而命令行则依然非常适合用于定时执行的作业。在这两种情况下,磁盘上的文件和审计报告依然是最可靠的数据来源。

以下是一些你可以进一步探索的方向:

  • 在本地运行所有流程。将相同的MCP服务器与Ollama及Open WebUI结合使用,这样处理流程和AI模型都可以保留在你的机器上。

  • 加强安全性。在将工具部署到共享环境中之前,要确保它们只能访问经过授权的目录。

  • 构建数据集准备工作流程。利用相关工具对数据进行去标识化处理,汇总分析结果,并为机器学习任务准备好所需的数据集。

  • 添加后续分析环节。可以在去标识化后的数据上运行视觉分析模型,而无需使用原始图像。

  • 在其他场景中重复运用这一模式。同样的架构也可以用于从法律文件、日志记录、财务数据或其他机密信息中删除敏感内容。

结论

我们利用MCP将现有的Python处理流程改造成了一个可供AI使用的工具。其核心设计原则是模型负责协调整个工作流程,但永远不会接触到敏感数据。

这种模式的应用范围远不止医学影像领域。任何需要处理敏感信息的流程——无论是法律文件、财务记录还是个人照片——都可以通过这种方式使用安全、结构化的工具来完成任务,同时保护底层数据的隐私。

你可以在Aegis仓库中找到该工具的完整实现代码:https://github.com/lakshmi-mahabaleshwara/aegis。如果你觉得这个教程很有帮助,请考虑为该仓库点赞,帮助更多人发现它

。

参考资料

相关文章

技术实践

如何使用Python和依赖关系图来检测公共数据集中隐藏的目标泄露现象

不久前,我给一个机器学习模型提供了来自公共CDC数据集的五列数据,让它尝试预测同一文件中的第六列数据。该模型的R²值为0.998,这个数值已经非常接近完美了。 虽然这个结果看起来很成功,但实际上该模型对现实世界的认知几乎没有任何提升——因为CDC本身就是根据其他五列数据计算出了第六列数据的,所以该模型实际上只是机械地应用了CDC的计算方法而已。 数据科学家将这种问题称为 目标信息泄露 ,当输入给模型的数据本身就已经包含了答案的某些信息时,就会发生这种情况。 在公共数据中,这类问题很容易被隐藏起来,因为大量的公共数据都是通过其他公共数据计算得出的。例如,一个政府指数可能是根据调查数据构建的,而另

阅读全文
技术实践

如何使用Next.js、AWS以及沙箱环境来构建属于自己的、类似于Lovable这样的AI应用开发工具

像Lovable、Bolt这样的工具,第一次使用的时候真的会让人觉得像是魔法一样。说实话,我第一次看到这类东西的时候简直惊呆了……而且这一切都是通过聊天窗口来完成的!真是太不可思议了。第一次尝试使用Lovable的时候,我甚至产生了一场关于“存在意义”的哲学思考。 但你们有没有想过,其实这些工具内部到底发生了什么?比如说,究竟是怎么让一个应用程序能够生成另一个可以用于测试、分享或下载的应用程序的呢? 显然,在某个地方有一个AI模型在编写代码。但这个过程具体是如何进行的呢?那些代码需要被安装、编译并运行才行。而我有点怀疑的是,现在似乎没有人会在这些代码运行之前去仔细检查它们。这些代码可能会出现错

阅读全文
技术实践

面向初学者的Node.js与Express.js使用指南——服务器、路由机制以及视图处理方法的详细讲解

Node.js是一种用于在浏览器之外执行JavaScript的运行时环境。无论是小型脚本还是大规模的后端应用程序,Node.js都提供了构建适用于各种环境的JavaScript应用所需的API和工具。 然而,学习Node.js可能会让人感到不知所措。由于有太多需要理解的API、包、工具和概念,人们很容易迷失方向。 正因为如此,这本书重点讲解了构建实际应用所需的基础Node.js知识,避免了不必要的干扰。你将了解到Node.js的工作原理,如何使用其内置的API,以及如何创建能够处理文件、URL、事件、HTTP请求等功能的应用程序。 你还会学习到Express.js是如何简化许多常见的服务器端任

阅读全文
技术实践

代理们在三周内重构了30万行代码,而业内人士则都在思考:这究竟证明了什么?

CodeScene发布了一项案例研究:在三周的时间里,这些编程机器人使用大约4,000美元的代币费用,重新编写了30万行C语言代码,其工作过程通过逐帧回放工具进行了验证。在这些过程中,这些机器人还建立了一套针对特定代码库的编程流程指南。不过,业内人士对这项研究的范围、评估指标,以及最终结果在多大程度上受到所使用工具的影响提出了质疑。 作者:Steef-Jan Wiggers

阅读全文