乐于分享
好东西不私藏

VFP AI 插件开发花絮11:RAG.dll 帮助文档

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 能力。


注册

  1. 打开命令行:以管理员身份打开命令提示符(cmd)。

  2. 运行注册命令:使用 ‎regsvr32 工具注册 DLL。导航到 DLL 所在目录,执行:

regsvr32 RAG.dll

属性

属性名
类型
说明
oManager
Object
受保护的内部对象,根据设置的提供商动态创建(如 AnythingLLM),用于执行具体操作。

方法

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 仅在开发阶段使用,发布前应移除相关调用。
=======================
本 DLL 有偿共享,售价¥300.00。如需源码,另行协商。
有意留言/私信/私聊。