在前面的学习中,我们使用langchain调用大模型,我们使用langchain的文档loader和text spliter甚至是embedding和vector store了解了,参见文章:
https://blog.csdn.net/lineuman/article/details/150466154
https://blog.csdn.net/lineuman/article/details/150204441?spm=1001.2014.3001.5501

在这篇文章中学习使用langchain实现一个tool

如果说大模型是大脑,那么tool可以理解为手和脚。

langchain中tool的实现还是依赖于大模型的,大模型有一个功能叫做函数调用,

langchain community中有一个FileManagementToolkit,顾名思义,就是文件操作相关的。这里我们自己实现一个文件读写的工具,来交给大模型调用。自己实现是为了了解其原理,因为FileManagementToolkit是本地的,总有一天你需要操作沙盒或者网络文件,这个时候就要你自己实现了。

先看一下FileManagementToolkit怎么用


from langchain_community.agent_toolkits import FileManagementToolkit

toolkit = FileManagementToolkit(root_dir=".")
tools = toolkit.get_tools()
for tool in tools:
    print(tool.name, tool.description)
    if tool.name == 'read_file':
        read_file_tool = tool

print(read_file_tool.invoke({"file_path": "app.py"}))


自己实现一个read_file tool

并且调用,不过要注意的是,这里用了太多的手动调用,实际不实用,下面我们逐步深入,如何能够自动调用


from langchain_community.agent_toolkits import FileManagementToolkit
from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage,AIMessage
from langchain_core.tools import BaseTool, tool
from dotenv import load_dotenv
load_dotenv()

@tool
def read_file(file_path: str) -> str:
    """Read a file and return its contents."""
    with open(file_path, "r", encoding="utf-8") as f:
        return f.read()




model = init_chat_model("deepseek-chat")

model_with_tool = model.bind_tools([read_file])

msg = model_with_tool.invoke([HumanMessage(content="What is the content of app.py?")])

print(msg.tool_calls)
result = read_file.invoke(msg.tool_calls[0]["args"])
print(result)

方法一可以写个循环,判断如果是tool_calls那么就进行调用
方法二使用langchain提供的agent

在工具调用之前,也可以增加一个人工的approve


总结一下之前的概念

documents
document loader
embedding
vector store

message: system human ai
tool_call 还是call_tool?

How to cache chat model responses

通俗来说,langchain里面介绍了很多调用llm的概念。如果不用langchain用其他框架可能也会用到。

当然了,有时候同一个问题,我们还是希望不同的答案,那这种情况就不要开启缓存了。

可以使用内存缓存,也可以使用SQLiteCache缓存
from langchain_core.caches import InMemoryCache
from langchain_community.cache import SQLiteCache

在这里插入图片描述
在这里插入图片描述

How to handle rate limits

from langchain_core.rate_limiters import InMemoryRateLimiter

rate_limiter = InMemoryRateLimiter(
requests_per_second=0.1, # <-- Super slow! We can only make a request once every 10 seconds!!
check_every_n_seconds=0.1, # Wake up every 100 ms to check whether allowed to make a request,
max_bucket_size=10, # Controls the maximum burst size.
)


明天学习How to pass multimodal data to models
还有就是retriever还要看看

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐