
搞定JSON对象的解析,对 VFP AI 插件来说,就算是搞定了基础工程。
之前介绍了知识库的一些基础,如VFP AI 插件开发花絮8:知识库基础、VFP开发者如何构建自己的知识库,介绍了一些基本使用的工具软件和交互操作。但是,我们需要程序化的使用知识库,以用于 VFP AI 插件或其他应用程序,所以,构建了 AnythingLLM.VCX 库,编译为多线程DLL。
下面是其使用示例:
Clear
Set Classlib To AnythingLLM.VCX
*!* ==========================================
*!* AnythingLLMManager 使用示例
*!* ==========================================
#DEFINE API_KEY [BSVBF9K-ZB948M5-JQWYQSR-X77F0TP]
#DEFINE ServerURL [http://127.0.0.1:3001]
#DEFINE ExePath [C:\Users\niuji\AppData\Local\Programs\AnythingLLM\AnythingLLM.exe]
Local loObj As AnythingLLMManager of AnythingLLM.VCX
m.loObj = CreateObject([AnythingLLMManager], API_KEY, .T.)
With m.loObj
.cServerUrl = ServerURL
.cExePath = ExePath
EndWith
*!* 1. 判断服务是否启动
If m.loObj.IsRunning()
? [AnythingLLM 已启动]
Else
? [AnythingLLM 未启动]
? [错误码:] + Transform(m.loObj.nLastErrorCode)
? [错误消息:] + m.loObj.cLastError
?
*!* 2. 启动服务
If m.loObj.Start(30)
? "AnythingLLM 启动成功!"
Else
? "AnythingLLM 启动失败!"
EndIf
EndIf
*!* 3. 获取工作区的 slug
?
? "默认工作区 Slug:" + m.loObj.ListAllWorkSpaces()
?
? "默认工作区名称:" + m.loObj.cWorkSpace
? "默认工作区 Slug:" + m.loObj.cWorkspaceSlug
?
*!* 4. 预热知识库
If m.loObj.Warmup()
? "知识库预热成功!"
Else
? "知识库预热失败!"
EndIf
?
*!* 5. 知识库检索
m.loJSON = m.loObj.VectorSearch([VFP是什么?], 2)
? "片段数:" + Transform(m.lojson.results.length )
? "标题:" + m.lojson.results.Item(0).metadata.title
? "相似度:" + Transform(m.lojson.results.Item(0).score)
? "内容:" + Leftc(STREXTRACT(m.loJSON.results.Item(0).text, '</document_metadata>', '', 1, 2), 300) + "......"
?
? "标题:" + m.lojson.results.Item(1).metadata.title
? "相似度:" + Transform(m.lojson.results.Item(1).score)
? "内容:" + Leftc(STREXTRACT(m.loJSON.results.Item(1).text, '</document_metadata>', '', 1, 2), 300) + "......"输出结果:

todo:
除了知识库检索,可以将其扩展为真正的 AnythingLLM Manager,用于程序化的完全控制 AnythingLLM 。例如:聊天、使用其内置的智能体完成如 Web Search 等工作。