从零跑通本地 AI 链路:Ollama、FAISS 与 LangChain 实操指南

很多 AI 学习者都有这样的困惑:听说过 RAG、Agent、本地模型这些热门概念,却始终停留在「看文章」阶段,没真正跑通过一条完整链路。这篇教程带你用三个主流开源工具,在自己的电脑上把「模型加载 → 向量检索 → 智能体编排」这根主线彻底打通。内容面向有基础 Python 语法能力的读者,无需任何机器学习背景。
一、为什么选这三件套:先把概念翻成大白话
原生 AI 不神秘,其实就是让大模型在本地或私有环境里完成「思考、查资料、调工具」这三件事。对应到工具选型上,最经典的组合是三个开源项目:
- Ollama——模型的「发动机」。它负责把开源大模型下载到本机并跑起来,全程断网可用,行业数据不出公司,这是它最大的价值。
- FAISS——Facebook 开源的向量检索库,相当于给 AI 装一个「语义记忆库」。它按意思而非关键词来找内容,是搭建检索增强(RAG)应用的核心组件。
- LangChain——AI 应用的「编排脚手架」。它把模型、知识库、外部函数粘合在一起,让模型按照「思考 → 调用工具 → 回答」的闭环工作,也就是常说的 Agent。
三者全部开源免费,互相独立又自然衔接,非常适合作为入门本地 AI 的第一批工具。
二、动手前的准备:两行命令搞定环境
不用装各种复杂的框架,先把 Python 依赖一次性装好:
pip install ollama langchain langchain-community faiss-cpu
然后拉取一个轻量级的开源模型。这里强烈建议新手从 qwen2.5:3b 开始——30 亿参数的体量,普通笔记本也能流畅运行,用来做实验完全够用:
ollama pull qwen2.5:3b
顺手再准备一个嵌入模型 nomic-embed-text(用于把文字变成向量),后面的语义检索会依赖它。等下载完成,整条链路的「物资储备」就齐了。
三、第一步:让本地模型开口说话
先做最简单的热身:直接调用本机模型提问。核心代码只有几行:
from ollama import chat
resp = chat(
model="qwen2.5:3b",
messages=[{"role": "user", "content": "用一句话解释什么是向量数据库"}],
)
print(resp["message"]["content"])
运行后稍等片刻,模型会返回一句通顺的中文解释。相比调用云端 API,这种方式的好处非常直接:数据全程不出本机。如果你的学习资料或公司文档涉及隐私,这种本地推理是放心的选择。
四、第二步:让搜索从「按词找」升级为「按意思找」
传统搜索匹配的是关键词,而向量检索匹配的是语义。哪怕你问的措辞和文档完全不一样,只要意思相近也能命中。这一步操作分三段:先把几条说明文字通过嵌入模型变成向量,存进 FAISS 索引;再用一句自然语言提问,让系统检索最相关的两条。
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import FAISS
docs = [
"LangChain 用于编排大模型应用",
"FAISS 提供高效的相似度检索",
"Ollama 支持本地模型运行",
]
embeddings = OllamaEmbeddings(model="nomic-embed-text")
store = FAISS.from_texts(docs, embeddings)
results = store.similarity_search("如何实现本地向量检索?", k=2)
试着把提问换成「语义检索底层的原理」,你会发现返回的依然是关于 FAISS 的那条文档。这就是 RAG(检索增强生成)的精髓:先从海量资料里按意思捞出最相关的内容,再把这些内容交给大模型总结。掌握了这个小实验,你就理解了所有知识库问答应用的骨架。
五、第三步:让模型学会自己调工具(Agent 初体验)
只会聊天的模型只是助手,会调工具的模型才叫智能体。我们给模型注册一个「加法计算器」工具,然后向它提问。模型会自行判断:这个问题需要调用工具吗?需要的话调用哪个?拿到结果后再组织语言回答。
from langchain.agents import AgentExecutor, create_react_agent
from langchain_community.chat_models import ChatOllama
from langchain.tools import tool
from langchain.prompts import PromptTemplate
@tool
def add(a: int, b: int) -> int:
"""计算两个整数之和"""
return a + b
llm = ChatOllama(model="qwen2.5:3b", temperature=0)
prompt = PromptTemplate.from_template("请使用提供的工具完成任务:{input}nn{agent_scratchpad}")
agent = create_react_agent(llm, [add], prompt)
executor = AgentExecutor(agent=agent, tools=[add])
print(executor.invoke({"input": "计算 12 + 30 等于多少"}))
代码里的 @tool 装饰器是关键:它把普通函数注册成模型能识别的武器。temperature=0 则能让模型输出更稳定、不发散。最终结果是 42——对了,工具调用看似简单,但它是通往「自动查天气、自动写 SQL、自动发邮件」等复杂应用的通用套路。
六、新手避坑清单
- 顺序别乱:先跑通模型推理,再跑检索,最后跑 Agent。后面步骤依赖前面已验证好的环节,一上来就跑第三个脚本容易因模型未就绪而报错。
- 嵌入模型别选错:语义检索用的是 nomic-embed-text,而不是对话用的 qwen2.5:3b,两者职责完全不同,装混了会一直卡壳。
- 模型参数量力而行:qwen2.5:3b 足够覆盖入门实验,不要盲目追求大参数,电脑带不动会直接卡死。
- 温度值按需设置:需要稳定输出时设为 0,需要创意写作时再往上调。
小结
到这一步,你已经用三个开源工具完整走过了「模型加载 → 向量检索 → 智能体编排」这条链路。Ollama 解决模型私有化运行,FAISS 解决按语义查资料,LangChain 负责把一切串起来。这四步实验本身就是后续所有 AI 应用开发的骨架,无论你将来要做私有知识库还是自动化智能体,万变不离其宗。建议先把这套流程在本地闭眼跑熟,再根据实际场景更换模型、扩充工具、接入自己的文档。
本文基于 rss-juejin《AI开源工具一站式体验:上手探索原生AI能力》深度重写,事实与观点归原作者所有。建议阅读原文。原作者:风骏时光牛马。发布于 2026-10-16。