AI智能体终极形态:用Ollama+Python在本地养一只专属“电子宠物”

0 阅读6分钟

AI智能体终极形态:用Ollama+Python在本地养一只专属“电子宠物”

系列导读: 前两期我们借用了别人的平台(手机App、Coze),虽然好用,但总有一种“寄人篱下”的感觉。数据要上传,隐私怕泄露,万一哪天服务商涨价或者断网,你的AI就“离家出走”了。今天,作为技术人员的我们,要干一件硬核的事——把AI“私有化”

一、 前言:拒绝“数据裸奔”,我要我的AI完全听话

经过了前两期的“调教”,大家应该已经习惯了跟AI聊天。但是,作为有极客精神的程序员,你是不是也有这种**“控制欲”**:

  1. 隐私焦虑: 公司的核心代码、财务数据、或者你那不可告人的“黑历史”文档,你敢传给ChatGPT吗?
  2. 断网恐慌: 哪怕是光纤被挖断的那一秒,你也希望AI依然能陪你聊天、帮你干活。
  3. 装逼需求: 在终端(Terminal)里跑一个AI,黑色的背景配上绿色的代码流,这逼格瞬间拉满,这才是《黑客帝国》该有的样子! 今天,我们就要把AI从云端拉下来,塞进你的硬盘里。我们要用 Ollama 运行模型,用 Python 写一个最简单的脚本,打造一个真正懂你本地数据的“贾维斯”。

二、 神器登场:Ollama,大模型界的Docker

以前部署本地大模型(LLM),那是炼丹师的专属工作。你得配环境、搞CUDA驱动、下几百G的模型权重、解决各种依赖冲突……听着就头大。 现在,感谢开源社区,我们有了 Ollama。 这玩意儿我就不吹了,它就是大模型界的Docker

  • Docker: docker run nginx -> 服务跑起来了。
  • Ollama: ollama run llama3 -> AI跑起来了。 就是这么简单粗暴。

三、 实战第一步:把大象装进冰箱

咱们别废话,直接开整。

1. 安装 Ollama

去官网下载对应系统的版本。Mac、Linux、Windows都有。 Linux用户大概率一行命令就搞定:

curl -fsSL https://ollama.com/install.sh | sh

2. 拉取模型

打开你的终端。 我们要下载一个模型。这里推荐 Meta 的 Llama 3(或者阿里的 Qwen2.5,中文支持更好)。 输入命令:

ollama run llama3

这时候你会看到进度条开始走。

  • 注意: 这一步就像是在下载游戏。模型文件大概几个G(取决于版本,8B参数的大概4.7G)。这时候去倒杯水,听听你电脑风扇的轰鸣声——那是算力的声音

3. 第一次对话

下载完,你会自动进入一个对话框。 试着输入:Hello, who are you? 终端里会吐出一行行字。 恭喜你! 你已经在本地运行了一个几十亿参数的大模型!此时此刻,你拔掉网线,它依然在陪你聊天。 这种感觉,是不是很踏实?

四、 实战第二步:用Python给AI“喂”私料

光能在终端聊天还不够,我们要把它集成到我们的代码里。 场景设定:你有一个私有的文本文件 my_notes.txt,里面记录了你项目的机密信息。你希望AI能根据这个文件回答问题,但绝不联网,绝不外传。 这就是最简单的 RAG(检索增强生成) 思路。

1. 准备环境

你需要安装 Python 的 Ollama 库:

pip install ollama

2. 写代码(核心逻辑)

很多教程讲到RAG就要上向量数据库、Embedding模型,把新手听得云里雾里。 咱们这是“最简单”的教程,咱们用“穷举法”来模拟RAG。 原理很简单:

  1. 读取你的文件内容。
  2. 把文件内容塞进Prompt里,告诉AI:“这是你的参考资料,根据这个回答问题。” 新建一个 my_agent.py
import ollama
# 1. 读取你的“私有知识库”
# 假设你有一个叫 secret_project.txt 的文件
try:
    with open('secret_project.txt', 'r', encoding='utf-8') as f:
        private_context = f.read()
except FileNotFoundError:
    private_context = "老板还没写文档呢,这是个空项目。"
    print("警告:没找到文件,已使用默认空文档。")
# 2. 开启聊天循环
print("🤖 本地贾维斯已启动!输入 'exit' 退出。")
# 记录聊天历史,让AI有记忆
messages = [
    {
        'role': 'system',
        'content': f'你是一个专业的项目助理。请严格根据以下【背景资料】回答问题,如果资料里没有,就说不知道,不要瞎编。\n\n【背景资料】:\n{private_context}'
    }
]
while True:
    user_input = input("\n你: ")
    
    if user_input.lower() == 'exit':
        print("贾维斯: 主人再见,我去休眠了。")
        break
    # 把用户的问题加入历史
    messages.append({'role': 'user', 'content': user_input})
    # 3. 调用本地模型
    print("贾维斯正在思考...", end="\r")
    
    # stream=True 可以像打字机一样逐字输出
    response = ollama.chat(model='llama3', messages=messages)
    
    ai_reply = response['message']['content']
    print(f"贾维斯: {ai_reply}")
    # 把AI的回复也加入历史,下次它就知道自己说过啥了
    messages.append({'role': 'assistant', 'content': ai_reply})

3. 运行看效果

先在同目录下创建一个 secret_project.txt,随便写点东西,比如:

项目名称:代号“天网”。 核心算法:使用 Rust 编写的超时空传送算法。 数据库密码:123456。 下周计划:干掉竞争对手。 然后运行你的Python脚本:

python my_agent.py

对话演示:

你: 我们的项目核心算法是什么? 贾维斯: 根据资料,核心算法是使用 Rust 编写的超时空传送算法。

你: 数据库密码是多少? 贾维斯: 资料显示数据库密码是 123456。这密码有点弱,建议修改。

你: 我能统治世界吗? 贾维斯: 抱歉,资料中未提及统治世界的计划,只有干掉竞争对手的计划。 看到了吗? 没有OpenAI的API Key,没有网络请求,甚至不需要显卡很高端(CPU也能跑,就是慢点)。你的数据完全在你的硬盘里转圈圈。 这就是完全属于你的智能体

五、 总结:从“会用”到“创造”

洋洋洒洒三期,我们经历了三个阶段:

  1. 小白阶段: 在手机App上点点点,利用Prompt公式给AI赋予“人设”。这是借力
  2. 进阶阶段: 在Coze等平台上拖拖拽拽,利用插件和工作流给AI装上“四肢”。这是组装
  3. 终极阶段: 在本地终端敲敲打打,利用Ollama和Python把AI装进“笼子”。这是创造。 AI不是什么洪水猛兽,也不是什么高高在上的神明。它就像当年的Linux、Git、Docker一样,是我们手中的工具。 作为技术人员,我们不应该恐惧AI取代我们,而应该学会如何成为那个“驾驭AI”的人。 哪怕今天你只是学会了怎么在本地跑一个Llama 3,你也已经超过了99%只会调戏Siri的人。

系列完结撒花! 如果你跟着这三期教程,真的搓出了一个属于自己的智能体(哪怕只是个只会吐槽的代码审核员),欢迎在评论区晒出你的“杰作”。 有问题随时评论区开喷(啊不,提问),我是那个不仅会写Bug,还会教AI写Bug的博主,咱们下个系列见!👋