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 知识库检索,让智能体真正具备"思考"和"检索"能力。

相关推荐
天远数科1 小时前
Java数据工程:利用天远人车核验加强版优化智慧高速ETC发行合规体验
java·人工智能
摩羯12301 小时前
把长期记忆当作可验证数据:知芽 Notebook Skill 与 Agent Memory Repo 的工程拆分
人工智能·aigc
电子元件小说家1 小时前
AI边缘计算与汽车电子电源设计观察:5x5mm屏蔽功率电感选型与验证建议
人工智能·汽车·边缘计算
狄龙1 小时前
EGO 式数据工作流:仿真采集 → 公开数据集处理 → 重定向示范(六)
人工智能
colorlog1 小时前
在 DSH 里接入企业微信:MCP 与 CLI+Skill 两条路怎么选、怎么配
人工智能
狂潮lister2 小时前
狂潮·元理论 | 五个测试验证:大模型不需要高质量数据,只需要异源结构
人工智能
石狮松松2 小时前
第 03 章 三大流派:符号主义 / 连接主义 / 行为主义
人工智能
mingbaiceping2 小时前
2026年国际化复旦-华盛顿大学EMBA:申请指南
人工智能