☰
开源我们的Delphi工具包:五大源自构建AI应用的开发库与TaoToken配置实践
2026/9/29 4:42:59 网站建设 项目流程

1. Delphi 开发者接入大模型,为什么总卡在“通道”这一步

如果你用 Delphi 写过稍微现代一点的桌面应用,大概率动过“接个大模型进来”的念头。比如让工具自动总结一份 Word 报告、把 Excel 里的客户数据转成自然语言、或者干脆在 IDE 里挂一个能读代码的 AI 助手。想法很顺,真动手就会发现麻烦不在 Delphi 本身,而在“怎么把请求发出去、怎么管住一堆 Key、怎么让不同工具共用同一条通道”。

我最近在折腾一套 Delphi 工具链,核心场景是:用 Delphi 构建 AI 应用,同时把 OfficeXML 解析、MCP 协议对接这些能力串起来。过程中最耗时间的不是写解析逻辑,而是配置层——每个 AI 工具都要单独填 Base URL、单独填 Key、单独处理模型名,Cline 一套、CC Switch 一套、自己写的 Delphi 客户端又一套。改一次 Key 要翻五个配置文件,这种体验对独立开发者很不友好。

TaoToken 在这里扮演的角色,就是把这些分散的入口收敛成一条统一通道。它提供兼容 OpenAI 风格的 API 地址,你只需要维护一个 Key,就能让 Cline、CC Switch 以及你自己的 Delphi HTTP 客户端走同一条路。对 Delphi 项目来说,这意味着System.Net.HttpClient里那个TGraphHttpClient式的封装可以复用,不用为每个模型供应商改一遍请求头。

这篇文章面向的是已经会用 Delphi 写业务代码、但对 AI 接入链路还比较陌生的开发者。我会先给出一份可复制的config.toml与settings.json骨架,再演示在 Cline 和 CC Switch 里验证 API 连通性的具体步骤,最后把 OfficeXML4D、MCP 服务器这些库怎么和这条通道配合讲清楚。全程不需要你装 Node.js,也不需要额外部署中间层。

2. TaoToken 前置准备:一个 Key 打通 Delphi 工具链

在写任何 Delphi 代码之前,先把通道本身跑通。TaoToken 的接入信息很集中:API 根地址是https://taotoken.net/api,官网入口在https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=。你需要在控制台里创建一个 API Key,这个 Key 后面会同时出现在 Cline、CC Switch 和 Delphi 客户端的配置里。

创建 Key 的入口在控制台的 API Keys 页面,地址是https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite。进去之后新建一个 Key,复制出来先存到临时文本里。注意这个 Key 只在创建时完整显示一次,关掉页面就看不到了,所以别急着刷新。

这里有个容易踩的坑:很多人会把官网首页地址当成 API 地址填进工具里。官网是给人看的,API 根地址是https://taotoken.net/api,两者不能混。Cline 这类工具通常要求你填Base URL,填成https://taotoken.net/api即可,它自己会拼接/v1/chat/completions这类路径。如果你填了带 UTM 的官网地址,请求会打到网页路由上,返回的是一堆 HTML,不是 JSON。

模型选择上,TaoToken 支持对话模型和编码模型两类。日常验证连通性用对话模型就够,长期跑 Agent 或编码任务建议单独看 Coding Plan,入口在https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite。如果你只是想先确认“这条路能不能走通”,用模型对话页面手动发一条消息最快,地址是https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite。

注意:API Key 属于敏感凭证,不要写进会提交到 Git 的配置文件里。下面给的骨架里我用占位符sk-xxxx,你本地替换成真实 Key 后,记得把配置文件加入.gitignore。

3. 可复制配置:config.toml 与 settings.json 骨架

Delphi 生态里配置格式没有统一标准,但 TOML 和 JSON 是最常见的两种。我习惯把“通道级”配置放 TOML,把“工具级”配置放 JSON,这样换 Key 时只改一处。下面这份config.toml是给 Delphi 客户端和 MCP 服务器共用的骨架。

# config.toml —— Delphi AI 工具链统一通道配置 [provider] name = "taotoken" base_url = "https://taotoken.net/api" api_key = "sk-xxxx" default_model = "gpt-4o-mini" timeout_seconds = 60 [provider.headers] Content-Type = "application/json" Accept = "application/json" [office] # OfficeXML4D 解析时的临时目录与最大文件尺寸 temp_dir = "C:\\Temp\\delphi_ai" max_docx_mb = 50 max_xlsx_mb = 100 [mcp] # Delphi MCP 服务器监听配置 transport = "stdio" server_name = "delphi-mcp" auto_discover_tools = true

这份配置里,base_url和api_key是核心。default_model可以先填一个便宜的对话模型,等连通性验证通过再换成编码模型。timeout_seconds给 60 秒,是因为有些模型首 token 返回慢,设太短会误判为失败。

接下来是给 Cline 和 CC Switch 用的settings.json骨架。这两个工具都支持自定义 OpenAI 兼容端点,字段名略有差异,我把它拆成两个块,你按工具取用。

{ "cline": { "apiProvider": "openai", "openAiBaseUrl": "https://taotoken.net/api", "openAiApiKey": "sk-xxxx", "openAiModelId": "gpt-4o-mini", "openAiLegacyFormat": false }, "ccSwitch": { "provider": "custom", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-xxxx", "model": "gpt-4o-mini", "wireApi": "chat" } }

openAiLegacyFormat这个字段值得单独说一句。Cline 早期版本用的是旧版补全接口,新版走 chat 接口。如果你填了false还是报 404,把它改成true试试,反过来也一样。这个字段是 Cline 侧的行为,和 TaoToken 无关,但排查时容易混淆。

配置写完后,Delphi 侧读取 TOML 可以用System.IniFiles的变体,或者引入一个轻量 TOML 解析单元。我自己的做法是写一个TAppConfig类,把base_url和api_key暴露成属性,MCP 服务器和 HTTP 客户端都从这里取。这样以后换供应商,只改config.toml一行。

4. 验证请求:在 Cline 与 CC Switch 中确认连通性

配置写完不等于通了。我见过太多人配置文件填得漂漂亮亮,一发请求就 401,然后开始怀疑人生。下面这套验证流程,是我自己踩过坑之后固定下来的顺序。

第一步,先用 TaoToken 的模型对话页面手动发一条消息。打开https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite,选一个对话模型,输入“你好”,看是否正常返回。这一步能排除 Key 本身无效、账户余额不足这类问题。如果这里就失败,后面所有工具都不用试了。

第二步,在 Cline 里验证。打开 Cline 的设置面板,把settings.json里cline块的内容填进去。保存后新建一个对话,输入一句简单指令,比如“用一句话说明什么是 Delphi”。如果返回正常,说明 Cline 到 TaoToken 的链路通了。如果报401 Unauthorized,检查 Key 是否复制完整,有没有多带空格。如果报404 Not Found,检查openAiBaseUrl是不是写成了带/v1的地址——TaoToken 的根地址不带/v1,工具会自己拼。

第三步,在 CC Switch 里验证。CC Switch 的配置界面字段更少,把baseUrl、apiKey、model三项填好即可。它的验证方式是发一条测试请求,成功后会显示模型返回的文本。这里有个细节:CC Switch 的wireApi字段如果填chat走对话接口,填completion走补全接口。TaoToken 两种都支持,但建议先用chat,兼容性更好。

第四步,回到 Delphi 侧做一次原生请求。这一步很多人跳过,结果工具里能用、自己代码里不能用。用System.Net.HttpClient发一个最小请求:

uses System.Net.HttpClient, System.Net.URLClient, System.SysUtils; function TestTaoToken(const AApiKey: string): string; var Http: THTTPClient; Body: TStringStream; Resp: IHTTPResponse; Json: string; begin Http := THTTPClient.Create; try Http.CustomHeaders['Authorization'] := 'Bearer ' + AApiKey; Http.CustomHeaders['Content-Type'] := 'application/json'; Json := '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"ping"}]}'; Body := TStringStream.Create(Json, TEncoding.UTF8); try Resp := Http.Post('https://taotoken.net/api/v1/chat/completions', Body); Result := Resp.ContentAsString(TEncoding.UTF8); finally Body.Free; end; finally Http.Free; end; end;

这段代码跑通,说明 Delphi 原生 HTTP 栈也能走这条通道。注意Post的 URL 里带了/v1/chat/completions,因为这里是直接调接口,不是交给工具去拼。如果你在config.toml里存的是根地址,代码里要自己补全路径。

提示:如果 Delphi 请求返回Could not load SSL library,说明你的System.Net.HttpClient没配好 OpenSSL。Delphi 12 默认用系统 TLS,一般不需要额外 DLL;老版本可能需要把libssl和libcrypto放到 exe 同目录。

5. 本篇常见错排查:从 401 到 MCP 工具不发现

排障这部分我按“症状 → 原因 → 处理”来写,都是实际遇到过的。

症状一:401 Unauthorized。最常见的原因是 Key 复制时带了首尾空格,或者把 Key 填到了model字段里。检查config.toml和settings.json里api_key的值,确保是sk-开头的一整串。另一个可能是 Key 被删除或过期,去控制台 API Keys 页面确认状态。

症状二:404 Not Found。九成是 Base URL 写错。TaoToken 的根地址是https://taotoken.net/api,不要写成https://taotoken.net/api/v1,也不要写成官网首页。工具内部会拼接路径,你多写一段就变成/api/v1/v1/chat/completions,自然 404。

症状三:请求超时。先确认网络能访问taotoken.net。如果浏览器能打开官网但 Delphi 请求超时,检查是不是公司网络对非标准端口做了限制。TaoToken 走 443 标准端口,一般不受影响。另一个可能是timeout_seconds设太短,改成 120 再试。

症状四:MCP 服务器启动后工具列表为空。Delphi MCP 服务器用 RTTI 自动发现工具,如果你的工具方法没有加正确的特性标注,或者方法不是published可见性,就不会被扫到。检查你的工具类是否继承自约定的基类,方法上是否有[MCPTool]之类的标注。另外auto_discover_tools在config.toml里要设为true。

症状五:OfficeXML4D 解析 docx 报 XML 格式错误。这种情况通常是文件本身不是标准 OOXML,比如是.doc改后缀来的。OfficeXML4D 只处理 Office Open XML,不处理老的二进制格式。用 Word 另存为.docx再试。另外注意max_docx_mb限制,超过尺寸会被拒绝。

症状六:Cline 里模型列表拉不出来。Cline 会尝试调/v1/models接口。TaoToken 支持这个接口,但如果你的 Key 权限受限,可能返回空列表。这种情况下手动填openAiModelId即可,不影响对话功能。

排查时有个通用技巧:把请求的完整 URL 和响应状态码打出来。Delphi 里用Resp.StatusCode和Resp.ContentAsString,Cline 和 CC Switch 一般在日志面板里能看到。看到具体数字,比“连不上”三个字有用得多。

6. 把 OfficeXML 与 MCP 接进同一条通道

前面验证的是“通道能通”,现在说“通道通了之后能干什么”。Delphi 工具包里有两个库和 AI 接入关系最紧:OfficeXML4D 和 Delphi MCP 服务器。

OfficeXML4D 负责读写 Word 和 Excel,纯 Delphi 实现,不依赖 Office 安装。典型场景是:用户上传一份.docx合同,你的 Delphi 应用解析出段落和表格,拼成 prompt 发给模型做摘要。解析部分用TWordDocumentFactory,发送部分用第 4 节那个TestTaoToken的封装。两者之间用config.toml里的[office]段控制临时目录和尺寸上限。

MCP 服务器则是把 Delphi 的能力暴露给 AI 助手。比如你写了一个查询本地数据库的工具方法,通过 MCP 协议注册后,Claude 这类助手就能调用它。Delphi MCP 服务器用 RTTI 自动发现工具,你只需要在方法上加标注。它支持 Windows 和 Linux,传输方式在config.toml的[mcp]段里配stdio或http。

这里有个组合玩法:把 OfficeXML4D 的解析能力包装成一个 MCP 工具,AI 助手就能直接读你本地的 Word 文件。配置上,MCP 服务器读config.toml拿base_url和api_key,OfficeXML4D 读同一份配置拿临时目录。一份配置,两个库共用,换 Key 时只改一处。

如果你打算长期跑编码类 Agent,建议单独配置 Coding Plan,入口在https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite。它和普通对话通道的区别在于计费和模型池,适合高频调用场景。接入文档在https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite,里面有各语言的请求示例,Delphi 部分可以参考 HTTP 客户端的写法自己封装。

最后说一个我自己的习惯:所有 AI 请求都走一个统一的TAIChannel类,这个类从config.toml读配置,对外只暴露Ask和AskStream两个方法。OfficeXML4D 解析完的内容、MCP 工具收到的参数,都通过这个类发出去。这样以后不管换哪个供应商,改的都是TAIChannel内部,业务代码一行不动。Delphi 的接口式设计在这里很占便宜,TAIChannel定义成接口,测试时用 mock 实现,生产时用真实 HTTP 实现,切换成本几乎为零。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询