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.总结
调试的时候会出现各种问题,如果自己不知道那里有问题,可以交给豆包或其他智能体让他们帮你调试