{ "cells": [ { "cell_type": "markdown", "id": "b4151ddd", "metadata": {}, "source": [ "### 多轮对话信息收集助手" ] }, { "cell_type": "code", "execution_count": 1, "id": "549f138d", "metadata": {}, "outputs": [], "source": [ "from openai import OpenAI\n", "from dotenv import load_dotenv \n", "import ipywidgets as widgets\n", "from IPython.display import display, clear_output\n", "import os\n", "load_dotenv()\n", "\n", "client = OpenAI(\n", " base_url=os.getenv(\"BAILIAN_API_BASE_URL\"),\n", " api_key=os.getenv(\"BAILIAN_API_KEY\")\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "30401a75", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "761d2be4e26c45f1af048abc9fbae737", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6e20737068e842a696323d061d5bb9ab", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(Text(value='', placeholder='请输入您的消息...'), Button(button_style='primary', description='发送', styl…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 初始化消息列表\n", "messages = []\n", "\n", "def save_message(role, content):\n", " \"\"\"保存对话消息到消息列表中\"\"\"\n", " messages.append({\"role\": role, \"content\": content})\n", "\n", "def save_user_message(role, content):\n", " \"\"\"保存用户消息\"\"\"\n", " user_message = f\"\"\"\n", " 用户发来新的消息(在<>中提供),如果用户询问一些其他问题时,请礼貌地告诉用户,你是一个信息收集助手,不回答其它不相关问题。\n", " 用户消息:\n", " <{content}>\n", " \"\"\"\n", " messages.append({\"role\": role, \"content\": user_message})\n", "\n", "\n", "# 调用API获取回复\n", "def get_response(messages):\n", " system_prompt = f\"\"\"\n", " 你是一个专业的信息收集助手。你的任务是收集用户的姓名、年龄和用户感兴趣的行业。\n", "\n", " ## 信息收集策略:\n", " 1. 使用开放式问题引导用户提供更多信息\n", " 2. 对模糊的信息进行澄清和确认\n", " 3. 根据上下文,智能地推断和补充相关信息\n", " 4. 保持对话的自然性和连贯性\n", "\n", " ## 对话要求:\n", " 1. 保持友好、专业的语调\n", " 2. 每次回复要简洁明了\n", " 3. 适时总结已收集的信息\n", " 4. 当用户询问一些其他问题时,请礼貌地告诉用户,你是一个信息收集助手,不回答其它不相关问题。提醒用户还没收集完成。\n", "\n", "\n", " \"请开始与用户对话,帮助收集所需信息。\n", " \"\"\"\n", " response = client.chat.completions.create(\n", " model=\"qwen3-30b-a3b\",\n", " messages= [{\"role\": \"system\", \"content\": system_prompt}] + messages,\n", " extra_body={\"enable_thinking\": False},\n", " temperature=0.7,\n", " )\n", " return response.choices[0].message.content\n", "\n", " # response = client.responses.create(\n", " # model=\"qwen3-30b-a3b\",\n", " # input= [{\"role\": \"system\", \"content\": system_prompt}] + messages,\n", " # extra_body={\"enable_thinking\": False},\n", " # temperature=0.7,\n", " # )\n", " # return response.output_text\n", "\n", "# 用户输入的消息\n", "user_message = \"Hello, how are you?\"\n", "save_user_message(\"user\", user_message)\n", "\n", "# 保存助手的回复\n", "assistant_message = get_response(messages) \n", "save_message(\"assistant\", assistant_message)\n", "\n", "# 聊天显示区\n", "chat_area = widgets.Output()\n", "\n", "def refresh_chat():\n", " with chat_area:\n", " clear_output()\n", " for msg in messages:\n", " if msg[\"role\"] == \"user\":\n", " content = msg['content']\n", " if '<' in content and '>' in content:\n", " start = content.find('<')\n", " end = content.find('>')\n", " content = content[start+1:end]\n", " print(f\"用户: {content}\")\n", " continue\n", " print(f\"用户: {content}\")\n", " else:\n", " print(f\"AI助手: {msg['content']}\")\n", "\n", "# 输入框和按钮\n", "input_box = widgets.Text(placeholder=\"请输入您的消息...\")\n", "send_btn = widgets.Button(description=\"发送\", button_style='primary')\n", "\n", "def on_send_clicked(b):\n", " user_msg = input_box.value.strip()\n", " if user_msg:\n", " save_message(\"user\", user_msg)\n", " ai_msg = get_response(messages)\n", " save_message(\"assistant\", ai_msg)\n", " refresh_chat()\n", " input_box.value = \"\"\n", "\n", "send_btn.on_click(on_send_clicked)\n", "\n", "# 初始显示\n", "refresh_chat()\n", "display(chat_area, widgets.HBox([input_box, send_btn]))\n" ] }, { "cell_type": "code", "execution_count": null, "id": "30a0053c", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.13" } }, "nbformat": 4, "nbformat_minor": 5 }