
概述
RAG.MTServer 是一个基于 VFP 的 COM 可调用类(OlePublic),用于管理和调用本地或远程的 AI 服务(如 AnythingLLM)。该类封装了服务的初始化、启动、工作区管理以及知识库操作等功能,便于在 VFP 或其他支持 COM 的环境中集成 AI 能力。
regsvr32 工具注册 DLL。导航到 DLL 所在目录,执行:regsvr32 RAG.dll
属性名 | 类型 | 说明 |
|---|---|---|
oManager | Object | 受保护的内部对象,根据设置的提供商动态创建(如 AnythingLLM),用于执行具体操作。 |
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.)
IsRunning()功能 检查服务是否已经处于运行状态。
返回值
逻辑型:.T. 表示服务已准备就绪(正在运行),.F. 表示未运行。
Start(tnTimeoutSeconds)功能 启动服务(如 AnythingLLM 的本地进程)。
参数
tnTimeoutSeconds(数值型,可选):超时时间(秒),默认 30。若服务启动较慢,可适当增加该值。返回值
逻辑型:.T. 表示启动成功,.F. 表示失败。
示例
llStarted = loServer.Start(60) && 等待60秒
ListAllWorkSpaces()功能
获取所有工作区信息,用于提取各工作区的 Slug(唯一标识符)。
返回值
备注
常用于在调用 Warmup 或 VectorSearch 前获取工作区标识。
Warmup(tcWorkspaceSlug, tcApiKey)功能 预热知识库,将指定工作区的知识库加载到内存,提高后续查询的响应速度。
参数
tcWorkspaceSlug(字符型,可选):工作区 Slug。若仅有一个默认工作区,可先调用 ListAllWorkSpaces() 获取。tcApiKey(字符型,可选):API 密钥(若已在 Set 中配置,可省略)。返回值 JSON 对象,包含预热结果信息。
示例
loWorkspaces = loServer.ListAllWorkSpaces()
* 假设返回的是默认工作区的 Slug 字符串
lcSlug = loWorkspaces
loServer.Warmup(lcSlug)
VectorSearch(tcQuery, tnTopN, tcWorkspaceSlug, tcApiKey)功能 对指定工作区的知识库进行向量搜索,返回与查询最相关的内容。
参数
tcQuery(字符型):用户提问或查询文本。tnTopN(数值型,可选):返回的最大上下文片段数量,默认 5。tcWorkspaceSlug(字符型,可选):工作区 Slug,默认使用默认工作区。tcApiKey(字符型,可选):API 密钥(可选,若已配置可省略)。返回值
JSON 对象,包含搜索结果;若失败则返回 .NULL.。
示例
loResult = loServer.VectorSearch("什么是人工智能?", 3)
IF !ISNULL(loResult)
? loResult && 处理 JSON 结果
ENDIF
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("设置失败")
RETURN
ENDIF
* 检查并启动服务
IF NOT loServer.IsRunning()
llStarted = loServer.Start(45)
IF NOT llStarted
MESSAGEBOX("启动失败")
RETURN
ENDIF
ENDIF
* 获取工作区 Slug
lcSlug = loServer.ListAllWorkSpaces()
* 预热
loServer.Warmup(lcSlug)
* 执行搜索
loResult = loServer.VectorSearch("如何使用 VFP 调用 COM 对象?", 5, lcSlug)
IF ISNULL(loResult)
MESSAGEBOX("搜索失败")
ELSE
* 处理返回的 JSON 结果
? loResult
ENDIF
"AnythingLLM" 提供商的支持,"RAGFLOW" 仅为预留接口。Set 方法中要求至少传入前四个参数。GetDebugObject 仅在开发阶段使用,发布前应移除相关调用。=======================