前言

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

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

更多推荐