使用 Ollama 构建本地 RAG AI 代理进行航空评论

发布: (2026年1月17日 GMT+8 00:51)
5 min read
原文: Dev.to

Source: Dev.to

Cover image for Building a Local RAG AI Agent for Airline Reviews with Ollama

我想探索使用检索增强生成(RAG)的完全本地 AI 代理能够做到什么程度。作为一个小小的出于好奇心的夜间项目,我构建了一个能够回答航空公司评论相关问题的代理——完全离线、快速且成本低廉。

技术栈概览

语言: Python
LLM 运行时: Ollama

模型

  • llama3.2 用于问答
  • mxbai-embed-large 用于嵌入

向量存储: Chroma

  • langchain
  • langchain-ollama
  • langchain-chroma
  • pandas

数据集: 来自 Kaggle 的航空公司评论 (CSV)

为什么选择 Ollama?

我在一台 Linux 云服务器上安装了 Ollama,但它同样可以在 大多数现代 PC 和笔记本电脑 上流畅运行。

  • 易于本地运行
  • 成本低廉(无需 API 费用)
  • 足够快,适合实验

非常适合副项目和学习使用。

数据集准备

数据集来自 Kaggle,包含 CSV 格式的航空公司评论。
为了让向量摄取更快更轻,我创建了一个 精简的 CSV 版本,仅保留对语义搜索相关的列(评论文本、航空公司名称、评分等)。这显著提升了:

  • 嵌入生成时间
  • 向量存储加载速度

高层架构

  1. 使用 pandas 从 CSV 加载航空公司评论。
  2. 使用 mxbai-embed-large 生成嵌入。
  3. 将向量存储在 Chroma 中。
  4. 为用户问题检索相关评论。
  5. 将检索到的评论 + 问题传递给 llama3.2
  6. 严格基于检索到的内容 生成答案。

这是经典的 RAG,但完全本地化。

提示设计

该提示明确且具有限制性,以避免产生幻觉:

You are an expert in answering questions about airline reviews.
Use the provided reviews to answer the question as accurately as possible.

Here are some relevant reviews: {reviews}

Here is the question to answer: {question}

IMPORTANT: Base your answer ONLY on the reviews provided above. If no reviews were found, say "No reviews were found."

这条单一指令已经大幅提升了答案的可靠性。

最小化 Python 设置(概念性)

import pandas as pd
from langchain_ollama import OllamaEmbeddings, OllamaLLM
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA

# 1. Load CSV
df = pd.read_csv("airline_reviews_reduced.csv")

# 2. Create embeddings
embeddings = OllamaEmbeddings(model="mxbai-embed-large")

# 3. Build vector store
vector_store = Chroma.from_documents(
    documents=df["review_text"].tolist(),
    embedding=embeddings,
    collection_name="airline_reviews"
)

# 4. Set up LLM
llm = OllamaLLM(model="llama3.2")

# 5. RetrievalQA chain
qa = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vector_store.as_retriever(),
    chain_type_kwargs={"prompt": YOUR_PROMPT_STRING}
)

# 6. Ask a question
answer = qa.run("How do passengers generally feel about Emirates?")
print(answer)

代码故意保持简洁易读,侧重于清晰而非抽象层次。

示例结果

✅ 示例 1:有效问题

问题: 乘客通常对阿联酋航空有什么感受?

结果: 代理检索了多个相关评论并正确地进行了总结。

有效答案

❌ 示例 2:无相关数据

问题: 本田 CRA 是一款好的 SUV 车吗?

结果: 由于未检索到相关评论,代理回复:

未找到评论…

无相关数据

GitHub 仓库

完整的源代码可在此获取:
👉 GitHub Repo: local-AI-agent-RAG

您可以克隆该仓库并按照 README 中的说明运行项目。

最终思考

本项目出于好奇心和兴趣而构建——是一种在不复杂化的前提下尝试本地 RAG 系统的方式。同样的方法可以进一步扩展:使用 更大的数据集更高性能的硬件,你可以构建出更快、更准确且可投入生产的系统。

目前,它作为一个可靠的概念验证,并提醒我们,有意义的 AI 项目并不一定需要庞大的基础设施即可启动 🚀

Back to Blog

相关文章

阅读更多 »

第13天:12天的间隔与回归

The Honest Part 第13天。可是自从我发布第12天已经过去了12天。是的,我知道这看起来像什么。心理和身体健康都有所下降。不会粉饰。