如何使用 Ollama:与当地 LLMs 一起实践并构建聊天机器人
- 如何使用奥拉玛
- 如何在 Ollama 中创建自己的模型
- 使用 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是一个名为Runnable
Langchain的接口,用于创建自定义链。您可以在这里阅读更多相关内容。
@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)通常涉及到以下几个步骤:
- 选择你的工具和平台:
- 决定是否需要构建自己的LLM,或者是否使用现成的如OpenAI的GPT-3等服务。
- 确定要用哪种编程语言和框架,例如Python、Node.js等。
- 选择适合的开发环境或代码编辑器。
- 了解LLM的原理:
- 阅读资料,了解LLM工作的基础原理,比如transformer模型、自然语言理解(NLU)和生成(NLG)等。
- 搭建开发环境:
- 安装必要的软件库和模块,比如
transformers
、tensorflow
或pytorch
等。 - 如果使用本地模型,设置好硬件资源,例如足够的RAM和GPU。
- 安装必要的软件库和模块,比如
- 收集和准备数据:
- 收集用于训练和测试机器人的对话数据。
- 数据清洗和预处理,将数据转换为模型可读的格式。
- 模型的训练和微调:
- 使用数据训练模型,或者对现有LLM进行微调,以适应特定的应用场景。
- 进行多次迭代,优化模型性能。
- 集成和接口开发:
- 创建API或接口以便不同的前端可以和LLM进行交互。
- 若需要Web界面,可以搭建前端页面利用这些API与后端的模型通信。
- 测试和部署:
- 在本地或测试服务器上运行你的聊天机器人并进行调试。
- 通过用户反馈和测试结果继续优化机器人。
- 部署到正式环境或者云服务器上供用户使用。
- 后续维护和更新:
- 监控机器人性能,处理任何技术问题。
- 定期更新内容和模型,以提高准确性和用户体验。
- 法律和伦理考虑:
- 确保聊天机器人的使用遵守相关的法律法规。
- 处理好数据隐私和用户安全等问题。
每一个步骤都可能需要深入学习和实践,尤其是在模型训练和微调部分,也可能需要相当的计算资源。 如果你是初学者,可以从使用现成的API或框架开始,逐步深入了解更多底层细节。
— OpenAi GPT4 —
-END-