开源LLM WebUI Llms.py v4部署与对象存储接入实践

📅 2026/8/27 21:39:03
开源LLM WebUI Llms.py v4部署与对象存储接入实践
在实际部署开源 LLM 项目时最常遇到的并不是模型效果问题而是“一个有界面的系统怎么跑起来、怎么配通、怎么让人正常访问”。OSS WebUI Llms.py v4 这个名字里包含了三层信息它首先是一个开源Open Source SoftwareOSSWebUI 项目其次它面向 LLM 场景提供 Web 操作界面最后它通过 v4 版本把能力收敛成了四大块——Projects、Agent Profiles、PDF Studio 和 1-Click Sharing。下面这篇文章会从技术实践角度把这套系统从概念、部署、功能配置到问题排查完整过一遍适合正在评估开源 LLM 工作台、需要给团队搭建 WebUI或者准备接管这类项目运维的开发者阅读。这里还要先解释一个常见的混淆点在中文技术语境里OSS 往往也指对象存储Object Storage Service比如阿里云 OSS。开源 WebUI 项目为了统一保存头像、PDF、离线文件等资源通常也确实会对接对象存储。所以标题里的 OSS 理解为“开源软件”更准确但部署过程中你很有可能会碰到“对象存储 OSS”的配置项。文章会同时把这两层含义讲清楚先把 WebUI 本身部署起来再把文件类数据接到对象存储上。1. 先理解 Llms.py v4 这类 WebUI 解决什么问题1.1 为什么 LLM 项目需要独立的 WebUI很多人第一次接触 LLM 应用时习惯用 API 调用或者命令行脚本去测试模型。这种方式做原型验证没问题但一旦系统要交给产品、运营、业务同事使用就缺少了三样东西可视化的交互界面、可复用的会话管理、可配置的权限体系。WebUI 这一类开源项目要解决的就是这个“最后一公里”问题。它把模型调用、提示词管理、文件上传、知识库检索、会话历史这些能力封装成一个网页应用。用户不需要写代码也不需要知道模型服务部署在哪个端口只要登录页面选择一个 Agent就能开始工作。从 v4 的功能集合来看Llms.py 已经不再是一个单纯的“聊天页面”。Projects、Agent Profiles、PDF Studio、1-Click Sharing 这四组能力叠加之后它更像是一个面向 LLM 应用的轻量工作台既有项目管理又有角色配置还有文档处理入口同时支持把结果分享给外部人员。1.2 v4 的四大能力从“聊天框”升级为“工作台”用表格可以把 v4 的功能变化看得更清楚。功能模块解决的问题典型使用场景Projects多个业务场景混在一起会话和文件互相污染给不同项目分配独立会话、数据和建议Agent Profiles每次提问都要重新写角色和参数无法沉淀把客服、翻译、代码审查等角色固化成可复用的 ProfilePDF Studio文档资料无法进入对话上下文上传 PDF、解析文本、生成知识库后再让模型回答1-Click Sharing内部结果要发给外部人员但不想开通账号生成带权限的分享链接别人通过链接查看对话或文档换句话说v4 把“模型交互”和“业务侧协作”这两条线合并了。普通用户仍然可以把它当聊天工具用但团队负责人、知识管理专员、产品运营可以把它当作一个带权限、带知识库、带分享能力的小平台。1.3 部署前要先想清楚的三件事第一件事是模型从哪里来。WebUI 本身很少内置大模型它通常只是一个前端加编排层后端要接一个模型服务比如本地部署的推理服务或者云上的模型 API。部署前必须先确认模型服务的地址、API Key、模型名称否则 WebUI 启动后并没有可以对话的对象。第二件事是文件要放哪里。项目里上传的 PDF、截图、用户头像如果只存在 WebUI 所在服务器的本地磁盘扩容和备份都很麻烦。v4 里的 PDF Studio 会处理文档Projects 会保存项目文件这些数据都应该落到对象存储里。第三件事是访问方式。WebUI 部署完成后团队成员是通过内网访问还是需要公网访问如果分享功能要对外使用就必须考虑域名、反向代理、HTTPS 证书和访问权限而不是只开放一个裸端口。2. 部署环境准备容器化是最省事的路径2.1 硬件和系统环境建议这里给出的是通用参考值具体资源配置要结合模型服务和并发量调整。环境级别CPU内存磁盘说明学习体验2 核4 GB20 GB跑通 WebUI不接大模型推理团队试用4 核8 GB50 GB对接外部模型 API处理少量 PDF生产使用8 核及以上16 GB 及以上100 GB 以上需要独立数据库、对象存储、监控日志操作系统建议使用 Debian、Ubuntu 或 CentOS 之类的 Linux 服务器。需要提前安装 Docker 和 Docker Compose。如果目标服务器无法拉取镜像要先配置镜像加速器或者在网络代理允许的环境里提前把镜像导出再引入过来。2.2 用 docker-compose 搭建最小化服务下面是一个用于说明思路的 docker-compose 示例。它包含三类服务WebUI 主应用、数据库、对象存储。实际项目可能需要根据官方文档调整镜像名称、端口和依赖关系。version: 3.8 services: webui: image: your-registry/llms-py-webui:v4 container_name: llms-py-webui restart: unless-stopped ports: - 8080:8080 environment: WEBUI_PORT: 8080 DB_URL: postgresql://llms:llms_passworddb:5432/llms STORAGE_TYPE: s3 S3_ENDPOINT: http://minio:9000 S3_ACCESS_KEY: minioadmin S3_SECRET_KEY: minioadmin S3_BUCKET: llms-files S3_REGION: us-east-1 S3_PATH_STYLE: true MODEL_API_BASE: http://your-model-server:8000/v1 MODEL_API_KEY: sk-xxxx depends_on: - db - minio db: image: postgres:15-alpine container_name: llms-db restart: unless-stopped environment: POSTGRES_DB: llms POSTGRES_USER: llms POSTGRES_PASSWORD: llms_password volumes: - db-data:/var/lib/postgresql/data minio: image: minio/minio:latest container_name: llms-minio restart: unless-stopped command: server /data --console-address :9001 environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin ports: - 9000:9000 - 9001:9001 volumes: - minio-data:/data volumes: db-data: minio-data:这个示例里的STORAGE_TYPE: s3表示使用 S3 兼容协议的对象存储。S3 是对象存储的事实标准MinIO、阿里云 OSS、腾讯云 COS 都支持 S3 兼容接口所以 WebUI 通常通过 S3 客户端对接。S3_PATH_STYLE: true这个配置对自建 MinIO 很重要因为 MinIO 默认通过路径方式访问 bucket。2.3 对象存储为什么不是可选配置如果在部署时跳过对象存储配置只把文件写在本地目录初期不会有明显问题。但项目运行一段时间后会碰到三类麻烦第一是文件难备份。上传的 PDF、项目附件和头像如果散落在容器内或者某个挂载目录备份时要额外处理文件目录数据库和文件容易出现时间点不一致。第二是扩容麻烦。当 WebUI 部署在多台机器后面用户第一次请求落到 A 机器第二次请求落到 B 机器B 机器上找不到 A 机器保存的文件就会出现上传成功但读取失败的问题。第三是分享功能受限。1-Click Sharing 生成的链接如果指向 WebUI 服务本身那么 WebUI 宕机后分享内容也会失效。如果文件已经存放在对象存储分享链接可以直接指向对象存储的临时访问 URL服务可用性更高。所以即使是内网试用也建议从一开始就配置 S3 兼容存储。MinIO 可以在一台低配置机器上运行适合测试生产环境可以选择云厂商的对象存储或自建高可用 MinIO 集群。2.4 启动前的环境变量检查清单容器启动失败的原因里环境变量错误占了很大比例。建议按照下面的清单逐项确认。检查项常见错误正确做法数据库连接串密码包含特殊字符未转义使用DB_URL时对密码做 URL 编码S3 Endpoint忘了加 http/https 前缀必须写完整协议如http://minio:9000Bucket 是否存在启动后报 BucketNotFound提前在 MinIO 控制台创建 bucket模型服务地址写成了内网 IP 但 WebUI 容器无法访问容器内执行curl测试接口连通性API Key填错或过期先手动调用模型服务验证 Key 有效注意不要只看容器是否变成 Running 状态要打开日志确认服务完成初始化。很多 WebUI 应用即使连不上数据库也可能先启动 HTTP 端口等用户访问时才暴露问题。3. 核心功能配置Projects、Agent Profiles、PDF Studio、1-Click Sharing3.1 Projects用项目空间隔离会话、文件和知识库Projects 的定位是“业务空间”。一个项目下面可以包含多轮会话、关联的 PDF 文档、固定的知识库目录和项目成员。这样设计的好处是法务组的资料不会出现在市场组的会话里产品经理上传的 PRD 也只对当前项目开放。从实现角度看Projects 通常对应后端的一张项目表结构上类似下面这样CREATE TABLE projects ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(255) NOT NULL, description TEXT, owner_id UUID NOT NULL, knowledge_base_id UUID, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() );操作上管理员新建项目后再邀请成员加入项目。用户可以切换当前项目空间也可以按项目维度搜索历史会话。使用 Projects 时要注意权限边界用户在 A 项目里创建的会话不应该自动出现在 B 项目里。如果发现跨项目会话串场优先检查接口是否按项目 ID 过滤了数据。3.2 Agent Profiles把模型参数和角色行为固化成配置Agent Profiles 解决的是“重复配置”问题。以前每次和模型对话都要在输入框里重复写“你是一名运维工程师请用简洁中文回答”。有了 Agent Profiles可以把角色描述、模型、温度、输出格式、启用工具都保存成一个档案下次直接选用。一个 Agent Profile 在后端可能长这样{ id: agent-ops-001, name: 运维排查助手, description: 面向服务异常排查的助手, model: deepseek-v3, system_prompt: 你是一名运维工程师回答问题时先给出排查步骤再给结论。, temperature: 0.2, max_tokens: 2048, tools: [search_logs, view_metrics], knowledge_base_ids: [kb-incident-2025] }每个字段的含义如下参数作用注意事项model指定使用哪个模型模型名称必须与模型服务返回的 model 字段一致system_prompt设定角色行为不要把所有业务规则都塞进 prompt过长会占 tokentemperature控制随机性偏向稳定输出的场景用 0.1 到 0.3创意场景用 0.7 以上max_tokens限制最长回复长度设置过短会导致长答案被截断tools启用的工具列表工具未注册或未授权时会调用失败knowledge_base_ids绑定的知识库知识库上线后要重建索引否则引用不到新文档关键点在于Agent Profile 修改之后是否需要新建会话才能生效。多数实现里正在进行的会话已经带有旧 Prompt 和旧参数修改 Profile 只会影响后续新建的会话。遇到“改了没生效”的问题时优先确认是不是继续使用旧会话导致。3.3 PDF Studio从“传文件”升级为“传知识”PDF Studio 是 v4 里比较重的一个模块。它不只是让用户上传 PDF 并保存而是要把 PDF 变成模型可用的知识。核心处理链路通常分四步上传并存储 PDF 到对象存储。从 PDF 中提取文本。按固定大小切片可能做清洗和去重。生成向量索引写入向量数据库。下面是一段用于说明解析和切片思路的 Python 示例from typing import List def extract_text_from_pdf(pdf_path: str) - str: # 使用 pdfplumber、PyMuPDF 或底层 Poppler 工具实现 # 实际实现需要按对应库 API 调整 return extracted_text def chunk_text(text: str, chunk_size: int 800, overlap: int 100) - List[str]: chunks [] start 0 while start len(text): end start chunk_size chunks.append(text[start:end]) start end - overlap return chunks切片参数会直接影响检索效果。chunk_size 太大检索到的片段可能包含大量无关内容浪费 token太小语义可能不完整。overlap 用于避免两个切片的边界处语义断裂。实际参数要结合文档类型和模型上下文长度调整。PDF Studio 常见的使用场景是合同分析、研发文档问答、产品说明书检索。生产环境需要注意三点PDF 中包含扫描图片时必须先做 OCR否则提取不出文字。中文 PDF 可能需要处理字体嵌入问题提取出的文本会出现乱码。多语言混合文档要统一编码建议在解析后打印前几行确认文本质量。3.4 1-Click Sharing一键分享背后的权限模型一键分享并不是简单的“生成一个链接”。要实现安全的分享至少要考虑四个维度分享范围、有效期、访问密码、水印或审计。常见的分享链接参数如下https://webui.example.com/s/Jk8a2LxQmZ后端收到这个短码后会查分享记录判断链接是否有效、是否过期、访问者是否有密码然后决定返回页面还是要求验证。分享记录表可以这样设计CREATE TABLE share_links ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), token VARCHAR(64) NOT NULL UNIQUE, resource_type VARCHAR(32) NOT NULL, -- project, conversation, document resource_id UUID NOT NULL, creator_id UUID NOT NULL, password_hash VARCHAR(255), expires_at TIMESTAMP WITH TIME ZONE, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() );生产环境建议给分享功能单独配置域名不要直接暴露 WebUI 的管理端口。分享链接如果要支持公网访问WebUI 前面必须加反向代理并且正确配置 HTTPS 证书。否则分享页面的附件可能因为混合内容被浏览器拦截。4. 对象存储 OSS 接入阿里云 OSS、MinIO 与 S3 兼容协议4.1 统一用 S3 客户端对接对象存储主流 WebUI 项目在对接对象存储时往往不是单独实现阿里云 OSS SDK、MinIO SDK、腾讯云 COS SDK而是通过 S3 兼容协议统一封装。S3 协议最早来自 AWS Simple Storage Service后来几乎所有云厂商和自建系统都做了兼容层。这意味着你在配置界面里只需要填写几个核心参数STORAGE_TYPEs3 S3_ENDPOINThttps://oss-cn-hangzhou.aliyuncs.com S3_REGIONcn-hangzhou S3_ACCESS_KEYyour_access_key_id S3_SECRET_KEYyour_access_key_secret S3_BUCKETllms-webui-files S3_PATH_STYLEfalse对阿里云 OSS 来说S3_ENDPOINT必须使用对应地域的 EndpointS3_REGION也要匹配否则上传时会报签名不匹配。如果 WebUI 部署在阿里云服务器内网Endpoint 可以使用内网地址既快又省流量。4.2 公共读、私有读与临时签名 URL 的选择对象存储中 bucket 的权限直接影响文件访问方式。下面区分三种情况权限类型是否需签名适用场景风险公共读不需要网站静态资源、公开分享的文档任何人都能访问泄露风险高私有读写需要签名内部项目文件、未公开 PDF每次访问都要生成临时 URL较麻烦混合策略部分公共读部分私有头像公开读项目文档私有读配置复杂需要明确 bucket 路径规划推荐做法是 bucket 默认私有读写WebUI 在需要展示文件时生成带时效的签名 URL。比如用户查看 PDF 时后端调用 S3 SDK 生成一个有效期 10 分钟或一小时的访问链接浏览器直接访问该链接渲染 PDF。这样既能限制访问又不需要把文件下载到 WebUI 本地再转发。4.3 用 curl 验证对象存储资源是否可访问很多团队在排查“头像加载不出来”“PDF 打不开”时会把问题直接归结为代码 bug但更常见的原因是文件访问权限或路径拼接错误。用 curl 可以快速定位。先测公共读文件curl -I https://your-bucket.oss-cn-hangzhou.aliyuncs.com/projects/2025/04/readme.pdf正常响应会返回200 OK和Content-Length。如果返回403 AccessDenied说明文件不是公共读需要改用签名 URL 访问。再测签名 URLcurl -I https://your-bucket.oss-cn-hangzhou.aliyuncs.com/projects/2025/04/readme.pdf?Expires1720000000SignaturexxxxAccessKeyIdxxxx如果签名 URL 能访问而普通 URL 不能访问说明权限策略符合预期。如果签名 URL 也返回 403优先检查系统时间是否准确签名 URL 的过期时间与服务器本地时间偏差不要超过 5 分钟。4.4 CORS 配置浏览器上传失败的隐形原因curl 能访问对象存储不代表浏览器端能正常上传。浏览器的跨域限制要求对象存储必须配置 CORS 规则否则前端会把请求拦截掉。以阿里云 OSS 的 CORS 配置为例通常需要允许的来源、方法、请求头如下配置项推荐值说明来源https://webui.example.com不要用*除非是公开演示环境允许 MethodsGET, POST, PUT, DELETE上传通常用 PUT下载用 GET允许 Headers*允许所有请求头便于携带 Content-Type暴露 HeadersETag分片上传等场景需要暴露响应头缓存时间600 秒浏览器缓存预检结果浏览器上传失败时F12 控制台通常会看到类似Access to XMLHttpRequest ... has been blocked by CORS policy的报错。这时不要去后端翻代码先去对象存储控制台检查 CORS 规则是否生效。5. 运行验证从启动日志到功能验收5.1 启动日志应该看到哪些关键信息Docker 部署完成后第一步是查看运行状态和日志docker ps docker logs -f llms-py-webui一个正常的启动流程通常会出现以下阶段配置加载完成打印当前环境变量名但不会打印完整密码。数据库连接成功执行迁移脚本。对象存储连接成功校验或者创建 bucket。模型服务连接检测打印可用模型列表。HTTP 服务监听指定端口。如果日志停留在“连接数据库”阶段说明数据库配置有问题。如果日志明确报S3ConnectionError或NoSuchBucket先去检查对象存储参数。如果日志显示模型服务连接失败而 WebUI 还能启动说明模型服务是懒加载模式要等到第一次会话才会报错。5.2 功能验收清单建议部署完成后按下面的清单逐项验收而不是只登录页面看一眼。功能验收方式预期结果登录注册创建新用户并登录能进入主页面会话创建正常Projects新建项目进入项目空间项目会话与普通会话隔离Agent Profiles创建一个运维 Agent 并选择它对话按 system_prompt 风格回答PDF Studio上传一个 10 页以内的 PDF文本提取成功可基于 PDF 提问对象存储在项目中上传一个附件文件出现在对象存储 bucket 中不是本地磁盘1-Click Sharing生成分享链接用无痕浏览器访问按设定的权限显示内容过期后访问失败5.3 验证对象存储是否真的被使用有些项目在配置了对象存储后仍可能因为配置项未生效继续写本地目录。验证方式很简单往 WebUI 上传一个文件然后去对象存储的 bucket 目录里找看有没有出现对应的 key。如果 bucket 里始终没有文件但在服务器上能找到文件说明STORAGE_TYPE配置没有实际生效或者上传路径走的是另一套逻辑。另一条验证路径是看数据库里文件表的存储路径前缀SELECT id, name, storage_path, created_at FROM files ORDER BY created_at DESC LIMIT 10;如果storage_path是s3://llms-files/xxx或https://bucket.endpoint/xxx说明已经切换到对象存储。如果还是/uploads/xxx这种本地相对路径需要回到 WebUI 的运维配置或配置文件里检查。6. 常见问题排查按现象倒推原因6.1 部署类问题问题现象可能原因检查方式处理建议容器启动后立即退出环境变量缺失或数据库无法访问docker logs查看退出前日志补齐环境变量确认数据库健康镜像拉取速度慢或超时网络到镜像仓库不稳定执行docker pull测试配置镜像加速器或换标签重试页面能开但无法登录数据库初始用户未创建检查数据库表中用户记录按官方初始化流程创建管理员登录后会话丢失Redis/Session 存储未配置查看会话相关日志配置持久化会话存储WebUI 域名背后的静态资源 404前端资源路径配置错误打开浏览器控制台看请求路径设置正确的PUBLIC_BASE_URL或反向代理路径6.2 对象存储和文件类问题问题现象可能原因检查方式处理建议图片上传失败bucket 不存在或 CORS 未配置浏览器控制台查看 CORS 错误创建 bucket配置 CORSPDF 访问显示 403文件私有读未使用签名 URLcurl 访问文件 URL打开签名 URL 功能上传报签名不匹配本地时间偏差超过 5 分钟执行date查看服务器时间配置 NTP 时间同步文件上传成功但刷新后丢失数据库文件记录与对象存储不一致检查数据库文件表确认上传接口是否同时写库和写存储中文文件名乱码URL 编码处理不当查看对象存储中的 key使用 UUID 或编码后的文件名存储6.3 模型和会话类问题问题现象可能原因检查方式处理建议保存 Agent Profile 后对话无变化继续使用了旧会话新建会话再测试修改 Profile 后另开会话模型总是超时模型服务吞吐不足查看模型服务日志加大并发或更换更快的模型PDF 知识库回答不到内容文档切片或检索参数不合理在知识库中手动搜索关键词调小 chunk_size重建索引分享链接打开后提示 502反向代理未转发或域名配置错误curl 查看返回头检查 Nginx 到 WebUI 的转发链路6.4 分享链接无法访问的排查链路分享链接是最容易暴露网络配置问题的一个功能。从用户点击链接到页面展示中间有多个环节。排查时建议按这个顺序先确认链接本身是否能访问。用 curl 访问短链接看返回是 200、302 还是 502。再确认短链接转发的目标地址。302 跳转后要检查最终 URL 是否指向正确域名。确认目标域名能否解析到服务器。本地可以改 hosts 测试避免 DNS 缓存干扰。确认反向代理配置。Nginx 的 location 是否正确转发到 WebUI 容器端口。确认分享记录是否有效。数据库中看 share_links 表检查过期时间和资源 ID 是否存在。如果页面能打开但附件加载失败回到上一步检查对象存储的签名 URL 和 CORS 配置。注意排查网络问题时要先抓“能访问”和“不能访问”的具体差异比如内网可以访问而公网不行还是普通浏览器可以而无痕模式不行。这些差异能帮助快速缩小问题范围。7. 最佳实践从试用走向稳定运行7.1 学习环境与生产环境的分界很多团队习惯先在一台服务器上把全部服务跑起来用久了之后发现数据、文件、配置都混在一起难以迁移。建议从一开始就区分两套环境维度学习/试用环境生产环境数据库随 WebUI 容器一起部署使用独立数据库实例定期备份对象存储MinIO 单节点云厂商 OSS 或高可用 MinIO模型服务本地测试模型或 API带监控和限流的模型网关HTTPS可暂缓必须配置否则分享和附件功能受限日志控制台输出集中采集按天归档升级可直接拉最新镜像先备份数据再灰度升级如果团队决定长期使用这个 WebUI要尽量让 WebUI 应用本身保持无状态。会话数据放数据库文件数据放对象存储WebUI 容器可以随时销毁重建这样升级、扩容、迁移都容易。7.2 配置管理建议不要把对象存储的 AccessKey 明文写在 docker-compose 文件里尤其是包含了 Secret Key 的情况下。建议通过环境变量文件或者密钥管理服务注入。以 docker-compose 为例可以使用.env文件加载但.env文件不要提交到代码仓库。STORAGE_TYPEs3 S3_ACCESS_KEYyour_ak S3_SECRET_KEYyour_sk更严格的场景可以用 Vault、KMS 等密钥管理服务在 WebUI 启动前把密钥注入到容器环境变量。生产环境还建议给对象存储配置独立的 IAM 权限只允许 WebUI 访问特定 bucket 的指定前缀避免出现 AccessKey 泄露后的横向越权。7.3 数据备份和容灾WebUI 的数据可以分为三类数据库中的业务数据、对象存储中的文件、配置文件。备份策略要覆盖这三类。数据库可以用定时任务执行 pg_dump 或类似工具pg_dump llms /backup/llms_$(date %Y%m%d).sql对象存储建议开启版本控制或跨区域复制。如果使用的是云厂商对象存储可以直接开启服务端版本控制用来防止误删和文件覆盖。自建 MinIO 也要开启 Versioning并定期把 bucket 同步到异地存储。7.4 二次开发扩展点如果一个 WebUI 项目满足不了所有需求通常可以在以下几个位置做二次开发扩展位置典型需求实现方式认证层对接企业 SSO/LDAP实现自定义认证过滤器或 OAuth 插件Agent 工具层接入内部运维系统新增自定义工具注册到工具列表PDF 解析层增加 OCR 能力接入 Tesseract 或云 OCR 服务分享服务增加分享审批流在生成分享链接前插入审批逻辑数据层切换向量数据库替换向量存储实现保持接口一致扩展时最需要注意的是保持主流程稳定。新增功能最好做成独立服务或插件不要轻易修改核心会话管理逻辑。因为这类改动容易影响所有用户。7.5 给团队的落地建议把 Llms.py v4 这样的 WebUI 真正引入团队可以按三个阶段推进。第一阶段先让 3 到 5 名核心成员试用重点验证 Projects 和 Agent Profiles 是否符合协作方式。第二阶段把团队常用文档导入 PDF Studio建立知识库观察模型答案的准确率。第三阶段再开放分享功能制定分享审批规则进入稳定运行。整个过程中最值得投入的是 Agent Profiles 和知识库的调优。一个好的 Agent Profile 可以大幅减少用户重复描述一个结构清晰的知识库能让 PDF 回答效果明显提升。界面上增加和删除功能很容易难的是把这些功能固化成团队可复用的工作流。这也是 v4 从“工具”走向“工作台”的核心价值所在。