上个月,我在一个客户项目上撞了南墙。我们需要搭建一个客服工单分类系统:既要用传统机器学习对进来的工单进行分类,又要用大语言模型生成回复草稿——而且所有内容都得严格基于公司内部文档。一开始,我还是走拼凑各种工具的老路:用 scikit-learn 做分类器,调 API 端点用大模型,用 LangChain 搭 RAG 流程,最后再套个 Flask 把服务跑起来。跟集成问题死磕了两个星期、被部署配置搞得焦头烂额后,我退后一步,决定认真研究一下 IBM watsonx.ai。这个所谓的“一体化工作室”真能替代我那东拼西凑的缝合怪架构吗?以下是我的经验之谈。
初始设置与上手指南
首先,你需要一个 IBM Cloud 账号。我在 IBM Cloud 门户注册后,直接从目录里开通了 watsonx.ai 服务。等服务实例就绪,我直接从控制台启动了 watsonx.ai 工作室。
这界面的感觉跟我预想的完全不一样。它不是一个空荡荡的 notebook 环境,而是一个基于项目的工作区。你可以把它想象成专门为数据科学工作流设计的 IDE。你可以创建一个项目(作为存放数据、模型和部署的容器),连上数据源,然后选择你的路线:传统机器学习、基础模型提示词,或是 RAG 流程。
第一个惊喜?该平台同时支持 SaaS 和 Cloud Pak for Data 部署。如果你身处强监管行业,数据绝对不能出本地,那么通过 Cloud Pak for Data 实现的本地化部署绝对是个杀手锏——而不是事后才补上的备选项。
第一步:准备数据
在碰模型之前,我得先把数据弄进平台。watsonx.ai 在项目里用了一个叫“数据资产(data assets)”的概念。我直接通过界面上传了一个包含 15000 条已标注客服工单的 CSV 文件。你也可以连接外部数据源,比如数据库、Cloud Object Storage 或者 Amazon S3。
有个坑我一开始踩了:我直接上传了原始 CSV,然后试图在 notebook 里引用它。结果平台没法正确推断出数据结构,因为我的列名里有空格和特殊字符。把列名改成蛇形命名法(snake_case,比如把 Ticket Category 改成 ticket_category)之后,数据资产才顺利注册,并在工作室的所有工具中可用了。
为了项目里的 RAG 部分,我还上传了一批内部知识库文章的 PDF 文档。平台把它们摄入后做成了文档集合——这对后面的检索步骤至关重要。
第二步:构建机器学习分类器
数据准备就绪后,我直接在 watsonx.ai 工作室里打开了一个 Jupyter notebook。这个 notebook 环境预装了 Python 运行时和常用的机器学习库,所以我根本不用花一个小时去装依赖。
我用 scikit-learn 的 TF-IDF 向量器和 LinearSVC 分类器搭了一个简单的文本分类模型。代码本身很常规——没啥专有技术。真正关键的是训练之后发生的事。
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
import pandas as pd
# 从项目资产加载数据
df = pd.read_csv(project.get_file('support_tickets_clean.csv'))
X_train, X_test, y_train, y_test = train_test_split(
df['description'], df['category'], test_size=0.2, random_state=42
)
pipeline = Pipeline([
('tfidf', TfidfVectorizer(max_features=10000)),
('clf', LinearSVC())
])
pipeline.fit(X_train, y_train)
print(f"Accuracy: {pipeline.score(X_test, y_test):.3f}")
模型准确率达到了 87%——作为基线还算不错。但 watsonx.ai 在这的真正价值不在于训练,而在于后续操作。我把模型保存为项目资产,然后在部署界面点了几下,就得到了一个提供预测服务的 REST API 端点。不用写 Dockerfile,不用搞 Kubernetes 配置,也不用写 Flask 样板代码。就这一项就给我省了好几天的活儿。
第三步:玩转基础模型
接下来是生成式部分。watsonx.ai 提供了一个模型目录,里面有几十种基础模型——包括 IBM 的 Granite 系列、Meta 的 Llama 模型,还有最近加入的 OpenAI 开源 gpt-oss 模型。你可以在目录里浏览、选择模型,然后直接写提示词。
我用了 Prompt Lab 来测试不同模型生成回复草稿的效果。Prompt Lab 本质上就是一个试验场,你可以测试不同模型,调整 temperature 和 max tokens 等参数,还可以把提示词配置保存为模板。
我早期犯了个错:我直接跳到了最大的模型,觉得越大越好。但对于我的场景——生成简洁、专业的客服回复——较小的 Granite 模型表现反而更好。它速度更快、成本更低,输出也更聚焦。大模型往往容易啰嗦,还会脑补出上下文里根本没有的细节。
这是我最后敲定的提示词模板:
你是一名客服人员。根据以下工单描述和分类,撰写一封专业的回复来解答客户的问题。回复控制在 150 字以内。
工单分类:{category}
工单描述:{description}
回复:
我把它作为提示词模板资产保存在项目中,这样既可复用,又有了版本控制。
第四步:搭建 RAG 流程
这是 watsonx.ai 真正惊艳到我的地方。以前用 LangChain,我得手动切分文档、生成嵌入(embeddings)、搭建向量库,再把检索结果接到提示词里;而现在,平台提供了一个向导式的 RAG 工作流。
我把 RAG 构建器指向我上传的知识库文档,从目录里选了个嵌入模型,然后配置了检索参数。平台自动搞定了分块、嵌入、索引和检索。当我测试“如何重置双重身份验证?”这样的问题时,系统直接从知识库里拉出了相关段落,并把它作为上下文喂给了基础模型。
生成的回复有理有据、准确无误,还包含了真实文档里的具体步骤。没有瞎编的操作流程,没有胡诌的网址。
第五步:统一部署
最后一步是部署整个流程。我有三个组件:ML 分类器、基础模型提示词和 RAG 流程。每个都部署为独立的 API 端点,我可以从客户端应用直接调用。
watsonx.ai 提供了部署空间来管理所有部署的资产。你可以监控使用情况、检查延迟,还能按需扩容资源。部署仪表盘让我能在一个界面里同时查看这三个服务——以前我可是得搞 Grafana 仪表盘和自定义日志才能实现这效果。
实用建议与实话实说的局限性
在深度体验了 watsonx.ai 几周后,有些事我真希望有人一开始就告诉我:
建议:
- 上传前先清洗数据。列名的命名规范在这里比在本地 notebook 里重要得多。
- 从较小的基础模型开始。先在 Prompt Lab 里测试,再决定要不要上更大、更贵的模型。
- 认真对待项目结构。在项目内组织资产(数据、模型、提示词、部署),等队友加入时,协作会顺畅得多。
- notebook 环境确实方便,但如果你更习惯自己的工具,也可以用 watsonx.ai API 连接本地 IDE。
局限性:
- 平台有学习曲线。它那种“项目/资产/部署空间”的模式,跟许多数据科学家习惯的“直接写代码”路子很不一样。做好花一两天光理解组织概念的准备。
- 你多少会被 IBM 生态绑定。虽然模型可以导出,但要享受丝滑体验,就得端到端地使用这个平台。如果你的组织其他服务全在 AWS 或 Azure 上,单为这一个服务加个 IBM Cloud,会导致架构碎片化。
- 模型目录虽然在不断扩充,但比起直接订阅 Anthropic 或 OpenAI 的 API,你能用的模型还是有限的,只能选 IBM 接入的那些。
- 计费可能会变得复杂。计算运行时、基础模型推理和存储费用加在一起,我发现自己得时刻盯着使用量,以防账单吓人一跳。
总结: 就我的项目而言,watsonx.ai 兑现了它的承诺。我大概花了一周时间,就把原来一堆散落的脚本和 API 调用,变成了一个统一、可部署的流程——比我之前的方法快了一半。光凭 RAG 构建器这一项,这波切换就值了。但它也不是什么一键搞定的魔法按钮。你依然需要数据科学技能来训练好模型、写出有效的提示词。这个平台消除的是基础设施的折腾,而不是对专业技能的需求。如果你的工作既涉及传统 ML,又涉及生成式 AI,而且你已经受够了把十几个工具缝缝补补的日子,那 watsonx.ai 绝对值得认真评估一下。