原贴链接

这个项目是对我之前关于最简单途径进行离线维基百科RAG问题的回答。在仔细考虑了回复后,txtai以其最直接的方式引起了我的注意

由于默认情况下该数据集仅返回维基文章的第一段(为了速度),我将其与同一作者的完整维基百科文本数据集结合使用,然后将所有内容打包成一个整洁的小型微服务API,以便我可以与Wilmer一起使用。

特点:

  • 利用txtai搜索与您的查询最匹配的文章,然后使用该结果获取文章的完整文本。
  • 此API提供三个端点:
    • 一个端点接收标题并返回完整的维基百科文章
    • 一个端点接收查询并返回匹配的文章(默认返回前1篇文章,但可以传递其他值)
    • 一个端点接收查询并返回匹配文章的第一段(txtai-wikipedia数据集的默认返回内容)
  • 它运行速度很快。在我的Windows电脑上,首次运行索引完成后,响应时间约为2秒或更短。

重要提示: 这需要两个数据集存储在项目文件夹中,总计约60GB。txtai还使用一个小模型,我认为,因此API中会有一些推理过程。

此外,首次启动API将需要大约10-15分钟,具体取决于您的电脑,因为它将对文章标题进行索引以加快后续结果获取速度。

我在Windows和MacOS上进行了测试,API在这两个系统上都能正常工作。然而,我在MacOS的OneClick脚本中指出了一个由于git引起的问题。在Mac上,如果您使用XCode提供的git,需要手动下载数据集。

链接: https://github.com/SomeOddCodeGuy/OfflineWikipediaTextApi/

为什么要制作它?

  1. 很多人想要离线维基百科RAG功能,尽管davidmezzetti提供了一个非常易于使用的txtai解决方案,但大多数人太懒了,没有实际去做。制作成API意味着无需集成到代码中的库,或编写代码。只需调用API。
  2. 我需要这个功能用于Wilmer。我的长期目标是能够离线对维基百科进行RAG,今天我终于完成了这个功能。我一直对我的AI助手的实际响应感到沮丧,现在我有了一个解决方案。

示例用法:WilmerAI如何利用它?

以下是一些与我的助手聊天时的图片,当时它由WilmerAI驱动;我在这个测试中使用了Gemma-27b模型。

我在每个响应中尝试了一些工作流程,以获得更好的结果,这就是为什么图片1和2的答案质量低于图片3。

我最终在最后一张图片中找到了一个好的工作流程,所以我将详细说明那张图片背后的具体步骤

  • 节点1:要求Gemma-27b查看最后10条消息并写出它认为用户在说什么:
    • Gemma-27b响应:“最后一条消息询问了在航空史的间战期间飞艇的作用。之前的消息集中在固定翼飞机上,用户现在想知道飞艇如何适应那个时代的整体交通和技术进步。
  • 节点2:根据节点1的响应,要求Gemma-27b生成一个查询:
    • Gemma-27b响应:“间战期间的飞艇
  • 节点3:维基百科离线搜索文章找到:https://en.wikipedia.org/wiki/U.S._Army_airships
  • 节点4:Gemma-27b向用户回复,包括文章以进行RAG。

我的助手由Wilmer使用此API驱动(模型:Gemma-27b)

[利用文章:https://en.wikipedia.org/wiki/Aviation_between_the_World_Wars]([图片描述:这张图片是一张电脑屏幕截图,显示了两个Reddit帖子的部分内容。

  1. 第一个帖子由用户“CodeGuy”于2024年6月24日6:12 PM发布,标题为“Let’s talk about Interwar period!”,编号为13。
  2. 第二个帖子由用户“Roland.AI”于2024年7月22日9:39 PM发布,标题未完全显示,编号为14,回复数79.2s。

两个帖子都讨论了航空史,特别是两次世界大战之间的时期(1919年至1939年),这个时期被称为“间战期”。

第一个帖子提到了间战期的特点,如商业航空公司的兴起、飞机技术的进步以及人们对更快、更舒适旅行的需求。

第二个帖子详细介绍了间战期间的重要事件和技术发展,包括全金属飞机的出现、可收放起落架的发明以及一些著名的飞机型号,如福特三引擎运输机和道格拉斯DC-3。还提到了查尔斯·林白和阿梅莉亚·埃尔哈特的成就。

整体而言,这两个帖子共同描绘了间战期航空业的发展和重要里程碑。])

[利用文章:https://en.wikipedia.org/wiki/Junkers_F_13]([图片描述:这张图片展示了两个Reddit帖子的截图,其中包含了对Junkers F.13飞机的历史介绍。第一个帖子由用户CodeGuy于2024年7月27日9:46 PM发布,询问关于该时期Junkers F.13飞机的情况。第二个帖子由用户Roland.AI于2024年7月27日9:47 PM回复,详细介绍了Junkers F.13飞机的设计特点、性能以及它在不同国家的应用情况。

帖子截图的背景是黑色的,字体主要是白色和灰色。截图左上角有一个“#15”的标签,表示这是第15个回复。截图右下角有一个“1/1”的标签,表示这是第一页回复。])

[利用文章:https://en.wikipedia.org/wiki/U.S._Army_airships]([图片描述:这张图片是一张电脑屏幕截图,显示了两个Reddit帖子的部分内容。

第一个帖子提到了Hugo Junkers和他的团队,以及航空业的黄金时代,强调了早期飞行员的开拓精神。

第二个帖子由用户CodeGuy提出,询问飞艇在讨论中的作用。用户Roland.AI回复了该问题,详细介绍了飞艇的历史、用途以及在航空业发展中的重要性。

整体而言,图片展示了关于航空历史和技术发展的讨论,突出了飞艇在早期航空探索中的关键作用。])

是的,第一条消息和第二条消息之间有一个月的间隔。那是我用于各种测试的消息,哈哈。

无论如何,希望你们喜欢!

https://github.com/SomeOddCodeGuy/OfflineWikipediaTextApi/

讨论总结

本次讨论主要围绕SomeOddCodeGuy开发的离线维基百科全文API项目进行。该项目通过结合txtai和完整维基百科文本数据集,提供了一个微服务式的API,允许用户在本地通过简单的查询获取完整的维基百科文章。讨论中涉及了API的功能、使用的技术(如txtai和NeuML的数据集)、如何在不同操作系统上运行,以及项目的动机和未来扩展的可能性。此外,评论者们也分享了他们对该项目的使用体验、感谢和建议,包括对API的性能、数据集的需求、以及如何通过改进工作流程和数据检查来提高准确性的讨论。

主要观点

  1. 👍 离线维基百科API的实用性
    • 支持理由:该项目解决了离线维基百科RAG的需求,通过简单的API调用提供完整的维基百科文章。
    • 反对声音:无
  2. 🔥 API的技术细节和功能
    • 正方观点:API利用txtai搜索最匹配的文章,并返回全文,提供了三个API端点以满足不同的查询需求。
    • 反方观点:无
  3. 💡 对API的感谢和建议
    • 支持理由:用户对项目的实用性表示肯定,并提出了一些改进建议,如增加直接的数据库访问功能和更灵活的文章输出格式。
    • 反对声音:无
  4. 👀 API的隐私优势
    • 支持理由:API完全在本地运行,不涉及中间人,提供了隐私保护的优势。
    • 反对声音:无
  5. 🤔 RAG模型的幻觉问题
    • 支持理由:尽管RAG模型能够引用来源,但仍可能产生幻觉问题,建议用户不要完全信任LLM的结果。
    • 反对声音:无

金句与有趣评论

  1. “😂 I love this community, thank you.” - exodusayman
    • 亮点:表达了对社区的喜爱和感谢。
  2. “🤔 Just a word of caution that to the best of my knowledge, RAG backed models (even GraphRAG) can and do still hallucinate.” - Emotional_Egg_251
    • 亮点:提醒用户注意RAG模型的幻觉问题。
  3. “👀 Dope🔥” - RIP26770
    • 亮点:简洁地表达了对项目的兴奋和认可。

情感分析

讨论的总体情感倾向积极,大多数评论者对离线维基百科API项目表示赞赏和感谢。主要分歧点在于对API的改进建议,如增加直接的数据库访问功能和更灵活的文章输出格式。这些建议反映了用户对项目进一步完善的期待。

趋势与预测

  • 新兴话题:通过改进工作流程和数据检查来提高RAG模型的准确性。
  • 潜在影响:该API项目可能会促进更多类似的小型API开发,帮助开发者更轻松地集成各种库,从而推动开源社区的发展。