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


本文将基于上一篇文章完善 Agent(智能体) ,主要完善的功能有:

  • 跟踪 Agent(智能体) 的执行过程
  • 记录消息历史

此次我们使用 qwen2.5LLM(大语言模型) 驱动 Agent(智能体) ,使用 shaw/dmeta-embedding-zh 做中文嵌入和检索。

准备

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

  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大模型

创建智能体

本智能体根据用户的问题决策调用哪个工具回答还是不使用工具直接回答。它要调度两个工具:

  • 查询天气预报
  • 检索本地知识库,其中包含了关于 elasticsearch 的知识
"""
1. 查天气的工具
"""
from langchain_core.tools import tool

@tool(parse_docstring=True)
def get_wheather_info(
    city_name: str = ''  #不设置默认值可能导致LLM强行解析city_name出错或者强行调用这个tool
) -> str:
    """获取某个城市的天气信息。如果没有可靠的依据来确定 city_name,则不要调用 get_wheather_info!

    Args:
        city_name: 城市名称。        
    """
    print(f'Getting weather information for:{
     city_name}')
    if not city_name:
        return "缺少 city_name 参数,无法检索天气信息。"        
        """
        **这个返回很重要**
        返回错误后,agent会放弃这个结果,用自己的能力回答问题,这样结果更加合理;
        否则,agent会使用空的city_name调用这个tool,并且会拼凑出new york的天气或者别的天气方面的信息。
        """
    else:
        return f"{
     city_name}的气温是25摄氏度。"

"""
2. 创建一个检索器
"""

def create_retriever(embed_model_name):
    """创建检索器"""

    persist_directory = get_persist_directory(embed_model_name)
    db = LocalVectorDBChroma(embed_model_name,persist_directory)

    # 基于Chroma 的 vector store 生成 检索器
    vector_store = db.get_vector_store()
    retriever = vector_store.as_retriever(
        search_type="similarity",
        search_kwargs={
   "k": 2},
    )
    return retriever

"""
3. 创建工具集 tools
"""

from langchain.tools.retriever import create_retriever_tool

def create_tools(embed_model_name):
    """创建工具集"""

    retriever_tool = create_retriever_tool(
        create_retriever(embed_model_name),
        "elastic_search",
        "只有当您搜索有关 elasticsearch 的知识时才能使用此工具!",
    )

    tools = [get_wheather_info, retriever_tool]
    return tools

"""
4. 创建智能体
"""

from langchain_core.prompts import ChatPromptTemplate
from langchain.agents import create_tool_calling_agent
from langchain_ollama import ChatOllama

def create_agent(llm_model_name,embed_model_name):
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值