AI智能体项目实战记录(03):本地模型调用及 DeepSeek API 调用

1. 引言

前面两篇文章已经完成了本地开发环境的搭建、项目创建以及依赖安装。本篇将进入实战核心环节------让 AI 智能体真正"开口说话"。

我们将完成以下四件事:

  1. 创建 .env 配置文件,统一管理 DeepSeek 与本地大模型的密钥和地址
  2. 创建 config/settings.py,用 Pydantic 优雅地加载配置
  3. 创建大模型客户端,同时支持 DeepSeek API 与本地模型
  4. 编写调用文件,通过 FastAPI 接口对外提供问答能力

2. 创建 .env 配置文件

在项目根目录下创建 .env 文件,内容如下:

bash 复制代码
# DeepSeek 配置
DEEPSEEK_API_URL="https://api.deepseek.com"
DEEPSEEK_API_KEY="sk-xxx"
DEEPSEEK_API_MODEL="deepseek-chat"

# 其他大模型配置(本地部署)
LLM_API_URL="http://192.xxx.xxx.xxx"
LLM_API_KEY="sk-xxx"
LLM_API_MODEL="llm-chat"

注意:请将 sk-xxx 替换为你自己的真实密钥。.env 文件不要提交到 Git 仓库,建议在 .gitignore 中加入 .env。

3. 创建 config/settings.py

在项目目录下创建 config 包,并新建 settings.py 文件:

python 复制代码
import os
from typing import Optional
from dotenv import load_dotenv
from pydantic_settings import SettingsConfigDict, BaseSettings

# 加载环境配置
load_dotenv()


class Setting(BaseSettings):
    model_config = SettingsConfigDict(validate_default=False)

    # deepseek 模型配置
    deepseek_api_url: str
    deepseek_api_key: str
    deepseek_api_model: str

    # 大模型配置
    llm_api_url: str
    llm_api_key: str
    llm_api_model: str


setting = Setting()

这里使用 pydantic-settings 自动从 .env 读取配置,字段名与 .env 中的变量名一一对应,无需手动 os.getenv。

4. 创建大模型客户端

新建 llm_client.py 文件,统一封装 DeepSeek 与本地模型的客户端:

python 复制代码
from openai import OpenAI, AsyncOpenAI
from config.settings import setting

# 通用的人 prompt 前缀
PROMPT_PREFIX = "现在是{}年{}月{}日,你的名字叫智能问答助手。是一个基于 **大语言模型 + LangGraph 多智能体编排 + RAG 知识库检索** 的智能问答平台"


def build_prompt(user_question: str) -> str:
    """拼接带时间上下文的完整 prompt"""
    from datetime import datetime

    now = datetime.now()
    return PROMPT_PREFIX.format(now.year, now.month, now.day) + "\n\n用户问题:" + user_question


# 创建大模型客户端
llm_client = OpenAI(api_key=setting.llm_api_key, base_url=setting.llm_api_url)

deepseek_client = OpenAI(api_key=setting.deepseek_api_key, base_url=setting.deepseek_api_url)
deepseek_async_client = AsyncOpenAI(api_key=setting.deepseek_api_key, base_url=setting.deepseek_api_url)

5. 编写模型调用文件

新建 model_caller.py,封装同步与异步的调用逻辑:

python 复制代码
from config.settings import setting
from llm_client import deepseek_client, deepseek_async_client, llm_client, build_prompt


def call_deepseek(prompt: str) -> str:
    """同步调用 DeepSeek"""
    resp = deepseek_client.chat.completions.create(
        model=setting.deepseek_api_model,
        messages=[{"role": "user", "content": prompt}],
        temperature=0.01,
        max_tokens=300,
    )
    return resp.choices[0].message.content


async def call_deepseek_async(prompt: str) -> str:
    """异步调用 DeepSeek"""
    resp = await deepseek_async_client.chat.completions.create(
        model=setting.deepseek_api_model,
        messages=[{"role": "user", "content": prompt}],
        temperature=0.01,
        max_tokens=300,
    )
    return resp.choices[0].message.content


def call_local_llm(prompt: str) -> str:
    """调用本地大模型"""
    resp = llm_client.chat.completions.create(
        model=setting.llm_api_model,
        messages=[{"role": "user", "content": prompt}],
        temperature=0.01,
        max_tokens=300,
    )
    return resp.choices[0].message.content


if __name__ == "__main__":
    # 简单自测
    question = "你好,请介绍一下你自己"
    print("DeepSeek 回复:", call_deepseek(build_prompt(question)))

6. 通过 FastAPI 提供问答接口

新建 main.py,用 FastAPI 暴露一个 /chat 接口:

python 复制代码
from fastapi import FastAPI
from pydantic import BaseModel
from model_caller import call_deepseek, call_deepseek_async, call_local_llm, build_prompt

app = FastAPI(title="AI 智能问答助手")


class ChatRequest(BaseModel):
    question: str
    use_deepseek: bool = True  # True 用 DeepSeek,False 用本地模型


@app.post("/chat")
async def chat(req: ChatRequest):
    prompt = build_prompt(req.question)
    if req.use_deepseek:
        answer = await call_deepseek_async(prompt)
    else:
        answer = call_local_llm(prompt)
    return {"question": req.question, "answer": answer}


if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="0.0.0.0", port=8000)

启动服务:

bash 复制代码
uvicorn main:app --reload --port 8000

测试接口:

bash 复制代码
curl -X POST http://localhost:8000/chat \
  -H "Content-Type: application/json" \
  -d '{"question": "你好,你是谁?", "use_deepseek": true}'

7. 总结

本篇完成了从配置到调用的完整链路:

  • .env 统一管理密钥与地址
  • settings.py 自动加载配置
  • 客户端同时支持 DeepSeek 与本地模型
  • FastAPI 对外提供 /chat 接口

下一步可以接入 LangGraph 多智能体编排与 RAG 知识库检索,让智能体真正具备"思考"和"检索"能力。

相关推荐
QY_Research_1 小时前
2026房地产NFT平台创业机遇与落地指南分析报告
大数据·人工智能·物联网·机器人·制造
机器人零零壹2 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
电子元件小说家3 小时前
2026年四季度电感市场观察:AI算力与汽车电子驱动下的选型与验证建议智能硬件
人工智能·汽车
网易CodeWave-小码哥3 小时前
支持多模块 Java 微服务导入|CodeWave SDD V4.5.10 上线
人工智能
AI你一生一世4 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
belldeep4 小时前
python:genesis-world, Genesis-Embodied-AI
人工智能·python·ai·genesis
怕浪猫4 小时前
小程序成长计划上新:10 亿 Token 现在能调 DeepSeek-v4.1-flash了
人工智能·aigc·ai编程
ss2734 小时前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql
七牛云行业应用5 小时前
DeepSeek Super-agent 与 Grok Bot:开源 Agent 架构和聊天助手有何区别
人工智能·ai·架构·ai编程
维克兜率天5 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python