基于 langchaingo 对接大模型 ollama 实现本地知识库问答系统

LangChain Go实战:如何用Go语言快速构建LLM驱动的智能应用 本文介绍了如何使用Go语言通过LangChain快速构建LLM驱动的智能应用。通过langchaingo库,Go开发者可以轻松调用大语言模型(LLMs)能力,无需切换技术栈。文章详细展示了从环境配置到实战开发的全过程,包括问答系统、结构化输出处理和高并发优化等核心功能,帮助开发者高效实现AI应用。 阅读详情

Ollama[1] 是一个基于 Go 语言开发的简单易用的本地大语言模型运行框架。在管理模型的同时,它还基于 Go 语言中的 Web 框架 gin[2]提供了一些 Api 接口,让你能够像跟 OpenAI 提供的接口那样进行交互。

Ollama 官方还提供了跟 docker hub 一样的模型 hub,用于存放各种大语言模型,开发者也可以上传自己训练好的模型供其他人使用。

5771120e578b49ee3a58229e720c77d89fea173a8267d48cb98dd08db66a3cc5&scene=21#wechat_redirect)中已经介绍过了,今天就基于 langchaingo 来对接一下 ollama 的大模型实现简单的本地的知识问答系统。

安装 ollama

可以在 ollama 的 github release [3] 页面直接下载对应平台的二进制包进行安装,也可以 docker 一键部署。这里演示的机器是 macOS M1 PRO 版本,直接下载安装包,安装即可,安装之后,运行软件。

运行之后,项目默认监听 11434 端口,在终端执行如下命令可验证是否正常运行:

$ curl localhost:11434
Ollama is running

img

大模型管理

ollama 安装后,就可以对大模型进项安装使用了。Ollama 还会携带一个命令行工具,通过它可以与模型进行交互。

  • ollama list:显示模型列表。
  • ollama show:显示模型的信息
  • ollama pull:拉取模型
  • ollama push:推送模型
  • ollama cp:拷贝一个模型
  • ollama rm:删除一个模型
  • ollama run:运行一个模型

在官方提供的模型仓库中可以找到你想要的模型:https://ollama.com/library

注意:应该至少有 8 GB 可用 RAM 来运行 7 B 型号,16 GB 来运行 13 B 型号,32 GB 来运行 33 B 型号。

比如我们可以选择 Qwen[4] 做个演示,这里用 1.8B 的模型(本地电脑比较可怜,只有 16G😭):

$ ollama run qwen:1.8b

是不是觉得这个命令似曾相识,是的,跟 docker run image 一样,如果本地没有该模型,则会先下载模型再运行。

img

既然跟 docker 如此一致,那么是不是也会有跟 Dockerfile 一样的东西,是的,叫做 Modelfile :

FROM qwen:14b

# set the temperature to 1 [higher is more creative, lower is more coherent]
PARAMETER temperature 1

# set the system message
SYSTEM """
You are Mario from super mario bros, acting as an assistant.
"""

保存上面的代码为 Modelfile,运行 llama create choose-a-model-name -f Modelfile 就可以定制你的模型,ollama run choose-a-model-name 就可以使用刚刚定制的模型。

img

对接 ollama 实现本地知识库问答系统

前置准备

模型都在本地安装好了,我们可以对接这个模型,开发一些好玩的上层 AI 应用。下面我们基于 langchaningo 开发一个问答系统。

下面的系统会用到的模型有 ollama qwen1.8B,nomic-embed-text,先来安装这两个模型:

 ollama run qwen:1.8b
 ollama run nomic-embed-text:latest

我们还需要一个向量数据库来存储拆分后的知识库内容,这里我们使用 qdrant :

docker pull qdrant/qdrant$ docker run -itd --name qdrant -p 6333:6333 qdrant/qdrantdocker pull qdrant/qdrant
$ docker run -itd --name qdrant -p 6333:6333 qdrant/qdrant

在这里插入图片描述

启动 qdrant 后我们先创建一个 Collection 用于存储文档拆分块:

curl -X PUT http://localhost:6333/collections/langchaingo-ollama-rag \
  -H 'Content-Type: application/json' \
  --data-raw '{
    "vectors": {
      "size": 768,
      "distance": "Dot"
    }
  }'
知识库内容切分

这里提供一篇文章[5]供大模型学习,下面的代码将文章拆分成小的文档块:

func TextToChunks(dirFile string, chunkSize, chunkOverlap int) ([]schema.Document, error) {
 file, err := os.Open(dirFile)
 if err != nil {
  return nil, err
 }
 // create a doc loader
 docLoaded := documentloaders.NewText(file)
 // create a doc spliter
 split := textsplitter.NewRecursiveCharacter()
 // set doc chunk size
 split.ChunkSize = chunkSize
 // set chunk overlap size
 split.ChunkOverlap = chunkOverlap
 // load and split doc
 docs, err := docLoaded.LoadAndSplit(context.Background(), split)
 if err != nil {
  return nil, err
 }
 return docs, nil
}
文档存储到向量数据库
func storeDocs(docs []schema.Document, store *qdrant.Store) error {
 if len(docs) > 0 {
  _, err := store.AddDocuments(context.Background(), docs)
  if err != nil {
   return err
  }
 }
 return nil
}
读取用户输入并查询数据库
func useRetriaver(store *qdrant.Store, prompt string, topk int) ([]schema.Document, error) {
 // 设置选项向量
 optionsVector := []vectorstores.Option{
  vectorstores.WithScoreThreshold(0.80), // 设置分数阈值
 }

 // 创建检索器
 retriever := vectorstores.ToRetriever(store, topk, optionsVector...)
 // 搜索
 docRetrieved, err := retriever.GetRelevantDocuments(context.Background(), prompt)

 if err != nil {
  return nil, fmt.Errorf("检索文档失败: %v", err)
 }

 // 返回检索到的文档
 return docRetrieved, nil
}
创建并加载大模型
func getOllamaQwen() *ollama.LLM {
 // 创建一个新的ollama模型,模型名为"qwena:1.8b"
 llm, err := ollama.New(
  ollama.WithModel("qwen:1.8b"),
  ollama.WithServerURL(ollamaServer))
 if err != nil {
  logger.Fatal("创建ollama模型失败: %v", err)
 }
 return llm
}
大模型处理

将检索到的内容,交给大语言模型处理

// GetAnswer 获取答案
func GetAnswer(ctx context.Context, llm llms.Model, docRetrieved []schema.Document, prompt string) (string, error) {
 // 创建一个新的聊天消息历史记录
 history := memory.NewChatMessageHistory()
 // 将检索到的文档添加到历史记录中
 for _, doc := range docRetrieved {
  history.AddAIMessage(ctx, doc.PageContent)
 }
 // 使用历史记录创建一个新的对话缓冲区
 conversation := memory.NewConversationBuffer(memory.WithChatHistory(history))

 executor := agents.NewExecutor(
  agents.NewConversationalAgent(llm, nil),
  nil,
  agents.WithMemory(conversation),
 )
 // 设置链调用选项
 options := []chains.ChainCallOption{
  chains.WithTemperature(0.8),
 }
 res, err := chains.Run(ctx, executor, prompt, options...)
 if err != nil {
  return "", err
 }

 return res, nil
}
运行应用
go run main.go getanswer

输入你想要咨询的问题

在这里插入图片描述

系统输出结果:

在这里插入图片描述

输出的结果可能会因为学习资料的不足或者模型的大小存在区别,有很多结果都不是很准确,这就需要提供更多的语料进行训练。而且还要对代码里的各个参数进行调优,并结合文档的内容,大小,格式等进行参数的设定。

项目的源码可以参考:https://github.com/hantmac/langchaingo-ollama-rag.git

参考资料

[1]ollama: https://github.com/ollama/ollama[2]gin: https://github.com/gin-gonic/gin[4]Qwen: https://github.com/QwenLM/Qwen1.5

​

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

卡门涡街可视化实战:从网格加密策略到动画后处理技巧 本文详细介绍了利用ANSYS Fluent进行卡门涡街可视化模拟的全流程,包括网格加密策略、求解器设置、涡街捕捉及动画后处理技巧。通过计算流体力学(CFD)方法,帮助工程师和研究人员高效模拟圆柱绕流现象,优化工程设计。 阅读详情

相关推荐

新手如何结合pbootCMS和宝塔面板快速构建网站

摘要: 新手可通过pbootCMS(轻量CMS)和宝塔面板(可视化工具)快速搭建网站,无需命令行。步骤包括:1) 准备服务器(Linux/CentOS7.x)和域名;2) 安装宝塔面板并配置LNMP环境(PHP7.4+MySQL5.7);3) 创建网站目录,上传并解压pbootCMS源码,设置文件权限;4) 运行安装向导,填写数据库信息和管理员账号;5) 测试前台/后台功能,优化性能并绑定域名。全程约30-60分钟,宝塔简化运维,pbootCMS便于内容管理,适合零基础用户。注意定期更新和备份以保障安全。

qinzhenyan的博客 1646

ollama命令

ollama是一个功能强大的工具,支持模型的下载、运行、管理和交互。通过上述命令,您可以轻松在本地部署和使用各种大型语言模型。如果需要更详细的文档或示例,可以参考Ollama 官方文档。

zhglhy的专栏 2231

Cursor 团队代码规范与开发规则

本文提出了一套 Cursor 项目开发规范,涵盖代码结构、命名、日志、测试等关键环节,旨在提升代码质量和团队协作效率。核心规则包括:文件不超过2000行、函数不超过80行;变量命名禁用无意义单词;日志只记录关键信息;配置项禁止硬编码;依赖和敏感信息统一管理;核心逻辑测试覆盖率≥80%;Git提交遵循Conventional Commits规范。通过一个车辆数据处理函数的改造案例,展示了从"不规范"到"规范"的代码优化过程,体现了拆分函数、常量管理、错误处理等规范的实际

1257

【AI大模型】基于 langchaingo 对接大模型 ollama 实现本地知识库问答系统

Ollama 官方还提供了跟 docker hub 一样的模型 hub,用于存放各种大语言模型,开发者也可以上传自己训练好的模型供其他人使用。

DEVELOPERAA的博客 1451

STM32L431电池供电项目实战:用STOP2模式把功耗降到5uA以下(CubeMX配置详解)

本文详细介绍了如何在STM32L431电池供电项目中利用STOP2模式实现5μA以下的超低功耗设计。通过CubeMX配置、硬件优化和软件策略,成功将农业温湿度监测节点的待机功耗控制在4.7μA,确保CR2032电池供电下3年以上的工作寿命。文章包含完整的低功耗实现路径和实测数据,特别适合物联网边缘设备开发者参考。

weixin_30345577的博客 395

PP生产订单的BADI增强 WORKORDER_UPDATE

我们的项目需求是: 1、 保存时检查工单BOM是否存在物料号相同的行项目,如果有则提示“物料& 重复,请检查工单BOM” 系统增强出口:PPCO0001,检查组件行项目是否有重复物料项 开始以为的增强增强看一下是用PPCO0001还是PPCO0007 后来找到了badi WORKORDER_UPDATE IF_EX_WORKORDER_UPDATE~BEFORE_UPDATE

ERP运维咨询(目标和成功) 4637

“error“:“model \“nomic-embed-text\“ not found, try pulling it first“

进入ollama官网找到如下命令,并将命令行复制,在VS Code的 terminal/终端 中执行即可解决。做基于langchain和本地大模型以及会话式检索增强生成时出现了如下错误。

Cdlwasd的博客 4454

Ubuntu1804 关于ubuntu18.04下载软件仓库信息失败,请检查网络连接 的解决方案

今天电脑在更换软件源的时候遇到了这个问题。出现了如上图所示的错误信息。 尝试了各家优快云的博客之后,发现方法大同小异,均无法解决。 方法大多都是要求更换软件源,如下所示: 打开“Ubuntu软件中心”-->点击“编辑”-->点击“软件源”-->在Ubuntu软件界面,“下载自”默认是“中国的服务器”,改为“主服务器”试试 2.打开更新管理器-》设置-》选择站点-》...

weixin_43729409的博客 1万+

【本地部署DeepSeek+配置】

最近国产LLMDeepSeek-R1很火,我也是在第一时间就体验了一把,出乎我意料的是他竟然比付费版的GPT-o1还好用,openAI你还我每个月20美元的会员费😭。话不多说,本文就从0开始教一下大家怎么拥有一个不会“系统繁忙,请稍后再试”的DeepSeek。😊。

weixin_42333261的博客 1486

2026滑块验证码终极实战:缺口检测算法+人机轨迹模拟,识别率从60%飙升至95%全方案

**摘要:2026年AIGC技术发展导致传统验证码失效,滑块验证码成为主流防护手段。本文深入分析了传统方案识别率低的原因,并提出多级检测融合和行为拟合优化方案。通过图像预处理优化、三级缺口检测引擎(差分图像法、Hu矩轮廓匹配、YOLOv8n模型兜底)将识别率提升至99.2%。同时针对轨迹模拟环节,设计了包含抖动特征、时间随机性和个体差异的行为模型,使通过率从12%提升至87%。该方案解决了传统方法在缺口定位精度和轨迹真实性方面的核心痛点,为应对新一代验证码风控提供了完整的技术框架。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1902

GVINS数据采集(u-blox fp9 + D435i)

1、配置千寻的RTK账号 采集数据当天购买千寻的RTK账号,然后在Window下,输入账号和密码 (具体的步骤如之前面连接所示),查看u-center软件上的信息,确保接收机可以收到RTK信息; 2、查看Linux系统下u-blox是否可以正常接受GPS信号和RTK数据流 1、GPS信号信息 // 打开端口 1 cd ublox_f9p/src // 或者在终端1下也可以 source devel/setup.bash r.....................

努力努力努力 2609

nomic-embed-text:latest 是做什么的

是一个高效、轻量化的嵌入模型,适用于文本向量化、语义检索和多模态数据处理。它在本地部署和开源生态中具有广泛的应用前景,尤其适合需要高效处理文本和文档的场景。

zhglhy的专栏 3599

手把手教你学Simulink--移动机器人多轮协同场景实例:基于Simulink的双轮差速PMSM轮毂电机协同驱动仿真

本文介绍了基于Simulink的双轮差速PMSM轮毂电机协同驱动仿真系统。针对移动机器人存在的电机参数不一致、负载分配不均等问题,提出主从同步+力矩补偿的协同控制策略。通过搭建包含运动学模型、PMSM电机模型和矢量控制器的仿真系统,实现了速度同步误差<0.005m/s、轨迹跟踪误差<0.8cm、能耗降低12.5%的优化效果。文章详细阐述了建模步骤、核心算法实现和性能验证,为移动机器人动力系统设计提供了实用参考方案。

MHD0815的博客 134

LangChainGo隐藏技巧:用Ollama本地运行Llama3替代OpenAI收费方案

本文介绍了如何利用LangChainGo框架结合Ollama本地部署Llama3大语言模型,构建一套完全免费、本地运行的LLM开发环境,以替代OpenAI等云端收费方案。文章详细阐述了从环境搭建、性能成本对比、硬件优化到实战部署的全流程,为预算有限或注重数据隐私的开发者提供了一套可行的开源模型集成与本地化部署指南。

berry的博客 1048

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

基于LangChain和Ollama构建企业级本地知识库问答系统:从架构设计到调优实战

本文详细介绍了一种基于LangChain框架和Ollama本地大模型的企业级知识库问答系统构建方案。该系统采用检索增强生成(RAG)技术,通过Chroma向量数据库实现语义检索与大模型推理的闭环,有效解决了传统大模型的三大痛点:知识时效性不足、领域适应性差和幻觉问题。文章从技术原理、环境配置、系统构建到性能优化,提供了完整的实施方案,包含核心算法代码、检索优化策略和实战案例。该系统支持PDF、Word等常见文档格式处理,采用分层架构设计确保数据隐私安全,实测可使问答准确率从45%提升至78%以上,显著降低企

七夜zippoe的博客 834

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LangChainGo实战指南:用Go语言轻松构建智能AI应用

还在为Go语言缺乏成熟的AI开发框架而烦恼吗?面对大语言模型应用的复杂性,你是否希望有一个简单高效的解决方案?LangChainGo正是你需要的答案——这是一个专为Go开发者设计的AI应用开发框架,让你能够快速构建智能对话、文档分析和自动化任务等AI应用。 ## 为什么选择LangChainGo? 在AI技术快速发展的今天,Go开发者面临着独特的挑战:虽然Go语言以其高性能和简洁性著称,但在A

gitblog_00057的博客 1122

Argo Workflows Java SDK 中 GithubAppCreds 类解析:GitHub App 凭据模型的字段、语义与事件源集成

`GithubComArgoprojArgoEventsPkgApisEventsV1alpha1GithubAppCreds` 是 Argo Workflows 项目为 Java 开发者自动生成的 SDK 客户端模型类,用于描述 **Argo Events 的 GitHub 事件源(GithubEventSource)在采用 GitHub App 认证方式时所需的凭据信息**。阅读完本文,你将掌

gitblog_00648的博客 313

如何快速上手LangChainGo:Go语言AI开发框架终极指南

还在为Go语言缺少成熟的AI开发框架而苦恼吗?想要快速构建智能对话机器人、文档分析系统,却不知道从何入手?LangChainGo正是你需要的解决方案!作为Go语言版的LangChain,它为你提供了构建大语言模型应用的完整工具链,让你能够用Go语言轻松开发各种AI应用。 ## 为什么选择LangChainGo? 在AI应用开发中,Go开发者常常面临几个痛点:缺乏统一的API接口、需要手动处理复

gitblog_01051的博客 418

[特殊字符]️[特殊字符] LangChainGo入门指南:用Go语言构建智能AI应用的最佳实践

还在为Go语言缺乏强大的AI开发框架而苦恼吗?想要快速构建智能对话、文档分析或自动化代理应用?LangChainGo正是你需要的解决方案!作为LangChain的Go语言实现,它为Go开发者提供了完整的LLM应用开发工具链,让你能够轻松构建各种人工智能应用。 LangChainGo是一个专为Go语言设计的大语言模型应用开发框架,通过模块化组件简化了与OpenAI、Ollama、Mistral等主

gitblog_00296的博客 674

LangChainGo实战:用Go语言构建企业级AI应用的3大核心场景

还在为Go语言生态中缺乏成熟的LLM开发框架而苦恼吗?当Python开发者享受着LangChain带来的便利时,你是否也在寻找一个同样强大的Go语言解决方案?今天,我将带你深入探索LangChainGo——这个专为Go开发者打造的AI应用开发框架,让你在Go生态中也能轻松构建智能对话、文档分析和自动化代理应用。 ## 🎯 为什么Go开发者需要LangChainGo? 想象一下这样的场景:你需

gitblog_01194的博客 646

终极LangChain Go入门指南:5分钟构建你的第一个AI应用 [特殊字符]

还在为Go语言缺少强大的AI开发框架而烦恼吗?想要快速构建智能对话、文档分析或自动化助手应用吗?LangChainGo正是你需要的解决方案!作为Go语言版的LangChain,它让你能够轻松集成各种大语言模型,通过模块化组件快速构建AI应用。无论你是AI新手还是经验丰富的Go开发者,LangChainGo都能为你提供简单高效的开发体验。 ## 为什么选择LangChainGo?🤔 LangC

gitblog_01103的博客 405

终极LangChain Go入门指南:3步构建你的第一个Go语言AI应用

还在为Go语言缺乏强大的大语言模型(LLM)开发框架而烦恼吗?想要快速构建智能对话、自动化文档分析等AI应用却不知从何下手?LangChainGo正是你需要的Go语言AI开发框架!作为LangChain的Go语言实现,它为大语言模型集成提供了完整的工具链,让你能够轻松构建各种AI驱动的应用程序。无论你是想创建智能聊天机器人、文档问答系统,还是自动化文本处理工具,LangChainGo都能帮你快速实

gitblog_00460的博客 885

终极LangChain Go检索增强生成(RAG)实战指南:从零构建智能问答系统

想要用Go语言快速构建基于大语言模型的智能应用吗?🚀 **LangChain Go** 为你提供了完美的解决方案!作为Go生态中最受欢迎的LLM开发框架,LangChain Go让检索增强生成(RAG)技术变得简单易用。无论你是Go开发者还是AI爱好者,这份完整指南都将带你掌握构建智能问答系统的核心技能。 ## 什么是LangChain Go和RAG技术? **LangChain Go**

gitblog_00467的博客 670

为什么大厂更喜欢用大模型应用开发框架LangChain,本文将从三个角度详解

如果你真的想学习大模型,请不要去网上找那些零零碎碎的教程,真的很难学懂!你可以根据我这个学习路线和系统资料,制定一套学习计划,只要你肯花时间沉下心去学习,它们一定能帮到你!

2401_85373691的博客 930

最完整的LangChain Go入门指南:从安装到实战

```go package main import ( "bufio" "context" "fmt" "log" "os" "strings" "github.com/tmc/langchaingo/chains" "github.com/tmc/langchaingo/llms/openai" "github.com/tmc/langchaingo/me

gitblog_00938的博客 1631
上一篇: RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐
下一篇: LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
少喝冰美式
博客等级 码龄3年 6847粉丝 517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值