首页 > 其他分享 >终于有了!!!基于Langgraph使用本地LLM搭建agent!!!

终于有了!!!基于Langgraph使用本地LLM搭建agent!!!

时间:2024-10-30 11:18:32浏览次数:3  
标签:workflow Langgraph messages agent add LLM model tools

需求

Langchain是使用闭源LLM实现agent搭建的,Langgraph官网给的例子是基于Claude,其他一些agent例子也是基于OPENAI的,但是对于很多私有化场景,使用本地LLM搭建agent是非常重要的。但是网上并没有相关的教程,捣鼓了两天,捣鼓出来Ollama+Langgraph实现的基于本地LLM的agent搭建

模型部署

具体的模型部署可以看我之前的文章,Ollama部署

inference_server_url = "http://localhost:11434/v1"
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model="qwen2.5:14b",
    openai_api_key="none",
    openai_api_base=inference_server_url,
    max_tokens=500,
    temperature=1,
)

核心代码

from typing import Literal
from langchain_core.tools import tool
from langgraph.prebuilt import ToolNode
from langgraph.graph import StateGraph, END
from langgraph.graph import END, START, StateGraph, MessagesState

@tool
def search(query: str):
    """Call to surf the web."""
    # This is a placeholder, but don't tell the LLM that...
    if "sf" in query.lower() or "san francisco" in query.lower():
        return "It's 60 degrees and foggy."
    return "It's 90 degrees and sunny."
 
tools = [search]
tool_node = ToolNode(tools)
model_with_tools = model.bind_tools(tools)


# Define the function that determines whether to continue or not
def should_continue(state: MessagesState) -> Literal["tools", END]:
    messages = state['messages']
    last_message = messages[-1]
    # If there is no function call, then we finish
    if last_message.tool_calls:
        return "tools"
    # Otherwise, we stop (reply to the user)
    return END
    

# Define the function that calls the model
def call_model(state):
    messages = state['messages']
    response = model_with_tools.invoke(messages)
    # We return a list, because this will get added to the existing list
    return {"messages": [response]}
 
# Define a new graph
workflow = StateGraph(MessagesState)
 
# Define the two nodes we will cycle between
workflow.add_node("agent", call_model)
workflow.add_node("tools", tool_node)
workflow.add_edge(START, "agent")

# We now add a conditional edge
workflow.add_conditional_edges(
    "agent",
    should_continue,
)
workflow.add_edge('tools', 'agent')
app = workflow.compile()    

response = app.invoke(
    {"messages": ["what is the weather in sf"]},
    config={"configurable": {"thread_id": 42}}
)
print(response['messages'][-1].content)
print(response)

标签:workflow,Langgraph,messages,agent,add,LLM,model,tools
From: https://blog.csdn.net/xdg15294969271/article/details/143342832

相关文章

  • 2025秋招LLM大模型多模态面试题(十三)- rag(检索增强生成)技术
    1.基本概念检索增强LLM(RetrievalAugmentedLLM),简单来说,就是给LLM提供外部数据库,对于用户问题(Query),通过一些信息检索(InformationRetrieval,IR)的技术,先从外部数据库中检索出和用户问题相关的信息,然后让LLM结合这些相关信息来生成结果。下图是一个检......
  • AI大模型(LLMs)五大热点研究方向分享!
    近年来,人工智能大模型(LLMs)的研究不断深入,衍生出了多个热门方向,聚焦提升模型的性能、适应性与应用场景,推动了技术的突破与革新。今天为大家梳理一下AI顶会上的五大热门研究方向,希望为那些专注大模型方向的研究者带来一些灵感和参考。Part.01检索增强生成(RAG)大模型虽然在生......
  • 清华:细粒度强化学习优化LLM工具使用
    ......
  • 人大:优化工具文档提升LLM工具使用
    ......
  • 全面解释人工智能LLM模型的真实工作原理(完结)
    前一篇:《全面解释人工智能LLM模型的真实工作原理(三)》序言:本节作为整篇的收官之作,自然少不了与当今最先进的AI模型相呼应。这里我们将简单介绍全球首家推动人工智能生成人类语言的公司——OpenAI的GPT模型的基本原理。如果你也希望为人类的发展做出贡献,并投身于AI行业,这无疑是一......
  • 大模型LLM:为什么简单的乘法ChatGPT会算错?
    首先“心算”三位整数乘法不管对人类还是对模型来说都不简单的。如果使用CoT的方式就类似于“笔算”,如果使用编程的方式就类似于人拿着计算器算。我将问题更精确一点地表述为“模型如何在心算多位整数乘法上接近或超过人的水平?”这个问题困扰了我很久,简单乘法是推理能力的......
  • 全面解释人工智能LLM模型的真实工作原理(三)
    前一篇:《全面解释人工智能LLM模型的真实工作原理(二)》序言:前面两节中,我们介绍了大语言模型的设计图和实现了一个能够生成自然语言的神经网络。这正是现代先进人工智能语言模型的雏形。不过,目前市面上的语言模型远比我们设计的这个复杂得多。那么,它们到底复杂在什么地方?本节将为你......
  • 使用Spring AI和LLM生成Java测试代码
    背景     AIDocumentLibraryChat项目已扩展至生成测试代码(Java代码已通过测试)。该项目可为公开的Github项目生成测试代码。只需提供要测试的类的网址,该类就会被加载、分析导入,项目中的依赖类也会被加载。这样,LLM就有机会在为测试生成模拟时考虑导入的源类。可以提供te......
  • 全面解释人工智能LLM模型的真实工作原理(二)
    前一篇:《全面解释人工智能LLM模型的真实工作原理(一)》序言:在上一篇文章中,我们从原理上构建了一个识别“叶子”和“花朵”的神经网络,并详细讲解了它的工作过程。这包括对输入数字逐个与权重相乘后求和,加上偏置值,最后通过非线性处理和统计分布计算来得出输出。这些操作使用了简......
  • 系统学习AI Agent
    AIAgent系统介绍AIAgent(人工智能代理)是一个在用户和环境间起“代理”作用的自主智能系统。它根据设定的目标与环境交互,并自主执行决策或任务。这种智能体技术在智能客服、自动驾驶、金融交易、推荐系统等领域的应用广泛,不仅简化了复杂任务,还能自我学习和优化,提升任务效......