全部版块 我的主页
论坛 数据科学与人工智能 人工智能
207 0
2025-11-18

一、langchain调用模型

官方文档(第三方集成)
https://docs.langchain.com/oss/python/integrations/chat

1、本地ollama

  1. pip install --upgrade langchain-ollama langchain-core langchain
  2. from langchain_ollama import ChatOllama
    model = ChatOllama(model="qwen3")
    question = "你好,请你介绍一下你自己。"
    result = model.invoke(question)
    print(result.content)

2、qwen

  1. pip install --upgrade dashscope
  2. pip install langchain_community
  3. import os
    from dotenv import load_dotenv
    from langchain_community.chat_models.tongyi import ChatTongyi
    load_dotenv(override=True)
    QWEN_API_KEY = os.getenv("QWEN_API_KEY")
    os.environ["DASHSCOPE_API_KEY"] = QWEN_API_KEY
    model = ChatTongyi()
    question = "你好,请你介绍一下你自己。"
    result = model.invoke(question)
    print(result.content)

3、GLM

pip install -U httpx httpx-sse PyJWT

from langchain_community.chat_models import ChatZhipuAI
from langchain.messages import AIMessage, HumanMessage, SystemMessage
import os
os.environ["ZHIPUAI_API_KEY"] = "zhipuai_api_key"
model = ChatZhipuAI(
model="glm-plus",
temperature=0.5,
)

二、模型调用、记忆管理与工具调用

1、记忆管理

  1. 创建消息列表
    from langchain.messages import HumanMessage, AIMessage, SystemMessage
    # 其中:
    # HumanMessage表示用户提出的问题
    # AIMessage表示大型模型的回答
    # SystemMessage表示系统提示
    例如:
    system_msg = SystemMessage("你叫小伍,是一名乐于助人的助手。")
    human_msg = HumanMessage("你好,好久不见,请介绍下你自己。")
    messages = [system_msg, human_msg]
    # 将记忆信息发送给模型
    response = model.invoke(messages)
  2. 流式响应
    1. 普通响应
      model.invoke(messages)
    2. 流式响应
      for chunk in model.stream("你好,好久不见"):
      print(chunk.text, end="|", flush=True)
  3. 批处理
    1. 普通批处理
      所有任务完成一次返回:
      model.batch
      responses = model.batch([
      "请介绍下你自己。",
      "请问什么是机器学习?",
      "你知道机器学习和深度学习的区别吗?"
      ])
      for response in responses:
      print(response)
    2. 流式批处理
      完成一个返回一个:
      model.batch_as_completed
      for response in model.batch_as_completed([
      "请介绍下你自己。",
      "请问什么是机器学习?",
      "你知道机器学习和深度学习的区别吗?"
      ]):
      print(response)
    3. 设置并发数
      为了更好地控制并发,我们还可以在config参数中设置批处理的并发数,例如
      model.batch(
      list_of_inputs,
      config={
      'max_concurrency': 5, # 最多并行 5 个请求
      }
      )
  4. 结构化输出
    LangChain 1.0为所有模型都配置了结构化输出方法,使模型的回复能够严格遵循给定的Schema(模式),便于解析和后续处理。结构化输出可以避免“自然语言歧义”,确保下游流程(数据库写入、API调用、连环任务)稳定、准确、可控。
    目前LangChain 1.0支持多种Schema与结构化输出方式:
    - Pydantic(字段验证、描述、嵌套结构,功能最全面)

- TypedDict(轻型类型约束)
- JSON Schema(与前端/后端及跨语言接口最广泛使用)
其中,Pydantic 提供了字段验证、默认值设定、描述信息、多层次嵌套等高级特性,是生产环境中优先选择的工具。
例如:
from pydantic import BaseModel, Field
class Movie(BaseModel):
    """一部包含详细信息的电影."""
    title: str = Field(..., description="电影的名称")
    year: int = Field(..., description="电影发行的年份")
    director: str = Field(..., description="电影的导演")
    rating: float = Field(..., description="电影的评分,满分10分")
在此示例中,我们利用 Pydantic 的 BaseModel 来定义一个严格的数据结构。每个属性都指定了其数据类型(比如 str、int、float),并通过 Field(…, description=“…”)提供具体的描述。基于此,当模型作出回应时,LangChain 会确保 LLM 的输出能够正确填入这些字段。
然后,通过使用 with_structured_output 方法可以指导模型产生结构化的输出:
model_with_structure = model.with_structured_output(Movie)
response = model_with_structure.invoke("提供关于电影 Inception 的详情")
print(response)

5.【基础实践】构建支持流式响应的多轮问答机器人
# from langchain_deepseek import ChatDeepSeek
from langchain.messages import HumanMessage, AIMessage, SystemMessage
# 1. 初始化模型(LangChain 1.0 接口)
# model = ChatDeepSeek(model="deepseek-chat")
from langchain_community.chat_models.tongyi import ChatTongyi
import os
from dotenv import load_dotenv
load_dotenv(override=True)
QWEN_API_KEY = os.getenv("QWEN_API_KEY")
os.environ["DASHSCOPE_API_KEY"] = QWEN_API_KEY
model = ChatTongyi()
# 2. 初始化系统提示(System Prompt)
system_message = SystemMessage(
    content="我叫小智,是一位乐于助人的智能助手。请在交流过程中保持温和、耐心的态度。"
)
# 3. 初始化消息历史记录
messages = [system_message]
print("???? 输入 exit 退出对话\n")
# 4. 主循环(支持多轮对话 + 流式输出)
while True:
    user_input = input("???? 你:")
    if user_input.lower() in {"exit", "quit"}:
        print("???? 对话结束,再见!")
        break
    # 添加用户消息
    messages.append(HumanMessage(content=user_input))
    # 实时输出模型生成的内容
    print("???? 小智:", end="", flush=True)
    full_reply = ""
    # ? LangChain 1.0 标准方法:流式输出
    for chunk in model.stream(messages):
        if chunk.content:
            print(chunk.content, end="", flush=True)
            full_reply += chunk.content
    print("\n" + "-" * 40) # 分割线
    # 添加 AI 回复消息
    messages.append(AIMessage(content=full_reply))
    # 维持消息长度(仅保留最近50轮)
    messages = messages[-50:]

三、Agent 开发
1、create_agent API 极简调用流程
import os

from dotenv import load_dotenv
from langchain_community.chat_models.tongyi import ChatTongyi
load_dotenv(override=True)
QWEN_API_KEY = os.getenv("QWEN_API_KEY")
os.environ["DASHSCOPE_API_KEY"] = QWEN_API_KEY
model = ChatTongyi()
# 1. 导入相关库
from langchain.agents import create_agent
# from langchain_deepseek import ChatDeepSeek
from langchain_community.tools.tavily_search import TavilySearchResults
# 2. 导入模型和工具
web_search = TavilySearchResults(max_results=2)
# model = ChatDeepSeek(model="deepseek-chat")
# 3. 创建Agent
agent = create_agent(
model=model,
tools=[web_search],
system_prompt="你是一位多功能的智能助手,能够运用工具协助用户解决问题。"
)
# 4. 运行Agent获取结果
result = agent.invoke(
{"messages": [{"role": "user", "content": "请帮我查询2024年诺贝尔物理学奖得主是谁?"}]}
)
# result['messages'][-1].content
2、模型使用模式
create_agent支持两种模型使用方式:
静态模型(Static Model) 与 动态模型(Dynamic Model)。
(1)静态模型
静态模型在创建 Agent 时设置一次,并在整个执行过程中保持不变。这种模式简单可靠,适用于实验和常规生产环境。例如
from langchain.agents import create_agent
agent = create_agent(
"deepseek:deepseek-chat",
tools=tools
)
或
from langchain_deepseek import ChatDeepSeek
from langchain.agents import create_agent
model = ChatDeepSeek(
model="deepseek-chat",
temperature=0.1,
max_tokens=1000,
timeout=30
)
agent = create_agent(model, tools=tools)
(2)动态模型
动态模型是一种更为先进的机制,允许 Agent 在运行时依据任务背景自动更换模型,从而实现智能模型路由和成本优化。比如,在对话初期使用轻量级模型(如 gpt-4o-mini)以减少开销;随着上下文的复杂化或任务难度的增加,自动切换至性能更强的模型(如 gpt-4o)。这时就需要利用中间件的**@wrap_model_call装饰器**。
3、工具调用
(1)工具列表
网址:
工具 | LangChain 中文文档
(2)工具调用
from langchain_community.tools.tavily_search import TavilySearchResults
web_search = TavilySearchResults(max_results=2)
web_search.invoke("请问截至目前,2025年诺贝尔奖颁发了几个?")
agent默认采用function calling模式
(3)Agent输出
输出通常包含四个部分,分别是
用户输入:HumanMessage,
大模型调用工具:AIMessage,
工具调用反馈:ToolMessage,和
AI最终回应:AIMessage
HumanMessage(content='请帮我查询2024年诺贝尔物理学奖得主是谁?', additional_kwargs={}, response_metadata={}, id='b4b46bbb-1b6d-4c84-bfb4-65c0a36a0bfc'),
    

AI Message(content='', additional_kwargs={'tool_calls': [{'function': {'arguments': '{"query": "2024年诺贝尔物理学奖得主是谁?"}', 'name': 'tavily_search_results_json'}, 'id': 'call_fa8347f6a4d2405c8e7bb6', 'index': 0, 'type': 'function'}]}, response_metadata={'model_name': 'qwen-turbo', 'finish_reason': 'tool_calls', 'request_id': '4f296922-47d2-4cd3-b499-cc384934f4f0', 'token_usage': {'input_tokens': 222, 'output_tokens': 34, 'prompt_tokens_details': {'cached_tokens': 0}, 'total_tokens': 256}}, id='lc_run--bd3a09d6-2784-46f2-8206-35ef0b6c8a7d-0', tool_calls=[{'name': 'tavily_search_results_json', 'args': {'query': '2024年诺贝尔物理学奖得主是谁?'}, 'id': 'call_fa8347f6a4d2405c8e7bb6', 'type': 'tool_call'}])

揭晓了!2024年诺贝尔物理学奖授予了他们→ - 上海市科学技术委员会

当前位置:首页 > 新闻中心 > 媒体聚焦 > 正文

发布日期:2024-10-10 来源:上海科技

当地时间10月8日,瑞典皇家科学院宣布,将2024年诺贝尔物理学奖授予John J.Hopfield和Geoffrey E.Hinton,以表彰他们在“利用人工神经网络进行机器学习”的基本发现和创造。

此前,诺贝尔物理学奖已颁发给225位得主。由于约翰·巴丁(John Bardeen)曾两次获奖,因此自1901年以来,共有224人获得过诺贝尔物理学奖。自1901年以来,诺贝尔物理学奖已颁发117次。

据诺贝尔奖官方网站消息,2024年每项诺贝尔奖的奖金为1100万瑞典克朗(约等于745万元人民币)。在百余年中,物理学奖是华人获奖最多的奖项,李政道、杨振宁、丁肇中、朱棣文、崔琦和高琨等华人科学家均获此荣誉。

诺贝尔物理学奖近5年获奖者

诺贝尔物理学奖是根据诺贝尔1895年的遗嘱而设立的五个诺贝尔奖之一,旨在奖励那些对人类物理学领域作出杰出贡献的科学家。以下是近五年来物理学奖获奖名单:

  • 2023年:物理学奖授予皮埃尔·阿戈斯蒂尼(Pierre Agostini)、费伦茨·克劳斯(Ferenc Krausz)和安妮·卢利尔(Anne L'Huillier),以表彰他们开发出的能产生阿秒量级光脉冲的实验方法,这些方法用于研究物质中的电子动力学。
  • 2022年:诺贝尔物理学奖授予科学家阿兰·阿斯佩(Alain Aspect)、约翰·弗朗西斯·克劳泽(John F.Clauser)和安东·塞林格(Anton Zeilinger),以表彰他们在纠缠光子实验、证明违反贝尔不等式和开创性量子信息科学方面的贡献。
  • 2021年:诺贝尔物理学奖授予“对我们理解复杂系统的开创性贡献”。一半由美国科学家真锅淑郎(Syukuro Manabe)和德国科学家克劳斯·哈塞尔曼(Klaus Hasselmann)获得,表彰他们“地球气候的物理建模、量化可变性和可靠预测全球变暖”;另一半由意大利科学家乔治·帕里西(Giorgio Parisi)获得,以表彰他“发现了从原子到行星尺度的物理系统中无序和波动之间的相互作用”。
  • 2020年:诺贝尔物理学奖将一半授予英国科学家罗杰·彭罗斯(Roger Penrose),以表彰他对黑洞形成提供的证明,这是广义相对论的有力证据;另一半由德国科学家赖因哈德·根策尔(Reinhard Genzel)、美国科学家安德烈娅·盖兹(Andrea Ghez)共享,表彰他们在“银河系中心发现超大质量高密度物质”方面的贡献。
  • 2019年:诺贝尔物理学奖授予美国普林斯顿大学James Peebles教授,以表彰他在“物理宇宙学的理论发现”方面的成就,以及瑞士日内瓦大学的Michel Mayor教授和瑞士日内瓦大学教授兼英国剑桥大学教授Didier Queloz,以表彰他们“发现了一颗围绕类太阳恒星运行的系外行星”。

【纠错】 【推荐】 【打印】;) 【关闭】;)

2024年诺贝尔物理学奖颁给了两位AI教父! - 华尔街见闻

[](首页 资讯 快讯 行情 日历 APP VIP会员 大师课 生活家 登录 / 注册 940 收藏 Image 1: qrcode []())

2024年诺贝尔物理学奖颁给了两位AI教父!

Image 2: article.author.display_name张雅琦 2024-10-08 13:43

诺奖委员会表示:“两位诺贝尔物理学奖得主利用了物理学方法来探索信息的特性,建立了为当前强大的机器学习奠定基础的方法。”

人工智能界迎来了一个历史性的时刻!周二,2024年诺贝尔物理学奖授予了AI教父。

诺贝尔物理学委员会(Nobel Committee for Physics)宣布,授予John Joseph Hopfield和Geoffrey E. Hinton诺贝尔物理学奖,以表彰他们在“利用人工神经网络实现机器学习”的基础性发现和发明。

2024年诺贝尔物理学奖颁发给了John J. Hopfield和Geoffrey E. Hinton,以表彰他们在“利用人工神经网络进行机器学习的基本发现和创新”方面的贡献。这两位研究者的成果为现代高效的机器学习系统建立了基石。

(4)自定义工具

众所周知,能够调用外部工具,是大型模型发展成为智能实体的重要环节。

Agent
如果没有能力使用外部工具,那么大型模型就仅仅是一个基础的聊天机器人,甚至无法完成像查询天气这样的简单任务。由于底层技术的约束,大型模型自身无法直接与外部工具通讯。因此,
Function calling
采用的方法是建立一个外部函数,
function
作为中介,一端接收大型模型的请求,另一端调用外部工具,从而使大型模型能够间接地调用外部工具。

1)创建调用外部工具的函数
def get_weather(loc):
    """
    查询即时天气函数
    :param loc: 必需参数,字符串格式,指明查询天气的具体城市名,
    注意,中国城市需使用相应城市的英文名,比如若要查询北京市的天气,则loc参数应填入'Beijing';
    :return:通过OpenWeather API获取的即时天气数据,具体的URL请求路径为:https://api.openweathermap.org/data/2.5/weather
    返回的数据为解析后的JSON格式,并以字符串形式展示,内含所有关键的天气详情
    """
    # 第一步. 构建请求
    url = "https://api.openweathermap.org/data/2.5/weather"
    # 第二步. 设置查询参数
    params = {
        "q": loc,
        "appid": os.getenv("OPENWEATHER_API_KEY"),    # 输入API密钥
        "units": "metric",            # 采用摄氏度而非华氏度
        "lang":"zh_cn"                # 输出语言设定为简体中文
    }
    # 第三步. 发送GET请求
    response = requests.get(url, params=params)
    # 第四步. 解析响应
    data = response.json()
    return json.dumps(data)
2) 封装成langchain能辨识的外部函数

使用langchain装饰器@tool

from langchain.tools import tool

@tool
def get_weather(loc):
    """
    查询即时天气函数
    :param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称,\
    注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing';
    :return:OpenWeather API查询即时天气的结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather\
    返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息
    """
    # Step 1.构建请求
    url = "https://api.openweathermap.org/data/2.5/weather"

    # Step 2.设置查询参数
    params = {
        "q": loc,               
        "appid": os.getenv("OPENWEATHER_API_KEY"),    # 输入API key
        "units": "metric",            # 使用摄氏度而不是华氏度
        "lang":"zh_cn"                # 输出语言为简体中文
    }

    # Step 3.发送GET请求
    response = requests.get(url, params=params)
    
    # Step 4.解析响应
    data = response.json()
    return json.dumps(data)

3)代理调用自定义工具
# 1. 导入所需库
    from langchain.agents import create_agent
    from langchain_deepseek import ChatDeepSeek
    from langchain_community.tools.tavily_search import TavilySearchResults
    # 2. 加载模型
    model = ChatDeepSeek(model="deepseek-chat")
    # 3. 创建Agent
    agent = create_agent(
        model=model,
        tools=[get_weather],
        system_prompt="您是一位多功能的智能助理,能够调用工具来辅助解决用户的问题。"
    )
    # 4. 执行Agent获取结果
    result = agent.invoke(
        {"messages": [{"role": "user", "content": "请问北京今天的天气怎么样?"}]}
    )
4)工具调用反应模式

对于create_agent API而言,其工具调用的核心机制也是基于React循环调用模式,即在简短的推理过程和目标导向的工具调用间轮换,并将获得的观测结果反馈至后续决策中,直至得出最终答案。此模式具备以下特点:

  • 按序列调用多个工具(由单一提示启动)
  • 在合适的情况下并行调用工具
  • 依据先前的结果动态选择工具
  • 工具重试逻辑与错误管理
  • 跨工具调用的状态保存

1、并联调用

result = agent.invoke(

请问今日杭州和南昌哪处更寒冷?

)AIMessage同时调用两次工具
tool_calls=[{'name': 'get_weather', 'args': {'loc': 'Hangzhou'}, 'id': 'call_00_mgmyqmNFMZT3VJRaGCtKrT3Z', 'type': 'tool_call'}, {'name': 'get_weather', 'args': {'loc': 'Nanchang'}, 'id': 'call_01_7LMEpHXEuKf289QX1uw2iIoE', 'type': 'tool_call'}]
工具返回两份ToolMessage
2、调用多种工具
新增一项文件写入工具
@tool
def write_file(content: str) -> str:
"""
将给定内容记录至本地文件。
:param content: 必需参数,字符串形式,指明需写入文档的具体内容。
:return: 写入成果提示信息。
"""
try:
# ? 始终先设定文件名(避免未绑定变量)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"output_{timestamp}.txt"
# 记录文件
with open(filename, "w", encoding="utf-8") as f:
f.write(content)
abs_path = os.path.abspath(filename)
return f"? 已顺利完成本地文件写入:{abs_path}"
except Exception as e:
return f"? 文件记录失败:{str(e)}"
用户提问
result = agent.invoke(
{"messages": [{"role": "user", "content": "请协助查询天津、石家庄、上海等地区的天气状况,并记录至本地文件。"}]}
)
此时将返回八项信息,涵盖:
HumanMessage用户询问
AIMessage调用查询天气工具
ToolMessage调用三次,反馈三个地区的数据
AIMessage调用记录文件工具
ToolMessage反馈成功记录
AIMessage反馈最终结果
4、记忆管理
(1)近期记忆
存储于内存之中,运用langgraph里的InMemorySaver,在建立agent时需提供checkpointer,并且在调用时需传递一个config,至少包含一个thread_id(标识将记忆存储于哪个对话中)
from langgraph.checkpoint.memory import InMemorySaver
checkpointer = InMemorySaver()
tools = [get_weather]
agent = create_agent(model=model,
tools=tools,
checkpointer=checkpointer)
config = {
"configurable": {
"thread_id": "1"
}
}
response = agent.invoke(
{"messages": [{"role": "user", "content": "你好,我叫陈明,很久不见了!"}]},
config
)
response['messages']
利用get_state获取当前对话状态
latest = agent.get_state(config)
latest输出

StateSnapshot(values={'messages': [HumanMessage(content='你好,我叫陈明,许久未见!', additional_kwargs={}, response_metadata={}, id='0bcbd429-e2c5-4078-ae2e-342cd3ded21d'), AIMessage(content='你好陈明!非常高兴遇见你!尽管这可能是我们的首次交谈,但我仍感到愉快能与你交流。你有需要我帮忙的事项吗?例如查询天气详情,或其他问题都可向我询问!', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 37, 'prompt_tokens': 251, 'total_tokens': 288, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 251}, 'model_provider': 'deepseek', 'model_name': 'deepseek-chat', 'system_fingerprint': 'fp_ffc7281d48_prod0820_fp8_kvcache', 'id': '620f39da-3567-4b1e-8c05-add3105d60e2', 'finish_reason': 'stop', 'logprobs': None}, id='lc_run--dde8ba3d-58c6-494e-baf4-cf0023ac06f9-0', usage_metadata={'input_tokens': 251, 'output_tokens': 37, 'total_tokens': 288, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}})]}, next=(), config={'configurable': {'thread_id': '1', 'checkpoint_ns': '', 'checkpoint_id': '1f0b3e18-edee-6355-8001-e32b35d3d174'}}, metadata={'source': 'loop', 'step': 1, 'parents': {}}, created_at='2025-10-28T09:36:19.447074+00:00', parent_config={'configurable': {'thread_id': '1', 'checkpoint_ns': '', 'checkpoint_id': '1f0b3e18-d94f-633c-8000-b4ca61eb2816'}}, tasks=(), interrupts=())

再次进行交流时,直接输入线程ID,即可调用之前的对话记录:

response = agent.invoke(
{"messages": [{"role": "user", "content": "你好,请问你还记得我的名字是什么吗?"}]},
config
)

若更新线程ID,则会重启对话:

config2 = {
"configurable": {
"thread_id": "2"
}
}

(2)长期记忆

存储于本地(文档、数据库)

四、Agent部署与上线

在对LangChain 1.0有一定了解的基础上,对于开发者而言,还需深入学习和掌握LangChain Agent必需的开发者工具包。这些工具包包括LangChain Agent运行监控框架LangSmith、底层LangGraph图结构可视化与调试框架LangGraph Studio以及LangGraph服务部署工具LangGraph Cli。可以说,这些开发工具套件是显著提升LangGraph企业级应用开发效率的核心因素。同时,监控、调试和部署工具也是新一代企业级Agent开发框架不可或缺的部分,是开发者必须掌握的基本工具。

1、部署工具简介

(1)LangGraph运行监控框架:LangSmith

> LangSmith官方网站:https://docs.smith.langchain.com/

LangSmith 是一个用于构建、调试、可视化和评估 LLM 流程的全生命周期开发平台。它关注的焦点不在模型训练上,而是在我们构建 AI 应用(特别是多工具 Agent、LangChain/Graph)时的“可视化调试”、“效能评估”与“运维监控”。

LangGraph 图结构可视化与调试框架:LangGraph Studio

> LangGraph Studio 官网地址:https://www.langgraph.dev/studio

LangGraph Studio 是一个图形化 IDE + 运行平台,用于直观地构建、测试、分享和部署智能体流程图。

LangGraph 服务部署工具:LangGraph Cli

> LangGraph Cli 官网地址:https://www.langgraph.dev/ (需要代理环境)

LangGraph CLI 是一个开发者命令行工具,用于本地启动、调试、测试和托管 LangGraph 智能体图。

LangGraph Agent 前端可视化工具:Agent Chat UI

> Agent Chat UI 官网地址:https://langchain-ai.github.io/langgraph/agents/ui/

Agent Chat UI 是 LangGraph/LangChain 官方提供的多智能体前端对话界面,用于与后端 Agent(Graph 或 Chain)进行实时交互,支持文件上传、多工具协作、结构化输出、多轮对话、调试标记等功能。

基于此框架可以开发出各种复杂的程序、

LangGraph


Agent


Workflow

等,那么这些程序、
Agent


Workflow

等在生产环境中如何部署和运行呢?解决方案是将它们部署成一个
Server

。而如何便捷高效地将
LangGraph


Graph

部署成一个
Server


LangGraph

官方提供了
LangGraph Platform

,其完整架构如下所示:

  • LangGraph Studio:桌面应用程序(
    目前仅支持Mac

    )和本地运行(适用于所有操作系统);
  • LangServer:最终构建的服务,提供
    Assistant API

    接口;
  • Python/JS SDK:通过接口可以直接连接到
    LangServer

    提供的各
    API

    接口;
  • Remote Graph:类似于之前的
    LangServe

    用法,可以直接使用
    Graph

    的接口进行调用,这样获取的
    Graph

    就是一个
    Runable

    对象,可以调用其
    invoke


    batch

    等。

接下来我们将详细介绍如何使用

LangGraph CLI

创建一个完整的 LangGraph Agent 项目,并在此过程中利用 LangGraph Chat Agent UI 进行前端对话,以及使用 LangGraph Studio 进行架构的实时展示,并使用 LangSmith 监控运行效果。

  1. 创建一个 LangChain Agent 项目主文件夹
  2. 创建
    requirements.txt

    文件
  3. 注册 LangSmith(可选)
  4. 创建
    .env

    配置文件
  5. 创建
    agent.py

    核心文件


LangChain Chatbot

文件夹中,新建一个
agent.py

文件,在该文件中编写构建图的具体运行逻辑,例如状态、节点、变量、图的编译等。此外,在使用 LangGraph CLI 创建智能体项目时,会自动配置记忆相关功能,并实现记忆的持久化存储,无需手动设置。因此,此时的智能体代码如下所示:

import os
from dotenv import load_dotenv
from langchain_deepseek import ChatDeepSeek
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langchain.chat_models import init_chat_model
from langgraph.prebuilt import create_react_agent
from langchain_tavily import TavilySearch
from langchain_core.tools import tool
from pydantic import BaseModel, Field
import requests, json
# 加载环境变量
load_dotenv(override=True)

内置搜索工具

search_tool = TavilySearch(max_results=5, topic="general")

class WeatherQuery(BaseModel):
loc: str = Field(description="城市的位置名称")

@tool(args_schema = WeatherQuery)
def get_weather(loc):
"""
查询即时天气函数
:param loc: 必需参数,字符串类型,表示查询天气的具体城市名称,
请注意,中国城市需用对应的英文名称替代,例如查询北京市天气,loc参数应为'Beijing';
:return:通过OpenWeather API查询的即时天气结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather
返回结果为解析后的JSON格式对象,并以字符串形式呈现,包含所有关键的天气详情
"""
# 步骤 1. 构建请求
url = "https://api.openweathermap.org/data/2.5/weather"
# 步骤 2. 设置查询参数
params = {
"q": loc,
"appid": os.getenv("OPENWEATHER_API_KEY"), # 输入API密钥
"units": "metric", # 采用摄氏度而非华氏度
"lang":"zh_cn" # 输出语言设为简体中文
}
# 步骤 3. 发送GET请求
response = requests.get(url, params=params)
# 步骤 4. 解析响应
data = response.json()
return json.dumps(data)

tools = [search_tool, get_weather]

# 创建模型
model = ChatDeepSeek(model="deepseek-chat")

prompt = """
你是一位乐于助人的智能助手,专长于根据用户的问题挑选适当的工具来查询资料并作答。
当用户的问题涉及天气信息时,你应该首先调用`get_weather`工具,查询用户指定城市的实时天气,并在回复中概括查询结果。
当用户的问题涉及新闻、事件、实时动态时,你应该优先调用`search_tool`工具,搜索相关最新资讯,并在回复中简要总结。
若问题同时包含天气和新闻,请先利用`get_weather`查询天气,再使用`search_tool`查询新闻,最后将两者的结果整合后答复用户。
所有回复都应使用简体中文,表达清晰、简洁且友好。
"""

# 创建图
graph = create_react_agent(model=model,
rompt=prompt)天气信息时,请调用get_weather工具查询天气。当用户咨询新闻时,请调用search_tool工具查询新闻。”

创建

langgraph.json

文件

LangChain Chatbot

文件夹中,建立一个新的
langgraph.json

文件,在此
json

文件中配置项目信息,遵守以下规则:
- 必须包含
dependencies


graphs

字段
-
graphs

字段格式:“图名”: “文件路径:变量名”
- 配置文件需置于与Python文件相同或更高的目录
注意: 项目文件的名称必须为
langgraph.json

。如下所示:
{
"dependencies": ["./"],
"graphs": {
"chatbot": "./graph.py:graph"
},
"env": ".env"
}
其中:
-
dependencies

: [“./”] - 指示
LangGraph

在当前目录搜索依赖(会自动加载
requirements.txt


-
chatbot

: “./graph.py:graph” - 指定图名为
chatbot

,源自
graph.py

文件中的
graph

变量
-
env

: “.env” - 指明环境变量文件的位置
最终完整的项目结构如下:
./langraph_chatbot/
├── graph.py # 对应官方的 agent.py
├── requirements.txt # ? 依赖管理
├── langgraph.json # ? 配置文件
└── .env # ? 环境变量

安装

langgraph-cli

及其他依赖
pip install -U "langgraph-cli[inmem]"
pip install -r requirements.txt

最后,进入

langgraph_chatbot

文件夹,运行

LangGraph dev

即可激活项目
langgraph dev

激活成功后可见三个链接,首个链接为当前部署完毕的服务端口,次者为LangGraph Studio的图形化界面,末个端口为端口详情。

9、
LangChain Agent后端连接Agent Chat UI
- 项目首页:https://github.com/langchain-ai/agent-chat-ui
1)复制项目
# git config --global http.proxy http://127.0.0.1:10080
# git config --global https.proxy http://127.0.0.1:10080
git clone https://github.com/langchain-ai/agent-chat-ui.git
cd agent-chat-ui
2)安装npm
node.js官方网站:https://nodejs.org
npm install -g pnpm
pnpm -v
3)安装前端项目依赖项
pnpm install
4)启动Chat Agent UI
pnpm dev
5)开始交谈

8、最终,进入至

langgraph_chatbot

文件夹,运行
LangGraph dev

即可激活项目
langgraph dev

激活成功后可见三个链接,首个链接为当前部署完毕的服务端口,次者为LangGraph Studio的图形化界面,末个端口为端口详情。

9、
LangChain Agent后端连接Agent Chat UI
- 项目首页:https://github.com/langchain-ai/agent-chat-ui
1)复制项目
# git config --global http.proxy http://127.0.0.1:10080
# git config --global https.proxy http://127.0.0.1:10080
git clone https://github.com/langchain-ai/agent-chat-ui.git
cd agent-chat-ui
2)安装npm
node.js官方网站:https://nodejs.org
npm install -g pnpm
pnpm -v
3)安装前端项目依赖项
pnpm install
4)启动Chat Agent UI
pnpm dev
5)开始交谈

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群