前置说明: 本人不是大牛工程师,也不是卖课营销号,所有内容仅为个人自学心得,纯学习分享,仅供大家参考。
宇宙级免责声明: 本人专科非计算机专业出身,工作一年后从零自学C语言,后续主攻Python后端与爬虫方向。靠着一年的业余深耕,拿到了和本科竞争者同台面试、上岗的机会,成功入职2.5线互联网公司完成跨专业转行。
本篇笔记纯粹是个人学习复盘,无营销、无引流,内容如果有认知偏差或技术错误,欢迎各位大佬指正交流!Salute!
下面聊聊我为什么突然入坑 RAG + AI Agent。
之前我接过不少AI应用开发的外包项目,但全程都只是简单调用现成的AI API。做多了之后其实感触很深:套壳调用的项目同质化严重、玩法单一,完全没有技术深度,做不出成就感。
加上最近频繁刷到各类博主分享的Agent、Codex、OpenClaw等智能体相关内容,好奇心直接拉满,特别想深挖一下底层逻辑,不再只做"调包侠"。
最开始我的想法特别天真:想尝试自己全参数大模型训练。
后来才发现完全是天方夜谭------不是技术学不会,是硬件和钱包不允许😂。直接劝退全套训大模型的想法。
退而求其次,我打算先从LoRA微调入手入门。结果又遇到新问题:我主力机是7650GRE,A卡跑LoRA依赖ROCm,而ROCm又必须依托Linux环境。
摆在面前的只有两条路:要么搭虚拟机凑活,要么装双系统。但刚好赶上AI热潮带动硬件、硬盘涨价,折腾成本和时间成本都很高。
本着"来都来了,不能空手而归"的心态,我放弃了硬啃高成本的训练微调路线。在同事、朋友和AI的辅助参考下,我选择了门槛更低、落地性更强、普通人也能上手的方向:系统学习 RAG 知识库 + AI Agent 智能体,正式开启我的AI进阶学习之路。
简单聊聊我现阶段自学下来,对这两个技术的通俗理解(纯小白视角):
关于RAG:其实原理很好理解,哪怕是我之前的外包老板,非技术出身都在自己学着搭建RAG知识库。核心就是让大模型绑定专属私有数据、告别一本正经的胡说八道,属于目前落地最成熟、最实用的AI技术之一,这里就不多废话细讲了。
重点说我最好奇的 AI Agent。
没入门之前,我和绝大多数人一样,产生过离谱误区:总觉得Agent是不是意味着AI觉醒了自我意识、可以自主思考自主学习了?
问了行业前辈之后,一句话直接给我讲透了:通俗来说,基础Agent就是给AI套了一层循环逻辑。当然,成熟的高阶Agent远不止简单循环,还包含工具调用、规划、反思、记忆等完整逻辑。
再说到去年很火的 OpenClaw桌面智能体 ,请教前辈后让我瞬间通透:它的核心逻辑,和我之前写过的pyautoGUI自动化项目高度相似。本质就是让大模型拥有工具使用能力,把判断、决策、规划的权力交给LLM,让AI自主操控电脑、完成各类桌面操作和任务流程。
OK,让我们开始吧,下面展示本次学习成果!
首先说明一下我的一些基础参数: 模型:Qwen2.5(安全对齐消融) 7B模型 部署工具:Ollama(后继想脱离Ollama) 工具开发语言:Python
先看成果:

本次完成了,AI调用获取时间函数、读取文件、创建文件功能。 下面来说说我的原理理解: 首先是基础配置:
import Ollama 进行库的导入
ollama.chat接口调用及参数:
model:为调用的模型名字 (必填)
messages:是给到AI的聊天记录,同时也是给到AI用户的回答 (必填)
tools:定义给AI调用的工具以及工具怎么调用需要哪些参数 (选填)
options:是给到AI的参数设置(选填)
messages.content:返回AI回复内容
基础调用(例):
注意:其中messages字典里面的"role"字段代表聊天记录中角色的定义,"content"代表聊天内容,保存方式:一个字典代表一句话,保存一句话有两个必填参数就是角色和聊天内容。user代表用户,assistant代表AI,tool代表工具
ini
A = ollama.chat(
model = "AI模型名字",
messages = [{"role":"user","content":"用户的输入"},{"role":"assistant","content":"AI的回复"},{"role":"tool","content":"工具返回的数据"}],
options = {"temperature": 0.3}
)
return A.messages.content #AI返回回复内容
以上即可完成AI基本调用
tools工具篇:
思路导入:首先要知道AI不是自己可以完成很多事,LLM语言大模型只负责思考(大脑),完成电脑上的操作需要外部工具(手脚)完成,所有本篇会讲怎么让AI自己去使用工具(包含自己写的程序)。
ollama.chat接口调用及参数中讲到了,tools参数是定义给AI调用的工具以及工具怎么调用需要哪些参数的参数,那么我先把这个参数拆开来:
ini
tools = [
{"type":"function","function":{
"name":"工具的函数名字",
"description":"获取当前系统的日期和时间,当用户询问现在几点、当前日期时调用这个函数",
"parameters":{
"type":"object",
"properties":{},
"required":[] }
}
}
]
第一层字典:type:function声明这个工具的类型是【函数调用工具】
第二层字典:"function":{},把这个函数的全部信息打包放进这个子字典里(名字、描述、参数)。
"type":"object"是告诉AI我们要返回的数据格式,object也就是字典JSON格式。
第三层字典:parameters:{},是函数的参数说明书,写给 AI 看的,AI 读完就知道调用这个函数需要传什么数据。
tools第二部分:判断AI是否需要调用工具以及AI想调用什么工具
tool_calls中会返回AI想要调用的工具列表,然后使用function.name获取到工具的名字再根据名字进行Python工具程序调用,最后把工具返回的数据json化再塞回AI的聊天内容中。
例:
ini
if response.messages.tool_calls:
tool_calls = response.messages.tool_calls[0] #获取AI要调用的工具列表的第一位
func = tool_calls.function.name # 获取工具名字
if func == "函数名":
A = 函数名()#如果是的话就执行函数调用
prompt.append({"role":"tool","content":A})
B = ollama.chat(prompt)
return B.messages.content
下面开始展示带参版本tools: 带参版要从tools中多加几个参数,上代码:
json
{
"type":"function",
"function":{
"name":"get_file",
"description":"读取用户给出的指定文件,当用户给出文件名,例如:测试.txt,就调用这个函数",
"parameters":{
"type":"object",
"properties":{
"FileName":{
"type":"string",
"description":"要读取的文件名称,例如 测试.txt"
}
},
"required":["FileName"]
}
}
},
{
"type":"function",
"function":{
"name":"new_file",
"description":"当用户要求生成文章或生成代码文件时,调用这个函数",
"parameters":{
"type":"object",
"properties":{
"FileName":{
"type":"string",
"description":"生成文件的文件名,例如 文章.txt,Main.py"
},
"text":{
"type":"string",
"description":"正文内容,代码内容"
}
},
"required":["FileName","text"]
}
}
},
主要就是在parameters字典中加入对参数的解释(给AI看的),函数名:FileName中包含type告诉AI类型是string字符串,description解释这个参数应该填什么。
OK,那么今天的学习笔记分享到此结束了,下一次分享不知道是什么时侯,哈哈哈,本人比较笨,得等本人吃透后才敢给大家分享嘿嘿嘿。
最后送一句话给努力学习的同学们: 技术不辜负笨功夫,出身和学历只是起点,持续学习、稳步前行,就是普通人最好的逆袭。祝愿每一个努力提升自己的人,皆有所得、皆有所成!