AI入门:用Ollama给本地大模型装个安全文件工具
零基础学会安装Ollama,配置本地大模型,并安全地让AI读取你电脑里的文件。
准备环境:装好Ollama和模型
首先,你需要一个能跑大模型的环境。Ollama(一个帮你本地运行大模型的免费工具)就是我们的选择。去 ollama.com 下载对应系统的版本(Windows、macOS、Linux都支持),安装后打开终端(命令行)。然后拉取一个模型,比如小巧的 llama3.2(一个适合入门的大语言模型):
- 在终端输入
ollama pull llama3.2,等待下载完成。 - 下载完成后,输入
ollama run llama3.2试试能不能聊天。能回复就说明环境OK了。
常见坑:如果下载慢,可以设置镜像源,或者换个时间再试。
安装步骤:让模型学会用工具
模型本身不会直接操作文件,我们需要写一点代码(Python)来教它。先装Python(如果没装,去python.org下载3.10以上版本)。然后安装依赖:
- 在终端执行
pip install ollama(让Python能调用Ollama)和pip install zod(一个验证数据的库)。
接下来,我们要给模型三个工具(就是让AI能调用的函数):列出文件夹、读取文件、搜索关键词。这些工具只读不写,很安全。下面是核心代码片段(你可以直接复制):
import ollama, os, pathlib, zod
# 定义工具模式
tools = [
{
"name": "list_dir",
"description": "列出文件夹内容",
"parameters": {"type": "object", "properties": {"path": {"type": "string"}}}
},
{
"name": "read_file",
"description": "读取文件内容(最大10KB)",
"parameters": {"type": "object", "properties": {"path": {"type": "string"}}}
},
{
"name": "grep",
"description": "在文件中搜索关键词",
"parameters": {"type": "object", "properties": {"path": {"type": "string"}, "pattern": {"type": "string"}}}
}
]
# 安全沙箱(只允许操作这个文件夹)
SANDBOX_ROOT = "/home/user/projects" # 改成你自己的项目路径
def safe_path(path):
abs_path = os.path.abspath(path)
# 检查是否在沙箱内
if os.path.relpath(abs_path, SANDBOX_ROOT).startswith(".."):
return None
# 处理符号链接
real = os.path.realpath(abs_path)
if os.path.relpath(real, SANDBOX_ROOT).startswith(".."):
return None
return abs_path
注意:一定要把SANDBOX_ROOT改成你自己的项目目录,否则AI能读你整个硬盘!
验证是否成功:让AI读个文件试试
写一个简单的循环,让AI可以连续调用工具:
messages = [{"role": "user", "content": "列出当前文件夹的文件"}]
for _ in range(8): # 最多8次交互,防止死循环
response = ollama.chat(model="llama3.2", messages=messages, tools=tools)
if response.message.tool_calls:
for call in response.message.tool_calls:
# 这里写具体执行代码(略),注意用safe_path验证路径
pass
else:
print(response.message.content)
break
运行后,如果模型能正确列出文件夹内容,就成功了!
下一步可以做什么
你已经让本地AI读文件了。接下来可以:
- 加更多工具,比如搜索整个项目、统计代码行数。
- 但千万不要让AI直接写文件,除非你加人工确认步骤(比如输出一个diff,让你按y才执行)。
- 试试让AI帮你总结代码、找bug,但记得限制它只能读你允许的文件夹。
记住:模型是规划者,你的代码是执行者。永远在代码里做安全检查,别信模型说的任何路径。这样你就能安全地享受本地AI的便利了。
内容来源
DEV Ollama
发布时间
2026-06-13 01:31