如何把 AI 大语言模型接入个人项目

如何把 AI 大语言模型接入个人项目

通过 Python 把 AI 大语言模型接入自己的项目

本文以开源项目 HuluAiChat 为例,说明如何用 Python 将任意「OpenAI 兼容」的 AI 聊天模型接入到自己的应用里。读完你将掌握:如何用 openai 库的每一类参数与用法、最小可运行示例、以及如何复用到你的项目中。

目录


一、为什么要自己接入 AI 聊天? 💡

现成产品(如 ChatGPT 网页、各类 App)已经很好用,但在这些场景里你会希望把大模型能力嵌进自己的项目

  • 桌面/Web 应用:在自有产品里提供对话能力,数据与界面完全可控。
  • 多模型与私有化:同时使用 OpenAI、国产大模型、自建或代理 API,统一一套界面与逻辑。
  • 流式体验:回复逐字输出,而不是等整段生成再显示。
  • 本地历史:会话与消息存本地,方便检索、导出或合规。

Python + OpenAI 兼容 API 可以很低成本地实现上述目标。下面以 「如何用 Python 调用 AI 聊天」 为核心,详解 openai 库的用法与参数,再简要结合 HuluChat 说明如何接到完整项目里。


二、用 Python 调用 AI 聊天:参数、函数与用法详解(核心) 📖

只要你的 API 是 OpenAI 兼容 的(提供 POST /v1/chat/completions,请求/响应格式一致),用官方 openai Python 库即可,无需区分具体厂商。本节是全文重点:把客户端构造、create() 参数、消息格式、流式/非流式、错误处理等讲清楚,方便你直接用到自己的项目。


2.1 安装与客户端构造

安装依赖:

pip install openai>=1.0.0 

最小示例:构造客户端并发起一次流式请求。

from openai import OpenAI client = OpenAI( base_url="https://api.openai.com/v1",# 或你的 API 地址 api_key="your-api-key",) stream = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role":"user","content":"用一句话介绍 Python。"}], stream=True,)for chunk in stream:if chunk.choices and chunk.choices[0].delta.content:print(chunk.choices[0].delta.content, end="")print()

base_urlapi_keymodel 换成你的环境,即可在任意 OpenAI 兼容服务上跑起来。


2.2 客户端 OpenAI() 参数说明

OpenAI() 用于创建与 API 服务通信的客户端,常用参数如下。

参数类型说明
base_urlstrAPI 根地址,如 https://api.openai.com/v1。国内/自建可填 https://api.deepseek.com/v1https://openai.xxx.com/v1 等。不填则默认官方 OpenAI。
api_keystr对应服务的密钥。部分兼容服务允许占位符(如 dummy),但生产环境必须填有效 key。
timeoutfloat | None单次请求超时时间(秒)。例如 timeout=60.0。不设则用库默认。
max_retriesint失败时最大重试次数,默认 2。设为 0 可关闭自动重试。
http_client自定义 HTTP 客户端可注入自己的 httpx.Client,用于代理、自定义 header 等。

示例:带超时与重试的客户端。

client = OpenAI( base_url="https://api.openai.com/v1", api_key="your-api-key", timeout=120.0, max_retries=2,)

2.3 流式对话:chat.completions.create(..., stream=True)

流式调用时,接口返回的是一个迭代器,每次迭代得到一个「片段」对象,片段里当前新增的文本在 chunk.choices[0].delta.content

要点:

  • stream=True 必须传入,否则返回的是整段完成后再返回的单个对象,而不是迭代器。
  • 每个 chunk 可能有 chunk.choices[0].delta.contentNone(例如只更新 role 或仅心跳),所以判断后再用。
  • 流式响应没有最终的 usage(部分服务在流结束前会发一个带 usage 的 chunk,需看具体实现)。

示例:流式打印并拼接完整回复。

stream = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role":"user","content":"用三句话介绍 Python。"}], stream=True,) full =[]for chunk in stream:if chunk.choices andlen(chunk.choices)>0: delta = chunk.choices[0].delta ifgetattr(delta,"content",None): full.append(delta.content)print(delta.content, end="")print() reply ="".join(full)

2.4 create() 常用参数详解

client.chat.completions.create() 的常用参数如下,兼容 OpenAI 的厂商大多支持其中大部分。

参数类型说明
modelstr模型 ID,如 gpt-4o-minideepseek-chatqwen-plus 等,由服务方规定。
messageslist[dict]对话历史,见 2.6 节。必填。
streambool是否流式返回。True 时返回迭代器;False 时返回一个完整 ChatCompletion 对象。
temperaturefloat采样随机度,范围一般 0~2。越高越随机,越低越确定。做代码/翻译时可设 0.2~0.3。
top_pfloat核采样:只从概率质量前 top_p 的 token 中采样。与 temperature 二选一调即可。
max_tokensint回复最大 token 数(部分服务用 max_completion_tokens)。不设则用模型默认上限。
stopstr | list[str]遇到这些字符串时停止生成(最多常见 4 个)。例如 stop=["\n\n", "Human:"]
frequency_penaltyfloat-2~2,正值减少重复,让模型少重复已出现过的词。
presence_penaltyfloat-2~2,正值鼓励谈论新话题。
nint同一条请求生成几条回复,默认 1。大于 1 时 choices 有多条,按需取用。
response_formatdict约束输出格式,如 {"type": "json_object"} 要求返回合法 JSON。
toolslist函数/工具列表,用于 Function Calling;与 tool_choice 配合。
seedint固定随机种子,便于复现(部分模型支持)。

示例:带温度、最大 token 和 stop 的调用。

resp = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role":"user","content":"写一首四句诗,关于编程。"}], stream=False, temperature=0.8, max_tokens=200, stop=["。","\n\n"],) text = resp.choices[0].message.content 

2.5 非流式调用与响应结构

stream=False(默认)时,create() 返回一个 ChatCompletion 对象,常用属性:

  • id:本次完成的 ID。
  • choices:列表,通常只有一项。choices[0].message 是助手消息;choices[0].message.content 是文本内容。
  • choices[0].finish_reason:结束原因,如 "stop"(正常结束)、"length"(达到 max_tokens)、"tool_calls"(调用了工具)等。
  • usage:若服务返回则有 prompt_tokenscompletion_tokenstotal_tokens,用于计费或统计。

示例:非流式并取完整回复与 token 数。

completion = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role":"user","content":"1+1=?"}], stream=False,) msg = completion.choices[0].message print(msg.content)# 助手回复文本print(msg.role)# "assistant"print(completion.choices[0].finish_reason)# "stop" 等if completion.usage:print(completion.usage.total_tokens)# 总 token 数

2.6 消息格式 messages 与多轮对话

messages按顺序的对话列表,每项为 {"role": "...", "content": "..."}

role说明
system系统提示,设定助手身份、风格、规则。可选,多数放在第一条。
user用户说的话。
assistant助手之前的回复,用于多轮对话时把历史带上。

多轮对话示例:带 system,并保留一轮 user/assistant 历史。

messages =[{"role":"system","content":"你是一个简洁的技术助手,只回答一句话。"},{"role":"user","content":"Python 的 GIL 是什么?"},{"role":"assistant","content":"GIL 是全局解释器锁,同一时刻只允许一个线程执行 Python 字节码。"},{"role":"user","content":"怎么规避?"},] completion = client.chat.completions.create( model="gpt-4o-mini", messages=messages, stream=False,)print(completion.choices[0].message.content)

部分兼容 API 还支持 多模态usercontent 可以是数组,包含 {"type": "text", "text": "..."}{"type": "image_url", "image_url": {"url": "..."}} 等,用于图文问答。


2.7 其他常用能力与函数

  • 列出模型(部分服务支持):client.models.list() 可返回可用模型列表,便于在 UI 里展示或校验 model 是否有效。
  • Function Calling / Tools:在 create() 里传入 toolstool_choice,模型会返回 tool_calls,你本地执行对应函数后再把结果以 role="tool" 的消息 append 到 messages 并再次调用,实现「模型决定调哪个函数、你执行并回传」的流程。
  • JSON 模式response_format={"type": "json_object"} 让模型尽量输出合法 JSON,便于解析。
  • 流式中的 usage:部分厂商在流式结束时通过最后一个 chunk 的 usage 返回 token 统计,需按各服务文档处理。

这些在「最小接入」时可选;先把 create()model / messages / stream 用熟,再按需加参数即可。


2.8 错误处理与重试

常见异常来自 openai 库:

  • openai.APIConnectionError:网络/连接问题,可视为临时错误,适合重试。
  • openai.APIStatusError:HTTP 状态码非 2xx,如 401(key 错误)、429(限流)、5xx(服务端错误)。可通过 e.status_codee.message 区分是否可重试(例如 5xx 可重试,401 则不必)。

示例:捕获并区分错误。

from openai import OpenAI, APIConnectionError, APIStatusError client = OpenAI(base_url="...", api_key="...")try: stream = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role":"user","content":"Hi"}], stream=True,)for chunk in stream:if chunk.choices and chunk.choices[0].delta.content:print(chunk.choices[0].delta.content, end="")except APIConnectionError as e:print("连接失败,可重试:", e)except APIStatusError as e:print("API 错误:", e.status_code, e.message)if e.status_code and500<= e.status_code <600:print("服务端错误,可稍后重试")

生产环境可在此基础上加指数退避重试超时日志(注意不要打印 api_key)。


小结第二节:用 Python 使用 AI 聊天 = 用 OpenAI(base_url=..., api_key=..., ...) 构造客户端,用 client.chat.completions.create(model=..., messages=..., stream=True/False, ...) 发请求;流式用迭代器取 chunk.choices[0].delta.content,非流式用 completion.choices[0].message.content。掌握 messages 格式和常用参数后,即可接入任意 OpenAI 兼容服务,并在此基础上做多模型、多轮对话和错误处理。


三、HuluAiChat 项目简介 📦

HuluAiChat 是一个轻量桌面 AI 聊天应用,用 Python + CustomTkinter 编写,底层只用 openai 库的兼容接口,会话与消息存 SQLite,配置在用户目录 config.json,支持多 Provider 切换、流式对话与亮/暗主题。下面用其架构说明如何把「最小示例」扩展成可维护的完整应用。

类别技术
语言Python 3.10+
界面CustomTkinter
聊天 APIopenai 库(OpenAI 兼容)
持久化SQLite
配置用户目录 config.json
打包PyInstaller(Windows exe)
在这里插入图片描述

四、整体架构:分层与职责 🏗️

HuluAiChat 采用清晰分层:UI 层(主窗口、设置)→ 应用层 AppService(会话、发消息、配置)→ 基础设施(ConfigStore、SessionRepo、MessageRepo、ChatClient)。「用 Python 接入 AI 聊天」落在 ChatClient:上层只依赖流式回调抽象,具体是否 OpenAI 兼容由 Chat 层封装。

  • UI 层:只负责界面与用户操作,通过应用层发消息、改配置。
  • 应用层:编排发消息、会话 CRUD、当前模型、主题,不依赖具体 UI。

基础设施:ChatClient(流式 API)、ConfigStore、SessionRepository、MessageRepository,均可替换。

在这里插入图片描述

五、流式发送消息的完整流程 🔄

从用户点击发送到界面逐字显示、再写入数据库:UI 将用户输入和 chunk_queue 交给 AppService;AppService 在后台线程调用 ChatClient.stream_chat(provider, messages, on_chunk),在 on_chunk 里把片段放入队列;主线程轮询队列更新 UI;收到 DoneChunk 后把完整助手回复写入 MessageRepository。你在自己项目里也可采用:队列 + 后台线程调流式 API + 主线程消费队列更新 UI

在这里插入图片描述

六、核心代码解析:Chat 抽象与 OpenAI 实现 🔧

HuluAiChat

  • src/chat/client.py 定义流式片段类型(TextChunkDoneChunkChatError)和抽象 ChatClient.stream_chat(provider, messages, on_chunk)
  • src/config/models.pyProvider(id、name、base_url、api_key、model_id)表示一个模型配置;
  • OpenHuluChatClientsrc/chat/openai_client.py 里用 OpenAI(base_url=..., api_key=...)chat.completions.create(..., stream=True) 实现流式回调,错误统一转为 ChatErroron_chunk 回传。
    这样任何 OpenAI 兼容或自研实现只要实现 ChatClient 即可接入。

七、如何接入到你自己的项目 🚀

  • 只想要「调用流式聊天」:复制第二节最小示例,用 OpenAI(...) + chat.completions.create(..., stream=True);多模型可像 HuluChat 一样用 Provider 存多组 base_url / api_key / model_id。
  • 想要可替换的聊天实现:定义 ChatClient 抽象和 stream_chat(provider, messages, on_chunk),当前用 OpenHuluChatClient,后续可换 Azure/自建实现并注入。
  • 想要界面 + 后台线程 + 队列:主线程传 queue.Queue() 给应用层并轮询;后台线程在 on_chunkchunk_queue.put(chunk),参考 HuluChat 的 AppService.send_message
  • 依赖:Python 3.10+,pip install openai>=1.0.0;配置用环境变量、JSON 或数据库均可。

八、扩展方向 📈

  • 多模型/多厂商:配置多个 Provider,无需改代码。
  • 换聊天实现:实现自己的 ChatClient 并注入。
  • 换存储/配置:替换 ConfigStore、SessionRepository、MessageRepository。
  • 打包分发:PyInstaller 打包 exe,配置与数据库放用户目录。

九、小结 ✅

  • 用 Python 使用 AI 聊天模型:安装 openai,用 OpenAI(base_url=..., api_key=...) + chat.completions.create(..., stream=True/False, ...) 即可对接任意 OpenAI 兼容 服务;第二节已展开各参数、消息格式、流式/非流式与错误处理
  • HuluChat 在此基础上做了多 Provider、流式对话、本地 SQLite、桌面 UI 和 ChatClient 抽象,便于复用或替换实现。
  • 若只在现有项目里加「AI 对话」:从第二节最小示例起步即可;若要做成可维护应用,可参考 HuluChat 的分层与流式流程,按需抽取 Chat 层与持久化层。

项目地址:HuluAiChat(欢迎 Star / Issue / PR)。如有问题或想交流接入方式,可在仓库提 Issue 或讨论。

Read more

必收藏!小白也能懂:Agent、Skills、MCP和A2A大模型架构完全指南

必收藏!小白也能懂:Agent、Skills、MCP和A2A大模型架构完全指南

文章详解AI Agent四大核心概念:Agent作为智能决策主体,Skills提供原子化能力封装,MCP实现标准化工具调用,A2A支持Agent间协作。这些技术共同构建了从单Agent自主执行到多Agent协同工作的完整技术栈,解决了智能体的自主性、模块化能力、工具调用和互操作等核心问题,助力开发者快速构建专业级AI应用。 一、Agent、Skills、MCP和A2A的核心概念总览 1、Agent (代理/智能体):自主决策与执行的“大脑”。 AI Agent是2026年AI生态的核心概念,是基于人工智能技术构建的、具备感知环境、理解信息、自主推理决策、自主规划与执行动作并持续与环境/其他主体交互,以自主达成预设或动态生成目标的数字智能实体。2026年的智能体不是在回答问题,而是在完成任务。其突破了传统问答式、生成式AI的能力边界,可像人类员工一样独立处理复杂综合性任务。它以大模型为核心引擎,整合规划、记忆、工具调用与行动执行四大能力,形成「感知 - 认知 - 决策 - 执行 - 反馈」的完整智能闭环,

By Ne0inhk
毕业设计不用愁:一个免费的 SQL 转 ER 图在线工具,真香!

毕业设计不用愁:一个免费的 SQL 转 ER 图在线工具,真香!

毕业设计不用愁:一个免费的 SQL 转 ER 图在线工具,真香! * 📌 工具地址(直接能用): * ✨ 工具亮点:一贴SQL,秒出ER图 * 🎯 使用方式示意 * 🧰 适用场景:毕设 + 课程设计 + 快速原型设计 * 🆓 其他可配套使用的工具(同一个网站): * 🧠 总结 * 💬 如果觉得实用,欢迎点个赞或收藏,后续我也会分享更多毕业设计 / 技术工具相关内容。也欢迎留言交流你在用哪些工具提升效率! 每到毕业季,很多计算机相关专业的同学都逃不过一个“老大难”任务:数据库设计文档。 建表语句写好了,项目也跑起来了,但老师或答辩组要求提交“ER 图”。这时候,不少同学陷入手动画图的深坑: 用 Visio 太复杂,PowerDesigner 要装半天,还容易报错……最后干脆拿 Excel 画框线,凑个样子就交了。 其实你完全可以用一个免费的在线工具,直接把 SQL

By Ne0inhk

Spring Cloud 概述

目录 微服务 单体架构 集群和分布式架构 横向扩展 纵向扩展 微服务架构 Spring Cloud 什么是 Spring Cloud Spring Cloud 版本 Spring Cloud 实现方案 服务拆分 服务拆分原则 简单示例 服务拆分 数据准备 工程搭建 父工程创建 子项目创建-商品服务 子项目创建-订单服务 远程调用 在学习 Spring Cloud 之前,我们先来了解一下什么是微服务,以及微服务的发展历史。架构发展的过程中,遇到了哪些问题?是如何解决的?Spring Cloud 解决了其中的什么问题? 微服务 单体架构 所有功能模块(如用户管理、订单处理)打包在一个应用中,共享同一数据库,模块间通过函数调用直接通信,开发、测试、

By Ne0inhk

ClawdBot保姆级教学:解决Gateway not reachable错误的5种方法

ClawdBot保姆级教学:解决Gateway not reachable错误的5种方法 1. 什么是ClawdBot?——你的本地AI助手,不是云端玩具 ClawdBot 是一个真正属于你自己的个人 AI 助手。它不依赖远程API、不上传隐私数据、不按调用次数收费——所有推理都在你自己的设备上完成。你可以把它理解成“装在你电脑里的 Siri + Copilot + Notion AI 的混合体”,但更自由、更透明、更可控。 它的核心能力由 vLLM 提供支撑。vLLM 是当前最高效的开源大模型推理引擎之一,以极高的吞吐量和极低的显存占用著称。ClawdBot 利用它来加载和运行像 Qwen3-4B-Instruct 这样的轻量级但能力扎实的模型,让你在消费级显卡(甚至带显存的笔记本)上也能获得接近专业服务的响应速度和对话质量。 和那些动辄要填 API Key、绑定手机号、看广告才能用的 Web 应用不同,ClawdBot 的哲学是:“你装,你用,

By Ne0inhk