VSCode + FastAPI +AI Agent+langchain第一个程序

1.搭建fastapi环境

1.1创建许虚拟环境

python -m venv venv

1.2激活虚拟环境

.\venv\Scripts\activate

1.3安装依赖

pip install fastapi uvicorn pydantic python-dotenv

2.搭建AI Agent环境

2.1安装依赖

pip install -U langchain langchain-core langgraph langchain-deepseek

2.1 创建.env文件

DEEPSEEK_API_KEY="去deepseek申请一个KEY"

DEEPSEEK_BASE_URL=https://api.deepseek.com

DEEPSEEK_MODEL=deepseek-v4-flash

3.创建AI Agent文件agent_demo.py

复制代码
import os
from dotenv import load_dotenv
from langchain_deepseek import ChatDeepSeek
from langchain_core.tools import tool
from langchain.agents import create_agent
from langchain_core.messages import HumanMessage

load_dotenv()
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")


@tool
def calculator(a: float, b: float, op: str) -> str:
    """
    数学计算器,支持 + - * /
    Args:
        a: 第一个数字
        b: 第二个数字
        op: 运算符,可选 add / sub / mul / div
    """
    if op == "add":
        res = a + b
    elif op == "sub":
        res = a - b
    elif op == "mul":
        res = a * b
    elif op == "div":
        if b == 0:
            return "错误:除数不能为0"
        res = a / b
    else:
        return "不支持的运算符"
    return f"计算结果:{a} {op} {b} = {res}"


@tool
def get_current_time() -> str:
    """获取当前系统时间"""
    from datetime import datetime
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")


tools = [calculator, get_current_time]

llm = ChatDeepSeek(
    model="deepseek-chat",
    temperature=0.3,
    api_key=DEEPSEEK_API_KEY,
    max_retries=2
)

system_prompt = """
你是一个智能AI Agent,可以根据问题选择调用工具。
思考:先判断是否需要工具;不需要工具就直接回答;需要工具则调用对应工具。
工具调用完成后,整理结果用自然语言回答用户,不要输出json原始内容。
"""

agent = create_agent(
    model=llm,
    tools=tools,
    system_prompt=system_prompt
)

4.创建api文件main.py

复制代码
import json
import asyncio
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel

# 这里看你的核心文件名!!
# 如果核心文件叫 agent_core.py 就用下面这句
from agent_demo import agent
# 如果还是 agent_demo.py,就改成 from agent_demo import agent

app = FastAPI(title="DeepSeek Agent API", version="1.0")

# 跨域配置,前端调用必备
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


class ChatRequest(BaseModel):
    query: str


@app.post("/chat")
def chat(req: ChatRequest):
    try:
        result = agent.invoke({
            "messages": [{"type": "human", "content": req.query}]
        })
        answer = result["messages"][-1].content
        return {"code": 0, "msg": "success", "data": {"answer": answer}}
    except Exception as e:
        return {"code": 500, "msg": str(e), "data": None}


@app.post("/chat/stream")
async def chat_stream(req: ChatRequest):
    async def event_generator():
        try:
            stream = agent.stream(
                {"messages": [{"type": "human", "content": req.query}]},
                stream_mode="values"
            )
            for chunk in stream:
                msg = chunk["messages"][-1]
                if msg.content:
                    yield f"data: {json.dumps({'content': msg.content}, ensure_ascii=False)}\n\n"
                    await asyncio.sleep(0)
            yield "data: [DONE]\n\n"
        except Exception as e:
            yield f"data: {json.dumps({'error': str(e)}, ensure_ascii=False)}\n\n"

    return StreamingResponse(
        event_generator(),
        media_type="text/event-stream",
        headers={
            "Cache-Control": "no-cache",
            "Connection": "keep-alive",
        }
    )


@app.get("/health")
def health():
    return {"status": "ok"}


if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)

5.运行

6.测试

7.总结

调试的时候会出现各种问题,如果自己不知道那里有问题,可以交给豆包或其他智能体让他们帮你调试

相关推荐
全栈陈序员2 小时前
【Python】基础语法入门(三十一)—— API 开发:用 FastAPI 构建 RESTful 接口
python·restful·fastapi
Maiko Star3 小时前
*【HM-LC】Milvus向量库详解:Collection、索引、混合检索与LangChain实战
langchain·milvus
云和数据.ChenGuang10 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
云和数据.ChenGuang14 小时前
Python 单继承与多继承深度剖析:从 MRO 到实战取舍
开发语言·人工智能·python·langchain
全栈偏科生17 小时前
LangChain JS 入门:快速搭建前端 AI 开发环境
langchain
一枕槐安48719 小时前
应届生 RAG 项目包装:FastAPI 检索服务接口设计指南
fastapi·web服务·rag·pydantic·接口封装
郝学胜-神的一滴19 小时前
AI 编程智能体 17:四步搞定专属AI智能体
大数据·人工智能·python·神经网络·算法·langchain·强化学习
咚咚咚小柒20 小时前
【前端】LangChain.js学习
前端·javascript·人工智能·typescript·langchain·vue·ai编程
clz13145211 天前
RAG 文档切分实战:从语义分层到长度优化
langchain