第一部分:核心语法 - 异常处理
在调用 AI 接口时,网络波动或 API 错误非常常见,因此异常处理尤为重要。
- 异常捕获 (
try-except):防止程序因报错而崩溃。 - 常见异常类型 :
ConnectionError(网络断开),ValueError(数据格式错误),KeyError(字典键不存在)。 - 资源释放 (
finally):无论是否出错,都要执行的代码(如关闭文件)。
python
# 模拟调用 AI 接口时的异常处理
def call_ai_api(prompt):
try:
# 假设这是调用接口的代码
response = {"text": "你好"}
if not response:
raise ValueError("API 返回为空")
return response['text']
except ConnectionError as e:
print(f"网络连接失败,请检查网络: {e}")
return None
except KeyError as e:
print(f"数据解析错误,缺少字段: {e}")
return None
except Exception as e:
print(f"发生未知错误: {e}")
finally:
print("本次调用结束")
# 测试
call_ai_api("Hello")
第二部分:AI 应用与大模型部署
这部分介绍了如何获取和使用大模型能力,分为"本地部署"和"云端 API"两种主流方案。
- Ollama 本地部署:适合隐私要求高、无网环境或开发者调试。它允许你在本地电脑运行 Llama3、Qwen 等模型。
- DeepSeek 官方 API:适合生产环境,无需高性能显卡,按 Token 付费,直接通过网络请求调用。
- 网络基础:理解 IP、端口、DNS 以及 HTTP/HTTPS 协议是调用的前提。
第三部分:大模型调用与 HTTP 协议
这一板块深入讲解了如何与模型"对话"。本质上,调用大模型就是发送一个特定的 HTTP POST 请求。
- HTTP 协议:客户端(你的代码)向服务器(AI 厂商)发送请求。
- JSON 数据格式:目前主流的 API 交互格式。
- Apifox/Postman 测试:在写代码前,先用工具测试接口是否通畅。
代码示例:构造标准的 API 请求体
python
import requests
import json
# 定义请求头和数据格式
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY" # 身份验证
}
# 构造符合 DeepSeek/OpenAI 格式的请求数据
payload = {
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "你是一个Python助手"},
{"role": "user", "content": "写一个Hello World"}
],
"stream": False # 是否开启流式输出
}
# 发送 POST 请求
# response = requests.post("https://api.deepseek.com/v1/chat/completions", headers=headers, json=payload)
# print(response.json())
第四部分:高级调用与会话记忆
大模型本质是"无状态"的(它记不住上一句说了什么),要实现像人一样的聊天,需要人为维护"上下文"。
- 会话记忆方案:将历史对话存入列表或数据库,每次提问时把历史记录一起发给模型。
- 提示词工程:通过优化 Prompt(提示词)来引导模型输出更好的结果(例如:"请扮演一位资深程序员...")。
- 流式输出:像打字机一样逐字显示,提升用户体验。
代码示例:简单的会话记忆逻辑
python
# 维护一个消息列表作为"记忆"
chat_history = [
{"role": "system", "content": "你是一个乐于助人的助手。"}
]
def chat_with_memory(user_input):
# 1. 把用户新说的话加入记忆
chat_history.append({"role": "user", "content": user_input})
# 2. 将整个 history 发送给 API (伪代码)
# ai_response = api_call(chat_history)
# 3. 把 AI 的回复也加入记忆,以便下一轮对话能理解上下文
# chat_history.append({"role": "assistant", "content": ai_response})
return "模拟回复"
print(chat_with_memory("我叫小明"))
print(chat_with_memory("我叫什么名字?")) # 此时模型应该知道你是小明
第五部分:Streamlit 实战开发
这部分是将上述技术整合成一个可视化的 Web 应用。Streamlit 是 Python 生态中最流行的快速构建数据/AI 应用的框架。
1. 界面构建
- 页面设置:设置网页标题、图标、宽屏模式。
- 布局 :使用
st.sidebar(侧边栏) 放置配置项,主区域放置聊天窗口。 - 消息展示 :使用
st.chat_message区分用户和 AI 的气泡样式。
2. 会话管理与持久化
由于 Streamlit 每次交互都会重新运行整个脚本,变量会重置。因此需要使用 st.session_state 来保存聊天记录。
- 新建/保存会话:将聊天记录保存为 JSON 文件,实现历史记录功能。
- 资源释放:清理不再需要的临时文件。
代码示例:Streamlit 聊天应用核心逻辑
python
import streamlit as st
import json
# 1. 初始化 Session State (相当于内存数据库)
if "messages" not in st.session_state:
st.session_state.messages = []
# 2. 侧边栏设置
with st.sidebar:
st.title("设置")
if st.button("清空历史"):
st.session_state.messages = [] # 清空内存
st.rerun() # 刷新页面
# 3. 渲染历史消息
for msg in st.session_state.messages:
with st.chat_message(msg["role"]):
st.markdown(msg["content"])
# 4. 处理用户输入
if prompt := st.chat_input("请输入内容..."):
# 显示用户消息
with st.chat_message("user"):
st.markdown(prompt)
# 存入历史
st.session_state.messages.append({"role": "user", "content": prompt})
# 模拟 AI 思考并回复
with st.chat_message("assistant"):
response = f"我收到了你的消息:{prompt}"
st.markdown(response)
# 存入历史
st.session_state.messages.append({"role": "assistant", "content": response})
# 5. 保存到本地 JSON (持久化)
with open("chat_history.json", "w", encoding="utf-8") as f:
json.dump(st.session_state.messages, f, ensure_ascii=False)