使用 Python、Ollama、LangChain 和 RAG 本地部署智能 Agent

前言

经过上次初步部署大模型到本地,现在又继续学系结合 Python、Ollama、LangChain 和 RAG 技术,完成本地智能 Agent 的搭建。

一、环境准备

  1. 安装 Python 3.8+
  2. 安装 Ollama
    • 访问 Ollama 官网 下载并安装适用于 macOS 的 Ollama。
    • 启动 Ollama 服务:
      1
      ollama serve
  3. 安装依赖包:
    1
    pip install langchain langchain-ollama langchain-chroma pandas

    依赖包可根据实际需求调整。

二、下载并运行本地大模型

以 deepseek-r1:8b 和 mxbai-embed-large 为例:

1
2
ollama pull deepseek-r1:8b
ollama pull mxbai-embed-large

三、构建本地 RAG Agent 示例

以下为一个简单的本地 RAG Agent 示例,结合 Ollama 本地大模型、LangChain 框架和 Chroma 向量数据库,实现知识检索增强。

1. 构建向量数据库

假设有一个 1.csv 文件,内容如下:

阶段 任务 技术/工具 负责人 预计时间 备注
第一阶段 需求分析 Python 张三 1 周
第二阶段 系统设计 Java 李四 2 周
第三阶段 编码实现 C++ 王五 3 周

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from langchain_ollama import OllamaEmbeddings
from langchain_chroma import Chroma
from langchain_core.documents import Document
import os
import pandas as pd

df = pd.read_csv("1.csv")
embeddings = OllamaEmbeddings(model="mxbai-embed-large")
db_location = "./chrome_langchain_db"
add_documents = not os.path.exists(db_location)
if add_documents:
documents = []
ids = []
for i, row in df.iterrows():
document = Document(page_content=str(row.to_dict()))
documents.append(document)
ids.append(str(i))
db = Chroma.from_documents(documents, embeddings, persist_directory=db_location)
db.persist()
else:
db = Chroma(persist_directory=db_location, embedding_function=embeddings)
retriever = db.as_retriever()

2. 构建问答 Agent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from langchain_ollama.llms import OllamaLLM
from langchain.prompts import ChatPromptTemplate

model = OllamaLLM(model="deepseek-r1:8b")
template = """you are expert in answering questions about the projects management.\nhere are some relevant reviews: {reviews}\nplease answer the question: {question}"""
prompt = ChatPromptTemplate.from_template(template)

while True:
print("~~~~~~~~~~~~~~~~~~~~~~~~~~")
question = input("Enter your question (or type 'q' to stop): ")
if question.strip().lower() == 'q':
break
docs = retriever.get_relevant_documents(question)
reviews = "\n".join([doc.page_content for doc in docs])
result = prompt.format(reviews=reviews, question=question)
answer = model.invoke(result)
print("Answer:", answer)

四、结语

通过以上步骤,可以实现本地部署一个简单的智能 Agent,利用 Ollama、LangChain 和 RAG 技术进行知识检索和问答。可以根据实际需求扩展功能,如集成更多数据源、优化模型等。