基础对话与结构化输出 用 API 调用大模型进行简单对话先创建.env环境变量文件。代码主体import osfrom openai import OpenAIfrom dotenv import load_dotenv加载环境变量load_dotenv()获取 OpenAI API KeyAPI_KEY os.getenv(“LLM_API_KEY”)Model_ID os.getenv(“LLM_MODEL_ID”)Base_URL os.getenv(“LLM_BASE_URL”)初始化 OpenAI 客户端client OpenAI(api_keyAPI_KEY, base_urlBase_URL)def generate_response(prompt):“”使用 OpenAI API 生成响应:param prompt: 用户输入的提示:return: 模型生成的响应“”try:response client.chat.completions.create(modelModel_ID,messages[{“role”: “user”, “content”: prompt}])return response.choices[0].message.content.strip()except Exception as e:print(fError generating response: {e})return “抱歉生成响应时发生错误。”快速测试是否可用示例用法ifname “main”:user_prompt “你好回复我调试成功”response generate_response(user_prompt)print(“模型响应:”, response)想要手动输入交互对话示例用法ifname “main”:print(“AI对话程序输入 quit 结束对话”)while True:user_prompt input(“你:”)if user_prompt “quit”:print(“对话结束”)breakresponse generate_response(user_prompt)print(“AI:”, response, “\n”)示例输出你:你好我叫阿言AI: 很高兴认识你阿言今天过得怎么样有没有什么想和我聊聊的或者需要我帮忙的吗你:你还记得我叫什么吗AI: 你好每次对话对我来说都是新的开始所以我暂时无法记住你的名字不过如果你愿意告诉我我会很乐意在当前对话中称呼你哦 你叫什么名字呢此时大模型无法记住上下文所以我们需要加入上下文模块。加入上下文功能为了令大模型能记住上下文我们需要设置chat_history来存储之前的对话。代码修改初始化 OpenAI 客户端后加入全局列表存储完整对话历史chat_history [ ]。修改generate_response函数定义每一轮次先在对话历史中加入用户 inputchat_history.append({“role”: “user”, “content”: prompt})再在 AI 回复后加入 AI 的回复chat_history.append({“role”: “assistant”, “content”: response.choices[0].message.content.strip()}。完整代码演示chat_history [ ]def generate_response(prompt):“”使用 OpenAI API 生成响应:param prompt: 用户输入的提示:return: 模型生成的响应“”try:chat_history.append({“role”: “user”, “content”: prompt})response client.chat.completions.create(modelModel_ID,messageschat_history)ai_response response.choices[0].message.content.strip()chat_history.append({“role”: “assistant”, “content”: ai_response})return ai_responseexcept Exception as e:print(fError generating response: {e})return “抱歉生成响应时发生错误。”示例输出你:你好我叫阿言AI: 你好呀阿言 很高兴认识你我是你的智能助手。今天有什么想聊的或者需要我帮忙的地方吗不管是回答问题、查资料还是随便聊聊随时都可以告诉我哦你:你还记得我叫什么吗AI: 当然记得呀你叫阿言咱们刚才才见面的 今天过得怎么样有什么想聊的或者需要我帮忙的吗3. 加入系统提示词Agent 一般都要有一个系统提示词来规定 AI 的行为模式。可以通过定义系统提示词让大模型在读取 message 信息时获得系统提示词。这个提示词只需要在一开始即初始化 OpenAI 客户端后定义一次然后将其放入对话历史储存。代码主体定义系统提示词system_prompt {“role”: “system”,“content”: “你是一个有帮助的AI助手叫小爱。请根据用户的输入提供有用的信息和建议。”}全局列表存储完整对话历史实现上下文chat_history [system_prompt]示例输出你:你好我叫阿言你叫什么名字AI: 你好呀阿言很高兴认识你我叫小爱是你的智能助手。无论是解答疑惑、提供建议还是日常聊天我都在这里随时待命哦今天有什么我可以帮你的吗4. 结构化输出为什么希望 LLM 返回 JSON 格式优势 具体说明结构化处理 程序可直接用json.loads()解析无需复杂正则提取避免字符串解析错误数据集成 可直接导入数据库、作为 API 响应或工作流中间数据无缝对接下游系统类型安全 明确字段定义与类型避免数据类型混淆如数字 vs 字符串结果一致性 强制固定字段如thoughtfinal_answer消除自由文本的不确定性智能体适配 完美支持工具调用、多轮对话状态管理等 AI Agent 场景错误可检测 JSON 格式错误可被程序立即捕获便于重试或修复JSON 格式输出的简单方法系统提示词修改“role”: “system”,“content”: 你是一个专业的数据格式化助手。请严格遵循以下规则\仅输出符合 RFC 8259 标准的纯 JSON无任何多余文字、解释、注释。\禁止使用 Markdown 代码块、禁止加 json 标记。\字段名称、类型严格按照要求字符串用双引号禁止尾随逗号。\只返回 JSON不回答任何其他问题。写入函数硬性要求输出格式response_format{“type”: “json_object”}加入位置response client.chat.completions.create(modelModel_ID,response_format{“type”: “json_object”},messageschat_history)二、本篇总结 下期预告本篇我们完成了纯大模型对话、上下文管理、结构化输出三大基础能力但当前模型仅能纯文本回答没有执行外部操作的能力还不能称之