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

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

前言

这个示例是研究如何使用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": []
    }
}

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

相关文章:

  • 解码软件需求的三个维度:从满足基础到创造惊喜
  • UMA架构下的GPU 显存
  • 4、MySQL的存储引擎有哪些?【中高频】
  • 蓝桥杯篇---按键长按与双击
  • 机试准备最后一天
  • electron框架(1.0)认识electron和基础创建
  • Elasticsearch基础教程:从入门到上手
  • 大话数据结构第二章,算法笔记
  • Oracle 公布 Java 的五大新功能
  • Vue安装及首次运行报错的相关问题解决方案
  • 二叉树(堆)
  • CentOS系统下安装tesseract-ocr5.x版本
  • Node.js 包与 npm 详解:概念、作用及完整使用指南
  • Android14 系统左右声音通道设置代码
  • 今天你学C++了吗?——二叉搜索树
  • 深入理解Python闭包与递归:原理、应用与实践
  • java项目之基于ssm的少儿编程在线培训系统(源码+文档)
  • 《K230 从熟悉到...》屏幕手画板
  • AI 原生 IDE Trae 深度体验:SSHremote 功能如何重新定义远程开发与云原生部署
  • 项目-苍穹外卖(九) 店铺营业状态设置+HttpClient
  • 上海团队在医学顶刊连发两文,率先提出“证据污染”循证概念
  • 继71路之后,上海中心城区将迎来第二条中运量公交
  • 重温经典|开播20周年,仙剑的那些幕后你知道吗?
  • 明查|哈佛大学批改美教育部长来信,红笔标出语法错误?
  • 中俄弘扬正确二战史观:缅怀历史,重拾初心,阻止悲剧重演
  • “上海之帆”巡展在日本大阪开幕,松江区组织企业集体出展