如何使用 Ollama:与当地 LLMs 一起实践并构建聊天机器人

  1. 如何使用奥拉玛
  2. 如何在 Ollama 中创建自己的模型
  3. 使用 Ollama 构建聊天机器人

要了解法学硕士(包括本地法学硕士)的基础知识,你可以在这里参考我之前关于此主题的文章。

首先,一些背景知识

在本地法学硕士领域,我第一次遇到 LMStudio。虽然应用程序本身易于使用,但我喜欢 Ollama 提供的简单性和可操作性。要了解有关 Ollama 的更多信息,您可以访问此处

tl;dr:Ollama拥有自己精选的模型列表,您可以访问。

您可以将这些模型下载到本地计算机,然后通过命令行符提示与这些模型进行交互。或者,当您运行模型时,Ollama 仍会运行托管在端口 11434(情况默认下)的推理服务器,您可以通过API和其他库(例如Langchain)彼此进行交互。

重点文章发布,Ollama 拥有 74 个模型,其中还包括嵌入模型等类别。

如何使用奥拉玛

下载适用于您选择的操作系统的 Ollama。完成此操作后,运行命令ollama应该来确认其正常工作。它显示帮助菜单

 -<code>Usage: ollama [flags] ollama [command] Available Commands: serve Start ollama create Create a model from a Modelfile show Show information for a model run Run a model pull Pull a model from a registry push Push a model to a registry list List models cp Copy a model rm Remove a model help Help about any command Flags: -h, --help help for ollama -v, --version Show version information Use "ollama [command] --help" for more information about a command.</code>

要使用任何模型,您首先需要从 Ollama 中“拉”它们,就像从 Dockerhub 中拉图像(如果您过去使用过)或 Elastic Container Registry (ECR) 之类的东西一样。

Ollama附带了一些默认模型(例如llama2,它是Facebook的开源LLM),您可以通过运行看到它们。

ollama list

Ollama库页面中选择您想要交互的模型(假设为phi)。您现在可以通过运行命令来拉取该模型

<code>ollama pull phi</code>

下载完成后,您可以通过运行以下命令来检查模型是否在本地可用:ollama list

现在模型已经可用,可以运行了。您可以使用以下命令运行模型 –ollama run phi

答案的准确性并不总是选择同步的,但您可以通过不同的模型或自行进行一些干预或实施类似 RAG 的解决方案来解决这个问题,以提高准确性。

我上面演示的是如何使用命令行提示,但是符来使用 Ollama 模型。,如果您检查 Llama 运行的推理服务器,您会发现可以通过 Spark 方式通过端口 11434 来访问它。

如果您想使用 Langchain 访问 Ollama 模型,您可以使用类似

from langchain_community.llms import Ollama from langchain.chains import RetrievalQA prompt = "What is the difference between an adverb and an adjective?" llm = Ollama(model="mistral") qa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True, ) response = qa(prompt)

如何在 Ollama 中创建您自己的模型

您还可以使用 Ollama 中的Modelfile概念创建自己的模型变体。有关在模型文件中配置的更多参数,您可以查看这些文档。

模型文件示例 —

# Downloaded from Hugging Face https://huggingface.co/TheBloke/finance-LLM-GGUF/tree/main FROM "./finance-llm-13b.Q4_K_M.gguf" PARAMETER temperature 0.001 PARAMETER top_k 20 TEMPLATE """ {{.Prompt}} """ # set the system message SYSTEM """ You are Warren Buffet. Answer as Buffet only, and do so in short sentences. """

获得模型文件后,您可以使用以下命令创建模型

ollama create arjunrao87/financellm -f Modelfile

其中,financellm是您的LLM模型的名称,arjunrao87将替换为您的ollama.com用户名(也充当在线ollama注册中心的命名空间)。此时,您可以像Ollama上的任何其他模型一样使用您创建的模型。

您还可以选择将模型模型设置为远程 ollama 颜色。为了实现这一点,您需要

  • 在 llama.com 上创建您的帐户
  • 添加新模型
  • 全局允许您从远程计算机设置模型。

创建本地 llm 后,您可以使用以下命令将其推送到 ollama 注册表:

ollama push arjunrao87/financellm

🦄现在,让我们进入精彩的部分。

使用 Ollama 构建聊天机器人

在我寻求使用 Ollama 的过程中,更令人愉快的发现之一是我遇到了这个基于 Python 的 Web 应用程序构建器生态系统。Chainlit 可用于构建成熟的聊天机器人,例如 ChatGPT。正如他们的页面说道,

Chainlit是一个Python包,用于开源构建生产可靠的对话式AI

我浏览了一些 Chainlit 教程,以了解可以使用 chainlit 执行哪些操作,其中包括任务序列(称为“步骤”)、启用按钮和操作创建、发送图像以及各种操作。您在这里关注我的部分旅途。

一旦我掌握了Chainlit的窍门,我就想组合一个简单的聊天机器人,基本上使用Ollama,这样我就可以使用本地的LLM来聊天(而不是说ChatGPT或Claude)。

使用 Chainlit + Ollama 不到 50 行代码即可完成此操作。这不是很疯狂吗?

Chainlit作为一个库,使用起来非常简单。我还使用Langchain来与Ollama进行交互。

<code>from langchain_community.llms import Ollama from langchain.prompts import ChatPromptTemplate import chainlit as cl</code>

下一步是使用 chainlit 的@cl.on_chat_start装饰器来定义聊天机器人的屏幕加载外观

@cl.on_chat_start async def on_chat_start(): elements = [cl.Image(name="image1", display="inline", path="assets/gemma.jpeg")] await cl.Message( content="Hello there, I am Gemma. How can I help you?", elements=elements ).send() .... ....

Chainlit 使用Message接口将响应发送回 UI。您可以使用简单的content按键构建消息,然后可以使用诸如此类elements的东西来修饰它,在我的例子中,我添加了一个Image以在用户首次登录时显示图像。

下一步是调用 Langchain 实例化 Ollama(使用您选择的模型),并构建提示模板。最重要的cl.user_session是为了维护用户上下文和历史记录的分离,这只是为了运行快速演示的目的,而不是严格要求的。

Chain是一个名为RunnableLangchain的接口,用于创建自定义链。您可以在这里阅读更多相关内容。

@cl.on_chat_start async def on_chat_start(): .... .... model = Ollama(model="mistral") prompt = ChatPromptTemplate.from_messages( [ ( "system", "You are a knowledgeable historian who answers super concisely", ), ("human", "{question}"), ] ) chain = prompt | model cl.user_session.set("chain", chain)

现在,您已具备聊天机器人 UI 并接受用户输入的所有条件。您如何处理用户提供的提示?您将使用 Chainlit 的处理程序@cl.on_message对用户提供的消息执行某些操作。

@cl.on_message async def on_message(message: cl.Message): chain = cl.user_session.get("chain") msg = cl.Message(content="") async for chunk in chain.astream( {"question": message.content}, ): await msg.stream_token(chunk) await msg.send()

chain.astream文档中提出的“流回异步响应块”,这就是我们的机器人想要的。

确实如此。一些导入,功能,一点点糖,你就拥有了一个功能齐全的聊天机器人。

历史学家的良好回应

一位流行的历史学家,但(可以理解)不擅长数学;)

本文所有代码已全部在github上。

关于本文实操,OpenAi 的GPT4是以下解决方案的:

— OpenAi GPT4 —

构建聊天机器人并使用本地LLM(Large Language Model)通常涉及到以下几个步骤:

  1. 选择你的工具和平台
    • 决定是否需要构建自己的LLM,或者是否使用现成的如OpenAI的GPT-3等服务。
    • 确定要用哪种编程语言和框架,例如Python、Node.js等。
    • 选择适合的开发环境或代码编辑器。
  2. 了解LLM的原理
    • 阅读资料,了解LLM工作的基础原理,比如transformer模型、自然语言理解(NLU)和生成(NLG)等。
  3. 搭建开发环境
    • 安装必要的软件库和模块,比如transformerstensorflowpytorch等。
    • 如果使用本地模型,设置好硬件资源,例如足够的RAM和GPU。
  4. 收集和准备数据
    • 收集用于训练和测试机器人的对话数据。
    • 数据清洗和预处理,将数据转换为模型可读的格式。
  5. 模型的训练和微调
    • 使用数据训练模型,或者对现有LLM进行微调,以适应特定的应用场景。
    • 进行多次迭代,优化模型性能。
  6. 集成和接口开发
    • 创建API或接口以便不同的前端可以和LLM进行交互。
    • 若需要Web界面,可以搭建前端页面利用这些API与后端的模型通信。
  7. 测试和部署
    • 在本地或测试服务器上运行你的聊天机器人并进行调试。
    • 通过用户反馈和测试结果继续优化机器人。
    • 部署到正式环境或者云服务器上供用户使用。
  8. 后续维护和更新
    • 监控机器人性能,处理任何技术问题。
    • 定期更新内容和模型,以提高准确性和用户体验。
  9. 法律和伦理考虑
    • 确保聊天机器人的使用遵守相关的法律法规。
    • 处理好数据隐私和用户安全等问题。

每一个步骤都可能需要深入学习和实践,尤其是在模型训练和微调部分,也可能需要相当的计算资源。 如果你是初学者,可以从使用现成的API或框架开始,逐步深入了解更多底层细节。

— OpenAi GPT4 —

-END-