使用Milvus和Llama-agents构建更强大的Agent系统

2e7c027f0fd9bbd65c5d9c4674ad42a2.png

3c827b99fefac0ce1a6d542fb21f5292.png

代理(Agent)系统能够帮助开发人员创建智能的自主系统,因此变得越来越流行。大语言模型(LLM)能够遵循各种指令,是管理 Agent 的理想选择,在许多场景中帮助我们尽可能减少人工干预、处理更多复杂任务。例如,Agent 系统解答客户咨询的问题,甚至根据客户偏好进行交叉销售。

本文将探讨如何使用 Llama-agents 和 Milvus 构建 Agent 系统。通过将 LLM 的强大功能与 Milvus 的向量相似性搜索能力相结合,我们可以创建智能且高效、可扩展的复杂 Agent 系统。

本文还将探讨如何使用不同的 LLM 来实现各种操作。对于较简单的任务,我们将使用规模较小且更价格更低的 Mistral Nemo 模型。对于更复杂的任务,如协调不同 Agent,我们将使用 Mistral Large 模型。

01.

Llama-agents、Ollama、Mistral Nemo 和 Milvus Lite 简介

  • Llama-agents:LlamaIndex 的扩展,通常与 LLM 配套使用,构建强大的 stateful、多 Actor 应用。

  • Ollama 和 Mistral Nemo: Ollama 是一个 AI 工具,允许用户在本地计算机上运行大语言模型(如 Mistral Nemo),无需持续连接互联网或依赖外部服务器。

  • Milvus Lite: Milvus 的轻量版,您可以在笔记本电脑、Jupyter Notebook 或 Google Colab 上本地运行 Milvus Lite。它能够帮助您高效存储和检索非结构化数据。

Llama-agents 原理

LlamaIndex 推出的 Llama-agents 是一个异步框架,可用于构建和迭代生产环境中的多 Agent 系统,包括多代理通信、分布式工具执行、人机协作等功能!

在 Llama-agents 中,每个 Agent 被视为一个服务,不断处理传入的任务。每个 Agent 从消息队列中提取和发布消息。

bf1dbba033a88765fdbadb312715ca0f.png

02.

安装依赖

第一步先安装所需依赖。

! pip install llama-agents pymilvus python-dotenv
! pip install llama-index-vector-stores-milvus llama-index-readers-file llama-index-embeddings-huggingface llama-index-llms-ollama llama-index-llms-mistralai
# This is needed when running the code in a Notebook
import nest_asyncio
nest_asyncio.apply()from dotenv import load_dotenv
import osload_dotenv()

03.

将数据加载到 Milvus

从 Llama-index 上下载示例数据。其中包含有关 Uber 和 Lyft 的 PDF 文件。

!mkdir -p 'data/10k/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/uber_2021.pdf' -O 'data/10k/uber_2021.pdf'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/lyft_2021.pdf' -O 'data/10k/lyft_2021.pdf'

现在,我们可以提取数据内容,然后使用 Embedding 模型将数据转换为 Embedding 向量,最终存储在 Milvus 向量数据库中。本文使用的模型为 bge-small-en-v1.5 文本 Embedding 模型。该模型较小且资源消耗量更低。

接着,在 Milvus 中创建 Collection 用于存储和检索数据。本文使用 Milvus 轻量版—— Milvus Lite。Milvus 是一款高性能的向量向量数据库,提供向量相似性搜索能力,适用于搭建 AI 应用。仅需通过简单的 pip install pymilvus 命令即可快速安装 Milvus Lite。

PDF 文件被转换为向量,我们将向量数据库存储到 Milvus 中。

from llama_index.vector_stores.milvus import MilvusVectorStore
from llama_index.core import Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbeddingfrom llama_index.core import SimpleDirectoryReader, VectorStoreIndex, StorageContext, load_index_from_storage
from llama_index.core.tools import QueryEngineTool, ToolMetadata# Define the default Embedding model used in this Notebook.
# bge-small-en-v1.5 is a small Embedding model, it's perfect to use locally
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5"
)input_files=["./data/10k/lyft_2021.pdf", "./data/10k/uber_2021.pdf"]# Create a single Milvus vector store
vector_store = MilvusVectorStore(uri="./milvus_demo_metadata.db",collection_name="companies_docs" dim=384,overwrite=False,
)# Create a storage context with the Milvus vector store
storage_context = StorageContext.from_defaults(vector_store=vector_store)# Load data
docs = SimpleDirectoryReader(input_files=input_files).load_data()# Build index
index = VectorStoreIndex.from_documents(docs, storage_context=storage_context)# Define the query engine
company_engine = index.as_query_engine(similarity_top_k=3)

04.

定义工具

我们需要定义两个与我们数据相关的工具。第一个工具提供关于 Lyft 的信息。第二个工具提供关于 Uber 的信息。在后续的内容中,我们将进一步探讨如何定义一个更广泛的工具。

# Define the different tools that can be used by our Agent.
query_engine_tools = [QueryEngineTool(query_engine=company_engine,metadata=ToolMetadata(name="lyft_10k",description=("Provides information about Lyft financials for year 2021. ""Use a detailed plain text question as input to the tool."),),),QueryEngineTool(query_engine=company_engine,metadata=ToolMetadata(name="uber_10k",description=("Provides information about Uber financials for year 2021. ""Use a detailed plain text question as input to the tool."),),),
]

05.

使用 Mistral Nemo 设置 Agent

我们将使用 Mistral Nemo 和 Ollama 限制资源用量、降低应用成本。Mistral Nemo + Ollama 的组合能够帮助我们在本地运行模型。Mistral Nemo 是一个小型 LLM,提供高达 128k Token 的大上下文窗口,这在处理大型文档时非常有用。此外,该 LLM 还经过微调,可以遵循精确的推理指令、处理多轮对话和生成代码。

from llama_index.llms.ollama import Ollama
from llama_index.core.agent import AgentRunner, ReActAgentWorker, ReActAgent# Set up the agent
llm = Ollama(model="mistral-nemo", temperature=0.4)
agent = ReActAgent.from_tools(query_engine_tools, llm=llm, verbose=True)# Example usage
response = agent.chat("Compare the revenue of Lyft and Uber in 2021.")
print(response)

生成响应如下所示:

> Running step 7ed275f6-b0de-4fd7-b2f2-fd551e58bfe2. Step input: Compare the revenue of Lyft and Uber in 2021.
Thought: The current language of the user is: English. I need to use tools to help me answer the question.
Action: lyft_10k
Action Input: {'input': "What was Lyft's total revenue in 2021?"}
huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...
To disable this warning, you can either:- Avoid using `tokenizers` before the fork if possible- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)
Observation: The total revenue for Lyft in 2021 was generated primarily from its ridesharing marketplace connecting drivers and riders, with revenue recognized from fees paid by drivers for using the Lyft Platform offerings in accordance with ASC 606.
> Running step 33064fd3-3c3a-42c4-ab5a-e7ebf8a9325b. Step input: None
Thought: I need to compare the revenue of Lyft and Uber in 2021.
Action: uber_10k
Action Input: {'input': "What was Uber's total revenue in 2021?"}
Observation: $17,455
> Running step 7eacfef4-d9da-4cbf-ac07-18f2ff6a3951. Step input: None
Thought: I have obtained Uber's total revenue for 2021. Now, I need to compare it with Lyft's.
Action: lyft_10k
Action Input: {'input': "What was Lyft's total revenue in 2021?"}
Observation: The total revenue for Lyft in 2021 was generated primarily from their ridesharing marketplace connecting drivers and riders. The revenue was recognized from fees paid by drivers for using the Lyft Platform offerings in accordance with ASC 606.
> Running step 88673e15-b74c-4755-8b9c-2b7ef3acea48. Step input: None
Thought: I have obtained both Uber's and Lyft's total revenues for 2021. Now, I need to compare them.
Action: Compare
Action Input: {'Uber': '$17,455', 'Lyft': '$3.6 billion'}
Observation: Error: No such tool named `Compare`.
> Running step bed5941f-74ba-41fb-8905-88525e67b785. Step input: None
Thought: I need to compare the revenues manually since there isn't a 'Compare' tool.
Answer: In 2021, Uber's total revenue was $17.5 billion, while Lyft's total revenue was $3.6 billion. This means that Uber generated approximately four times more revenue than Lyft in the same year.
Response without metadata filtering:
In 2021, Uber's total revenue was $17.5 billion, while Lyft's total revenue was $3.6 billion. This means that Uber generated approximately four times more revenue than Lyft in the same year.

06.

使用 Milvus 进行元数据过滤

虽然为每个公司的文档定义一个工具代理非常方便,但如果需要处理的文档很多,这种方法并不具备良好的扩展性。更好的解决方案是使用 Milvus 提供的元数据过滤功能。我们可以将来自不同公司的数据存储在同一个 Collection 中,但只检索特定公司的相关数据,从而节省时间和资源。

以下代码展示了如何使用元数据过滤功能:

from llama_index.core.vector_stores import ExactMatchFilter, MetadataFilters# Example usage with metadata filtering
filters = MetadataFilters(filters=[ExactMatchFilter(key="file_name", value="lyft_2021.pdf")]
)filtered_query_engine = index.as_query_engine(filters=filters)# Define query engine tools with the filtered query engine
query_engine_tools = [QueryEngineTool(query_engine=filtered_query_engine,metadata=ToolMetadata(name="company_docs",description=("Provides information about various companies' financials for year 2021. ""Use a detailed plain text question as input to the tool."),),),
]# Set up the agent with the updated query engine tools
agent = ReActAgent.from_tools(query_engine_tools, llm=llm, verbose=True)

我们的检索器将过滤数据,仅考虑属于 lyft_2021.pdf文档的部分数据。因此,我们应该是搜索不到 Uber 相关的信息和内容的。

try:response = agent.chat("What is the revenue of uber in 2021?")print("Response with metadata filtering:")print(response)
except ValueError as err:print("we couldn't find the data, reached max iterations")

让我们测试一下。当我们针对 Uber 2021 年的公司收入进行提问时,Agent 没有检索出结果。

Thought: The user wants to know Uber's revenue for 2021.
Action: company_docs
Action Input: {'input': 'Uber Revenue 2021'}
Observation: I'm sorry, but based on the provided context information, there is no mention of Uber's revenue for the year 2021. The information primarily focuses on Lyft's revenue per active rider and critical accounting policies and estimates related to their financial statements.
> Running step c0014d6a-e6e9-46b6-af61-5a77ca857712. Step input: None

但当我们针对 Lyft 2021 年的公司收入进行提问时,Agent 能够检索出正确的答案。

try:response = agent.chat("What is the revenue of Lyft in 2021?")print("Response with metadata filtering:")print(response)
except ValueError as err:print("we couldn't find the data, reached max iterations")

返回结果如下:

> Running step 7f1eebe3-2ebd-47ff-b560-09d09cdd99bd. Step input: What is the revenue of Lyft in 2021?
Thought: The current language of the user is: English. I need to use a tool to help me answer the question.
Action: company_docs
Action Input: {'input': 'Lyft revenue 2021'}
Observation: Lyft's revenue in 2021 was primarily generated from its ridesharing marketplace connecting drivers and riders. The revenue was recognized from fees paid by drivers for using the Lyft Platform offerings in accordance with ASC 606. Additionally, revenue per Active Rider reached an all-time high in the fourth quarter of 2021 due to increased ride frequency, a shift towards higher revenue rides, and revenues from licensing and data access agreements.
> Running step 072a3253-7eee-44e3-a787-397c9cbe80d8. Step input: None
Thought: The current language of the user is English. I need to use a tool to help me answer the question.
Action: company_docs
Action Input: {'input': 'Lyft revenue 2021'}
Observation: Revenue for Lyft in 2021 was driven by an increase in ride frequency, a shift towards higher revenue rides such as airport rides, and revenues from licensing and data access agreements. This resulted in Revenue per Active Rider reaching an all-time high in the fourth quarter of 2021 compared to the previous quarter.
> Running step 6494fe6d-27ad-484f-9204-0c4683bfa1c2. Step input: None
Thought: The user is asking for Lyft's revenue in 2021.
Action: company_docs
Action Input: {'input': 'Lyft revenue 2021'}
Observation: Lyft's revenue in 2021 was primarily generated from its ridesharing marketplace connecting drivers and riders. Revenue per Active Rider reached a record high in the fourth quarter of 2021 due to increased ride frequency and a shift towards higher revenue rides, such as airport rides. Additionally, revenue was boosted by licensing and data access agreements starting in the second quarter of 2021.
> Running step 0076b6dd-e7d0-45ac-a39a-4afa5f1aaf47. Step input: None
Answer: Observation: Lyft's total revenue in 2021 was $3.4 billion.
Response with metadata filtering:
Observation: Lyft's total revenue in 2021 was $3.4 billion.

07.

使用 LLM 自动创建元数据过滤器

现在,让我们基于用户问题使用 LLM 自动创建元数据过滤器,从而提升 Agent 效率。

from llama_index.core.prompts.base import PromptTemplate# Function to create a filtered query engine
def create_query_engine(question):# Extract metadata filters from question using a language modelprompt_template = PromptTemplate("Given the following question, extract relevant metadata filters.\n""Consider company names, years, and any other relevant attributes.\n""Don't write any other text, just the MetadataFilters object""Format it by creating a MetadataFilters like shown in the following\n""MetadataFilters(filters=[ExactMatchFilter(key='file_name', value='lyft_2021.pdf')])\n""If no specific filters are mentioned, returns an empty MetadataFilters()\n""Question: {question}\n""Metadata Filters:\n")prompt = prompt_template.format(question=question)llm = Ollama(model="mistral-nemo")response = llm.complete(prompt)metadata_filters_str = response.text.strip()if metadata_filters_str:metadata_filters = eval(metadata_filters_str)return index.as_query_engine(filters=metadata_filters)return index.as_query_engine()

我们可以将上述 Function 整合到 Agent 中。

# Example usage with metadata filtering
question = "What is Uber revenue? This should be in the file_name: uber_2021.pdf"
filtered_query_engine = create_query_engine(question)# Define query engine tools with the filtered query engine
query_engine_tools = [QueryEngineTool(query_engine=filtered_query_engine,metadata=ToolMetadata(name="company_docs_filtering",description=("Provides information about various companies' financials for year 2021. ""Use a detailed plain text question as input to the tool."),),),
]# Set up the agent with the updated query engine tools
agent = ReActAgent.from_tools(query_engine_tools, llm=llm, verbose=True)response = agent.chat(question)
print("Response with metadata filtering:")
print(response)

现在,Agent 使用键值file_nameuber_2021.pdf 来创建 Metadatafilters。Prompt 越复杂,Agent 能够创建更多高级过滤器。

MetadataFilters(filters=[ExactMatchFilter(key='file_name', value='uber_2021.pdf')])
<class 'str'>
eval: filters=[MetadataFilter(key='file_name', value='uber_2021.pdf', operator=<FilterOperator.EQ: '=='>)] condition=<FilterCondition.AND: 'and'>
> Running step a2cfc7a2-95b1-4141-bc52-36d9817ee86d. Step input: What is Uber revenue? This should be in the file_name: uber_2021.pdf
Thought: The current language of the user is English. I need to use a tool to help me answer the question.
Action: company_docs
Action Input: {'input': 'Uber revenue 2021'}
Observation: $17,455 million

08.

使用 Mistral Large 作为编排系统

Mistral Large 是一款比 Mistral Nemo 更强大的模型,但它也会消耗更多资源。如果仅将其用作编排器,我们可以节省部分资源,同时享受智能 Agent 带来的便利。

为什么使用 Mistral Large?

Mistral Large是Mistral AI推出的旗舰型号,具有顶级推理能力,支持复杂的多语言推理任务,包括文本理解、转换和代码生成,非常适合需要大规模推理能力或高度专业化的复杂任务。其先进的函数调用能力正是我们协调不同 Agent 时所需的功能。

我们无需针对每个任务都使用一个重量级的模型,这会对我们的系统造成负担。我们可以使用 Mistral Large 指导其他 Agent 进行特定的任务。这种方法不仅优化了性能,还降低了运营成本,提升系统可扩展性和效率。

Mistral Large 将充当中央编排器的角色,协调由 Llama-agents 管理的多个 Agent 活动:

  • Task Delegation(分派任务):当收到复杂查询时,Mistral Large 确定最合适的 Agent 和工具来处理查询的各个部分。

  • Agent Coordination(代理协调):Llama-agents 管理这些任务的执行情况,确保每个 Agent 接收到必要的输入,且其输出被正确处理和整合。

  • Result Synthesis(综合结果):Mistral Large 然后将来自各个 Agent 的输出编译成一个连贯且全面的响应,确保最终输出大于其各部分的总和。

Llama Agents

将 Mistral Large 作为编排器,并使用 Agent 生成回答。

from llama_agents import (AgentService,ToolService,LocalLauncher,MetaServiceTool,ControlPlaneServer,SimpleMessageQueue,AgentOrchestrator,
)from llama_index.core.agent import FunctionCallingAgentWorker
from llama_index.llms.mistralai import MistralAI# create our multi-agent framework components
message_queue = SimpleMessageQueue()
control_plane = ControlPlaneServer(message_queue=message_queue,orchestrator=AgentOrchestrator(llm=MistralAI('mistral-large-latest')),
)# define Tool Service
tool_service = ToolService(message_queue=message_queue,tools=query_engine_tools,running=True,step_interval=0.5,
)# define meta-tools here
meta_tools = [await MetaServiceTool.from_tool_service(t.metadata.name,message_queue=message_queue,tool_service=tool_service,)for t in query_engine_tools
]# define Agent and agent service
worker1 = FunctionCallingAgentWorker.from_tools(meta_tools,llm=MistralAI('mistral-large-latest')
)agent1 = worker1.as_agent()
agent_server_1 = AgentService(agent=agent1,message_queue=message_queue,description="Used to answer questions over differnet companies for their Financial results",service_name="Companies_analyst_agent",
)
import logging# change logging level to enable or disable more verbose logging
logging.getLogger("llama_agents").setLevel(logging.INFO)
## Define Launcher
launcher = LocalLauncher([agent_server_1, tool_service],control_plane,message_queue,
)
query_str = "What are the risk factors for Uber?"
print(launcher.launch_single(query_str))> Some key risk factors for Uber include fluctuations in the number of drivers and merchants due to dissatisfaction with the brand, pricing models, and safety incidents. Investing in autonomous vehicles may also lead to driver dissatisfaction, as it could reduce the need for human drivers. Additionally, driver dissatisfaction has previously led to protests, causing business interruptions.

09.

总结

本文介绍了如何使用 Llama-agents 框架创建和使用代理,该框架由 Mistral Nemo 和 Mistral Large 两个不同的大语言模型驱动。我们展示了如何利用不同 LLM 的优势,有效协调资源,搭建一个智能、高效的系统。

如果您喜欢本文内容,请在 GitHub 上为我们点亮🌟https://github.com/milvus-io/milvus。欢迎在 Milvus 社区中分享您的见解!

作者介绍

1a6bf32af9cc496c7ec9365c7c614a70.jpeg

Stephen Batifol

Developer Advocate at Zilliz

推荐阅读

10445ce094f012094d7dacbacb416fc0.png

b8022e39730f4079f09060d8df82c701.png

b25d2db36f02d18d3c8956b6798ba810.png

5646cf51e6ea62503531ada3f4f52aac.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/55954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++与Java Web开发的对比分析:优势与差异

目录 1. 引言 2. C的开发优势与特点 2.1 高性能与硬件控制 2.2 面向对象与多范式支持 2.3 跨平台能力 3. Java Web的开发优势与特点 3.1 跨平台与广泛的企业应用 3.2 丰富的生态系统与工具支持 3.3 安全性与稳定性 4. C与Java Web的差异对比 4.1 性能与效率 4.2 开发…

基于go开发的终端版即时通信系统(c-s架构)

项目架构图 类似一个聊天室一样 整体是一个客户端和服务端之间的并发多线程网络通信&#xff0c;效果可以翻到最后面看。 为了巩固基础的项目练手所以分为9个阶段进行迭代开发 版本⼀&#xff1a;构建基础Server 新建一个文件夹就叫golang-IM_system 第一阶段先将server的大…

LLM | Tokenization 从原理与代码了解GPT的分词器

声明&#xff1a;以上内容全是学习Andrej Karpathy油管教学视频的总结。 --------------------------------------------------------------------------------------------------------------------------------- 大家好。在今天我们学习llm中的Tokenization&#xff0c;即分…

使离医院最远的村庄到医院的路程最短

给定n个村庄之间的交通图&#xff0c;若村庄i和j之间有道路&#xff0c;则将顶点i和j用边连接&#xff0c;边上的Wij表示这条道路的长度&#xff0c;现在要从这n个村庄中选择一个村庄建一所医院&#xff0c;问这所医院应建在哪个村庄&#xff0c;才能使离医院最远的村庄到医院的…

HCIP--以太网交换安全(三)MAC地址漂移防止与检测

MAC地址漂移防止与检测 一、MAC地址漂移防止与检测知识点 1.1MAC地址漂移的概述 MAC地址漂移是指交换机上一个vlan内有两个端口学习到同一个MAC地址&#xff0c;后学习到的MAC地址表项覆盖原MAC地址表项的现象。 1.2.MAC地址漂移的防止方法 &#xff08;1&#xff09;配置…

Windows7 X64 成功安装 .NET Framework 4.8 的两种方法

Windows7 X64 成功安装 .NET Framework 4.8 的两种方法 windows7系统SP1安装完成后&#xff0c;在安装某软件时&#xff0c;提示需要先安装4.6以上的版本net-framework包&#xff0c;正好电脑里有个net-framework4.8软件包&#xff0c;于是打算用上&#xff0c;可是在安装时&a…

Github 2024-10-11 Java开源项目日报 Top9

根据Github Trendings的统计,今日(2024-10-11统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9TypeScript项目1Vue项目1C++项目1JeecgBoot 企业级低代码开发平台 创建周期:2062 天开发语言:Java, Vue协议类型:Apache License 2.…

LabVIEW激光诱导击穿光谱识别与分析系统

LabVIEW激光诱导击穿光谱&#xff08;LIBS&#xff09;分析系统利用高能量脉冲激光产生高温等离子体&#xff0c;通过分析等离子体发出的光谱来定性分析样品中的元素种类。该系统的开发集成了软件与硬件的设计&#xff0c;实现了自动识别和定性分析功能&#xff0c;适用于环境监…

OpenCV 之 实现基于Lucas-Kanade算法的光流追踪

引言 在计算机视觉中&#xff0c;光流是指物体、场景或摄像机之间的相对运动造成的像素变化。光流估计是计算机视觉中的一个基础课题&#xff0c;广泛应用于许多领域&#xff0c;比如自动驾驶汽车、机器人导航、手势识别等。OpenCV是一个开源的计算机视觉库&#xff0c;提供了…

计算机网络:计算机网络概述 —— 描述计算机网络的参数

文章目录 数据量性能指标速率带宽数据传输速率 吞吐量时延分析时延问题 时延带宽积往返时间利用率丢包率丢包的情况 抖动可用性可靠性安全性 计算机网络是现代信息社会的基础设施&#xff0c;其性能和可靠性对各类应用至关重要。为了理解和优化计算机网络&#xff0c;我们需要深…

vue后台管理系统从0到1(1)

文章目录 vue后台管理系统从0到1&#xff08;1&#xff09;nvm 下载安装1.卸载nodejs环境2.安装nvm 安装nrm vue后台管理系统从0到1&#xff08;1&#xff09; 第一节主要是先安装我们的工具nvm nodejs版本管理工具&#xff0c;和nrm镜像管理工具 nvm 下载安装 nvm是一款管理…

重学SpringBoot3-集成Redis(一)之基础功能

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;一&#xff09;之基础功能 1. 项目初始化2. 配置 Redis3. 配置 Redis 序列化4. 操作 Redis 工具类5. 编写 REST 控制器6. 测试 AP…

论文翻译 | Language Models are Few-Shot Learners 语言模型是少样本学习者(上)

摘要 最近的工作表明&#xff0c;通过在大规模文本语料库上进行预训练&#xff0c;然后在特定任务上进行微调&#xff0c;许多自然语言处理&#xff08;NLP&#xff09;任务和基准测试都取得了显著的提升。尽管这种方法在架构上通常是任务无关的&#xff0c;但它仍然需要成千上…

JavaWeb三大组件之Servlet

1. Servlet 一、Servlet介绍 1、概念 Servlet&#xff08;Server Applet&#xff09;是Java Servlet的简称&#xff0c;称为小服务程序或服务连接器&#xff0c;用Java编写的服务器端程序&#xff0c;具有独立于平台和协议的特性&#xff0c;主要功能在于交互式地浏览和生成…

【Python】JSON操作中的高效小窍门

JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&#xff0c;在各种应用场景中扮演着重要角色。Python 中处理 JSON 数据非常便捷&#xff0c;主要通过内置的 json 模块来实现。 本文将详细介绍如何使用 Python 进行 JSON 数据的操作&am…

AI与物理学的交汇:Hinton与Hopfield获诺贝尔物理学奖

诺贝尔物理学奖颁给了AI&#xff01;机器学习先驱Hinton与Hopfield联手获奖&#xff0c;出乎所有人的意料。 今年的诺贝尔物理学奖颁给了机器学习领域的两位先驱&#xff0c;杰弗里辛顿&#xff08;Geoffrey Hinton&#xff09;和约翰霍普菲尔德&#xff08;John Hopfield&…

CSS计数器

CSS 中的计数器类似于变量&#xff0c;可以实现简单的计数功能&#xff0c;并将结果显示在页面上&#xff0c;在早期的网站上应用比较广泛。要实现计数器需要用到以下几个属性&#xff1a; counter-reset&#xff1a;创建或者重置计数器&#xff1b;counter-increment&#xf…

【软件部署安装】OpenOffice转换PDF字体乱码

现象与原因分析 执行fc-list查看系统字体 经分析发现&#xff0c;linux默认不带中文字体&#xff0c;因此打开我们本地的windows系统的TTF、TTC字体安装到centos机器上。 安装字体 将Windows的路径&#xff1a; C:\Windows\Fonts 的中文字体&#xff0c;如扩展名为 TTC 与TT…

力扣题31~40

题31&#xff08;中等&#xff09;&#xff1a; 分析&#xff1a; 其实这题题目比较难懂&#xff0c;题目还是挺简单的 我们可以从后面末尾开始&#xff0c;如果前一个大于后面的&#xff0c;说明后面不用动&#xff0c;如果小于&#xff0c;那就找仅仅大于它的数字放前面&…

Chromium 关闭 Google Chrome 后继续运行后台应用功能分析c++

此功能允许关闭 Google Chrome 后继续运行后台&#xff0c;控制此功能的开关是 // Set to true if background mode is enabled on this browser. //更改此值可以修改默认开启关闭 inline constexpr char kBackgroundModeEnabled[] "background_mode.enabled"; …