使用 Langchain 与 Ollama 和 本地LLM 构建和测试 AI Agent / RAG / ChatBot
LangChain 是一个用于开发由大型语言模型(Large Language Models, LLMs)驱动的应用程序的框架。
- Chatbots
- Chatbots 是聊天机器人,例如:ChatGPT、问答系统、客户支持应用。
- RAG
- 利用文档和知识源等外部数据源扩展LLMs知识。
- AI Agents
- AI Agents 可以计划、推理和执行行动。
- AI 强大搜索引擎
- 文本总结与生成
- 数据提取与处理
人工智能应用模型和相关组件的数量不断增加,导致开发者需要学习和使用的API种类繁多。这种多样性可能会让开发者在构建应用时难以在不同提供商之间切换或组合组件。LangChain为关键组件提供了一个标准接口,使得在不同提供商之间切换变得容易
随着应用程序变得越来越复杂,越来越难以理解它们内部正在发生的事情。
LangSmith是由LangChain构建的LLM应用程序的评估和调试平台。
它通过提供强大的工具来跟踪、记录、调试和基准测试不同的LLM组件,帮助开发人员测试、优化和监控他们的AI应用程序。
跟踪和评估您的语言模型应用程序和智能代理,以帮助您从原型过渡到生产。
LangGraph是一个用于构建具有LLMs的状态和多主体应用程序的库,用于创建代理和多代理工作流。
Ollama可以作为构建基于语言模型的应用程序的媒介,与本地模型一起使用LangChain。
进入官网进行下载 Download Ollama on Windows
或者进入Github官方仓库进行下载。
当选择要在本地运行的模型时,通常要选择型号:7b、8b、14b、32b等,其中的b代表的是十亿参数,也就是 70亿参数、80亿参数等、140亿和320亿参数等。目前 deepseek-r1模型中最大的参数为 6710亿参数。
使用 ollama list来列出所有本地的模型。
ollama list使用 ollama run下载并运行指定的模型。
ollama run deepseek-r1:14b使用 ollama rm删除模型
ollama rm deepseek-r1:14b我们可以使用以下可视化工具,将我们本地的模型运行在上面。
Msty - Using AI Models made Simple and Easy
GPT4All – The Leading Private AI Chatbot for Local Language Models
我们可以使用 ollama serve命令来运行服务,默认监听的端口号是 11434。
如果服务已经启动了,那么将会输出以下报错信息。
ollama提供了聊天接口api/generate通过以下参数来进行调用。
{
"model": "deepseek-r1",
"prompt": "为什么天空是蓝色的?"
}默认输出的结果是流式的,可以在参数中增加 stream并设置为 false,那么它将会一次性输出结果。
创建Python虚拟环境
python3.12 -m venv learn-langchain_env在Linux/MacOS下使用以下命令激活虚拟环境。
source learn-langchain_env/bin/activate在 Windows环境下直接运行运行activate即可。
.\learn-langchain_env\Scripts\activate在 Visual Studio Code中安装 Jupyter Notebook扩展插件。
运行以下命令:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/!pip install langchain
!pip install langchain-ollama
!pip install python-dotenvfrom dotenv import load_dotenv
import os
load = load_dotenv('./../.env')
print(os.getenv("LANGSMITH_API_KEY"))from langchain_ollama import ChatOllama
llm = ChatOllama(
base_url="http://localhost:11434",
model="deepseek-r1:8b",
temperature=0.5,
max_tokens=250
)
response = llm.invoke("你好,你今天怎么样?")
print(response)from langchain_core.prompts import PromptTemplate
prompt_template = PromptTemplate.from_template("What is the advantage of running the LLM in {env}")
prompt = prompt_template.invoke({"env":"local machine"})
llm.invoke(prompt)from langchain_core.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate
)
systemMessage = SystemMessagePromptTemplate.from_template("You are an LLM expert")
humanMessage = HumanMessagePromptTemplate.from_template("What is the advantage of running AI Models in {env}")
prompt_template = ChatPromptTemplate([
systemMessage,
humanMessage
])
prompt = prompt_template.invoke({"env":"local machine"})
content = llm.invoke(prompt)
print(content)from langchain_core.prompts import (
ChatPromptTemplate,
MessagesPlaceholder
)
from langchain_core.messages import HumanMessage
prompt_template = ChatPromptTemplate([
("system", "You are an LLM expert"),
MessagesPlaceholder("msg")
])
prompt = prompt_template.invoke({"msg":[HumanMessage("What is the advantage of running LLM in local machine")]})
for str in llm.stream(prompt):
print(str.content)