引言及背景知识

想了解AI Agent具体是如何工作的,并且想实际体验一下RAG的效果,所以想获取一个简单的开源AI Agent来入门,询问DeepSeek推荐了txtai开源软件。

AI Agent(智能体)可以被理解为一个能够自主理解、决策并执行任务的智能程序。

一个典型的AI Agent系统主要由以下几个模块构成:

  1. 大脑(核心控制器):对应大语言模型
  2. 感知系统:接收来自外部的输入,如文本、图像、语音、屏幕截图等。
  3. 记忆模块:包含短期记忆,记录当前对话上下文或任务执行过程中的信息,类似于浏览器的缓存。长期记忆:使用向量数据库存储过去的经验、用户偏好或领域知识,以便在未来任务中调用。RAG 是实现 AI Agent 长期记忆的核心技术方案之一,它通过向量数据库检索历史知识来增强当前生成。
  4. 工具包:Agent可以调用的外部工具集合。例如:搜索引擎API、计算器、代码解释器、公司的内部API(如CRM系统)、第三方应用(如Gmail、飞书、Slack)等。
  5. 行动模块:执行最终决定的动作,与外部世界进行交互。

一个简单的RAG系统大概如下图所示:

参考下图理解2个模型的差异:

下面开始实践内容:

Txtai软件安装

首先需要创建一个干净的环境,我比较习惯用Anaconda,这个电脑安装好的是miniconda,已经可以运行。

Anaconda有2种命令行,左边的是Powershell,右边的是标准cmd。

先在miniconda中为本次实践测试创建一个新环境:

(base) C:\Users\37995>conda create --name myRAG1 python=3.10

【注意】一定要写明python版本,否则创建的是一个空壳环境

(base) C:\Users\37995>conda activate myRAG1

在创建的conda环境中安装txtai

(myRAG1) C:\Users\37995>pip install txtai

软件包比较多,有的比较大,需要下载比较长的时间

确保这些软件包安装

pip install transformers torch txtai accelerate

最终可以在GPU正常运行RAG测试代码的环境我放到文档的最后,如果运行中遇到问题,可以对照查看软件包的各个版本。

离线下载模型

由于模型很大,加上网络限制问题,推荐使用离线模型,有多种下载模型的方法,我比较习惯用命令行cli方式。

选择cli的方式下载:

先设置hugging face的镜像:

如果是标准cmd界面,用下面的命令设置

set HF_ENDPOINT=https://hf-mirror.com

如果是powershell界面,用下面的命令设置hugging face的镜像

$env:HF_ENDPOINT = "https://hf-mirror.com"

后续的命令都是基于Powershell。

安装

pip install huggingface_hub

网速不好可以额外设置一些环境变量,如下,已经验证OK:

# 1. 设置镜像源(确保走国内加速)

$env:HF_ENDPOINT = "https://hf-mirror.com"

# 2. 设置超时时间为60秒(默认只有10秒)[citation:1][citation:4]

$env:HF_HUB_TIMEOUT = 60

# 3. 设置下载失败后的最大重试次数 [citation:1]

$env:HF_HUB_MAX_RETRIES = 5

# 4. 关闭高速传输模式,因为它虽然快,但极不稳定,是超时的常见元凶 [citation:4][citation:10]

$env:HF_HUB_ENABLE_HF_TRANSFER = 0

# 5. 最后,重新执行你的下载命令

下载Embedding模型:

Txtai默认使用的模型:

hf download sentence-transformers/all-MiniLM-L6-v2 --local-dir D:\nxk\ai_models\all-MiniLM-L6-v2

下载LLM模型

下载txtai默认使用的LLM模型:

hf download google/flan-t5-base --local-dir D:\nxk\ai_models\flan-t5-base

之前下载很慢,中途停止后,重新执行,会断点续传。

【注意】这个模型中文支持很差,不建议使用。

推荐下载千问模型

hf download Qwen/Qwen2.5-1.5B-Instruct --local-dir D:\nxk\ai_models\Qwen2.5-1.5B-Instruct

测试过程

flan-t5-base模型

采用google/flan-t5-base模型遇到的主要问题是:

google/flan-t5-base模型是text2text-generation类型,而txtai软件不支持text2text-generation类型,只支持text-generation类型,或者说是因为transformers新版本对task名称进行了重组/限制,txtai未适配新版transformers的task注册机制,最终原因我也就不纠结了

加载LLM的代码大概是这样:

llm = LLM(LLM_MODEL_PATH)  # 直接使用你的本地路径

解决方案是:

方案1,基于txtai软件和google/flan-t5-base模型,放弃txtai的LLM类,直接用Hugging Face加载;

方案2,放弃google/flan-t5-base模型,采用qwen模型。

采用方案一可以解决问题,程序可以完整运行,大概代码如下:

tokenizer = AutoTokenizer.from_pretrained(LLM_MODEL_PATH)

model = AutoModelForSeq2SeqLM.from_pretrained(

        LLM_MODEL_PATH,

        torch_dtype=torch.float32,

        low_cpu_mem_usage=True

    )

但是这个模型对中文的支持很差,基本上生成的结果都不可用

放弃

千问模型Qwen2.5-1.5B-Instruct

改为千问模型后,执行效果较好

加载模型代码为

tokenizer = AutoTokenizer.from_pretrained

model = AutoModelForCausalLM.from_pretrained

测试结果展示:

要求代码增加了调试信息,可以看到每一步的步骤,更清楚RAG与LLM是如何配套的。

基于千问模型把加载方式改回LLM加载

最早用google/flan-t5-base模型是text2text-generation类型,加载有问题,放弃txtai的LLM类,直接用Hugging Face加载;现在改用千问模型了,就想退回LLM加载的方式。

用DeepSeek修改后的代码在使用qwen模型生成答案的时候,明显速度很慢,风扇转速明显提高,询问DeepSeek的原因是加载模型的参数设置不同,但是也很难一下子改回之前的状态,询问多次也没有效果,感觉是DeepSeek自己找不到根本原因。

后来对比了千问生成的代码,感觉核心原因是加载LLM时的参数不对。

    llm = LLM(LLM_MODEL_PATH, trust_remote_code=True)中trust_remote_code=True导致的,去掉之后,改为llm = LLM(LLM_MODEL_PATH),速度明显很快,且听不到风扇声。

【注意】这是当前实践的测试结果,根本原因是什么还不确定。不同AI给出的答案不一样,所以可能后续还需要自己了解一些知识。

  

使能GPU

我的电脑是联想拯救者,带有GPU RTX4060,所以需要先把GPU用起来。

先运行下面的命令确认GPU是否识别:

python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"

提示 "Torch not compiled with CUDA enabled",说明GPU相关的软件未支持。

解决方案:

步骤1:卸载当前的CPU版本

pip uninstall torch torchvision torchaudio -y

步骤2:安装支持GPU的版本

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

安装之后执行下面的命令,显示成功

python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"

True

NVIDIA GeForce RTX 4060 Laptop GPU

实际运行GPU测试代码时,仍然遇到问题,软件包还是没有安装完全。

至少需要以下软件包:

 cat .\requirements.txt

# requirements.txt

sentence-transformers>=3.0.0

transformers>=4.36.0

torch>=2.0.0

torchvision>=0.15.0

torchaudio>=2.0.0

scikit-learn>=1.0.0

psutil>=5.8.0

numpy>=1.24.0

下面的命令可以自动安装上述软件包。

pip install -r requirements.txt

这些安装成功之后,执行DeepSeek自动生成的测试代码,执行成功

小错误返回DeepSeek修改后即可

第一次成功的代码执行时,仍然听到明显的风扇声音,所以要求DeepSeek重新生成LLM最简配置代码,速度提升较多,生成质量也可以接受。

执行效果参考下图,可以看到

第一个问题(测试1/4)的回答,主要是从索引结果1获取的答案,忽略了索引结果2;

第二个问题(测试2/4)的回答:同时吸取了索引结果1和2,并从大模型LLM中获取了新内容进行了补充;

也就是综合了RAG和LLM的结果。

主要的简化优化项参考:

  1. do_sample=False - 从概率抽样变成确定性的贪心搜索,直接取最大概率的词,跳过复杂的概率计算
  2. num_beams=1 - 束搜索本质上是同时探索多个可能性,每个可能性都要完整计算,关闭后计算量直接除以束宽
  3. max_new_tokens - Transformer的生成是自回归的,每生成一个token都要重新计算,长度直接影响总时间
  4. 禁用tokenizer并行
  5. 改用CausalLM方式

本次测试加载LLM的代码大概如下:

self.tokenizer = AutoTokenizer.from_pretrained

self.model = AutoModelForCausalLM.from_pretrained

后来对比千问后,感觉应该还是用llm = LLM(LLM_MODEL_PATH)方式更为合理。但是这样生成的答案效果是否好,还不太确定。

【心得】不同AI生成的代码风格也不同,多问几次同一个AI可能也会每次修改代码,所以需要提示AI尽可能少修改已有代码,只修改必要部分。

加载LLM模型时有很多参数可以设置,应该也会对生成的实际效果有影响,还有待继续观察。  

下一步要做的事情

当前测试代码是直接硬编码写入了一些document内容作为私有知识库,后续需要有一个系统来读取各种word文档、pdf文档、图片等,来创建自己的私有知识库,这样才能构建一个完整的系统。

LLM模型的参数影响还有待深入了解。

软件包版本参考:

参考一

Conda环境中,用pip安装时通常会考虑到软件版本的配套性,但是新功能也会额外安装新的软件包,各个软件包的版本配套是个大问题,如下已经成功运行的可供参考:

(myRAG1) PS C:\Users\37995\miniconda3\envs\myRAG1> conda list

# packages in environment at C:\Users\37995\miniconda3\envs\myRAG1:

#

# Name                    Version                   Build  Channel

accelerate                1.12.0                   pypi_0    pypi

annotated-doc             0.0.4                    pypi_0    pypi

anyio                     4.12.1                   pypi_0    pypi

bzip2                     1.0.8                h2bbff1b_6

ca-certificates           2025.12.2            haa95532_0

certifi                   2026.1.4                 pypi_0    pypi

click                     8.3.1                    pypi_0    pypi

colorama                  0.4.6                    pypi_0    pypi

exceptiongroup            1.3.1                    pypi_0    pypi

expat                     2.7.4                hd7fb8db_0

faiss-cpu                 1.13.2                   pypi_0    pypi

filelock                  3.24.3                   pypi_0    pypi

fsspec                    2026.2.0                 pypi_0    pypi

h11                       0.16.0                   pypi_0    pypi

hf-xet                    1.2.0                    pypi_0    pypi

httpcore                  1.0.9                    pypi_0    pypi

httpx                     0.28.1                   pypi_0    pypi

huggingface-hub           1.4.1                    pypi_0    pypi

idna                      3.11                     pypi_0    pypi

jinja2                    3.1.6                    pypi_0    pypi

joblib                    1.5.3                    pypi_0    pypi

libexpat                  2.7.4                hd7fb8db_0

libffi                    3.4.4                hd77b12b_1

libzlib                   1.3.1                h02ab6af_0

markdown-it-py            4.0.0                    pypi_0    pypi

markupsafe                3.0.3                    pypi_0    pypi

mdurl                     0.1.2                    pypi_0    pypi

mpmath                    1.3.0                    pypi_0    pypi

msgpack                   1.1.2                    pypi_0    pypi

networkx                  3.4.2                    pypi_0    pypi

numpy                     2.2.6                    pypi_0    pypi

openssl                   3.0.19               hbb43b14_0

packaging                 25.0            py310haa95532_1

pillow                    12.0.0                   pypi_0    pypi

pip                       26.0.1             pyhc872135_0

psutil                    7.2.2                    pypi_0    pypi

pygments                  2.19.2                   pypi_0    pypi

python                    3.10.19              h981015d_0

pyyaml                    6.0.3                    pypi_0    pypi

regex                     2026.2.19                pypi_0    pypi

rich                      14.3.3                   pypi_0    pypi

safetensors               0.7.0                    pypi_0    pypi

scikit-learn              1.7.2                    pypi_0    pypi

scipy                     1.15.3                   pypi_0    pypi

sentence-transformers     5.2.3                    pypi_0    pypi

setuptools                80.10.2         py310haa95532_0

shellingham               1.5.4                    pypi_0    pypi

sqlite                    3.51.1               hda9a48d_0

sympy                     1.13.1                   pypi_0    pypi

threadpoolctl             3.6.0                    pypi_0    pypi

tk                        8.6.15               hf199647_0

tokenizers                0.22.2                   pypi_0    pypi

torch                     2.6.0+cu124              pypi_0    pypi

torchaudio                2.6.0+cu124              pypi_0    pypi

torchvision               0.21.0+cu124             pypi_0    pypi

tqdm                      4.67.3                   pypi_0    pypi

transformers              5.2.0                    pypi_0    pypi

txtai                     9.5.0                    pypi_0    pypi

typer                     0.24.0                   pypi_0    pypi

typer-slim                0.24.0                   pypi_0    pypi

typing-extensions         4.15.0                   pypi_0    pypi

tzdata                    2025c                he532380_0

ucrt                      10.0.22621.0         haa95532_0

vc                        14.3                h2df5915_10

vc14_runtime              14.44.35208         h4927774_10

vs2015_runtime            14.44.35208         ha6b5a95_10

wheel                     0.46.3          py310haa95532_0

xz                        5.6.4                h4754444_1

zlib                      1.3.1                h02ab6af_0

(myRAG1) PS C:\Users\37995\miniconda3\envs\myRAG1>

参考二

GPU的相关信息如下:

.\python.exe .\gputest1.py

Python版本: 3.10.19 | packaged by Anaconda, Inc. | (main, Oct 21 2025, 16:41:31) [MSC v.1929 64 bit (AMD64)]

PyTorch版本: 2.6.0+cu124

CUDA是否可用: True

PyTorch编译时的CUDA版本: 12.4

GPU数量: 1

当前GPU: 0

GPU型号: NVIDIA GeForce RTX 4060 Laptop GPU

GPU显存: 8.0 GB

证明GPU的torch软件配套是OK的。

结尾

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐