news 2026/8/24 2:30:40

从零搭建Agentic RAG系统:智能体驱动的检索增强生成实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零搭建Agentic RAG系统:智能体驱动的检索增强生成实战指南

这次我们来看一个在2026年技术栈下,被称为“目前最强的RAG实现方式”的Agentic RAG。如果你正在为传统RAG系统在复杂查询、多步推理和动态决策上的不足而头疼,那么这个结合了智能体(Agent)自主性与检索增强生成(RAG)精准性的架构,就是你需要关注的方向。它不再是简单的“检索-拼接-生成”,而是让一个具备规划、执行和反思能力的智能体来主导整个知识问答流程,从而大幅提升答案的准确性、相关性和可解释性。

本文的核心是带你从零搭建一个Agentic RAG系统。我们将避开空洞的理论,直接切入实战:从环境搭建、核心模块实现,到完整的代码运行与效果验证。你会看到如何将一个静态的RAG管道,升级为一个能自主调用工具、进行多轮检索、并验证答案的智能系统。整个过程对硬件要求友好,主要依赖Python和主流的大语言模型(LLM)API,无需昂贵显卡,在普通开发机上即可运行和测试。

1. 核心能力速览

在深入代码之前,我们先快速了解Agentic RAG的核心价值和关键特性,这有助于判断它是否适合解决你当前的问题。

能力项说明
项目类型智能体驱动的检索增强生成系统(Agentic RAG)
核心升级将传统RAG的线性流程,升级为由智能体(Agent)控制的动态、循环、可决策的流程。
主要功能1.任务分解:将复杂用户问题拆解为子任务。
2.定向检索:根据子任务目标,动态生成搜索查询,进行精准检索。
3.工具调用:自主调用计算、搜索、代码执行等工具。
4.验证与反思:对检索结果和生成答案进行校验,必要时重新规划。
硬件门槛。推理主要依赖云端LLM API(如OpenAI GPT-4, Claude, 或本地部署的Ollama模型)。本地仅需运行Python脚本和向量数据库(如Chroma, FAISS),普通CPU/内存即可。
启动方式通过Python脚本启动,通常包含一个主执行循环或一个简单的Web服务(如FastAPI)。
是否支持API。可以轻松封装为RESTful API服务,供其他应用调用。
是否支持批量任务。可以通过队列处理批量查询,但需注意LLM API的速率限制和成本。
适合场景复杂问答、多步骤问题求解、需要高准确性和溯源性的知识库系统、动态决策支持系统。

2. 适用场景与使用边界

Agentic RAG并非万能,理解其边界能让你更好地应用它。

它非常适合以下场景:

  • 复杂、多跳问答:例如,“公司上一季度的财报显示营收增长,但股价却下跌了,可能的原因有哪些?” 传统RAG可能直接检索“股价下跌原因”,而Agentic RAG会先分解任务:1) 检索上一季度财报关键数据;2) 检索同期市场环境、行业新闻;3) 检索分析师评论;4) 综合信息进行推理。
  • 需要动态工具调用的场景:用户问题可能涉及实时信息(如天气、股价)、计算(如单位换算、数据统计)或代码执行。智能体可以自主判断并调用相应工具。
  • 对答案准确性和可解释性要求高的领域:如法律咨询、医疗问答、金融分析。智能体的“思考过程”(规划、检索、验证)可以被记录和审查,增加了可信度。
  • 构建企业级知识助手:当企业知识库庞大且结构复杂时,一个能主动规划检索路径的智能体,比被动响应的RAG更能理解员工的具体需求。

它的局限与不适用场景:

  • 简单事实型问答:对于“中国的首都是哪里?”这类问题,传统RAG已经足够快且成本低,引入智能体反而增加延迟和复杂度。
  • 对延迟极度敏感的场景:智能体的多步“思考”和工具调用会引入额外延迟,不适合实时对话中所有类型的响应。
  • 成本预算极其有限:每次智能体的“思考”(调用LLM)和“执行”(调用工具/检索)都可能产生API费用或计算开销。
  • 完全静态、结构化的数据查询:这类问题用SQL或精确搜索更高效。

合规与安全边界:

  1. 数据安全:确保接入的LLM API符合数据隐私政策,敏感数据不应传输至不安全的第三方服务。考虑使用可本地部署的LLM。
  2. 工具调用安全:智能体调用的工具(如代码执行、系统命令)必须被严格沙箱化,防止任意代码执行漏洞。
  3. 内容审核:在生成最终答案给用户前,应有一套审核机制,防止智能体被恶意引导生成有害或不实信息。
  4. 版权与溯源:检索到的文档片段应被清晰引用,尊重原文版权,并方便用户追溯答案来源。

3. 环境准备与前置条件

让我们开始搭建。首先确保你的开发环境满足以下要求。

操作系统:Windows 10/11, macOS, 或 Linux (Ubuntu 20.04+ 推荐)。本文以Linux/macOS命令行示例为主,Windows用户可在PowerShell或WSL2中操作。

Python环境:推荐使用 Python 3.9 或 3.10。使用condavenv创建独立的虚拟环境是最佳实践。

# 创建并激活虚拟环境 (以conda为例) conda create -n agentic_rag python=3.10 -y conda activate agentic_rag

核心依赖包:我们将使用以下关键库。请先将它们安装到你的虚拟环境中。

pip install langchain langchain-community langchain-openai pip install chromadb # 轻量级向量数据库 pip install pypdf python-dotenv # 用于处理PDF和加载环境变量 pip install fastapi uvicorn # 可选,用于创建API服务

LLM API密钥:你需要一个大型语言模型的API访问权限。我们将使用OpenAI GPT-4作为智能体的“大脑”,但你也可以替换为Anthropic Claude、Google Gemini或本地模型(通过Ollama +langchain-community)。

  1. 访问 OpenAI平台 (https://platform.openai.com/) 注册并获取API Key。
  2. 在项目根目录创建一个名为.env的文件,并填入你的密钥:
    OPENAI_API_KEY=你的-api-key-here
  3. 使用python-dotenv在代码中加载它。

知识库文档:准备一些用于构建向量数据库的文档,例如PDF、TXT或Markdown文件。我们将用一个示例PDF来演示。

4. 项目结构与核心模块搭建

一个典型的Agentic RAG项目包含以下几个核心模块。我们先创建项目结构。

agentic_rag_project/ ├── .env # 存储API密钥等环境变量 ├── requirements.txt # 依赖列表 ├── main.py # 主执行入口 ├── core/ # 核心模块目录 │ ├── __init__.py │ ├── knowledge_base.py # 知识库构建与检索模块 │ ├── agent.py # 智能体定义模块 │ └── tools.py # 自定义工具模块 ├── data/ # 存放原始文档 │ └── example_doc.pdf └── storage/ # 向量数据库存储目录(由ChromaDB自动创建)

现在,我们来逐一实现这些核心模块。

4.1 构建知识库 (core/knowledge_base.py)

这是RAG的基础。我们使用ChromaDB作为向量存储,LangChain的文本分割器和OpenAI的嵌入模型。

# core/knowledge_base.py import os from langchain_community.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import Chroma from dotenv import load_dotenv load_dotenv() # 加载 .env 文件中的环境变量 class KnowledgeBase: def __init__(self, persist_directory="./storage/chroma_db"): self.embeddings = OpenAIEmbeddings(openai_api_key=os.getenv("OPENAI_API_KEY")) self.persist_directory = persist_directory self.vectorstore = None def build_from_pdf(self, pdf_path): """从PDF文件构建知识库""" print(f"正在加载文档: {pdf_path}") loader = PyPDFLoader(pdf_path) documents = loader.load() # 分割文本 text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000, # 每个块的大小 chunk_overlap=200 # 块之间的重叠 ) splits = text_splitter.split_documents(documents) print(f"文档被分割成 {len(splits)} 个文本块。") # 创建向量存储并持久化 self.vectorstore = Chroma.from_documents( documents=splits, embedding=self.embeddings, persist_directory=self.persist_directory ) self.vectorstore.persist() print(f"知识库已构建并保存至: {self.persist_directory}") return self.vectorstore def load_existing(self): """加载已存在的知识库""" if os.path.exists(self.persist_directory): self.vectorstore = Chroma( persist_directory=self.persist_directory, embedding_function=self.embeddings ) print("已加载现有知识库。") return self.vectorstore else: print("未找到已存在的知识库,请先构建。") return None def search(self, query, k=4): """在知识库中搜索相关文档片段""" if self.vectorstore is None: self.vectorstore = self.load_existing() if self.vectorstore: docs = self.vectorstore.similarity_search(query, k=k) return docs return []

4.2 定义智能体工具 (core/tools.py)

智能体的强大之处在于能调用工具。我们定义几个基础工具。

# core/tools.py from langchain.tools import tool from datetime import datetime @tool def search_knowledge_base(query: str) -> str: """ 在内部知识库中搜索与问题相关的信息。 当用户的问题涉及公司内部文档、产品手册、历史资料等时使用此工具。 """ # 注意:这里需要从主程序或通过某种方式获取到 knowledge_base 实例 # 为了示例清晰,我们假设有一个全局的或可传入的 kb 对象。 # 实际项目中,你可能需要使用依赖注入或单例模式。 from core.knowledge_base import kb_instance # 假设的全局实例 docs = kb_instance.search(query) if not docs: return "在知识库中未找到相关信息。" # 将检索到的文档内容拼接返回 context = "\n\n---\n\n".join([doc.page_content for doc in docs]) return f"从知识库中检索到以下信息:\n{context}" @tool def get_current_time() -> str: """获取当前的日期和时间。当问题涉及时间、日期时使用。""" now = datetime.now() return f"当前时间是:{now.strftime('%Y-%m-%d %H:%M:%S')}" @tool def calculate(expression: str) -> str: """ 执行一个简单的数学计算。支持加减乘除和括号。 例如:`calculate(\"(3 + 5) * 2\")` """ try: # 警告:直接使用eval有安全风险,仅用于演示。 # 生产环境应使用更安全的表达式求值库(如 `ast.literal_eval`)或严格限制输入。 result = eval(expression) return f"计算结果:{expression} = {result}" except Exception as e: return f"计算错误:{e}"

4.3 构建智能体 (core/agent.py)

这是Agentic RAG的核心。我们使用LangChain的ReAct框架来创建能规划、执行和反思的智能体。

# core/agent.py import os from langchain import hub from langchain.agents import create_react_agent, AgentExecutor from langchain_openai import ChatOpenAI from core.tools import search_knowledge_base, get_current_time, calculate from dotenv import load_dotenv load_dotenv() class AgenticRAGAgent: def __init__(self, tools, knowledge_base): self.llm = ChatOpenAI( model="gpt-4-turbo-preview", # 或使用 "gpt-3.5-turbo" 控制成本 temperature=0, openai_api_key=os.getenv("OPENAI_API_KEY") ) # 获取ReAct提示词模板 self.prompt = hub.pull("hwchase17/react") self.tools = tools self.kb = knowledge_base # 创建智能体 self.agent = create_react_agent(self.llm, self.tools, self.prompt) # 创建执行器 self.agent_executor = AgentExecutor( agent=self.agent, tools=self.tools, verbose=True, # 开启详细日志,观察智能体思考过程 handle_parsing_errors=True, # 处理解析错误 max_iterations=5 # 限制最大迭代次数,防止死循环 ) def run(self, user_input: str) -> str: """运行智能体处理用户输入""" print(f"\n用户问题:{user_input}") print("="*50) try: result = self.agent_executor.invoke({"input": user_input}) return result["output"] except Exception as e: return f"智能体执行过程中出现错误:{e}"

5. 主程序集成与运行测试

现在,我们将所有模块集成起来,并运行一个端到端的测试。

# main.py import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) from core.knowledge_base import KnowledgeBase from core.agent import AgenticRAGAgent from core.tools import search_knowledge_base, get_current_time, calculate def main(): # 1. 初始化知识库 print("步骤1: 初始化知识库...") kb = KnowledgeBase() # 检查是否已有构建好的知识库,如果没有则构建 vectorstore = kb.load_existing() if vectorstore is None: # 假设你的PDF文档放在 data/ 目录下 pdf_path = "./data/example_doc.pdf" if not os.path.exists(pdf_path): print(f"错误:未找到文档 {pdf_path}。请将示例PDF放入data目录。") # 创建一个虚拟文档内容用于演示(实际项目请替换为真实文档) with open(pdf_path, 'w') as f: f.write("这是示例文档。Agentic RAG是一种先进的检索增强生成架构。它使用智能体来动态规划检索和生成步骤。") print(f"已创建虚拟文档: {pdf_path}") vectorstore = kb.build_from_pdf(pdf_path) # 2. 准备工具列表,并注入知识库实例(这里用了一个简单的全局变量方式,生产环境建议改进) # 为了使 search_knowledge_base 工具能访问 kb,我们这里临时修改一下。 # 更好的方式是使用类或闭包来初始化工具。这里为演示简便,我们直接传递。 import core.tools # 创建一个绑定了当前kb实例的搜索工具 from functools import partial bound_search_tool = tool(core.tools.search_knowledge_base.func) # 注意:上面的方法不直接,更清晰的做法是重构工具定义,使其接收kb参数。 # 为了不使示例过于复杂,我们采用一个简化方案:在工具函数内部直接使用我们刚创建的`kb`对象。 # 我们将 kb 赋值给一个模块级变量(仅用于演示)。 core.tools.kb_instance = kb tools = [core.tools.search_knowledge_base, get_current_time, calculate] # 3. 创建智能体 print("\n步骤2: 创建智能体...") rag_agent = AgenticRAGAgent(tools=tools, knowledge_base=kb) # 4. 运行测试查询 print("\n步骤3: 启动智能体,开始测试...") test_queries = [ "简单介绍一下Agentic RAG是什么?", # 触发知识库检索 "今天的日期是什么?", # 触发时间工具 "计算一下125乘以8等于多少?", # 触发计算工具 "根据知识库,Agentic RAG相比传统RAG有什么优势?", # 复杂检索+推理 ] for query in test_queries: print(f"\n{'#'*60}") answer = rag_agent.run(query) print(f"\n最终答案:{answer}") print(f"{'#'*60}\n") if __name__ == "__main__": main()

运行与观察:在项目根目录下,执行命令:

python main.py

你将看到详细的输出日志。智能体(Agent)会展示其“思考”过程,例如:

Thought: 用户想了解Agentic RAG。我需要使用 search_knowledge_base 工具来查找相关信息。 Action: search_knowledge_base Action Input: {"query": "Agentic RAG 是什么"} Observation: 从知识库中检索到以下信息:...(检索到的文本)... Thought: 我已经获得了相关信息,现在可以总结并回答用户。 Action: Final Answer Final Answer: Agentic RAG 是...(生成的答案)...

这个过程清晰展示了智能体如何规划、执行工具、观察结果并最终给出答案。

6. 功能测试与效果验证进阶

基础的问答跑通了,我们来设计更复杂的测试用例,验证Agentic RAG的真正威力。

6.1 测试用例1:多跳推理问题

  • 问题:“我们公司Q3的产品发布报告里提到的主要挑战是什么?这些挑战在Q4的总结报告中是如何被解决的?”
  • 预期行为:智能体应能分解问题:1) 检索Q3报告中的“挑战”部分;2) 检索Q4报告中的“总结”或“解决”部分;3) 将两部分信息关联起来,生成连贯答案。
  • 验证方法:观察日志中是否出现了两次以上的search_knowledge_base动作,且Action Input的查询词有所变化(如从“Q3 产品发布报告 挑战”变为“Q4 总结报告 解决 挑战”)。

6.2 测试用例2:混合工具调用

  • 问题:“根据知识库,我们去年营收增长率是多少?如果今年保持这个增长率,预测一下明年的营收(假设今年营收是1000万)。”
  • 预期行为:智能体应:1) 检索“去年营收增长率”;2) 调用计算工具,用检索到的增长率和给定的今年营收计算明年预测。
  • 验证方法:日志中应先后出现search_knowledge_basecalculate工具的调用记录。

6.3 测试用例3:智能体反思与修正

  • 问题:(在知识库没有明确答案的情况下)“我们公司的太空电梯项目进展到哪一步了?”
  • 预期行为:智能体首次检索可能失败或得到不相关结果。一个设计良好的Agentic RAG应能反思,例如:“未找到‘太空电梯’信息,也许用户指的是‘高层建筑电梯’或‘火箭项目’?”并尝试重新生成查询词进行二次检索。
  • 验证方法:这需要更复杂的提示工程或智能体结构(如LangChain的AgentExecutorwithhandle_parsing_errors和设置max_iterations)。观察在第一次检索失败后,智能体是否开始了新的Thought循环。

7. 封装为API服务与批量任务处理

要让这个系统被其他应用调用,我们需要将其封装成Web API。

7.1 使用FastAPI创建服务

创建一个新的文件api_server.py

# api_server.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List import uvicorn import asyncio from core.knowledge_base import KnowledgeBase from core.agent import AgenticRAGAgent from core.tools import search_knowledge_base, get_current_time, calculate import core.tools # 全局初始化(生产环境需考虑生命周期和并发) kb = KnowledgeBase() kb.load_existing() # 确保知识库已加载 core.tools.kb_instance = kb # 注入知识库实例到工具中 tools = [search_knowledge_base, get_current_time, calculate] agent = AgenticRAGAgent(tools=tools, knowledge_base=kb) app = FastAPI(title="Agentic RAG API", description="智能体驱动的检索增强生成服务") class QueryRequest(BaseModel): question: str max_iterations: int = 5 # 可覆盖默认迭代次数 class BatchQueryRequest(BaseModel): questions: List[str] max_iterations: int = 5 @app.post("/query") async def single_query(req: QueryRequest): """处理单个查询""" try: # 注意:这里直接调用了同步方法,在生产中应考虑使用线程池 answer = agent.run(req.question) return {"question": req.question, "answer": answer, "status": "success"} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/batch_query") async def batch_query(req: BatchQueryRequest): """处理批量查询(顺序处理,注意API速率限制)""" results = [] for q in req.questions: try: answer = agent.run(q) results.append({"question": q, "answer": answer, "status": "success"}) except Exception as e: results.append({"question": q, "answer": None, "status": "error", "detail": str(e)}) # 简单延迟,避免对LLM API的请求过于密集 await asyncio.sleep(0.5) return {"results": results} @app.get("/health") async def health_check(): return {"status": "healthy"} if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)

启动API服务:

python api_server.py

服务将在http://127.0.0.1:8000运行。你可以通过curlhttp://127.0.0.1:8000/docs进行测试。

7.2 批量任务处理建议

对于真正的批量任务(如处理成千上万个问题),上述简单循环不够健壮。应考虑:

  1. 任务队列:使用Celery+RedisRQ将查询任务放入队列,由工作进程异步处理。
  2. 速率限制:在调用LLM API时严格遵守其速率限制,使用令牌桶等算法进行控制。
  3. 错误重试与持久化:任务失败后应能重试,状态和结果应持久化到数据库。
  4. 资源隔离:为每个任务或用户会话提供独立的上下文,避免交叉污染。

8. 资源占用、性能观察与成本控制

资源占用

  • CPU/内存:本地运行部分(文本加载、分割、向量化入库)会消耗CPU和内存,取决于文档大小。运行时主要是网络I/O(调用LLM API)和轻量的向量检索。
  • 磁盘:向量数据库(Chroma)会存储索引文件,大小与文档库规模成正比。
  • 网络:主要开销在于与LLM API的通信。

性能观察点

  1. 检索延迟:从用户提问到完成向量检索的时间。受向量数据库索引规模和硬件影响。
  2. LLM思考延迟:智能体每步“思考”(调用LLM)的耗时。这通常是最大的延迟来源,与模型和网络有关。
  3. 工具执行延迟:调用外部工具(如计算、搜索)的耗时。
  4. 总响应时间:从提问到获得最终答案的时间。它等于检索延迟 + (LLM思考延迟 + 工具执行延迟) * 迭代次数

成本控制: 成本主要来自LLM API调用(按Token计费)和可能的外部工具API(如谷歌搜索)。

  • 优化提示词:精简系统提示和上下文,减少不必要的Token。
  • 限制迭代次数:通过max_iterations严格限制智能体的最大步数,防止陷入昂贵的长循环。
  • 缓存机制:对常见的检索结果和LLM响应进行缓存。
  • 使用轻量级模型:在非核心推理步骤中使用gpt-3.5-turbo等成本更低的模型。

9. 常见问题与排查方法

在搭建和运行过程中,你可能会遇到以下问题:

问题现象可能原因排查方式解决方案
启动时提示OpenAI API key not found环境变量未正确加载或API Key无效。1. 检查.env文件是否存在且格式正确。
2. 在Python中print(os.getenv(‘OPENAI_API_KEY’))查看是否加载成功。
3. 在OpenAI平台检查Key状态。
1. 确保.env文件在项目根目录,且内容为OPENAI_API_KEY=sk-...
2. 重启终端或IDE使环境变量生效。
3. 在代码中直接传入Key(仅用于测试,不推荐生产)。
运行main.py时报ModuleNotFoundError依赖未安装或虚拟环境未激活。检查当前Python环境which pythonpip list1. 激活正确的虚拟环境。
2. 运行pip install -r requirements.txt安装所有依赖。
向量检索返回空结果或无关结果1. 文档未正确分割或嵌入。
2. 检索参数k太小。
3. 查询词与文档语义不匹配。
1. 检查构建知识库时的日志,确认文档块数量和内容。
2. 尝试增大k值。
3. 直接测试嵌入模型,看查询向量与文档向量的相似度。
1. 调整文本分割器的chunk_sizechunk_overlap
2. 尝试不同的嵌入模型(如text-embedding-3-small)。
3. 优化查询词,或让智能体生成更精确的搜索查询。
智能体陷入死循环或重复执行同一工具1.max_iterations设置过高。
2. 提示词未能引导智能体正确判断何时结束。
3. 工具返回的结果无法让智能体做出决策。
观察verbose=True的日志,看Thought是否在重复。1. 合理设置max_iterations(如3-5)。
2. 优化ReAct提示词,强化“最终答案”的判断条件。
3. 检查工具返回的格式是否清晰、可解析。
API服务并发请求时出错或混乱全局共享的agentkb实例不是线程安全的。使用压力测试工具(如locust)模拟并发请求。1. 为每个请求创建独立的智能体实例(注意性能开销)。
2. 使用线程锁保护共享状态。
3. 采用异步框架并确保关键操作是线程安全的。

10. 最佳实践与下一步方向

最佳实践:

  1. 从小开始,迭代验证:先用一个小型、高质量的知识库测试智能体的核心逻辑,再逐步扩大文档规模。
  2. 日志记录与监控:务必开启智能体的verbose日志,并考虑将日志结构化存储,用于分析智能体的决策路径和优化提示词。
  3. 评估体系:建立评估基准,不仅评估最终答案的准确性,还要评估智能体规划步骤的合理性和工具调用的有效性。
  4. 提示词工程:智能体的表现极度依赖提示词。精心设计系统提示(System Prompt),明确其角色、可用工具和输出格式。
  5. 知识库质量:垃圾进,垃圾出。确保源文档清晰、结构好,并做好预处理(去噪、格式化)。

下一步扩展方向:

  1. 集成更多工具:接入网络搜索API、数据库查询、企业内部系统API等,让智能体能力更强。
  2. 实现记忆机制:为智能体添加对话记忆,使其能处理多轮对话,参考历史上下文。
  3. 多智能体协作:针对超复杂问题,可以设计多个各司其职的智能体(如检索专家、分析专家、校验专家)进行协作。
  4. 前端界面:使用GradioStreamlit快速构建一个Web界面,方便非技术用户使用。
  5. 替换本地LLM:使用Ollama本地运行Llama 3Qwen等开源模型,彻底摆脱API依赖和成本,并提升数据隐私性。

通过以上步骤,你已经完成了一个具备核心功能的Agentic RAG系统从零到一的搭建。它不再是一个被动的检索工具,而是一个能主动思考、规划和执行的任务解决者。这套架构的灵活性很高,你可以通过更换LLM、增加工具、优化提示词来不断适应新的场景。

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

Windows下pgvector部署跑通记:让PostgreSQL向量扩展一次生效

Windows下pgvector部署跑通记:让PostgreSQL向量扩展一次生效 【免费下载链接】pgvector Open-source vector similarity search for Postgres 项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector pgvector是PostgreSQL的开源向量搜索扩展&#xff0…

作者头像 李华
网站建设 2026/8/24 2:29:10

从极大似然估计到交叉熵损失:分类模型损失函数原理与实战

1. 项目概述:从直觉到公式的深度关联在机器学习,尤其是分类模型的训练过程中,交叉熵损失(Cross-Entropy Loss)是一个你几乎无法绕开的核心概念。无论是图像识别、自然语言处理还是推荐系统,只要涉及到让模型…

作者头像 李华
网站建设 2026/8/24 2:28:47

QtPromise:告别回调地狱,用Promise优雅处理Qt异步编程

1. 项目引入:当Qt遇上Promise,告别“回调地狱”在C的GUI开发领域,Qt无疑是王者级别的存在。它提供了从界面到网络、从数据库到多线程的一整套成熟解决方案。然而,但凡写过稍微复杂一点的异步逻辑,比如一个需要串行执行…

作者头像 李华
网站建设 2026/8/24 2:28:27

2026前端开发全栈进阶指南与面试宝典

1. 前端学习笔记:从入门到进阶的全方位指南作为一名从业多年的前端开发者,我经常被问到"如何系统学习前端"这个问题。今天这份笔记将完整呈现我多年来总结的前端知识体系,包含从HTML/CSS基础到前沿框架的实战经验,特别针…

作者头像 李华
网站建设 2026/8/24 2:25:55

大模型领域推理能力提升:继续预训练实战指南

你有没有遇到过这种情况:手里有一个不错的开源大语言模型,比如 Llama 或者 Qwen,它在通用任务上表现尚可,但一遇到你专业领域里的术语、逻辑和问题,回答就开始“胡说八道”,或者干脆说“我不知道”&#xf…

作者头像 李华