Agent构建总结(LangChain)

跑通Agent的过程其实主要是在让LLM跑通以下链条:

有什么工具 → 当前需要用什么工具 → 结构化返回工具和参数 → 本地调用对应工具 → 得到最终结果

上述链条所有的实现均离不开prompt,因此我们可以将链条转换为以下两个问题:

  • 问题一:如何在prompt中告知LLM可用工具及工具用途?
  • 问题二:如何在prompt中约束LLM结构化返回工具和参数?

完成上述两个问题后Agent其实就可以完成单一工具的问题了,此时将会有一个新的问题:

  • 问题三:如何在prompt中约束LLM有次序的选择工具完成复杂任务?

本篇文章将针对上述问题进行简单总结

注意:出于简洁便于理解的意图,本篇文章中大面积结合 LangChain 实现。

一. 如何在prompt中告知LLM可用工具及工具用途?

利用LangChain我们可以先将工具及其信息生成一个工具对象,这及便于管理也便于后续对工具的调用,如下:

from langchain.tools import StructuredTool

tool = StructuredTool.from_function(
    func=func,
    name="ToolName",
    description="xxx",
)

参数解析:

  • func 传入我们已经实现的工具函数
  • name= 对该工具的命名
  • description 对该工具用途的描述

之后我们在写prompt的同时便可将工具及其信息一同写入,该步骤同样可用LangChain的接口实现。

from langchain_core.tools import render_text_description

with open(path, "r", encoding="utf-8") as f:
	main_prompt = ChatPromptTemplate.from_messages(
	    [
	        HumanMessagePromptTemplate.from_template
### 使用LangChain创建自定义工具Agent #### 准备工作梳理 为了构建能够执行特定任务(如SQL查询)的自定义Agent,需先安装并导入必要的Python库。这通常涉及`langchain`及其依赖项以及其他可能用于数据处理或API调用的相关模块[^1]。 ```bash pip install langchain sqlalchemy pandas ``` 接着,在编写具体逻辑前,应明确定义目标——即希望此Agent完成的任务是什么?对于本案例而言,则是要实现一个能与SQL数据库对话的功能性组件。 #### 定义自定义Tool类 基于上述需求分析,下面展示了一个简单的名为`SqlExecutor`的自定义Tool类的设计: ```python from typing import Dict, Any import pandas as pd from sqlalchemy import create_engine class SqlExecutor: """A tool that executes SQL queries against a database.""" def __init__(self, connection_string: str): self.engine = create_engine(connection_string) def run(self, query: str) -> pd.DataFrame: with self.engine.connect() as conn: result = conn.execute(query) columns = result.keys() rows = result.fetchall() return pd.DataFrame(rows, columns=columns) ``` 这里通过继承实现了基本接口方法`run()`,它接受一条SQL语句作为参数,并返回由Pandas DataFrame表示的结果集。此外还初始化了连接到指定数据库所需的引擎对象。 #### 实例化Tools并将其实例加入列表 一旦完成了对各个独立功能单元(即不同类型的Tool)的设计之后,就可以按照如下方式将其实例化并收集起来形成集合形式供后续操作使用[^2]: ```python sql_executor = SqlExecutor('sqlite:///example.db') tools = [sql_executor] ``` 此处假设已经存在一个SQLite数据库文件位于当前目录下命名为`example.db`;当然也可以替换为其他支持的数据源路径表达式以适应不同的应用场景。 #### 配置Action Schema 为了让代理更好地理解如何利用这些工具所提供的能力去解决问题,可以通过设置action schema的方式让其知道每个动作应该接收什么样的输入格式以及预期产生的输出结构。例如针对前面提到过的`SqlExecutor.run()`函数来说,就应当告知系统该方法期望获取的是字符串类型的SQL命令文本[^3]。 ```json { "type": "object", "properties": { "query": {"type": "string"} }, "required": ["query"] } ``` 最后一步就是将以上准备好的所有要素组合在一起构成完整的Agent解决方案啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值