用Langchain创建一个可以总结网页内容的Agent

2024-05-03 03:44

本文主要是介绍用Langchain创建一个可以总结网页内容的Agent,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  去年的时候我写过一篇关于OpenAi Function Call的实践文章,就是用Function Call的功能实现抓取并总结网页内容的功能,具体可以参考ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力,当时写了还算比较多的代码,最近在学习了LangChain的使用后,发现LangChain封装的很好了,同样的功能几乎不需要写太多的代码了。

  接下来我们还是以抓取并总结网页内容的Agent为例,来看下使用LangChain如何实现类似的功能,当然你要看懂这篇文章,必须对LangChain有一定的了解,如果完全没有任何了解,建议先去看下LangChain官网的一些入门概念,废话不说我们直接开始。

网页加载工具定义

  我们首先就是要定义个可以加载到网页内容的工具,这次我们直接使用LangChain提供好的WebBaseLoader。另外借助LangChain的装饰器@tool,我也仅需要正常写一个函数并表明出入参类型和功能即可,不用提供像之前那样复杂的函数定义schema。

@tool
def web_loader(url: str) -> str:"""抓取url对应网页的内容"""loader = WebBaseLoader(url)docs = loader.load()return docs[0].page_content

创建llm并绑定工具

llm = ChatOpenAI(model="gpt-3.5-turbo", max_tokens=4096)
tools = [web_loader]
llm_with_tools = llm.bind_tools(tools)

  llm我使用的是OpenAi的gpt3.5,你也可以使用其他模型,另外ChatOpenAI有很多其他参数可调,你可以按自己需求调整。这里最关键的一步,就是需要将llm和工具用bind_tools()绑定在一起,不绑定的话后续llm是不知道有哪些tool可以调用的。

创建prompt

  有些同学说prompt不是就一句话的事吗,还需要单独写! 我开始也是随意创建了一个prompt,结果调用报错了。 原来带有函数调用Agent的prompt是有特殊要求的,其中除了要包含input之外,还需要包含agent_scratchpad占位符,agent_scratchpad的作用就是在prompt留出函数调用中间结果的位置:

prompt = ChatPromptTemplate.from_messages([("system","你是一个擅长对长文做总结的智能助手,可以精确提炼出长文中的要点。注意,请使用markdown格式返回结果。",),("placeholder", "{chat_history}"),("user", "{input}"),MessagesPlaceholder(variable_name="agent_scratchpad"),]
)

创建Agent并执行

  agent 可以直接调用LangChain提供的create_tool_calling_agent方法,创建。

agent = create_tool_calling_agent(llm_with_tools, tools, prompt)

  agent创建好之后,必须创建agent执行器才可以执行,这里直接实例化AgentExecutor即可。

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=False)

  直接invoke下就可以看到我们想要的结果了~~

agent_executor.invoke({"input": "这个链接讲了什么内容? https://blog.csdn.net/xindoo/article/details/138356308?spm=1001.2014.3001.5501"}
)
{'input': '这个链接讲了什么内容? https://blog.csdn.net/xindoo/article/details/138356308?spm=1001.2014.3001.5501','output': '这篇博文介绍了一个命令行工具ShellGPT,它是一个开源软件,可以帮助用户快速生成 shell 命令、代码片段和文档,无需再依赖外部资源(如 Google 搜索)。以下是该文章的主要内容:\n\n- ShellGPT的配置安装:支持 Linux、macOS、Windows 等操作系统,安装简单,只需使用pip安装即可。\n- 函数调用:ShellGPT允许执行系统中的函数,如播放音乐、打开网页或执行 shell 命令。提供了一些高级配置选项。\n- 角色管理:用户可以创建自定义角色,这些角色可以用来生成代码、执行 shell 命令或满足特定需求。用户可以使用命令指定特定的角色执行指令。\n- 聊天功能:用户可以和GPT进行聊天,支持单轮聊天和多轮聊天模式。\n- 写命令并执行:用户可以借助GPT的编码能力写脚本或命令,并执行。\n- 其他功能:文章提及了一些其他细节和功能,如如何通过 API从 0 到 1 构建本地 GPTs、GPT每日面试题等。\n\n总的来说,ShellGPT是一个实用的工具,可以帮助用户在命令行环境下更高效地生成命令和代码,同时还提供了一些高级功能和配置选项。'}

  至此我们就完整的创建了一个可以总结网页内容的Agent,完整代码我放Github https://github.com/xindoo/LangChain-examples/blob/main/%E7%BD%91%E9%A1%B5%E6%80%BB%E7%BB%93.ipynb上了,有需要可以自取。
在这里插入图片描述

这篇关于用Langchain创建一个可以总结网页内容的Agent的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955763

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser