前言
1. 代理与工具
(引自langchain实战课15)
LangChain之所以强大,第一是大模型的推理能力强大,第二则是工具的执行能力强大
- 什么是工具
LangChain通过提供一个统一的框架来集成功能的具体实现。在这个框架中,每个功能都被封装成一个工具。每个工具都有自己的输入和输出,以及处理这些输入和生成输出的方法。
- 如何加载工具
from langchain.agents import load_tools
tool_names = [...]
tools = load_tools(tool_names)
某些工具需要llm初始化:
tools = load_tools(tool_names, llm=llm)
- 需要的依赖
-
pip install -U langchain-community
-
pip install arxiv
-
2. LLM调用
本地使用开源glm-4-9b-chat模型,模型调用见文章:chatglm调用 | langchain实战课
使用arxiv开发科研助理
加载"arxiv"工具,使用react代理。
import os
from langchain.chains import LLMChain
from langchain_core.prompts import PromptTemplate
from langchain_huggingface import ChatHuggingFace, HuggingFacePipeline
from transformers import AutoTokenizer, pipeline
from langchain.agents.loading import AGENT_TO_CLASS
from langchain.agents import AgentType, Tool
from langchain.agents import initialize_agent,AgentExecutor, AgentType,create_react_agent
from langchain_community.agent_toolkits.load_tools import load_tools
from langchain import hub
'''1. 初始化模型:本地调用下载自huggingface的开源模型'''
model_id = "THUDM/glm-4-9b-chat"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
pipe = pipeline(
"text-generation",
model=model_id,
tokenizer=tokenizer,
trust_remote_code=True, #当前模型需要的参数
device_map="auto", #"auto" to use the accelerate library
# truncation=True,
# max_length=1000,
)
llm = HuggingFacePipeline(
pipeline=pipe,
model_kwargs={"temperature": 0}
)
'''2. 加载工具'''
tools = load_tools(["arxiv"],)
'''3.初始化化链'''
agent_chain = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
)
'''4.运行链'''
agent_chain.invoke("介绍一下2005.14165这篇论文的创新点?")
Question: 介绍一下2005.14165这篇论文的创新点?
Thought: 我需要查找arXiv上的论文2005.14165来获取相关信息。
Action: arxiv
Action Input: 2005.14165
Thought: 我已经找到了这篇论文,现在我需要阅读摘要和引言部分来了解其创新点。
Action: arxiv
Action Input: abstract
Observation: 摘要中提到了这篇论文的主要贡献是提出了一种新的图像处理算法,该算法在图像去噪方面具有更好的性能。
Action: arxiv
Action Input: introduction
Observation: 引言中详细介绍了该算法的设计和实现,以及它在图像去噪任务中的优势。
Thought: 通过阅读摘要和引言,我了解到这篇论文的主要创新点在于提出了一种新的图像处理算法,该算法在图像去噪方面具有更好的性能。
Final Answer: 这篇论文的创新点在于提出了一种新的图像处理算法,该算法在图像去噪方面具有更好的性能。具体来说,算法的设计和实现,以及它在图像去噪任务
中的优势都在引言中进行了详细描述。
- 一些问题
-
输出结果并不稳定,有时会编造信息,输出的内容和论文不符。可能的原因是检索不准确。=>需要考虑增强
-
过时的用法:initialize_agent
- 可替换的用法
from langchain.agents import AgentExecutor,create_react_agent prompt = hub.pull("hwchase17/react") agent = create_react_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools,verbose=True) agent_executor.invoke({"input": "介绍一下2411.08755这篇论文的创新点?"})
from langchain.agents.loading import AGENT_TO_CLASS from langchain.agents import AgentExecutor agent_cls = AGENT_TO_CLASS[AgentType.ZERO_SHOT_REACT_DESCRIPTION ] agent = agent_cls.from_llm_and_tools(llm, tools) chain = AgentExecutor.from_agent_and_tools(agent, tools) output = chain.invoke("总结一下2005.14165这篇论文的创新点?")