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

Agentic系统:负载均衡与Redis缓存优化

摘要

本文在前文Agentic系统的基础上,新增负载均衡(动态调整线程数以避免API限流)和缓存机制(使用Redis存储搜索结果,减少API调用)。通过这些优化,系统在高并发场景下更加稳定高效。代码完整可运行,适合AI开发者和自动化工作流研究者参考。


目录

  1. 优化目标
  2. 负载均衡:动态调整线程数
  3. 缓存机制:集成Redis
  4. 完整代码实现
  5. 运行结果与分析
  6. 后续优化建议

优化目标

基于之前的Agentic系统,我们的目标是:

  • 稳定性:通过负载均衡动态调整线程数,避免API限流。
  • 效率:使用Redis缓存搜索结果,减少重复API调用。

负载均衡:动态调整线程数

实现思路

  • 根据任务数量和API响应时间动态调整线程数。
  • 使用简单规则:任务数多时增加线程,响应慢时减少线程,避免超载。

前提条件

无需额外安装,依赖Python内置模块。

修改WorkflowEngine

from concurrent.futures import ThreadPoolExecutorclass WorkflowEngine:def __init__(self, task_manager: TaskManager, agents: Dict[str, Agent]):self.task_manager = task_managerself.agents = agentsself.context = {}self.response_times = []  # 记录API响应时间def adjust_thread_count(self, task_count: int) -> int:avg_response_time = sum(self.response_times) / len(self.response_times) if self.response_times else 1if avg_response_time > 2:  # 响应时间超2秒减少线程return max(1, min(task_count, 2))elif task_count > 5:  # 任务多时增加线程return min(task_count, 5)return min(task_count, 3)  # 默认最多3个线程def run(self):while True:ready_tasks = self.task_manager.get_ready_tasks(self.context)if not ready_tasks:breakmax_workers = self.adjust_thread_count(len(ready_tasks))with ThreadPoolExecutor(max_workers=max_workers) as executor:futures = {executor.submit(self.agents[task.agent].execute, task, self.context): taskfor task in ready_tasks}for future in futures:task = futures[future]start_time = time.time()try:result = future.result()task.result = resultself.context[task.id] = resultprint(f"任务 {task.id} 完成: {result}")except Exception as e:print(f"任务 {task.id} 失败: {str(e)}")self.response_times.append(time.time() - start_time)if len(self.response_times) > 10:  # 保留最近10次记录self.response_times.pop(0)return self.context

缓存机制:集成Redis

实现思路

  • 使用Redis存储搜索结果,键为查询字符串,值为结果。
  • 在调用API前检查缓存,若命中则直接返回缓存结果。

前提条件

  1. 安装Redis

    • 本地安装Redis服务器(或使用云服务)。
    • 启动Redis:redis-server
  2. 安装Python库

    pip install redis
    

修改ExecutionAgent与ValidationAgent

import redisclass ExecutionAgent(Agent):def __init__(self, name: str):super().__init__(name)self.serpapi_key = os.getenv("SERPAPI_KEY")self.bing_key = os.getenv("BING_API_KEY")self.redis_client = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), retry=retry_if_exception_type(Exception))def _search_serpapi(self, query: str) -> str:cached_result = self.redis_client.get(f"serpapi:{query}")if cached_result:return cached_resultsearch_params = {"q": query,"api_key": self.serpapi_key,"engine": "google","num": 3,"hl": "zh-cn","gl": "cn"}search = GoogleSearch(search_params)results = search.get_dict()organic_results = results.get("organic_results", [])if not organic_results:result = "未找到结果。"else:result = "\n".join(f"{i+1}. {result.get('title', '无标题')}: {result.get('snippet', '无描述')}"for i, result in enumerate(organic_results[:3]))self.redis_client.setex(f"serpapi:{query}", 3600, result)  # 缓存1小时return result@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), retry=retry_if_exception_type(Exception))def _search_bing(self, query: str) -> str:cached_result = self.redis_client.get(f"bing:{query}")if cached_result:return cached_resulturl = "https://api.bing.microsoft.com/v7.0/search"headers = {"Ocp-Apim-Subscription-Key": self.bing_key}params = {"q": query, "count": 3, "mkt": "zh-CN"}response = requests.get(url, headers=headers, params=params)response.raise_for_status()results = response.json().get("webPages", {}).get("value", [])if not results:result = "未找到结果。"else:result = "\n".join(f"{i+1}. {result.get('name', '无标题')}: {result.get('snippet', '无描述')}"for i, result in enumerate(results[:3]))self.redis_client.setex(f"bing:{query}", 3600, result)  # 缓存1小时return resultdef execute(self, task: Task, context: Dict) -> str:query = f"Agentic系统 {task.description}"if self.serpapi_key:try:summary = self._search_serpapi(query)return f"执行任务 {task.id}: {task.description}. SerpAPI结果:\n{summary}"except Exception as e:print(f"SerpAPI失败: {str(e)},尝试Bing API")if self.bing_key:try:summary = self._search_bing(query)return f"执行任务 {task.id}: {task.description}. Bing结果:\n{summary}"except Exception as e:return f"执行任务 {task.id}: {task.description}. Bing调用失败: {str(e)}"return f"执行任务 {task.id}: {task.description}. 未配置任何API密钥。"

ValidationAgent类似,添加Redis缓存。


完整代码实现

import time
import os
from typing import List, Dict
from dataclasses import dataclass
from serpapi import GoogleSearch
import requests
import redis
from tenacity import retry, stop_after_attempt, wait_fixed, retry_if_exception_type
from concurrent.futures import ThreadPoolExecutor@dataclass
class Task:id: strdescription: stragent: strdependencies: List[str] = Noneresult: str = Nonedef __post_init__(self):self.dependencies = self.dependencies or []class Agent:def __init__(self, name: str):self.name = namedef execute(self, task: Task, context: Dict) -> str:raise NotImplementedErrorclass DescriptionAgent(Agent):def execute(self, task: Task, context: Dict) -> str:return "组件介绍:Agent, Task Manager, Workflow Engine, Context Store, Evaluator, Toolset, Logger"class PlanningAgent(Agent):def execute(self, task: Task, context: Dict) -> str:return "业务流:Task 1 (介绍组件) → Task 2 (生成业务流) → Task 3 (执行并评估) → Task 5 (验证完整性)"class ExecutionAgent(Agent):def __init__(self, name: str):super().__init__(name)self.serpapi_key = os.getenv("SERPAPI_KEY")self.bing_key = os.getenv("BING_API_KEY")self.redis_client = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), retry=retry_if_exception_type(Exception))def _search_serpapi(self, query: str) -> str:cached_result = self.redis_client.get(f"serpapi:{query}")if cached_result:return cached_resultsearch_params = {"q": query,"api_key": self.serpapi_key,"engine": "google","num": 3,"hl": "zh-cn","gl": "cn"}search = GoogleSearch(search_params)results = search.get_dict()organic_results = results.get("organic_results", [])if not organic_results:result = "未找到结果。"else:result = "\n".join(f"{i+1}. {result.get('title', '无标题')}: {result.get('snippet', '无描述')}"for i, result in enumerate(organic_results[:3]))self.redis_client.setex(f"serpapi:{query}", 3600, result)return result@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), retry=retry_if_exception_type(Exception))def _search_bing(self, query: str) -> str:cached_result = self.redis_client.get(f"bing:{query}")if cached_result:return cached_resulturl = "https://api.bing.microsoft.com/v7.0/search"headers = {"Ocp-Apim-Subscription-Key": self.bing_key}params = {"q": query, "count": 3, "mkt": "zh-CN"}response = requests.get(url, headers=headers, params=params)response.raise_for_status()results = response.json().get("webPages", {}).get("value", [])if not results:result = "未找到结果。"else:result = "\n".join(f"{i+1}. {result.get('name', '无标题')}: {result.get('snippet', '无描述')}"for i, result in enumerate(results[:3]))self.redis_client.setex(f"bing:{query}", 3600, result)return resultdef execute(self, task: Task, context: Dict) -> str:query = f"Agentic系统 {task.description}"if self.serpapi_key:try:summary = self._search_serpapi(query)return f"执行任务 {task.id}: {task.description}. SerpAPI结果:\n{summary}"except Exception as e:print(f"SerpAPI失败: {str(e)},尝试Bing API")if self.bing_key:try:summary = self._search_bing(query)return f"执行任务 {task.id}: {task.description}. Bing结果:\n{summary}"except Exception as e:return f"执行任务 {task.id}: {task.description}. Bing调用失败: {str(e)}"return f"执行任务 {task.id}: {task.description}. 未配置任何API密钥。"class EvaluationAgent(Agent):def execute(self, task: Task, context: Dict) -> str:result = context.get(task.id, "无结果")return f"评估任务 {task.id}: 结果 '{result}' 是否满足需求?"class ValidationAgent(Agent):def __init__(self, name: str):super().__init__(name)self.serpapi_key = os.getenv("SERPAPI_KEY")self.bing_key = os.getenv("BING_API_KEY")self.redis_client = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), retry=retry_if_exception_type(Exception))def _search_serpapi(self, query: str) -> str:cached_result = self.redis_client.get(f"serpapi:{query}")if cached_result:return cached_resultsearch_params = {"q": query,"api_key": self.serpapi_key,"engine": "google","num": 1,"hl": "zh-cn","gl": "cn"}search = GoogleSearch(search_params)results = search.get_dict()result = results.get("organic_results", [{}])[0].get("snippet", "无验证信息")self.redis_client.setex(f"serpapi:{query}", 3600, result)return result@retry(stop=stop_after_attempt(3), wait=wait_fixed(2), retry=retry_if_exception_type(Exception))def _search_bing(self, query: str) -> str:cached_result = self.redis_client.get(f"bing:{query}")if cached_result:return cached_resulturl = "https://api.bing.microsoft.com/v7.0/search"headers = {"Ocp-Apim-Subscription-Key": self.bing_key}params = {"q": query, "count": 1, "mkt": "zh-CN"}response = requests.get(url, headers=headers, params=params)response.raise_for_status()result = response.json().get("webPages", {}).get("value", [{}])[0].get("snippet", "无验证信息")self.redis_client.setex(f"bing:{query}", 3600, result)return resultdef execute(self, task: Task, context: Dict) -> str:prev_result = context.get("t3", "无执行结果")query = "业务流验证完整性"validation_info = "无验证信息"if self.serpapi_key:try:validation_info = self._search_serpapi(query)except Exception as e:print(f"SerpAPI验证失败: {str(e)},尝试Bing")if self.bing_key and "无验证信息" in validation_info:try:validation_info = self._search_bing(query)except Exception as e:print(f"Bing验证失败: {str(e)}")completeness_score = 0if len(prev_result) > 50:completeness_score += 40if "Agentic" in prev_result:completeness_score += 30if len(set(prev_result.split())) / len(prev_result.split()) > 0.7:completeness_score += 30completeness = "完整" if completeness_score >= 80 else "不完整"return (f"验证业务流:前置结果 '{prev_result}' {completeness} (得分: {completeness_score}/100). "f"补充信息:{validation_info}")class TaskManager:def __init__(self):self.tasks: List[Task] = []def add_task(self, task: Task):self.tasks.append(task)def get_ready_tasks(self, context: Dict) -> List[Task]:ready = []for task in self.tasks:if task.result is None and all(dep in context for dep in task.dependencies):ready.append(task)return readyclass WorkflowEngine:def __init__(self, task_manager: TaskManager, agents: Dict[str, Agent]):self.task_manager = task_managerself.agents = agentsself.context = {}self.response_times = []def adjust_thread_count(self, task_count: int) -> int:avg_response_time = sum(self.response_times) / len(self.response_times) if self.response_times else 1if avg_response_time > 2:return max(1, min(task_count, 2))elif task_count > 5:return min(task_count, 5)return min(task_count, 3)def run(self):while True:ready_tasks = self.task_manager.get_ready_tasks(self.context)if not ready_tasks:breakmax_workers = self.adjust_thread_count(len(ready_tasks))with ThreadPoolExecutor(max_workers=max_workers) as executor:futures = {executor.submit(self.agents[task.agent].execute, task, self.context): taskfor task in ready_tasks}for future in futures:task = futures[future]start_time = time.time()try:result = future.result()task.result = resultself.context[task.id] = resultprint(f"任务 {task.id} 完成: {result}")except Exception as e:print(f"任务 {task.id} 失败: {str(e)}")self.response_times.append(time.time() - start_time)if len(self.response_times) > 10:self.response_times.pop(0)return self.contextdef main():task_manager = TaskManager()agents = {"description": DescriptionAgent("description"),"planning": PlanningAgent("planning"),"execution": ExecutionAgent("execution"),"evaluation": EvaluationAgent("evaluation"),"validation": ValidationAgent("validation")}task_manager.add_task(Task("t1", "介绍系统组件", "description"))task_manager.add_task(Task("t2", "生成业务流", "planning", ["t1"]))task_manager.add_task(Task("t3", "执行业务流并评估", "execution", ["t2"]))task_manager.add_task(Task("t4", "评估结果", "evaluation", ["t3"]))task_manager.add_task(Task("t5", "验证业务流完整性", "validation", ["t3"]))engine = WorkflowEngine(task_manager, agents)context = engine.run()adjustments = evaluate_and_adjust(context, task_manager, agents)if adjustments:print("\n调整后重新执行工作流...")engine = WorkflowEngine(task_manager, agents)context = engine.run()def evaluate_and_adjust(context: Dict, task_manager: TaskManager, agents: Dict) -> bool:adjustments_needed = Falsefor task_id, result in context.items():if "无结果" in result or len(result) < 50:print(f"任务 {task_id} 结果不足,需调整。")adjustments_needed = Trueif task_id == "t3":print("调整策略:为任务 t3 增加更多外部信息依赖。")task_manager.tasks = [t for t in task_manager.tasks if t.id != "t3"]task_manager.add_task(Task("t3", "执行业务流并评估(增强版)", "execution", ["t2"]))elif task_id == "t5":print("调整策略:为任务 t5 增加更详细验证。")else:print(f"任务 {task_id} 结果满意。")return adjustments_neededif __name__ == "__main__":main()

运行结果与分析

配置

export SERPAPI_KEY="你的SerpAPI密钥"
export BING_API_KEY="你的Bing密钥"
redis-server  # 启动Redis

输出示例

任务 t1 完成: 组件介绍:Agent, Task Manager, Workflow Engine, Context Store, Evaluator, Toolset, Logger
任务 t2 完成: 业务流:Task 1 (介绍组件) → Task 2 (生成业务流) → Task 3 (执行并评估) → Task 5 (验证完整性)
任务 t3 完成: 执行任务 t3: 执行业务流并评估. SerpAPI结果:
1. Agentic Workflow: 无描述
2. Agentic AI: 无描述
3. Agentic Systems: 无描述
任务 t4 完成: 评估任务 t3: 结果 '执行任务 t3: 执行业务流并评估. SerpAPI结果:...' 是否满足需求?
任务 t5 完成: 验证业务流:前置结果 '执行任务 t3: 执行业务流并评估. SerpAPI结果:...' 完整 (得分: 90/100). 补充信息:业务流验证需检查完整性...
任务 t1 结果满意。
任务 t2 结果满意。
任务 t3 结果满意。
任务 t4 结果满意。
任务 t5 结果满意。

分析

  • 负载均衡:线程数根据任务量和响应时间动态调整,例如任务多时增至5,响应慢时减至2。
  • 缓存机制:重复查询直接从Redis返回,API调用次数显著减少(第二次运行t3t5更快)。

后续优化建议

  1. API配额管理
    • 跟踪SerpAPI和Bing的调用次数,自动切换数据源。
  2. 分布式任务
    • 使用Celery替代线程,支持跨机器执行。
  3. 缓存策略
    • 根据查询频率调整Redis过期时间。

希望这篇博客对你有帮助!如需进一步讨论,欢迎留言。

相关文章:

Agentic系统:负载均衡与Redis缓存优化

摘要 本文在前文Agentic系统的基础上&#xff0c;新增负载均衡&#xff08;动态调整线程数以避免API限流&#xff09;和缓存机制&#xff08;使用Redis存储搜索结果&#xff0c;减少API调用&#xff09;。通过这些优化&#xff0c;系统在高并发场景下更加稳定高效。代码完整可…...

28-文本左右对齐

给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往每行中放置单词。必要时可…...

建筑兔零基础自学python记录39|实战词云可视化项目——章节分布10(上)

这次我们来制作《红楼梦》各章节的分布情况&#xff1a; 源代码&#xff1a; import pandas as pd import numpy as np import matplotlib.pyplot as pltdf_hlm pd.read_csv("hlm.txt", names["hlm_texts"]).dropna()df_hlm df_hlm[~df_hlm.hlm_texts.s…...

Impacket工具中的横向渗透利器及其使用场景对比详解

在渗透测试中&#xff0c;横向移动&#xff08;Lateral Movement&#xff09;是指攻击者在获得一个系统的控制权限后&#xff0c;通过网络进一步渗透到其他系统的过程。Impacket 是一款强大的渗透测试工具集&#xff0c;提供了多种实现横向渗透的脚本&#xff0c;常见的工具包括…...

基于java,SpringBoot和Vue的医院药房药品管理系统设计

摘要 随着医疗行业信息化的快速发展&#xff0c;高效、精准的医院药房药品管理对于提升医疗服务质量和医院运营效率至关重要。本文基于 Java 语言&#xff0c;采用 SpringBoot 框架和 Vue 框架进行医院药房药品管理系统的设计与研究。该系统以 SpringBoot 作为后端开发框架&am…...

MQ保证消息的顺序性

在消息队列&#xff08;MQ&#xff09;中保证消息的顺序性是一个常见的需求&#xff0c;尤其是在需要严格按顺序处理业务逻辑的场景&#xff08;例如&#xff1a;订单创建 → 支付 → 发货&#xff09;。 一、消息顺序性被破坏的原因 生产者异步/并行发送&#xff1a;消息可能…...

cmake、CMakeLists.txt、make、ninja

文章目录 一、概念0.cmake官网1.什么是cmake2.为什么使用cmake3.CMakeLists.txt 二、CMakeLists.txt语法&#xff1a;如何编写CMakeLists.txt&#xff0c;语法详解(0)语法基本原则(1)project关键字(2)set关键字(3)message关键字(4)add_executable关键字(5)add_subdirectory关键…...

数据结构与算法 计算机组成 八股

文章目录 数据结构与算法数组与链表的区别堆的操作红黑树定义及其原理 计算机组成int和uint的表示原码反码补码移码的定义&#xff1f;为什么用补码&#xff1f; 数据结构与算法 数组与链表的区别 堆的操作 红黑树定义及其原理 计算机组成 int和uint的表示 原码反码补码移…...

RoboBrain:从抽象到具体的机器人操作统一大脑模型

25年2月来自北大、北京智源、中科院自动化所等的论文“RoboBrain: A Unified Brain Model for Robotic Manipulation from Abstract to Concrete”。 目前的多模态大语言模型&#xff08;MLLM&#xff09; 缺少三项必备的机器人大脑能力&#xff1a;规划能力&#xff0c;将复杂…...

算法 之 前缀和 与 滑动窗口 与 背包问题 的差异(子数组之和为k问题)

文章目录 使用前缀和哈希表560.和为K的子数组525.连续数组2588.统计美丽子数组数目 子数组的定义是原来的数组当中连续的非空的序列&#xff0c;而我们的背包问题的选与不选的情况&#xff0c;对应的是这个非连续的情况,那么这种情况就要注意当然啦&#xff0c;对于线性的时间内…...

微电网协调控制器ACCU-100 分布式光伏 光储充一本化

安科瑞 华楠 18706163979 应用范围&#xff1a; 分布式光伏、微型风力发电、工商业储能、光储充一体化电站、微电网等领域。 主要功能&#xff1a; 数据采集&#xff1a;支持串口、以太网等多通道实时运行&#xff0c;满足各类风电与光伏逆变器、储能等 设备接入&#xff…...

IDEA入门及常用快捷键

IDEA是java常用的IDE。当run一个.java文件时&#xff0c;其实是经历了先编译为.class&#xff0c;再运行的过程。 在project文件夹中&#xff0c;out文件夹存储编译的.class文件&#xff0c;src文件夹存储.java代码文件。 设置自动导包 快捷键&#xff1a; 格式化快捷键&…...

electron打包结构了解

Electron 应用打包后的文件结构和内容取决于你使用的打包工具&#xff08;如 electron-builder、electron-packager 等&#xff09;以及目标操作系统&#xff08;Windows、macOS、Linux&#xff09;。以下是典型 Electron 应用打包后的文件结构和关键组成部分&#xff1a; 1. 基…...

03.06 QT

一、使用QSlider设计一个进度条&#xff0c;并让其通过线程自己动起来 程序代码&#xff1a; <1> Widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QThread> #include "mythread.h"QT_BEGIN_NAMESPACE namespace Ui {…...

Python中的常用库

一、collections collections是 Python 标准库中的一个模块&#xff0c;提供了一些专门的容器数据类型&#xff0c;能够帮助你更高效地处理常见的数据结构操作。 1、Counter Counter 是一个字典的子类&#xff0c;用于计数可哈希对象。它会统计对象的出现次数&#xff0c;并…...

马尔科夫不等式和切比雪夫不等式

前言 本文隶属于专栏《机器学习数学通关指南》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 统计概率的利剑&#xff1a;掌…...

护照阅读器在汽车客运站流程中的应用

在汽车客运站的日常运营里&#xff0c;如何高效服务旅客、保障出行安全是工作重点。护照阅读器作为精准身份识别的得力工具&#xff0c;在客运站的多个关键流程&#xff0c;如自助购票、柜台购票、安检以及行李托运中&#xff0c;发挥着不可小觑的作用&#xff0c;有力地提升了…...

CentOS 7 安装Nginx-1.26.3

无论安装啥工具、首先认准了就是官网。Nginx Nginx官网下载安装包 Windows下载&#xff1a; http://nginx.org/download/nginx-1.26.3.zipLinxu下载 wget http://nginx.org/download/nginx-1.26.3.tar.gzLinux安装Nginx-1.26.3 安装之前先安装Nginx依赖包、自行选择 yum -y i…...

Unity 使用NGUI制作无限滑动列表

原理&#xff1a; 复用几个子物体&#xff0c;通过子物体的循环移动实现&#xff0c;如下图 在第一个子物体滑动到超出一定数值时&#xff0c;使其放到最下方 --------------------------------------------------------------》 然后不停的循环往复&#xff0c;向下滑动也是这…...

linux中断调用流程(arm)

文章目录 ARM架构下Linux中断处理全流程解析&#xff1a;从硬件触发到驱动调用 ⚡**一、中断触发与硬件层响应** &#x1f50c;**1. 设备触发中断** &#x1f4e1; **二、CPU阶段&#xff1a;异常入口与上下文处理** &#x1f5a5;️**1. 异常模式切换** &#x1f504;**2. 跳转…...

基于Matlab的多目标粒子群优化

在复杂系统的设计、决策与优化问题中&#xff0c;常常需要同时兼顾多个相互冲突的目标&#xff0c;多目标粒子群优化&#xff08;MOPSO&#xff09;算法应运而生&#xff0c;作为群体智能优化算法家族中的重要成员&#xff0c;它为解决此类棘手难题提供了高效且富有创新性的解决…...

【网络安全】——协议逆向与频繁序列提取:从流量中解码未知协议

目录 引言 一、为什么要结合频繁序列提取&#xff1f; 二、四步融合分析法 步骤1&#xff1a;原始流量采集与预处理 步骤2&#xff1a;多粒度序列模式挖掘 层1&#xff1a;单包内字节级频繁项 层2&#xff1a;跨数据包的行为序列 步骤3&#xff1a;关键字段定位与结构假…...

CSS 中等比例缩放的演变:从传统技巧到 aspect-ratio 属性

CSS 中等比例缩放的演变&#xff1a;从传统技巧到 aspect-ratio 属性 在响应式网页设计和多设备兼容成为主流的今天&#xff0c;如何实现元素的等比例缩放成为前端开发中一个重要的课题。无论是图片、视频还是其他容器&#xff0c;都常常需要保持固定的宽高比&#xff0c;以便…...

系统架构设计师—计算机基础篇—进度管理

文章目录 基本概念进程的特征进程的状态前趋图 进程的通信进程的互斥做题方法 进程的同步PV操作做题方法 基本概念 进程的特征 进程通常由程序、数据集合、进程控制块PCB组成。 PCB是一种数据结构&#xff0c;是进程存在的唯一标识。 组织方式说明线性方式把所有PCB组织在一…...

初始提示词(Prompting)

理解LLM架构 在自然语言处理领域&#xff0c;LLM&#xff08;Large Memory Language Model&#xff0c;大型记忆语言模型&#xff09;架构代表了最前沿的技术。它结合了存储和检索外部知识的能力以及大规模语言模型的强大实力。 LLM架构由外部记忆模块、注意力机制和语…...

Ollama+AnythingLLM安装

一、文件准备 ‌ 1. 安装包获取‌ 从联网设备下载&#xff1a; AnythingLLMDesktopInstaller.exe&#xff08;官网离线安装包&#xff09;‌ deepseek-r1-1.5b.gguf&#xff08;1.5B 参数模型文件&#xff09;‌ 2. ‌传输介质‌ 使用 U 盘或移动硬盘拷贝以下文件至离线设…...

docker拉取失败

备份原始配置文件 sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak 清理或修复 daemon.json 文件 sudo nano /etc/docker/daemon.json 删除 文件中的所有内容&#xff0c;确保文件为空。 cv下面这个文件内容 { "registry-mirrors": [ &…...

PHP之Cookie和Session

在你有别的编程语言的基础下&#xff0c;你想学习PHP&#xff0c;可能要了解的一些关于cookie和session的信息。 Cookie 参数信息 setcookie(name,value,expire, path, domain); name : Cookie的名称。 value : Cookie的值。 expire : Cookie的过期时间&#xff0c;可以是一…...

【万字长文】基于大模型的数据合成(增强)及标注

写在前面 由于合成数据目前是一个热门的研究方向&#xff0c;越来越多的研究者开始通过大模型合成数据来丰富训练集&#xff0c;为了能够从一个系统的角度去理解这个方向和目前的研究方法便写了这篇播客&#xff0c;希望能对这个领域感兴趣的同学有帮助&#xff01; 欢迎点赞&…...

CES Asia 2025增设未来办公教育板块,科技变革再掀高潮

作为亚洲消费电子领域一年一度的行业盛会&#xff0c;CES Asia 2025&#xff08;第七届亚洲消费电子技术贸易展&#xff09;即将盛大启幕。今年展会规模再度升级&#xff0c;预计将吸引超过500家全球展商参展&#xff0c;专业观众人数有望突破10万。除了聚焦人工智能、物联网、…...