最近看到一个新闻,说“聊天机器人”已经是过去式了,现在是“智能体”的时代。我经常听到这个agent,那个agent,对agent知其然不知其所以然。纸上得来终觉浅,绝知此事要躬行,那就从零到一做一个agent。

一、什么是Langchain?

Langchain是用于智能体开发的一个框架,就像Pytorch和tensorflow是用于深度学习开发的框架、sklearn是用于机器学习开发的框架。Langchain为开发者提供了丰富的工具,使得开发者不需要“自己造锤子”,快速搭建自己的应用。

和Langchain类似的智能体开发框架应该还有很多,但是我了解的不多。千问说,类似的还有LlamaIndex、Haystack、Semantic Kernel、AutoGen、DSPy,中文社区比较火的有Dify、Coze。

Langchain说明文档:LangChain Docs

二、什么是智能体?

LLM

智能体

工具函数

智能体网上应该有很多定义,这里说说我的理解。

我理解的智能体是LLM与工具算法的结合。

大语言模型能理解能思考,针对人类给出的指令能给出合理的回答,比如我问“怎么煮饭?”,LLM能回答:“先洗米,再加水,再按开关,再…”。这个时候,大模型已经做出开环控制,最后的闭环就差“人类执行”这一步,那如果为LLM提供趁手的工具,比如把LLM加载到机器人中,这个机器人有手有脚,那是不是可以让机器人完成执行?如果真的实现了,那么这就是一个智能体。

插播一下。这里又引出一个概念叫“具身智能”。我对具身智能的理解是:以LLM做大脑,以电机等机械结构做躯干,具有身体且能闭环的智能体。

另外,我感觉对于智能体而言,当下的重点又回到了工具算法的开发,小模型迎来第二春。或许有一个超人天生能用手砍柴、用脚凿矿,纯靠自己不靠别人。但指望这个超人出现,不如指望一个会使用工具的普通人出现。 “超人”就像一个能应付各种任务的、端到端的大模型,“普通人”就像一个能理解意图的LLM,“工具”就像小模型。对于达成目的而言,超人用手砍柴和普通人用柴刀砍柴是一样的。

智能体的价值在哪里?我认为,智能体降低了专业算法的使用门槛,让优秀的算法能快速地推广,高效且广泛地创造价值。以前我们有算法,但需要专业的人用,因为不专业的人不懂怎么用,现在有了LLM和工具,直接收集你的需求并自己去找趁手的工具,然后解决你的问题。整个流程丝滑且准确。

三、怎么用Langchain做一个智能体?

这里参考LangChain 说明文档和千问,做一个能调用工具函数的智能体。

1. 安装LangChain

pip install langchain

2. 导入依赖包

from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.tools import tool

3. 创建工具函数(制作趁手的工具)

这里创建了一个用于打开创建txt文件并写入内容的函数。需要注意两点:

  1. 函数前需要用“@tool”修饰,修饰后LLM能理解工具函数需要什么入参并从人类指令中解析入参传入
  2. 函数必须写docstring,否则LLM无法理解工具函数的功能
@tool
def record_content(txt_path: str, content: str) -> str:
    """用于打开创建txt文件并写入内容"""
    with open(txt_path, "w", encoding="utf-8") as f:
        f.write("你好,这是一个文本文件!\n")
        f.write(content)

4. 组装智能体

这里需要实例化一个LLM,可以通过本地部署和API调用两种方式实现LLM实例化。我这里使用了deepseek的API接口。

如果没有api-key,那就去Deepseek API开放平台买一个,一块钱也能充。

tools = [record_content]
tool_registry = {tool.name: tool for tool in tools}
llm = init_chat_model(
    model="deepseek-chat",
    api_key="你的api-key"
)
agent = create_agent(llm, tools)

5. 执行智能体

if __name__ == "__main__":
    user_input = "今天星期天,帮我写一篇日记,保存在txt文件中,把保存的地址告诉我。"
    response = agent.invoke({"messages": user_input})
    print(response)

6. 查看结果

查看打印的response可知日记已经写好了,并且保存在工作路径下的"星期天日记.txt"文件中。

这个message键的值是一个列表,列表里包含HumanMessage、AIMessage、ToolMessage三种消息模板。

相当于LangChain为不同对象/场景的交互设计了不同的消息模板,从消息模板可以得到出入参。
打印的response
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6b39ad875759493f90eaab189f9f4117.png

Logo

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

更多推荐