当前位置: 首页 > news >正文

Langchain构建Agent

语言模型只能输出文本,无法执行 操作。Agent是使用LLM作为推理引擎来确定要执行的操作以及这些操作的输入应该是什么。然后根据结果,Agent进行执行。

创建Agent的API

pip install langgraph

初始化

import osfrom langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langgraph.prebuilt import chat_agent_executor
from langserve import add_routesos.environ['http_proxy'] = '127.0.0.1:7890'
os.environ['https_proxy'] = '127.0.0.1:7890'os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "LangchainDemo"
os.environ["LANGCHAIN_API_KEY"] = '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'
os.environ["TAVILY_API_KEY"] = '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'# 聊天机器人案例
# 创建模型
model = ChatOpenAI(model='gpt-4-turbo')# 没有任何代理的情况下
# result = model.invoke([HumanMessage(content='北京天气怎么样?')])
#无代理情况

Tavily搜索引擎

#from langchain_community.tools.tavily_search import TavilySearchResults

TavilySearchResults:Langchain的内置搜索引擎工具

其内部包含多个元数据,包含大量常用公共网站,而后逐个搜索。

返回也是个Runnable对象(即可以调用invoke)。需要 API_Key初始化os.environ["TAVILY_API_KEY"] 。

# LangChain内置了一个工具,可以轻松地使用Tavily搜索引擎作为工具。
#  max_results: 只返回两个结果
search = TavilySearchResults(max_results=2)  
# print(search.invoke('北京的天气怎么样?'))

search.invoke('北京的天气怎么样?')返回:

{网站1url,content},{网站2url,content}....

模型绑定工具

上面的,只是创建了个search对象,并没有和Model进绑定。但创建代理,不需要绑定操作

model.bind_tools( [工具对象] ) :模型绑定工具。

绑定后,模型自动推理,是否需要调用工具。

# 让模型绑定工具
tools = [search]
model_with_tools = model.bind_tools(tools)# 模型可以自动推理:是否需要调用工具去完成用户的答案
resp = model_with_tools.invoke([HumanMessage(content='中国的首都是哪个城市?')])
#
print(f'Model_Result_Content: {resp.content}')
print(f'Tools_Result_Content: {resp.tool_calls}')
#
resp2 = model_with_tools.invoke([HumanMessage(content='北京天气怎么样?')])print(f'Model_Result_Content: {resp2.content}')
print(f'Tools_Result_Content: {resp2.tool_calls}')

Q1不需要调用 search工具。因此tool_calls为空.

Q2 模型回答不了,因此 Model的content为空。

创建代理

 chat_agent_executor.create_tool_calling_executor( 模型 , [工具]):创建工具调用器。返回 代理执行器(Runnable)

#  创建代理agent_executor = chat_agent_executor.create_tool_calling_executor(model, tools)resp = agent_executor.invoke({'messages': [HumanMessage(content='中国的首都是哪个城市?')]})
print(resp['messages'])resp2 = agent_executor.invoke({'messages': [HumanMessage(content='北京天气怎么样?')]})
print(resp2['messages'])

Q1:模型能回答,因此就返回AIMessage

Q2:模型无法回答,因此AIMessage是空的,但ToolMessage是有的。

相关文章:

  • 使用AI工具打造专业级PPT的完整方案,结合 DeepSeek构思、Kimi生成内容、Napkin优化设计 等工具,分阶段详细说明流程及工具使用
  • 【软件测试】性能测试概念篇
  • 多个路由器互通(静态路由)无单臂路由(简单版)
  • 大数据应用开发——大数据平台集群部署
  • 线程池的封装(c/c++)
  • 5.VTK 相机
  • SpringBoot企业级开发之【文章分类-新增文章分类】
  • Delphi Ini文件对UTF8支持不爽的极简替代方案
  • uniapp h5接入地图选点组件
  • 用 Deepseek 写的uniapp油耗计算器
  • CentOS 7 安装教程
  • VS-Code创建Vue3项目
  • 医院处方外流对接外部药房系统(合规python代码版)
  • ROS ROS2 机器人深度相机激光雷达多传感器标定工具箱
  • 编解码器vs容器
  • webpack理解与使用
  • 方德桌面操作系统V5.0-G23 vim无法复制粘贴内容
  • 李飞飞团队新作WorldScore:“世界生成”能力迎来统一评测,3D/4D/视频模型同台PK
  • 【论文精读】COLMAP-Free 3D Gaussian Splatting
  • [linux] vim 乱码
  • 旅马大熊猫“福娃”“凤仪”平安回国
  • 1块钱解锁2万部微短剧还能日更,侵权盗版难题怎么破?
  • 以色列在加沙发起新一轮强攻,同步与哈马斯展开无条件谈判
  • 大风+暴雨,中央气象台双预警齐发
  • 缅甸发生5.0级地震
  • 当“小铁人”遇上青浦,看00后如何玩转长三角铁三