智谱清言API调用实战:用Python写一个命令行聊天机器人(附完整代码)
智谱清言API调用实战用Python打造个性化命令行聊天机器人在终端里与AI对话听起来像是科幻电影里的场景但今天我们用不到100行Python代码就能实现这个功能。不同于网页端或App的固定界面命令行聊天机器人给了开发者无限定制的可能——你可以自由设计对话逻辑、添加个性化回复甚至整合到自己的开发工作流中。1. 项目准备与环境搭建1.1 获取API访问权限智谱清言的API调用需要三个关键信息API Key身份验证凭证基础URLAPI服务地址模型名称指定使用的AI模型版本注册流程简化如下访问智谱AI开放平台(open.bigmodel.cn)完成开发者认证在控制台创建API Key安全提示API Key相当于账户密码切勿直接硬编码在脚本中或上传到公开代码仓库1.2 安装必要的Python包推荐使用虚拟环境隔离项目依赖python -m venv glm-chatbot source glm-chatbot/bin/activate # Linux/macOS glm-chatbot\Scripts\activate # Windows pip install zhipuai rich pygments安装的包各有其用zhipuai官方SDKrich终端美化输出pygments代码高亮显示2. 核心代码实现2.1 基础对话循环我们先实现最基本的问答功能from zhipuai import ZhipuAI def simple_chat(api_key): client ZhipuAI(api_keyapi_key) print(输入quit退出对话) while True: try: user_input input(You: ) if user_input.lower() quit: break response client.chat.completions.create( modelglm-4, messages[{role: user, content: user_input}] ) print(fAI: {response.choices[0].message.content}) except KeyboardInterrupt: print(\n对话已终止) break这个版本已经实现了持续对话直到用户输入quit基本的异常处理简洁的输入输出界面2.2 增强版聊天机器人让我们添加更多实用功能from zhipuai import ZhipuAI from rich.console import Console from pygments import highlight from pygments.lexers import PythonLexer from pygments.formatters import TerminalFormatter console Console() def enhanced_chat(api_key): client ZhipuAI(api_keyapi_key) history [] console.print([bold green]智谱清言CLI版已启动[/] (输入/help查看命令)) while True: try: user_input console.input([bold blue]You:[/] ) if user_input.lower() /quit: break elif user_input.lower() /help: show_help() continue elif user_input.lower() /clear: history.clear() console.print([yellow]对话历史已清空[/]) continue history.append({role: user, content: user_input}) with console.status([bold green]AI正在思考...): response client.chat.completions.create( modelglm-4, messageshistory, temperature0.7 ) ai_reply response.choices[0].message.content history.append({role: assistant, content: ai_reply}) # 特殊处理代码块显示 if python in ai_reply: code ai_reply.split(python)[1].split()[0] console.print([bold green]AI:[/] ai_reply.split(python)[0]) console.print(highlight(code, PythonLexer(), TerminalFormatter())) console.print([bold green]AI:[/] ai_reply.split(python)[1].split()[1]) else: console.print(f[bold green]AI:[/] {ai_reply}) except KeyboardInterrupt: console.print(\n[yellow]对话已终止[/]) break def show_help(): help_text 可用命令: /help - 显示帮助信息 /quit - 退出程序 /clear - 清空对话历史 console.print(help_text, stylebold cyan)这个增强版实现了彩色终端输出对话历史记忆特殊命令处理(/help, /quit, /clear)Python代码高亮显示加载状态提示3. 工程化改进3.1 配置管理创建config.py管理敏感信息# config.py API_KEY your_api_key_here # 替换为你的实际API Key3.2 错误处理增强def safe_chat(api_key): try: enhanced_chat(api_key) except Exception as e: console.print(f[bold red]错误发生:[/] {str(e)}) console.print([yellow]建议检查网络连接或API Key有效性[/])3.3 打包为可执行文件使用PyInstaller创建独立可执行文件安装PyInstallerpip install pyinstaller创建打包脚本# build.spec a Analysis([main.py], pathex[/path/to/your/project], binaries[], datas[], hiddenimports[], hookspath[], runtime_hooks[], excludes[], win_no_prefer_redirectsFalse, win_private_assembliesFalse, cipherblock_cipher) pyz PYZ(a.pure, a.zipped_data, cipherblock_cipher) exe EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, nameGLM_Chatbot, debugFalse, stripFalse, upxTrue, runtime_tmpdirNone, consoleTrue)执行打包pyinstaller build.spec4. 进阶功能扩展4.1 多轮对话优化def optimize_history(history, max_turns10): 控制对话历史长度避免超出上下文限制 if len(history) max_turns * 2: # 保留最近对话但保留第一条用户输入作为上下文 history [history[0]] history[-max_turns*2:] return history4.2 流式输出实现类似ChatGPT的逐字输出效果def stream_response(client, messages): response client.chat.completions.create( modelglm-4, messagesmessages, streamTrue ) console.print([bold green]AI:[/] , end) full_reply for chunk in response: content chunk.choices[0].delta.content if content: full_reply content console.print(content, end, flushTrue) console.print() return full_reply4.3 对话持久化添加对话记录保存功能import json from datetime import datetime def save_chat(history, filenameNone): if not filename: filename fchat_{datetime.now().strftime(%Y%m%d_%H%M%S)}.json with open(filename, w, encodingutf-8) as f: json.dump(history, f, ensure_asciiFalse, indent2) console.print(f[green]对话已保存到 {filename}[/])将这些功能整合后我们的聊天机器人不仅实用还具备了产品级的用户体验。