AI社交应用从零跑通:用Python和提示词模板搭一个聊天机器人
想做一个AI社交应用,最直接的方式是先跑通一个最小可用版本:用Python接收用户消息,拼接提示词模板后调用大模型接口,再把回复返回给用户。
本文按这个思路带你完成环境准备、密钥配置、代码编写和效果验证,适合零基础但愿意动手的读者。
先理清最小可运行流程
AI社交应用的核心链路不复杂:用户输入消息 → 程序读取历史对话 → 拼成提示词 → 调用模型接口 → 解析回复 → 返回给用户。
本文用Python的requests库直接调用兼容OpenAI格式的接口,不依赖特定框架,方便你后续迁移到微信、Discord或网页端。
需要准备的条件:
- 一台能联网的Linux或Windows电脑,Python 3.8以上
- 一个大模型API密钥(本文以通用兼容接口为例,具体地址和模型名以你申请的服务商为准)
- 基础的命令行操作能力
配置环境与密钥
先在项目目录下创建虚拟环境,避免污染系统Python:
python3 -m venv venv
source venv/bin/activate
pip install requests
把API密钥写入环境变量,不要硬编码在代码里。
Linux/macOS下执行:
export AI_API_KEY="你的密钥"
export AI_BASE_URL="https://api.example.com/v1"
export AI_MODEL="gpt-3.5-turbo"
Windows PowerShell用$env:AI_API_KEY="你的密钥"。
如果服务商提供的是完整接口地址,把AI_BASE_URL改成实际地址,并确保代码中拼接的路径一致。
编写聊天主程序
新建chat.py,核心逻辑分三步:维护对话历史、构造请求体、解析返回内容。
import os, json, requests
API_KEY = os.environ["AI_API_KEY"]
BASE_URL = os.environ["AI_BASE_URL"].rstrip("/")
MODEL = os.environ["AI_MODEL"]
history = [{"role": "system", "content": "你是一个友好的社交助手,回答简短有趣。"}]
def ask(user_input):
history.append({"role": "user", "content": user_input})
resp = requests.post(
f"{BASE_URL}/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
json={"model": MODEL, "messages": history, "temperature": 0.7},
timeout=30
)
resp.raise_for_status()
reply = resp.json()["choices"][0]["message"]["content"]
history.append({"role": "assistant", "content": reply})
return reply
if __name__ == "__main__":
while True:
text = input("你:")
if text in ("退出", "exit"):
break
print("AI:" + ask(text))
这段代码把系统提示词放在history开头,
每次对话追加用户消息和模型回复,
实现多轮上下文。timeout=30避免请求卡死,raise_for_status()让HTTP错误直接暴露。
运行python chat.py,输入“你好”应能收到回复。
如果报401,检查密钥和环境变量是否生效;
如果报404,核对BASE_URL和接口路径是否匹配。
避坑与验证要点
密钥安全:不要把密钥提交到Git仓库,用.env文件配合python-dotenv加载,或直接依赖系统环境变量。
上下文长度:历史消息会持续增长,超出模型上下文限制会报错。
简单做法是只保留最近10轮对话,或按字符数截断。
回复验证:不要只看有没有返回内容。
检查返回的JSON结构是否包含choices字段,确认finish_reason不是length(被截断)。
可以在代码中打印完整响应体排查。
网络问题:国内服务器调用境外接口可能超时,先确认服务商是否提供国内接入点,或检查服务器出站规则。
下一步扩展方向
跑通命令行版本后,可以把ask()函数接入Flask或FastAPI做成HTTP接口,再对接社交平台的Webhook。
提示词模板也可以按场景拆分,比如欢迎语、敏感词拦截、人格设定分别放在不同system消息里。
建议每次改动后先用固定输入回归测试,确认回复格式和上下文逻辑没有退化。