news 2026/9/2 15:43:52

AI Agent安全中间件AgentRails:为智能体操作构建可编程安全层

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI Agent安全中间件AgentRails:为智能体操作构建可编程安全层

这次我们来看一个专门为 AI Agent 设计的“安全护栏”项目——AgentRails。当你的 AI 智能体开始执行真实世界的操作,比如发送邮件、操作数据库、调用外部 API 时,如何确保它的行为是安全、可控、符合预期的?AgentRails 就是一个开源的 Python 库,旨在为这类执行真实动作的 AI Agent 增加一个可编程的安全层。它不是另一个 Agent 框架,而是一个专注于“安全”的中间件。

对于开发者而言,最核心的吸引力在于:它允许你以代码的方式,为 Agent 的每一次“行动”定义规则、进行拦截、审计日志,甚至实时修改其行为。这意味着你可以防止 Agent 发送包含敏感词的邮件、限制它只能访问特定的数据库表,或者在它执行高风险操作前要求人工确认。本文将带你快速了解 AgentRails 的核心能力、部署方式,并通过一个发送邮件的 Agent 实例,演示如何为其添加内容过滤、频率限制和人工审批等安全规则。

如果你正在构建或使用任何需要与真实世界交互的 AI 应用,无论是自动化客服、数据分析助手还是内部流程自动化工具,理解并引入这样的安全机制都至关重要。

1. 核心能力速览

能力项说明
项目类型开源 Python 库 / AI Agent 安全中间件
核心定位为执行真实动作的 AI Agent 提供可编程的安全层
主要功能动作拦截、输入/输出验证、频率限制、审计日志、人工审批工作流
集成方式作为装饰器或中间件嵌入现有 Agent 框架(如 LangChain, AutoGPT)
硬件门槛无特殊要求,依赖 Python 环境,不直接消耗 GPU 显存
启动方式通过pip install安装,在代码中导入并配置规则
是否支持 API本身是一个库,但可基于其构建安全审计 API 服务
是否支持批量任务安全规则适用于 Agent 的每一次动作调用,自然支持批量场景
适合场景开发需执行写操作(如发邮件、改数据)的 AI Agent;企业级 AI 应用合规与风控

简单来说,AgentRails 就像一个安装在你的 AI Agent 和真实世界之间的“安检站”和“记录仪”。

2. 适用场景与使用边界

AgentRails 解决的是一个非常具体但关键的问题:信任。当 AI 的决策开始产生实际影响时,我们不能完全放任。

它非常适合以下场景:

  1. 自动化流程 Agent:例如,一个根据会议纪要自动创建任务并分配负责人的 Agent。你需要确保它不会把任务错误地分配给已离职的员工,或者创建重复任务。
  2. 客户交互 Agent:一个能自动回复客户邮件或工单的 Agent。必须过滤掉攻击性语言,防止泄露内部信息,并遵守服务等级协议(SLA)的响应时间规则。
  3. 数据操作 Agent:一个可以查询并修改数据库的智能数据分析助手。必须严格限制其可访问的表和字段,并对所有“写”操作进行记录和二次确认。
  4. 内容生成与发布 Agent:自动生成社交媒体帖子或报告的 Agent。需要确保内容符合品牌规范、无版权问题,并在发布前经过特定关键词检查。

使用边界与合规提醒:

  • 非万能解决方案:AgentRails 提供的是规则执行框架,安全效果取决于你制定的规则是否完备。它不能替代全面的系统安全设计。
  • 隐私与授权:所有被 Agent 处理的数据(尤其是通过安全层审计的数据)必须确保符合数据隐私法规(如 GDPR)。审计日志本身可能包含敏感信息,需安全存储。
  • 最终责任:即使有安全层,AI 系统的所有者仍需对 Agent 的行为承担最终责任。安全层是降低风险的工具,而非转移责任的借口。
  • 合法授权:确保 Agent 执行的操作(如发送邮件、修改数据)已获得相关系统和数据的所有者明确授权。

3. 环境准备与前置条件

AgentRails 是一个 Python 库,因此环境准备相对简单。

基础环境清单:

  1. 操作系统:支持 Windows, macOS, Linux。本文演示基于 Linux/Windows WSL 或 macOS 终端。
  2. Python 版本:建议 Python 3.8 及以上版本。可使用以下命令检查:
    python3 --version
  3. 包管理工具:确保pip已更新。
    python3 -m pip install --upgrade pip
  4. 虚拟环境(推荐):为项目创建独立的 Python 环境,避免依赖冲突。
    # 创建虚拟环境 python3 -m venv agentrails_venv # 激活虚拟环境 # Linux/macOS source agentrails_venv/bin/activate # Windows agentrails_venv\Scripts\activate
  5. 基础依赖:AgentRails 本身可能依赖pydantic用于数据验证、loguru或标准库logging用于审计。这些通常会在安装时自动解决。

与现有 Agent 框架集成:

  • AgentRails 设计为与主流 Agent 框架协同工作。你需要已经有一个可运行的 AI Agent 项目,例如基于:
    • LangChain / LangGraph
    • AutoGPT
    • CrewAI
    • 或其他自定义的 Agent 循环(ReAct 模式等)。
  • 确保你的 Agent 框架已正确安装并能执行目标动作(如调用邮件发送函数)。

4. 安装部署与启动方式

AgentRails 的“启动”指的是将其集成到你的代码中。

安装:假设已在虚拟环境中,直接使用 pip 安装。

pip install agentrails

如果网络问题导致安装缓慢,可以使用国内镜像源:

pip install agentrails -i https://pypi.tuna.tsinghua.edu.cn/simple

验证安装:在 Python 交互环境中导入,检查版本。

python3 -c "import agentrails; print(agentrails.__version__)"

如果没有报错并输出版本号,说明安装成功。

核心概念与“启动”:AgentRails 不是独立运行的服务,而是通过以下方式“嵌入”你的 Agent 系统:

  1. 装饰器(Decorator):用@rail装饰你的动作执行函数。
  2. 中间件(Middleware):在 Agent 的执行循环中插入安全检查步骤。
  3. 配置规则:通过 YAML 文件或代码定义安全规则(如Guardrails)。

一个最简化的集成“启动”代码如下所示:

# 示例:为“send_email”函数添加安全层 from agentrails import Rail, Runner # 1. 定义你的原始动作函数 def send_email(to: str, subject: str, body: str): """模拟发送邮件的函数""" print(f"[模拟发送] 给 {to} | 主题: {subject}") print(f"正文: {body[:50]}...") # 打印前50字符 return {"status": "success", "message_id": "simulated_123"} # 2. 使用 @rail 装饰器,并指定规则集(这里用内置的 ContentFilter 示例) @rail(guards=["content_filter"]) def safe_send_email(to: str, subject: str, body: str): # 这个函数体本身不会被执行,装饰器会接管 # 实际执行的是被安全规则包裹后的 send_email pass # 3. 配置规则运行器,并注册你的原始函数与安全函数的映射 runner = Runner() runner.register(action_fn=send_email, rail_fn=safe_send_email) # 4. 通过运行器调用“安全版”的发送邮件函数 result = runner.run( action_name="safe_send_email", # 注册的安全函数名 to="colleague@company.com", subject="项目更新", body="这是一个正常的项目进度更新邮件。" ) print("执行结果:", result)

这段代码只是展示了集成模式,真正的安全规则(如content_filter)需要在后续配置。

5. 功能测试与效果验证

让我们构建一个更完整的测试场景。假设我们有一个简单的任务管理 Agent,它会根据自然语言指令创建任务。我们将使用 AgentRails 来确保:1) 任务标题不含敏感词;2) 每分钟最多创建 5 个任务;3) 创建高优先级任务需人工确认。

5.1 测试环境搭建

首先,创建一个新的 Python 文件task_agent_demo.py

# task_agent_demo.py import time from typing import Dict, Any from agentrails import Rail, Runner, Guard, GuardContext, GuardResult from agentrails.guards import MaxCallsPerTimeGuard # 假设存在频率限制守卫 from pydantic import BaseModel # --- 数据模型 --- class Task(BaseModel): title: str priority: str # "low", "medium", "high" assignee: str # --- 模拟的“真实动作”:创建任务(写入数据库)--- def create_task_in_db(task: Task) -> Dict[str, Any]: """模拟创建数据库记录的函数""" print(f"[DB 写入] 创建任务: {task.title} (优先级: {task.priority}, 负责人: {task.assignee})") # 模拟数据库操作延迟 time.sleep(0.1) return {"task_id": 123, "status": "created"} # --- 自定义安全规则 (Guards) --- class SensitiveWordGuard(Guard): """检查任务标题是否包含敏感词""" name = "sensitive_word_guard" sensitive_words = ["密码", "机密", "立即解雇"] # 示例敏感词列表 def run(self, ctx: GuardContext) -> GuardResult: # ctx.action_args 包含了调用参数,这里我们假设是 Task 对象 task_data = ctx.action_args.get("task", {}) if isinstance(task_data, dict): title = task_data.get("title", "") elif isinstance(task_data, Task): title = task_data.title else: title = str(task_data) for word in self.sensitive_words: if word in title: return GuardResult.fail(f"标题包含敏感词: '{word}'") return GuardResult.pass_() class HighPriorityApprovalGuard(Guard): """高优先级任务需要审批""" name = "high_priority_approval_guard" def run(self, ctx: GuardContext) -> GuardResult: task_data = ctx.action_args.get("task") if not isinstance(task_data, Task): return GuardResult.pass_() # 非任务类型,跳过 if task_data.priority.lower() == "high": # 在实际应用中,这里可能触发一个审批工作流(如发邮件、Slack通知) # 此处模拟:询问用户(控制台输入) print(f"\n⚠️ 审批请求:即将创建高优先级任务 '{task_data.title}'") approval = input("是否批准? (yes/no): ").strip().lower() if approval != 'yes': return GuardResult.fail("高优先级任务被用户拒绝") return GuardResult.pass_() # --- 使用装饰器定义受保护的动作 --- # 注意:这里我们组合多个规则。`max_calls`是假设的内置规则,用于频率限制。 @rail(guards=["sensitive_word_guard", "max_calls:5 per 60", "high_priority_approval_guard"]) def safe_create_task(task: Task): """受安全规则保护的创建任务函数""" # 函数体仅作为占位,实际逻辑由 Runner 和原始函数处理 pass # --- 主程序:配置并运行 --- if __name__ == "__main__": runner = Runner() # 注册原始动作与受保护动作的映射 runner.register(action_fn=create_task_in_db, rail_fn=safe_create_task) # 注册我们自定义的 Guard runner.register_guard(SensitiveWordGuard()) runner.register_guard(HighPriorityApprovalGuard()) # 假设 MaxCallsPerTimeGuard 已由库提供,我们只需在装饰器中声明即可。 print("=== AI 任务创建 Agent (带安全层) 测试开始 ===") # 测试用例 1: 正常任务 print("\n--- 测试 1: 创建普通任务 ---") task1 = Task(title="完成周报", priority="low", assignee="张三") result1 = runner.run(action_name="safe_create_task", task=task1) print(f"结果: {result1}") # 测试用例 2: 包含敏感词的任务 print("\n--- 测试 2: 创建含敏感词的任务 ---") task2 = Task(title="整理机密文件清单", priority="medium", assignee="李四") result2 = runner.run(action_name="safe_create_task", task=task2) print(f"结果: {result2}") # 测试用例 3: 高优先级任务 (需要审批) print("\n--- 测试 3: 创建高优先级任务 ---") task3 = Task(title="修复线上紧急BUG", priority="high", assignee="王五") # 注意:运行时会暂停等待控制台输入 result3 = runner.run(action_name="safe_create_task", task=task3) print(f"结果: {result3}") # 测试用例 4: 测试频率限制 (快速连续调用) print("\n--- 测试 4: 测试频率限制 (连续创建6个任务) ---") for i in range(6): print(f"\n尝试创建任务 {i+1}") task = Task(title=f"测试任务{i+1}", priority="low", assignee="测试员") result = runner.run(action_name="safe_create_task", task=task) print(f"结果: {result}") if "max_calls" in str(result).lower(): # 粗略判断是否被频率限制拦截 print("频率限制已触发!") break time.sleep(0.05) # 快速连续调用

5.2 运行与效果验证

在终端运行该脚本:

python task_agent_demo.py

预期输出与验证:

  1. 测试1(正常任务):应成功打印[DB 写入]日志,并返回成功的result1。这表明安全层对合规动作放行。
  2. 测试2(敏感词任务):应不执行[DB 写入]result2应显示失败,并包含类似“标题包含敏感词: ‘机密’”的错误信息。这验证了内容过滤规则生效。
  3. 测试3(高优先级任务):程序会暂停,在控制台打印审批请求并等待输入。输入no后,应不执行[DB 写入]result3显示失败,提示“被用户拒绝”。输入yes则放行。这验证了人工审批工作流的集成能力。
  4. 测试4(频率限制):前5次调用应成功。第6次调用时,应被拦截,result提示频率限制,且不再执行[DB 写入]。这验证了速率限制规则生效。

通过这个测试,我们验证了 AgentRails 的核心能力:在动作执行前进行多层次的、可编程的检查,并能根据规则决定拦截、修改或放行。

6. 接口 API 与批量任务

虽然 AgentRails 本身是一个库,但你可以轻松地基于它构建出面向服务的 API,或者管理批量任务的安全执行。

6.1 构建安全审计 API 服务

你可以创建一个 FastAPI 或 Flask 服务,将 Agent 动作的请求先经过 AgentRails 的安全层处理。

# safe_agent_api.py (FastAPI 示例) from fastapi import FastAPI, HTTPException from pydantic import BaseModel from .task_agent_demo import runner, Task # 导入之前配置好的 runner 和模型 import asyncio app = FastAPI(title="Safe Task Agent API") class CreateTaskRequest(BaseModel): title: str priority: str assignee: str @app.post("/v1/tasks/create") async def create_task(request: CreateTaskRequest): """创建新任务(受安全层保护)""" task_obj = Task(**request.dict()) try: # 同步的 runner.run 在异步环境中使用 run_in_executor loop = asyncio.get_event_loop() result = await loop.run_in_executor( None, runner.run, "safe_create_task", {"task": task_obj} ) if result.get("status") == "fail": # 安全规则拦截 raise HTTPException(status_code=403, detail=result.get("reason", "Action blocked by security rules")) # 动作执行成功 return { "code": 0, "msg": "success", "data": result } except Exception as e: raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}") if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)

启动此 API 服务后,任何通过/v1/tasks/create端点创建任务的请求,都会自动经过我们之前定义的所有安全规则(敏感词、频率限制、高优先级审批)的过滤。

6.2 批量任务的安全执行

对于批量处理场景,例如从 CSV 文件读取 1000 条指令让 Agent 执行,只需在循环中调用受@rail保护的函数即可。Runner 会自动应用所有已注册的规则。

import pandas as pd from your_agent_module import runner, safe_create_task, Task def process_batch_tasks(csv_path: str): df = pd.read_csv(csv_path) results = [] for _, row in df.iterrows(): task = Task(title=row['title'], priority=row['priority'], assignee=row['assignee']) # 关键:调用的是受保护的安全函数,而非原始函数 result = runner.run(action_name="safe_create_task", task=task) results.append({ 'original_row': row.to_dict(), 'security_result': result }) # 可以根据 result 判断是否被拦截,决定后续流程(如记录日志、重试等) if result.get("status") == "fail": print(f"任务被拦截: {row['title']} - 原因: {result.get('reason')}") # 将处理结果保存 pd.DataFrame(results).to_json("batch_processing_results.json", orient="records", force_ascii=False) print("批量处理完成,结果已保存。")

在这种模式下,安全层为整个批量作业提供了统一的、可审计的防护。

7. 资源占用与性能观察

AgentRails 作为轻量级中间件,其资源占用主要取决于:

  1. 规则复杂度:每个Guardrun方法执行时间。简单的字符串匹配(如敏感词过滤)开销极低(毫秒级)。复杂的规则(如调用外部 API 进行内容审核)则取决于外部服务响应时间。
  2. 规则数量:多个 Guard 会按顺序执行,增加总延迟。
  3. 审计日志:如果配置了详细的日志记录(如记录每次检查的参数和结果),会产生额外的 I/O 和存储开销。

性能观察建议:

  • 基准测试:在集成安全层前后,对 Agent 的核心动作(如create_task_in_db)进行性能基准测试,测量平均延迟增加。
    import time # 测试无安全层的原始函数 start = time.perf_counter() for _ in range(100): create_task_in_db(dummy_task) elapsed_no_guard = time.perf_counter() - start # 测试有安全层的函数 start = time.perf_counter() for _ in range(100): runner.run(action_name="safe_create_task", task=dummy_task) elapsed_with_guard = time.perf_counter() - start print(f"原始函数平均耗时: {elapsed_no_guard/100*1000:.2f} ms") print(f"安全层函数平均耗时: {elapsed_with_guard/100*1000:.2f} ms") print(f"安全层开销: {(elapsed_with_guard/elapsed_no_guard - 1)*100:.1f}%")
  • 异步优化:如果某些 Guard 操作是 I/O 密集型(如网络请求),考虑将其实现为异步,并在异步框架(如 FastAPI)中使用,避免阻塞主线程。
  • 规则优化:将最可能拦截请求的、开销最小的规则放在前面执行,可以尽早拒绝非法请求,节省后续规则和最终动作的执行开销。
  • 监控:在生产环境中,为Runner.run和各个Guard.run添加执行时间监控,便于定位性能瓶颈。

对于绝大多数应用,AgentRails 引入的额外开销是可接受的,因为它换来了关键的安全性与可控性。

8. 常见问题与排查方法

问题现象可能原因排查方式解决方案
ModuleNotFoundError: No module named 'agentrails'1. 未安装agentrails包。
2. 在错误的 Python 环境或虚拟环境中运行。
1. 在终端执行pip list | grep agentrails
2. 检查终端激活的虚拟环境是否与 IDE 使用的解释器一致。
1. 在正确的环境中执行pip install agentrails
2. 在 IDE 中配置 Python 解释器路径为项目虚拟环境。
装饰器@rail不生效,动作直接执行未受检查1. 未通过Runner.register()将原始函数与装饰函数关联。
2. Guard 未正确注册到 Runner 实例。
1. 检查代码中是否有runner.register(action_fn=原始函数, rail_fn=装饰函数)
2. 检查自定义 Guard 是否通过runner.register_guard()注册。
确保遵循“定义 Guard -> 用@rail装饰函数 -> 注册到 Runner -> 通过runner.run调用”的完整流程。
自定义 Guard 的run方法未被调用1. Guard 类未设置name属性。
2.@rail(guards=[...])中指定的名字与 Guard 的name不匹配。
3. Guard 注册到了另一个 Runner 实例。
1. 打印runner._guards查看已注册的 Guard 列表。
2. 检查 Guard 类中name属性的值。
1. 确保 Guard 类有name = "your_guard_name"
2. 确保装饰器中字符串与name一致。
3. 确保操作使用的runner实例是注册了该 Guard 的同一个实例。
频率限制规则对所有用户全局生效,未区分用户默认的MaxCallsPerTimeGuard可能是全局计数器。查看该 Guard 的源码或文档,看是否支持user_idsession_id参数。实现自定义的频率限制 Guard,在run方法中根据ctx中的用户标识(如从action_args提取)进行区分计数。
审计日志找不到或信息不全1. 日志配置未开启或级别设置过高。
2. AgentRails 未内置详细日志,需要手动添加。
1. 检查 Python 的 logging 配置。
2. 在 Guard 的run方法和原始动作函数中添加打印语句或日志记录。
1. 配置 Python logging 将日志输出到文件。
2. 在Runner.run方法调用前后手动记录审计信息(如参数、结果、时间戳、用户ID)到数据库或日志系统。
与异步框架(如 FastAPI)集成时,Guard 阻塞事件循环Guard 的run方法是同步的,且包含耗时操作(如网络请求、复杂计算)。使用asyncio.to_thread或在run_in_executor中调用同步的runner.run,如 6.1 节示例。1. 将耗时 Guard 逻辑改为异步函数,并实现异步 Guard 基类(如果库支持)。
2. 或将同步 Runner 调用放在线程池中执行,避免阻塞主事件循环。

9. 最佳实践与使用建议

  1. 从简单规则开始:不要一开始就设计复杂的规则链。先实现 1-2 个最核心的安全规则(如“禁止删除所有数据”),验证其有效性,再逐步增加。
  2. 规则测试全覆盖:为每一个自定义的Guard编写单元测试,模拟各种合法和非法的输入,确保其拦截和放行逻辑正确。
  3. 审计日志是关键:务必记录每一次安全检查的详细信息,包括:时间戳、动作名称、输入参数、触发的 Guard、检查结果(通过/拦截)、拦截原因、执行用户/会话 ID。这是事后追溯和责任认定的基础。
  4. 区分环境配置:在开发、测试、生产环境中使用不同严格程度的规则。例如,开发环境可以关闭人工审批,生产环境则必须开启。
  5. 实现“熔断”机制:除了针对单次动作的规则,考虑实现系统级防护。例如,当某个 Guard 在短时间内频繁触发拦截时,可能意味着遭受攻击或 Agent 逻辑出现严重错误,此时应触发“熔断”,暂时禁用相关 Agent 或通知管理员。
  6. 与现有监控告警集成:将安全层的拦截事件接入公司的监控告警系统(如 Sentry, Prometheus, 钉钉/飞书机器人)。当发生高频拦截或关键动作被拦截时,能第一时间通知相关人员。
  7. 定期评审与更新规则:业务逻辑和安全威胁都在变化。定期(如每季度)评审所有安全规则的有效性和必要性,更新敏感词列表、频率限制阈值等。
  8. 合规性前置:在 Agent 设计阶段就引入安全层考虑,而不是事后补救。明确哪些动作是“高危”的,必须配备哪些安全规则,并将其作为功能上线的必要条件。

10. 总结与下一步

AgentRails 为 AI Agent 的落地应用提供了一个亟需的“安全阀”。它的价值不在于算法多先进,而在于将安全控制以代码的形式清晰地、可组合地嵌入到 Agent 的执行流程中。通过本次实践,你应该已经掌握了为其核心动作添加内容过滤、频率限制和人工审批的基本方法。

最值得尝试的点:选择一个你现有 Agent 项目中最“危险”的动作(比如发送邮件、修改数据库状态),尝试用 AgentRails 为它加上第一道安全规则。你会立刻感受到对系统控制力的提升。

最先应该验证的功能:从实现一个简单的KeywordGuard(关键词拦截)开始,这是最快看到效果的方式。然后尝试集成一个外部 API,比如调用云服务商的内容安全接口,体验如何扩展安全能力。

最容易踩的坑:忘记将自定义 Guard 注册到 Runner 实例,或者装饰器中的 Guard 名字拼写错误,导致规则不生效。务必通过打印日志或编写测试来验证规则是否被正确触发。

后续扩展方向

  • 规则引擎集成:将规则配置外置到数据库或配置中心,实现动态更新,无需重启服务。
  • 机器学习增强:对于难以用规则描述的复杂安全策略(如检测语义上的钓鱼邮件),可以训练一个二分类模型作为 Guard,实现 AI 守护 AI。
  • 可视化规则编排:构建一个低代码界面,让业务人员也能通过拖拽方式组合和配置安全规则。
  • 多租户与权限:扩展 Guard 上下文,支持基于用户角色、部门权限的更细粒度控制。

将 AI Agent 投入生产环境,安全不再是可选项,而是必需品。像 AgentRails 这样的工具,正是帮助我们在享受自动化便利的同时,构建可靠安全边界的关键一环。建议收藏本文,在下次为 Agent 添加新功能时,不妨先思考一下:“这个动作,需要加什么安全规则?”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 15:43:45

AI音频生成与声音克隆本地部署全流程实操指南

这次我们来看一个 AI 音频生成与声音克隆的本地部署实操。项目标题给的是“【MONTAGEM DEAD WRONG】一块杀肉龙去”,单看这个名字并不像传统开源项目,更像是拿来做测试的输入样例:MONTAGEM 是巴西放克短视频里常见的一种音乐风格标签&#xf…

作者头像 李华
网站建设 2026/9/2 15:43:40

基于SpringBoot的中国古诗词学习平台系统(毕设源码+文档)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/9/2 15:40:38

从软件工程视角构建生活系统:技术债、DevOps与韧性设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/2 15:40:32

重庆商铺转让服务公司推荐:门店还在营业,隐私保护能力怎么判断

摘要:仍在营业、员工不知情的门店,选择转让服务公司时要重点考察公开分层、脱敏处理、客户筛选和预约看店规则。很多门店准备转让时,还在正常营业。员工不知道,顾客不知道,周边同行也不知道。老板一方面希望尽快找到接…

作者头像 李华
网站建设 2026/9/2 15:39:04

Can LLMs Infer Personality from Real World Conversations?

文章主要内容总结 本文研究了大型语言模型(LLMs)从真实世界对话中推断人格特质的能力。研究团队引入了一个新的基准数据集(包含555个半结构化访谈,内容为受访者对近期情感和社交经历的自传式反思,并配对了同期收集的验证过的BFI-10自我报告分数),评估了GPT-4.1 Mini、M…

作者头像 李华
网站建设 2026/9/2 15:38:56

MATLAB R2024a 安装配置全攻略:从零搭建高效计算环境

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华