本地大模型编程实战(14)初探智能体Agent(1)


在前面的文章中,我们了解了 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

准备

在正式开始撸代码之前,需要准备一下编程环境。

  1. 计算机
    本文涉及的所有代码可以在没有显存的环境中执行。 我使用的机器配置为:

    • CPU: Intel i5-8400 2.80GHz
    • 内存: 16GB
  2. Visual Studio Code 和 venv
    这是很受欢迎的开发工具,相关文章的代码可以在 Visual Studio Code 中开发和调试。 我们用 pythonvenv 创建虚拟环境, 详见:
    在Visual Studio Code中配置venv

  3. Ollama
    Ollama 平台上部署本地大模型非常方便,基于此平台,我们可以让 langchain 使用 llama3.1qwen2.5deepseek 等各种本地大模型。详见:
    在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):
        """
        按批次嵌入,可以显示进度。
       
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值