VFP AI 插件开发花絮11:RAG.dll 帮助文档
RAG.dll 帮助文档
版本: 1.0.0.0作者:xinjie日期:2026.04.01电邮:411618689@qq.com
概述
RAG.MTServer 是一个基于 VFP 的 COM 可调用类(OlePublic),用于管理和调用本地或远程的 AI 服务(如 AnythingLLM)。该类封装了服务的初始化、启动、工作区管理以及知识库操作等功能,便于在 VFP 或其他支持 COM 的环境中集成 AI 能力。
注册
-
打开命令行:以管理员身份打开命令提示符(cmd)。
-
运行注册命令:使用
regsvr32工具注册 DLL。导航到 DLL 所在目录,执行:
regsvr32 RAG.dll
属性
|
|
|
|
|---|---|---|
oManager |
|
|
方法
1. Set(tcServerName, tcApiKey, tcExePath, tcServerURL, tlLog)
功能初始化服务提供商,配置连接所需的基本参数。
参数
-
tcServerName(字符型):服务提供商名称,目前仅支持 "AnythingLLM"(不区分大小写)。 -
tcApiKey(字符型):API 密钥。 -
tcExePath(字符型):可执行程序的完整路径(如 AnythingLLM 的启动路径)。 -
tcServerURL(字符型):服务地址(如 http://localhost:3001)。 -
tlLog(逻辑型,可选):是否启用日志记录,默认 .T.。
返回值逻辑型(.T. 表示成功,.F. 表示失败)。
注意事项
-
前四个参数为必需参数,调用时必须提供前四个参数。 -
若提供商为 "RAGFLOW",当前仅预留接口,未实现。
示例
loServer = CreateObject("RAG.MTServer")llSuccess = loServer.Set("AnythingLLM", "your-api-key", "C:\path\to\anythingllm.exe", "http://localhost:3001", .T.)
2. IsRunning()
功能检查服务是否已经处于运行状态。
返回值逻辑型:.T. 表示服务已准备就绪(正在运行),.F. 表示未运行。
3. Start(tnTimeoutSeconds)
功能启动服务(如 AnythingLLM 的本地进程)。
参数
-
tnTimeoutSeconds(数值型,可选):超时时间(秒),默认 30。若服务启动较慢,可适当增加该值。
返回值逻辑型:.T. 表示启动成功,.F. 表示失败。
示例
llStarted = loServer.Start(60) && 等待60秒
4. ListAllWorkSpaces()
功能获取所有工作区信息,用于提取各工作区的 Slug(唯一标识符)。
返回值
-
若仅存在默认工作区,返回字符型(工作区 Slug)。 -
若存在多个工作区,返回 JSON 对象,可从中解析各工作区的 Slug。
备注常用于在调用 Warmup 或 VectorSearch 前获取工作区标识。
5. Warmup(tcWorkspaceSlug, tcApiKey)
功能预热知识库,将指定工作区的知识库加载到内存,提高后续查询的响应速度。
参数
-
tcWorkspaceSlug(字符型,可选):工作区 Slug。若仅有一个默认工作区,可先调用 ListAllWorkSpaces()获取。 -
tcApiKey(字符型,可选):API 密钥(若已在 Set中配置,可省略)。
返回值JSON 对象,包含预热结果信息。
示例
loWorkspaces = loServer.ListAllWorkSpaces()* 假设返回的是默认工作区的 Slug 字符串lcSlug = loWorkspacesloServer.Warmup(lcSlug)
6. VectorSearch(tcQuery, tnTopN, tcWorkspaceSlug, tcApiKey)
功能对指定工作区的知识库进行向量搜索,返回与查询最相关的内容。
参数
-
tcQuery(字符型):用户提问或查询文本。 -
tnTopN(数值型,可选):返回的最大上下文片段数量,默认 5。 -
tcWorkspaceSlug(字符型,可选):工作区 Slug,默认使用默认工作区。 -
tcApiKey(字符型,可选):API 密钥(可选,若已配置可省略)。
返回值JSON 对象,包含搜索结果;若失败则返回 .NULL.。
示例
loResult = loServer.VectorSearch("什么是人工智能?", 3)IF !ISNULL(loResult) ? loResult && 处理 JSON 结果ENDIF
7. GetDebugObject()
功能辅助调试方法,用于在 COM 调用环境中获取当前对象的调试实例,以便在 VFP IDE 中设置断点进行调试。
返回值返回一个新的 MTServer 对象实例,该实例可在调试器中操作。
备注具体使用方法参考公众号文章:xinjie 的 VFP–生产力技术(一):调试 VFP COM 的技术
使用示例
以下是一个完整的调用流程:
LOCAL loServer, llSet, llRunning, llStarted, loResult* 创建对象loServer = CREATEOBJECT("RAG.MTServer")* 设置服务llSet = loServer.Set("AnythingLLM", "sk-xxxx", "C:\anythingllm\anythingllm.exe", "http://localhost:3001", .T.)IF NOT llSet MESSAGEBOX("设置失败") RETURNENDIF* 检查并启动服务IF NOT loServer.IsRunning() llStarted = loServer.Start(45) IF NOT llStarted MESSAGEBOX("启动失败") RETURN ENDIFENDIF* 获取工作区 SluglcSlug = loServer.ListAllWorkSpaces()* 预热loServer.Warmup(lcSlug)* 执行搜索loResult = loServer.VectorSearch("如何使用 VFP 调用 COM 对象?", 5, lcSlug)IF ISNULL(loResult) MESSAGEBOX("搜索失败")ELSE * 处理返回的 JSON 结果 ? loResultENDIF
注意事项
-
当前版本仅实现了 "AnythingLLM"提供商的支持,"RAGFLOW"仅为预留接口。 -
Set方法中要求至少传入前四个参数。 -
所有返回的 JSON 对象为原生 JS JSON对象。 -
调试方法 GetDebugObject仅在开发阶段使用,发布前应移除相关调用。
夜雨聆风