文章目录
在前面的文章中,我们了解了 LLM(大语言模型)
如何使用 tool(工具)
,现在我们开始进一步,初探 Agent(智能体)
的玩法。
其中的 tool(工具)
用于从矢量数据库中查询信息,这种方式在 RAG(Retrieval Augmented Generation,检索增强生成)
也很常用。在这种场景中,能否准确的查询出有用信息很关键,为此我们本次将使用多种大模型进行对比演练。包括:
- 多语言通用
LLM
:llma3.1
,deepseek-r1
,qwen2.5
- 专用于嵌入检索的大模型:
shaw/dmeta-embedding-zh
,milkey/m3e
,mxbai-embed-large
,nomic-embed-text
,all-minilm:33m
了解 Agent(智能体)
tool(工具)
与 Agent(智能体)
的区别
工具往往用于大语言模型调用其它功能,比如:搜索、数据库查询、计算等;Agent(智能体)
是一个可以使用 LLM
处理复杂任务的智能体;它通常会决定:
- 何时调用
tool(工具)
- 选择哪个工具
- 处理工具返回的结果
ReAct(Reasoning + Acting)
ReAct(Reasoning + Acting)
是一种用于 Agent(智能体)
的决策方式,它结合了推理(Reasoning)和行动(Acting),让智能体能更灵活地思考和执行任务。
简单来说,ReAct
让智能体在做事情之前,先思考一下,然后再决定下一步行动,而不是盲目执行。
ReAct
的核心思路
- 观察环境(Observations):获取当前任务或问题的信息。
- 推理(Reasoning):分析当前信息,思考如何解决问题。
- 执行行动(Acting):基于推理结果,采取具体的行动(比如调用工具、查询数据库、与用户交互等)。
- 循环执行:智能体会不断重复观察 → 推理 → 行动的过程,直到任务完成。
关于 ReAct
的更多内容,请参阅:ReACT Agent Model
准备
在正式开始撸代码之前,需要准备一下编程环境。
-
计算机
本文涉及的所有代码可以在没有显存的环境中执行。 我使用的机器配置为:- CPU: Intel i5-8400 2.80GHz
- 内存: 16GB
-
Visual Studio Code 和 venv
这是很受欢迎的开发工具,相关文章的代码可以在Visual Studio Code
中开发和调试。 我们用python
的venv
创建虚拟环境, 详见:
在Visual Studio Code中配置venv。 -
Ollama
在Ollama
平台上部署本地大模型非常方便,基于此平台,我们可以让langchain
使用llama3.1
、qwen2.5
、deepseek
等各种本地大模型。详见:
在langchian中使用本地部署的llama3.1大模型 。
建立矢量数据库
我们这里收集了一些动物的信息,并定义了通用的处理本地矢量数据的方法,方便后面对不同的模型进行对比测试。
将文本转化成矢量的过程称之为 嵌入 ,语义相近的文本转化的矢量之间的空间距离较短,所以在做矢量检索时,可以根据语义而不是关键词来查找相近的结果。
数据文件
我们这里使用一个简单的 csv 格式的数据文件,每一行是一种动物特征的说明,格式如下:
名称,学名,特点,作用
狗,Canis lupus familiaris,忠诚、聪明、社交性强,看家护院、导盲、搜救、警务、情感陪伴
猫,Felis catus,独立、高冷、善于捕鼠,消灭害鼠、陪伴、缓解压力
处理本地矢量库的类
这里简单封装了 Chroma
对文本进行嵌入处理的方法,供参考:
class LocalVectorDBChroma:
"""使用Chroma在本地处理适量数据库"""
def __init__(self,model_name,persist_directory,delimiter = ","):
self._embedding = OllamaEmbeddings(model=model_name)
self._persist_directory = persist_directory
self._delimiter = delimiter
def get_vector_store(self):
return Chroma(persist_directory=self._persist_directory,embedding_function=self._embedding)
def embed_documents_in_batches(self,documents,batch_size=3):
"""
按批次嵌入,可以显示进度。