源我們的Delphi工具包:五大源自構(gòu)建AI應(yīng)用的開(kāi)發(fā)庫(kù)與TaoToken配置實(shí)踐)
1. Delphi 開(kāi)發(fā)者接入大模型為什么總卡在“通道”這一步如果你用 Delphi 寫(xiě)過(guò)稍微現(xiàn)代一點(diǎn)的桌面應(yīng)用大概率動(dòng)過(guò)“接個(gè)大模型進(jìn)來(lái)”的念頭。比如讓工具自動(dòng)總結(jié)一份 Word 報(bào)告、把 Excel 里的客戶數(shù)據(jù)轉(zhuǎn)成自然語(yǔ)言、或者干脆在 IDE 里掛一個(gè)能讀代碼的 AI 助手。想法很順真動(dòng)手就會(huì)發(fā)現(xiàn)麻煩不在 Delphi 本身而在“怎么把請(qǐng)求發(fā)出去、怎么管住一堆 Key、怎么讓不同工具共用同一條通道”。我最近在折騰一套 Delphi 工具鏈核心場(chǎng)景是用 Delphi 構(gòu)建 AI 應(yīng)用同時(shí)把 OfficeXML 解析、MCP 協(xié)議對(duì)接這些能力串起來(lái)。過(guò)程中最耗時(shí)間的不是寫(xiě)解析邏輯而是配置層——每個(gè) AI 工具都要單獨(dú)填 Base URL、單獨(dú)填 Key、單獨(dú)處理模型名Cline 一套、CC Switch 一套、自己寫(xiě)的 Delphi 客戶端又一套。改一次 Key 要翻五個(gè)配置文件這種體驗(yàn)對(duì)獨(dú)立開(kāi)發(fā)者很不友好。TaoToken 在這里扮演的角色就是把這些分散的入口收斂成一條統(tǒng)一通道。它提供兼容 OpenAI 風(fēng)格的 API 地址你只需要維護(hù)一個(gè) Key就能讓 Cline、CC Switch 以及你自己的 Delphi HTTP 客戶端走同一條路。對(duì) Delphi 項(xiàng)目來(lái)說(shuō)這意味著System.Net.HttpClient里那個(gè)TGraphHttpClient式的封裝可以復(fù)用不用為每個(gè)模型供應(yīng)商改一遍請(qǐng)求頭。這篇文章面向的是已經(jīng)會(huì)用 Delphi 寫(xiě)業(yè)務(wù)代碼、但對(duì) AI 接入鏈路還比較陌生的開(kāi)發(fā)者。我會(huì)先給出一份可復(fù)制的config.toml與settings.json骨架再演示在 Cline 和 CC Switch 里驗(yàn)證 API 連通性的具體步驟最后把 OfficeXML4D、MCP 服務(wù)器這些庫(kù)怎么和這條通道配合講清楚。全程不需要你裝 Node.js也不需要額外部署中間層。2. TaoToken 前置準(zhǔn)備一個(gè) Key 打通 Delphi 工具鏈在寫(xiě)任何 Delphi 代碼之前先把通道本身跑通。TaoToken 的接入信息很集中API 根地址是https://taotoken.net/api官網(wǎng)入口在https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。你需要在控制臺(tái)里創(chuàng)建一個(gè) API Key這個(gè) Key 后面會(huì)同時(shí)出現(xiàn)在 Cline、CC Switch 和 Delphi 客戶端的配置里。創(chuàng)建 Key 的入口在控制臺(tái)的 API Keys 頁(yè)面地址是https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite。進(jìn)去之后新建一個(gè) Key復(fù)制出來(lái)先存到臨時(shí)文本里。注意這個(gè) Key 只在創(chuàng)建時(shí)完整顯示一次關(guān)掉頁(yè)面就看不到了所以別急著刷新。這里有個(gè)容易踩的坑很多人會(huì)把官網(wǎng)首頁(yè)地址當(dāng)成 API 地址填進(jìn)工具里。官網(wǎng)是給人看的API 根地址是https://taotoken.net/api兩者不能混。Cline 這類工具通常要求你填Base URL填成https://taotoken.net/api即可它自己會(huì)拼接/v1/chat/completions這類路徑。如果你填了帶 UTM 的官網(wǎng)地址請(qǐng)求會(huì)打到網(wǎng)頁(yè)路由上返回的是一堆 HTML不是 JSON。模型選擇上TaoToken 支持對(duì)話模型和編碼模型兩類。日常驗(yàn)證連通性用對(duì)話模型就夠長(zhǎng)期跑 Agent 或編碼任務(wù)建議單獨(dú)看 Coding Plan入口在https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite。如果你只是想先確認(rèn)“這條路能不能走通”用模型對(duì)話頁(yè)面手動(dòng)發(fā)一條消息最快地址是https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite。注意API Key 屬于敏感憑證不要寫(xiě)進(jìn)會(huì)提交到 Git 的配置文件里。下面給的骨架里我用占位符sk-xxxx你本地替換成真實(shí) Key 后記得把配置文件加入.gitignore。3. 可復(fù)制配置config.toml 與 settings.json 骨架Delphi 生態(tài)里配置格式?jīng)]有統(tǒng)一標(biāo)準(zhǔn)但 TOML 和 JSON 是最常見(jiàn)的兩種。我習(xí)慣把“通道級(jí)”配置放 TOML把“工具級(jí)”配置放 JSON這樣換 Key 時(shí)只改一處。下面這份config.toml是給 Delphi 客戶端和 MCP 服務(wù)器共用的骨架。# config.toml —— Delphi AI 工具鏈統(tǒng)一通道配置 [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 解析時(shí)的臨時(shí)目錄與最大文件尺寸 temp_dir C:\\Temp\\delphi_ai max_docx_mb 50 max_xlsx_mb 100 [mcp] # Delphi MCP 服務(wù)器監(jiān)聽(tīng)配置 transport stdio server_name delphi-mcp auto_discover_tools true這份配置里base_url和api_key是核心。default_model可以先填一個(gè)便宜的對(duì)話模型等連通性驗(yàn)證通過(guò)再換成編碼模型。timeout_seconds給 60 秒是因?yàn)橛行┠P褪?token 返回慢設(shè)太短會(huì)誤判為失敗。接下來(lái)是給 Cline 和 CC Switch 用的settings.json骨架。這兩個(gè)工具都支持自定義 OpenAI 兼容端點(diǎn)字段名略有差異我把它拆成兩個(gè)塊你按工具取用。{ 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這個(gè)字段值得單獨(dú)說(shuō)一句。Cline 早期版本用的是舊版補(bǔ)全接口新版走 chat 接口。如果你填了false還是報(bào) 404把它改成true試試反過(guò)來(lái)也一樣。這個(gè)字段是 Cline 側(cè)的行為和 TaoToken 無(wú)關(guān)但排查時(shí)容易混淆。配置寫(xiě)完后Delphi 側(cè)讀取 TOML 可以用System.IniFiles的變體或者引入一個(gè)輕量 TOML 解析單元。我自己的做法是寫(xiě)一個(gè)TAppConfig類把base_url和api_key暴露成屬性MCP 服務(wù)器和 HTTP 客戶端都從這里取。這樣以后換供應(yīng)商只改config.toml一行。4. 驗(yàn)證請(qǐng)求在 Cline 與 CC Switch 中確認(rèn)連通性配置寫(xiě)完不等于通了。我見(jiàn)過(guò)太多人配置文件填得漂漂亮亮一發(fā)請(qǐng)求就 401然后開(kāi)始懷疑人生。下面這套驗(yàn)證流程是我自己踩過(guò)坑之后固定下來(lái)的順序。第一步先用 TaoToken 的模型對(duì)話頁(yè)面手動(dòng)發(fā)一條消息。打開(kāi)https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite選一個(gè)對(duì)話模型輸入“你好”看是否正常返回。這一步能排除 Key 本身無(wú)效、賬戶余額不足這類問(wèn)題。如果這里就失敗后面所有工具都不用試了。第二步在 Cline 里驗(yàn)證。打開(kāi) Cline 的設(shè)置面板把settings.json里cline塊的內(nèi)容填進(jìn)去。保存后新建一個(gè)對(duì)話輸入一句簡(jiǎn)單指令比如“用一句話說(shuō)明什么是 Delphi”。如果返回正常說(shuō)明 Cline 到 TaoToken 的鏈路通了。如果報(bào)401 Unauthorized檢查 Key 是否復(fù)制完整有沒(méi)有多帶空格。如果報(bào)404 Not Found檢查openAiBaseUrl是不是寫(xiě)成了帶/v1的地址——TaoToken 的根地址不帶/v1工具會(huì)自己拼。第三步在 CC Switch 里驗(yàn)證。CC Switch 的配置界面字段更少把baseUrl、apiKey、model三項(xiàng)填好即可。它的驗(yàn)證方式是發(fā)一條測(cè)試請(qǐng)求成功后會(huì)顯示模型返回的文本。這里有個(gè)細(xì)節(jié)CC Switch 的wireApi字段如果填chat走對(duì)話接口填completion走補(bǔ)全接口。TaoToken 兩種都支持但建議先用chat兼容性更好。第四步回到 Delphi 側(cè)做一次原生請(qǐng)求。這一步很多人跳過(guò)結(jié)果工具里能用、自己代碼里不能用。用System.Net.HttpClient發(fā)一個(gè)最小請(qǐng)求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;這段代碼跑通說(shuō)明 Delphi 原生 HTTP 棧也能走這條通道。注意Post的 URL 里帶了/v1/chat/completions因?yàn)檫@里是直接調(diào)接口不是交給工具去拼。如果你在config.toml里存的是根地址代碼里要自己補(bǔ)全路徑。提示如果 Delphi 請(qǐng)求返回Could not load SSL library說(shuō)明你的System.Net.HttpClient沒(méi)配好 OpenSSL。Delphi 12 默認(rèn)用系統(tǒng) TLS一般不需要額外 DLL老版本可能需要把libssl和libcrypto放到 exe 同目錄。5. 本篇常見(jiàn)錯(cuò)排查從 401 到 MCP 工具不發(fā)現(xiàn)排障這部分我按“癥狀 → 原因 → 處理”來(lái)寫(xiě)都是實(shí)際遇到過(guò)的。癥狀一401 Unauthorized。最常見(jiàn)的原因是 Key 復(fù)制時(shí)帶了首尾空格或者把 Key 填到了model字段里。檢查config.toml和settings.json里api_key的值確保是sk-開(kāi)頭的一整串。另一個(gè)可能是 Key 被刪除或過(guò)期去控制臺(tái) API Keys 頁(yè)面確認(rèn)狀態(tài)。癥狀二404 Not Found。九成是 Base URL 寫(xiě)錯(cuò)。TaoToken 的根地址是https://taotoken.net/api不要寫(xiě)成https://taotoken.net/api/v1也不要寫(xiě)成官網(wǎng)首頁(yè)。工具內(nèi)部會(huì)拼接路徑你多寫(xiě)一段就變成/api/v1/v1/chat/completions自然 404。癥狀三請(qǐng)求超時(shí)。先確認(rèn)網(wǎng)絡(luò)能訪問(wèn)taotoken.net。如果瀏覽器能打開(kāi)官網(wǎng)但 Delphi 請(qǐng)求超時(shí)檢查是不是公司網(wǎng)絡(luò)對(duì)非標(biāo)準(zhǔn)端口做了限制。TaoToken 走 443 標(biāo)準(zhǔn)端口一般不受影響。另一個(gè)可能是timeout_seconds設(shè)太短改成 120 再試。癥狀四MCP 服務(wù)器啟動(dòng)后工具列表為空。Delphi MCP 服務(wù)器用 RTTI 自動(dòng)發(fā)現(xiàn)工具如果你的工具方法沒(méi)有加正確的特性標(biāo)注或者方法不是published可見(jiàn)性就不會(huì)被掃到。檢查你的工具類是否繼承自約定的基類方法上是否有[MCPTool]之類的標(biāo)注。另外auto_discover_tools在config.toml里要設(shè)為true。癥狀五OfficeXML4D 解析 docx 報(bào) XML 格式錯(cuò)誤。這種情況通常是文件本身不是標(biāo)準(zhǔn) OOXML比如是.doc改后綴來(lái)的。OfficeXML4D 只處理 Office Open XML不處理老的二進(jìn)制格式。用 Word 另存為.docx再試。另外注意max_docx_mb限制超過(guò)尺寸會(huì)被拒絕。癥狀六Cline 里模型列表拉不出來(lái)。Cline 會(huì)嘗試調(diào)/v1/models接口。TaoToken 支持這個(gè)接口但如果你的 Key 權(quán)限受限可能返回空列表。這種情況下手動(dòng)填openAiModelId即可不影響對(duì)話功能。排查時(shí)有個(gè)通用技巧把請(qǐng)求的完整 URL 和響應(yīng)狀態(tài)碼打出來(lái)。Delphi 里用Resp.StatusCode和Resp.ContentAsStringCline 和 CC Switch 一般在日志面板里能看到。看到具體數(shù)字比“連不上”三個(gè)字有用得多。6. 把 OfficeXML 與 MCP 接進(jìn)同一條通道前面驗(yàn)證的是“通道能通”現(xiàn)在說(shuō)“通道通了之后能干什么”。Delphi 工具包里有兩個(gè)庫(kù)和 AI 接入關(guān)系最緊OfficeXML4D 和 Delphi MCP 服務(wù)器。OfficeXML4D 負(fù)責(zé)讀寫(xiě) Word 和 Excel純 Delphi 實(shí)現(xiàn)不依賴 Office 安裝。典型場(chǎng)景是用戶上傳一份.docx合同你的 Delphi 應(yīng)用解析出段落和表格拼成 prompt 發(fā)給模型做摘要。解析部分用TWordDocumentFactory發(fā)送部分用第 4 節(jié)那個(gè)TestTaoToken的封裝。兩者之間用config.toml里的[office]段控制臨時(shí)目錄和尺寸上限。MCP 服務(wù)器則是把 Delphi 的能力暴露給 AI 助手。比如你寫(xiě)了一個(gè)查詢本地?cái)?shù)據(jù)庫(kù)的工具方法通過(guò) MCP 協(xié)議注冊(cè)后Claude 這類助手就能調(diào)用它。Delphi MCP 服務(wù)器用 RTTI 自動(dòng)發(fā)現(xiàn)工具你只需要在方法上加標(biāo)注。它支持 Windows 和 Linux傳輸方式在config.toml的[mcp]段里配stdio或http。這里有個(gè)組合玩法把 OfficeXML4D 的解析能力包裝成一個(gè) MCP 工具AI 助手就能直接讀你本地的 Word 文件。配置上MCP 服務(wù)器讀config.toml拿base_url和api_keyOfficeXML4D 讀同一份配置拿臨時(shí)目錄。一份配置兩個(gè)庫(kù)共用換 Key 時(shí)只改一處。如果你打算長(zhǎng)期跑編碼類 Agent建議單獨(dú)配置 Coding Plan入口在https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite。它和普通對(duì)話通道的區(qū)別在于計(jì)費(fèi)和模型池適合高頻調(diào)用場(chǎng)景。接入文檔在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite里面有各語(yǔ)言的請(qǐng)求示例Delphi 部分可以參考 HTTP 客戶端的寫(xiě)法自己封裝。最后說(shuō)一個(gè)我自己的習(xí)慣所有 AI 請(qǐng)求都走一個(gè)統(tǒng)一的TAIChannel類這個(gè)類從config.toml讀配置對(duì)外只暴露Ask和AskStream兩個(gè)方法。OfficeXML4D 解析完的內(nèi)容、MCP 工具收到的參數(shù)都通過(guò)這個(gè)類發(fā)出去。這樣以后不管換哪個(gè)供應(yīng)商改的都是TAIChannel內(nèi)部業(yè)務(wù)代碼一行不動(dòng)。Delphi 的接口式設(shè)計(jì)在這里很占便宜TAIChannel定義成接口測(cè)試時(shí)用 mock 實(shí)現(xiàn)生產(chǎn)時(shí)用真實(shí) HTTP 實(shí)現(xiàn)切換成本幾乎為零。