langgraph简单Demo(使用langserve实现外部调用)

news2025/4/19 16:03:31

前言

这个示例是研究如何使用langserve实现外部调用

接入大模型参考文章:接入阿里云百炼

1、安装依赖

pip install langserve fastapi uvicorn
pip install sse_starlette

2、代码实现

from fastapi import FastAPI
from langchain_core.messages import HumanMessage, AIMessage
from langchain_openai import ChatOpenAI
from langserve import add_routes
from langchain_core.runnables import RunnableLambda
from langgraph.graph import StateGraph, END
import os

from openai import BaseModel

# 初始化模型(这个地方不知道怎么配置的参考我的上一篇文章:https://blog.csdn.net/qq_33247435/article/details/146216842
model = ChatOpenAI(
    model="deepseek-r1",
    openai_api_key=os.environ["BAILIAN_API_KEY"],
    openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",
    streaming=False  # 禁用流式传输
)


# 定义链式处理流程
def create_chain():
    def assistant_node(state: dict):
        last_message = state["messages"][-1]
        response = model.invoke([
            AIMessage(content="你是一个友好的助手"),
            last_message
        ])
        return {"messages": [AIMessage(content=response.content)]}

    workflow = StateGraph(dict)
    workflow.add_node("assistant", assistant_node)
    workflow.set_entry_point("assistant")
    workflow.add_edge("assistant", END)
    return workflow.compile()


# 创建FastAPI应用
app = FastAPI(
    title="LangChain Server",
    version="1.0",
)

# 定义输入模型
class ChatRequest(BaseModel):
    messages: list

# 修改路由配置
add_routes(
    app,
    RunnableLambda(create_chain().invoke),
    path="/chat",
    input_type=ChatRequest,  # 使用自定义输入模型
)

# 修改运行示例部分(调试用)
if __name__ == "__main__":
    import uvicorn
    print("测试输入格式:", ChatRequest(messages=[{"content": "测试"}]).model_dump())  # 添加调试输出
    uvicorn.run(app, host="0.0.0.0", port=8000)

3、效果

启动项目之后就可以直接访问接口文档

文档地址:http://localhost:8000/docs
文档效果:
在这里插入图片描述

请求参数:

{
  "input": {
    "messages": [
      {
        "content": "你好,推荐一本科幻小说",
        "type": "human"  
      }
    ]
  }
}

响应结果如下:

{
    "output": {
        "messages": [
            {
                "content": "你好!如果你喜欢结合哲学思考与独特叙事结构的科幻作品,推荐特德·姜(Ted Chiang)的短篇小说集《你一生的故事》(*Stories of Your Life and Others*)。这部作品以语言学与物理学为切入点,探讨了时间、自由意志与人类认知的边界,尤其是标题篇《你一生的故事》将外星人“七肢桶”的非线性语言与主角的命运交织,呈现了宿命论与选择的深刻主题。文字细腻且逻辑严谨,曾被改编为电影《降临》,但原著对时间本质的探讨更为深邃。如果你偏好硬核科幻与人文哲思的结合,这本书会非常值得一读!",
                "additional_kwargs": {},
                "response_metadata": {},
                "type": "ai",
                "name": null,
                "id": null,
                "example": false,
                "tool_calls": [],
                "invalid_tool_calls": [],
                "usage_metadata": null
            }
        ]
    },
    "metadata": {
        "run_id": "72297980-1b46-4667-ab37-a460ef9f389b",
        "feedback_tokens": []
    }
}

调用效果如图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2318270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

折叠树报表

折叠树报表中包含了三种信息: 1.树组织信息-可展开、收拢 2.节点的统计信息(汇总求和) 3.每个节点对应的数据信息 一、准备数据 mysql8 数据库中存在两张表 org和store表。 org表和部分数据如下,其中orgname是组织的名称,codepath是完整的组织代码,seq是每个节点的顺序,可…

Python个人学习笔记(16):模块(os)

四、os模块 主要用于文件夹处理 (一)文件夹相关 os.makedirs(‘dirname1/dirname2’) :创建文件夹目录,不能重复创建,用的多 代码: os.makedirs(a/b/c)结果: os.removedirs(‘dirname1’)&…

虚拟地址空间(下)进程地址空间(上)

一.关于页表组成 1.权限(rwx) 作用:如1.让代码区变成只读的 2.写时拷贝的实现:子进程创建时其页表指向的父进程代码和数据权限都是只读的,子进程试图修改,触发错误,系统开始写时拷贝。 来源:…

【数据集分享】青藏高原两次强震玛多地震和漾濞地震的震源过程

2021年5月21日,5小时内在青藏高原不同区域发生了漾濞6.4级和玛多7.4级强烈地震,表明印度板块和欧亚大陆板块的碰撞汇聚作用下青藏高原持续和频繁的 剧烈构造运动和地震活动。本研究利用地震记录和空间对地观测同震位移资料(InSAR)…

jmeter环境搭建及使用

Meter 是一个开源的性能测试工具,用于测试静态和动态资源的性能。 1、安装 官网下载: 下载地址:Apache JMeter - Download Apache JMeter 网盘下载: 通过百度网盘分享的文件:apache-jmeter-5.6.3.rar 链接&#x…

Python 鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

yum软件包乾坤大挪移(Yum Package Qiankun Great Migration)

yum软件包乾坤大挪移 背景 由于很多的生产环境是无法连接外网的,因此用yum或者dnf命令来安装软件包常常是一个比较麻烦的事情,原因是很多软件的依赖很复杂,如果要一个个下载、拷贝、再安装,这往往是一个非常繁琐冗杂的过程&…

Java:读取中文,read方法

public static void main(String[] args) throws IOException {FileReader fr new FileReader("C:\\aaa\\a.txt");//字符流的底层也是一个字节一个字节读取的,遇到中文就一次读多个,GBK一次读两个,UTF-8一次读三个字节//idea默认U…

英语词性--数词

文章目录 数词概念数词分词基数词序数词 基数与序数词的区别基变序的规律 数词概念 数词(Numerals) 是英语中用于表示 数量(基数)或顺序(序数) 的词类,通常用于描述数字、计数、顺序等。 例如&…

Linux 一步部署DHCP服务

#!/bin/bash #脚本作者和日期 #author: PEI #date: 20250319 #检查root权限 if [ "$USER" ! "root" ]; then echo "错误:非root用户,权限不足!" exit 0 fi #防火墙与高级权限 systemctl stop firewa…

如何打造安全稳定的亚马逊采购测评自养号下单系统?

在当今的电商领域,亚马逊作为全球领先的在线购物平台,其商品种类繁多,用户基数庞大,成为了众多商家和消费者的首选。而对于一些需要进行商品测评或市场调研的用户来说,拥有一个稳定、安全的亚马逊账号体系显得尤为重要…

Pytorch中layernorm实现详解

平时我们在编写神经网络时,经常会用到layernorm这个函数来加快网络的收敛速度。那layernorm到底在哪个维度上进行归一化的呢? 一、问题描述 首先借用知乎上的一张图,原文写的也非常好,大家有空可以去阅读一下,链接放…

基于java的ssm+JSP+MYSQL的高校四六级报名管理系统(含LW+PPT+源码+系统演示视频+安装说明)

作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…

ns3使用入门_基于ns3.44_Part2_配置模块参数的Configuration 和Attributes

前言 事实上ns3的官方手册很全,相关书籍也是有的,官网先贴在这里: ns-3 | a discrete-event network simulator for internet systemsa discrete-event network simulator for internet systemshttps://www.nsnam.org/相关的脚本介绍也都有一些: ns-3.35_wifi-he-networ…

性能测试过程实时监控分析

性能监控 前言一、查看性能测试结果的3大方式1、GUI界面报告插件2、命令行运行 html报告3、后端监听器接入仪表盘 二、influxDB grafana jmeter测试监控大屏1、原理:2、linux环境中influxDB 安装和配置3、jmerer后端监听器连接influxDB4、linux环境总grafana环境搭…

C程序设计(第五版)及其参考解答,附pdf

通过网盘分享的文件:谭浩强C语言设计 链接: https://pan.baidu.com/s/1U927Col0XtWlF9TsFviApg?pwdeddw 提取码: eddw 谭浩强教授的《C程序设计》是C语言学习领域的经典教材,其内容深入浅出,适合不同层次的学习者。 一、教材版本与特点 最…

杰理科技JL703N双模蓝牙芯片—云信

杰理科技JL703N芯片运算能力、接收灵敏度、发射功率、音频性能等指标均处于行业一流水平,能满足多场景的应用需求,具有以下明显优势: 一、高性能双核浮点CPU,算力十足 JL703N芯片搭载了32位高性能双核CPU,主频高达32…

Rust + 时序数据库 TDengine:打造高性能时序数据处理利器

引言:为什么选择 TDengine 与 Rust? TDengine 是一款专为物联网、车联网、工业互联网等时序数据场景优化设计的开源时序数据库,支持高并发写入、高效查询及流式计算,通过“一个数据采集点一张表”与“超级表”的概念显著提升性能…

Nvidia 官方CUDA课程学习笔记

之前心血来潮学习了一下Nvidia CUDA,外行,文章有理解不当的地方,望指正。 主要根据以下Nvidia官方课程学习: https://www.bilibili.com/video/BV1JJ4m1P7xW/?spm_id_from333.337.search-card.all.click&vd_sourcec256dbf86b…

【AI News | 20250319】每日AI进展

AI Repos 1、XianyuAutoAgent 实现了 24 小时自动化值守的 AI 智能客服系统,支持多专家协同决策、智能议价和上下文感知对话,让我们店铺管理更轻松。主要功能: 智能对话引擎,支持上下文感知和专家路由阶梯降价策略,自…