基于AntSK与LLamaSharp打造私人定制的离线AI知识库

💡 原文中文,约3800字,阅读约需9分钟。
📝

内容提要

AntSK项目结合了LLamaSharp,提供了本地离线AI知识库搭建方法,无需公司账户。LLamaSharp允许本地运行大模型,解决了外部模型依赖的问题。AntSK还提供了聊天和嵌入接口,可以无缝切换到本地模型服务。性能优化和问题排查是文章的重点,作者鼓励读者关注其公众号。

🔎

延伸解读

为何选择本地模型:突破账号与能力限制

文章指出,个人开发者使用国内Embedding模型时常面临账号申请壁垒,如百川等;星火大模型虽对个人开放,但缺少Embedding能力。LLamaSharp允许本地运行大模型,不依赖外部服务,从而绕开这些限制。这为没有公司资源的开发者提供了可行的替代方案,但需自行承担模型部署与维护成本。

模型加载的常见陷阱与应对

从Hugging Face选择模型时,并非所有模型都能顺利加载,可能遇到内存保护读取问题,原因可能是模型与当前LLamaSharp版本不兼容。文章建议根据LLamaSharp项目提供的各版本对应llama.cpp的commit id,克隆llama仓库并切换到匹配的commit id重新编译。这要求开发者具备一定的编译和版本管理能力。

接口兼容OpenAI:降低切换成本

通过编写Chat和Embedding两个接口,并保持返回格式与OpenAI完全一致,只需修改配置文件中的EndPoint为本地服务地址,即可无缝切换到本地LLamaSharp模型。这种设计减少了代码改动,方便在本地与云端服务之间灵活迁移,但需注意本地服务的稳定性和性能可能不如云端。

CPU推理的性能调优与检索效果局限

本地模型运行在CPU上时推理较慢,为避免KernelMemory请求超时,文章将HttpClient超时延长至5分钟,并降低文本分片的token数值(如MaxTokensPerLine和MaxTokensPerParagraph设为99,OverlappingTokens为47)。然而,知识文档导入后检索效果不理想,相似度与预期差距较大,原因可能是模型本身或LLamaSharp兼容性问题,需进一步测试。

❓

Q&A

AntSK是什么?它有什么主要特点?

AntSK是一个开源项目,结合了LLamaSharp,利用Blazor技术与Semantic Kernel,配合Kernel Memory,构建了一个易于操作和扩展的本地知识管理系统。它提供了本地离线AI知识库搭建方法,无需公司账户,个人开发者也能轻松搭建和使用。

为什么需要LLamaSharp?它解决了什么问题?

LLamaSharp解决了外部模型依赖的困境。在实际应用中,利用国内某些Embedding模型时,往往遇到限制个人账号申请的壁垒,例如“百川”等AI模型服务。而星火大模型虽然对个人开放,但缺少必要的Embedding能力。LLamaSharp允许在不依赖外部服务的情况下,本地运行大模型。

如何从Hugging Face选择模型并解决加载问题?

从Hugging Face上选择AI模型时,并非所有模型都能顺利加载,可能会遇到内存保护读取的问题,这可能是由于所选择的模型不支持当前的LLamaSharp版本。解决方法是根据LLamaSharp项目中提供的每个版本对应的llama.cpp的commit id,克隆llama仓库,然后切换到符合需求的commit id来编译需要的版本。

如何编写LLamaSharp的Chat和Embedding接口?

需要编写两个接口:一个用于聊天的Chat接口,一个用于Embedding的接口。代码示例中,保持接口的返回格式和OpenAI完全一致,这样可以无缝切换到本地模型服务。具体实现为在Controller中定义路由为"llama/v1/chat/completions"和"llama/v1/embeddings"的POST方法,分别调用服务层的Chat/ChatStream和Embedding方法。

如何配置AntSK以使用本地LLamaSharp模型?

在配置文件中,将OpenAI的配置修改为本地服务地址即可。例如,将OpenAIOption中的EndPoint改为本地服务地址如"https://localhost:5001/llama/",并设置相应的Key、Model和EmbeddingModel。

针对本地CPU运行模型,有哪些性能优化措施?

由于本地模型运行在CPU上,推理速度较慢,为了避免在KernelMemory请求时出现超时,可以延长HttpClient的超时时间(例如设置为5分钟),并降低段落分片的token数值(例如MaxTokensPerLine和MaxTokensPerParagraph设为99,OverlappingTokens设为47)。

知识文档导入后检索效果不理想,可能的原因是什么?

经过配置和部署,知识文档可以成功切片导入AntSK系统,但检索时效果并不理想,文档的相似度与预期有较大差距。可能的原因包括模型本身的问题或LLamaSharp的兼容性问题,需要更多的测试和研究才能得出结论。

🏷️

标签

➡️

继续阅读