【AI零基础】手把手教你使用langchain搭建第一个agent智能体
2026/6/7 21:22:00 网站建设 项目流程

目录

一、从阿里云百炼中获取大模型的api key

1.1 阿里云百炼平台简介

1.2 API Key 获取流程

二、Python环境准备

2.1 配置环境变量

macos系统

windows系统

2.2 依赖安装

pip加速镜像配置

核心包

HTTP 服务依赖

2.3 阿里云百炼 OpenAI 兼容配置参数

2.4 代码实现:一次性返回与流式输出的 HTTP API

创建文件 agent_api.py

启动服务

启动成功后会显示

浏览器测试(测试一次性返回接口)

测试流式输出接口


1.1 阿里云百炼平台简介

  • 阿里云百炼是大模型服务平台,整合了通义千问全系列及主流第三方大模型

  • 平台提供与 OpenAI API 完全兼容的接口

  • 只需更换 API Key、Base URL 和模型名称,即可无缝迁移 OpenAI 代码

  • 新用户注册后通常会获得一定的免费调用额度

  • 官方控制台地址:大模型服务平台百炼控制台

其实你可以理解阿里云百炼就是一个中间商大管家,集成了所有世面上的主流大模型,你想调用什么模型直接找他就行了,如下图,可以看到各种各样的大模型。

1.2 API Key 获取流程

  • 访问阿里云百炼控制台首页

  • 进入 API Key 管理页面,单击“创建 API KEY”按钮

  • 在弹窗中配置归属账号和归属业务空间

  • 权限配置:选择全部授予该 API Key 调用所有模型的权限

  • 创建成功后,点击 API Key 旁的图标复制密钥

二、Python环境准备

Python 版本要求:必须使用 Python 3.10 或更高版本,推荐 3.12。

安装Python参考我其它的文章,这里不做扩展了。

2.1 配置环境变量

macos系统

echo "export DASHSCOPE_API_KEY='你的API-KEY'" >> ~/.zshrc source ~/.zshrc

windows系统

2.2 依赖安装

pip加速镜像配置

# 临时使用阿里云镜像加速 pip install -i https://mirrors.aliyun.com/pypi/simple/ 包名 # 或者永久配置 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

核心包

pip install langchain==1.0.3 langchain-core==1.2.26 langchain-community==0.3.29 langchain-openai==1.1.12 langgraph==1.0.2 langgraph-prebuilt==1.0.2

HTTP 服务依赖

pip install fastapi uvicorn sse-starlette

2.3 阿里云百炼 OpenAI 兼容配置参数

  • API Key:从环境变量DASHSCOPE_API_KEY读取

  • Base URL:

https://dashscope.aliyuncs.com/compatible-mode/v1
  • 模型名称:qwen3.5-plus

2.4 代码实现:一次性返回与流式输出的 HTTP API

创建文件 agent_api.py

import os import json from fastapi import FastAPI, Query from fastapi.responses import StreamingResponse from langchain_openai import ChatOpenAI from langchain.agents import create_agent # ---------- 1. 初始化 Agent ---------- # 初始化大模型 model = ChatOpenAI( model="qwen3.5-plus", api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" ) # 创建 Agent 智能体 agent = create_agent( model=model, tools=[], system_prompt="你是一个乐于助人的助手" ) # ---------- 2. 创建 FastAPI 应用 ---------- app = FastAPI(title="LangChain Agent API", description="浏览器测试 Agent 的一次性回答和流式输出") from fastapi.middleware.cors import CORSMiddleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) @app.get("/") async def root(): return { "usage": "GET /chat?message=你的问题 → 一次性返回", "stream": "GET /stream?message=你的问题 → 流式返回(SSE)", "example": "http://localhost:8000/chat?message=你好" } @app.get("/chat") async def chat(message: str = Query(..., description="用户输入的消息")): """一次性返回完整回答""" response = agent.invoke({"messages": [("user", message)]}) reply = response["messages"][-1].content return {"reply": reply} @app.get("/stream") async def stream_chat(message: str = Query(..., description="用户输入的消息")): """流式返回 Agent 回答(Server-Sent Events)""" async def event_generator(): # 直接使用 model.stream 而不是 agent.astream for chunk in model.stream([{"role": "user", "content": message}]): if hasattr(chunk, "content") and chunk.content: yield f"data: {json.dumps({'content': chunk.content})}\n\n" yield "data: [DONE]\n\n" return StreamingResponse(event_generator(), media_type="text/event-stream; charset=utf-8") if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)

启动服务

python agent_api.py

启动成功后会显示

INFO: Uvicorn running on http://0.0.0.0:8000

浏览器测试(测试一次性返回接口)

  • 在浏览器地址栏输入:

http://localhost:8000/chat?message=请用一句话介绍什么是LangChain
  • 页面会显示 JSON 格式的回复,例如:
{"reply":"LangChain 是一个用于构建大语言模型应用的开发框架..."}

测试流式输出接口

  • 创建test.html文件:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>流式测试</title> </head> <body> <input id="msg" placeholder="输入问题" size="50" /> <button onclick="startStream()">发送</button> <div id="output" style="margin-top:20px; border:1px solid #ccc; padding:10px;"></div> <script> let currentText = ""; let currentIndex = 0; let typingTimeout = null; function startStream() { const msg = document.getElementById('msg').value; const outputDiv = document.getElementById('output'); outputDiv.innerHTML = ''; currentText = ""; currentIndex = 0; if (typingTimeout) { clearTimeout(typingTimeout); typingTimeout = null; } const eventSource = new EventSource(`http://localhost:8000/stream?message=${encodeURIComponent(msg)}`); eventSource.onmessage = (event) => { if (event.data === '[DONE]') { eventSource.close(); } else { const data = JSON.parse(event.data); // 追加内容 currentText += data.content; // 开始或继续打字机效果 startTyping(outputDiv, 100); } }; } // 打字机效果函数 function startTyping(element, speed) { if (currentIndex < currentText.length) { element.innerHTML += currentText.charAt(currentIndex); currentIndex++; typingTimeout = setTimeout(() => startTyping(element, speed), speed); } } </script> </body> </html>
  • 双击用浏览器打开test.html,输入问题后点击发送

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询