From a187211fc9cf0dcee61c77437458374e699b7831 Mon Sep 17 00:00:00 2001 From: joyenjoye
\n", " OPENAI_API_KEY=\"your_api_key\" \n", "
\n", " \n", " \u66ff\u6362\"your_api_key\"\u4e3a\u4f60\u81ea\u5df1\u7684 API Key"]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": ["# \u4e0b\u8f7d\u9700\u8981\u7684\u5305python-dotenv\u548copenai\n", "# \u5982\u679c\u4f60\u9700\u8981\u67e5\u770b\u5b89\u88c5\u8fc7\u7a0b\u65e5\u5fd7\uff0c\u53ef\u5220\u9664 -q \n", "!pip install -q python-dotenv\n", "!pip install -q openai"]}, {"cell_type": "code", "execution_count": 2, "metadata": {"tags": []}, "outputs": [], "source": ["import os\n", "import openai\n", "from dotenv import load_dotenv, find_dotenv\n", "\n", "# \u8bfb\u53d6\u672c\u5730/\u9879\u76ee\u7684\u73af\u5883\u53d8\u91cf\u3002\n", "\n", "# find_dotenv()\u5bfb\u627e\u5e76\u5b9a\u4f4d.env\u6587\u4ef6\u7684\u8def\u5f84\n", "# load_dotenv()\u8bfb\u53d6\u8be5.env\u6587\u4ef6\uff0c\u5e76\u5c06\u5176\u4e2d\u7684\u73af\u5883\u53d8\u91cf\u52a0\u8f7d\u5230\u5f53\u524d\u7684\u8fd0\u884c\u73af\u5883\u4e2d \n", "# \u5982\u679c\u4f60\u8bbe\u7f6e\u7684\u662f\u5168\u5c40\u7684\u73af\u5883\u53d8\u91cf\uff0c\u8fd9\u884c\u4ee3\u7801\u5219\u6ca1\u6709\u4efb\u4f55\u4f5c\u7528\u3002\n", "_ = load_dotenv(find_dotenv())\n", "\n", "# \u83b7\u53d6\u73af\u5883\u53d8\u91cf OPENAI_API_KEY\n", "openai.api_key = os.environ['OPENAI_API_KEY'] "]}, {"cell_type": "markdown", "metadata": {"tags": []}, "source": ["## \u4e8c\u3001\u76f4\u63a5\u4f7f\u7528OpenAI\n", "\n", "\u6211\u4eec\u5148\u4ece\u76f4\u63a5\u8c03\u7528OpenAI\u7684API\u5f00\u59cb\u3002\n", "\n", "`get_completion`\u51fd\u6570\u662f\u57fa\u4e8e`openai`\u7684\u5c01\u88c5\u51fd\u6570\uff0c\u5bf9\u4e8e\u7ed9\u5b9a\u63d0\u793a\uff08prompt\uff09\u8f93\u51fa\u76f8\u5e94\u7684\u56de\u7b54\u3002\u5176\u5305\u542b\u4e24\u4e2a\u53c2\u6570\n", " \n", " - `prompt` \u5fc5\u9700\u8f93\u5165\u53c2\u6570\u3002 \u4f60\u7ed9\u6a21\u578b\u7684**\u63d0\u793a\uff0c\u53ef\u4ee5\u662f\u4e00\u4e2a\u95ee\u9898\uff0c\u53ef\u4ee5\u662f\u4f60\u9700\u8981\u6a21\u578b\u5e2e\u52a9\u4f60\u505a\u7684\u4e8b**\uff08\u6539\u53d8\u6587\u672c\u5199\u4f5c\u98ce\u683c\uff0c\u7ffb\u8bd1\uff0c\u56de\u590d\u6d88\u606f\u7b49\u7b49\uff09\u3002\n", " - `model` \u975e\u5fc5\u9700\u8f93\u5165\u53c2\u6570\u3002\u9ed8\u8ba4\u4f7f\u7528gpt-3.5-turbo\u3002\u4f60\u4e5f\u53ef\u4ee5\u9009\u62e9\u5176\u4ed6\u6a21\u578b\u3002\n", " \n", "\u8fd9\u91cc\u7684\u63d0\u793a\u5bf9\u5e94\u6211\u4eec\u7ed9chatgpt\u7684\u95ee\u9898\uff0c\u51fd\u6570\u7ed9\u51fa\u7684\u8f93\u51fa\u5219\u5bf9\u5e94chatpgt\u7ed9\u6211\u4eec\u7684\u7b54\u6848\u3002"]}, {"cell_type": "code", "execution_count": 3, "metadata": {"tags": []}, "outputs": [], "source": ["def get_completion(prompt, model=\"gpt-3.5-turbo\"):\n", " \n", " messages = [{\"role\": \"user\", \"content\": prompt}]\n", " \n", " response = openai.ChatCompletion.create(\n", " model=model,\n", " messages=messages,\n", " temperature=0, \n", " )\n", " return response.choices[0].message[\"content\"]"]}, {"cell_type": "markdown", "metadata": {"tags": []}, "source": ["### 2.1 \u8ba1\u7b971+1\n", "\n", "\u6211\u4eec\u6765\u4e00\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50 - \u5206\u522b\u7528\u4e2d\u82f1\u6587\u95ee\u95ee\u6a21\u578b\n", "\n", "- \u4e2d\u6587\u63d0\u793a(Prompt in Chinese)\uff1a `1+1\u662f\u4ec0\u4e48\uff1f`\n", "- \u82f1\u6587\u63d0\u793a(Prompt in English)\uff1a `What is 1+1?`"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/plain": ["'1+1\u7b49\u4e8e2\u3002'"]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["# \u4e2d\u6587\n", "get_completion(\"1+1\u662f\u4ec0\u4e48\uff1f\")"]}, {"cell_type": "code", "execution_count": 5, "metadata": {"tags": []}, "outputs": [{"data": {"text/plain": ["'1+1 equals 2.'"]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["# \u82f1\u6587\n", "get_completion(\"What is 1+1?\")"]}, {"cell_type": "markdown", "metadata": {"tags": []}, "source": ["### 2.2 \u7528\u7f8e\u5f0f\u82f1\u8bed\u8868\u8fbe\u6d77\u76d7\u90ae\u4ef6\n", "\n", "\u4e0a\u9762\u7684\u7b80\u5355\u4f8b\u5b50\uff0c\u6a21\u578b`gpt-3.5-turbo`\u5bf9\u6211\u4eec\u7684\u5173\u4e8e1+1\u662f\u4ec0\u4e48\u7684\u63d0\u95ee\u7ed9\u51fa\u4e86\u56de\u7b54\u3002\n", "\n", "\u73b0\u5728\u6211\u4eec\u6765\u770b\u4e00\u4e2a\u590d\u6742\u4e00\u70b9\u7684\u4f8b\u5b50\uff1a \n", "\n", "\u5047\u8bbe\u6211\u4eec\u662f\u7535\u5546\u516c\u53f8\u5458\u5de5\uff0c\u6211\u4eec\u7684\u987e\u5ba2\u662f\u4e00\u540d\u6d77\u76d7A\uff0c\u4ed6\u5728\u6211\u4eec\u7684\u7f51\u7ad9\u4e0a\u4e70\u4e86\u4e00\u4e2a\u69a8\u6c41\u673a\u7528\u6765\u505a\u5976\u6614\uff0c\u5728\u5236\u4f5c\u5976\u6614\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5976\u6614\u7684\u76d6\u5b50\u98de\u4e86\u51fa\u53bb\uff0c\u5f04\u5f97\u53a8\u623f\u5899\u4e0a\u5230\u5904\u90fd\u662f\u3002\u4e8e\u662f\u6d77\u76d7A\u7ed9\u6211\u4eec\u7684\u5ba2\u670d\u4e2d\u5fc3\u5199\u6765\u4ee5\u4e0b\u90ae\u4ef6\uff1a`customer_email`"]}, {"cell_type": "code", "execution_count": 6, "metadata": {"tags": []}, "outputs": [], "source": ["customer_email = \"\"\"\n", "Arrr, I be fuming that me blender lid \\\n", "flew off and splattered me kitchen walls \\\n", "with smoothie! And to make matters worse,\\\n", "the warranty don't cover the cost of \\\n", "cleaning up me kitchen. I need yer help \\\n", "right now, matey!\n", "\"\"\""]}, {"cell_type": "markdown", "metadata": {}, "source": ["\u6211\u4eec\u7684\u5ba2\u670d\u4eba\u5458\u5bf9\u4e8e\u6d77\u76d7\u7684\u63aa\u8f9e\u8868\u8fbe\u89c9\u5f97\u6709\u70b9\u96be\u4ee5\u7406\u89e3\u3002 \u73b0\u5728\u6211\u4eec\u60f3\u8981\u5b9e\u73b0\u4e24\u4e2a\u5c0f\u76ee\u6807\uff1a\n", "\n", "- \u8ba9\u6a21\u578b\u7528\u7f8e\u5f0f\u82f1\u8bed\u7684\u8868\u8fbe\u65b9\u5f0f\u5c06\u6d77\u76d7\u7684\u90ae\u4ef6\u8fdb\u884c\u7ffb\u8bd1\uff0c\u5ba2\u670d\u4eba\u5458\u53ef\u4ee5\u66f4\u597d\u7406\u89e3\u3002*\u8fd9\u91cc\u6d77\u76d7\u7684\u82f1\u6587\u8868\u8fbe\u53ef\u4ee5\u7406\u89e3\u4e3a\u82f1\u6587\u7684\u65b9\u8a00\uff0c\u5176\u4e0e\u7f8e\u5f0f\u82f1\u8bed\u7684\u5173\u7cfb\uff0c\u5c31\u5982\u56db\u5ddd\u8bdd\u4e0e\u666e\u901a\u8bdd\u7684\u5173\u7cfb\u3002\n", "- \u8ba9\u6a21\u578b\u5728\u7ffb\u8bd1\u662f\u7528\u5e73\u548c\u5c0a\u91cd\u7684\u8bed\u6c14\u8fdb\u884c\u8868\u8fbe\uff0c\u5ba2\u670d\u4eba\u5458\u7684\u5fc3\u60c5\u4e5f\u4f1a\u66f4\u597d\u3002\n", "\n", "\u6839\u636e\u8fd9\u4e24\u4e2a\u5c0f\u76ee\u6807\uff0c\u5b9a\u4e49\u4e00\u4e0b\u6587\u672c\u8868\u8fbe\u98ce\u683c\uff1a`style`"]}, {"cell_type": "code", "execution_count": 7, "metadata": {"tags": []}, "outputs": [], "source": ["# \u7f8e\u5f0f\u82f1\u8bed + \u5e73\u9759\u3001\u5c0a\u656c\u7684\u8bed\u8c03\n", "style = \"\"\"American English \\\n", "in a calm and respectful tone\n", "\"\"\""]}, {"cell_type": "markdown", "metadata": {}, "source": ["\u4e0b\u4e00\u6b65\u9700\u8981\u505a\u7684\u662f\u5c06`customer_email`\u548c`style`\u7ed3\u5408\u8d77\u6765\u6784\u9020\u6211\u4eec\u7684\u63d0\u793a:`prompt`"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": ["# \u975e\u6b63\u5f0f\u7528\u8bed\n", "customer_email = \"\"\" \n", "\u963f\uff0c\u6211\u5f88\u751f\u6c14\uff0c\\\n", "\u56e0\u4e3a\u6211\u7684\u6405\u62cc\u673a\u76d6\u6389\u4e86\uff0c\\\n", "\u628a\u5976\u6614\u6e85\u5230\u4e86\u53a8\u623f\u7684\u5899\u4e0a\uff01\\\n", "\u66f4\u7cdf\u7cd5\u7684\u662f\uff0c\u4fdd\u4fee\u4e0d\u5305\u62ec\u6253\u626b\u53a8\u623f\u7684\u8d39\u7528\u3002\\\n", "\u6211\u73b0\u5728\u9700\u8981\u4f60\u7684\u5e2e\u52a9\uff0c\u4f19\u8ba1\uff01\n", "\"\"\""]}, {"cell_type": "code", "execution_count": 9, "metadata": {"tags": []}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["Translate the text that is delimited by triple backticks \n", "into a style that is American English in a calm and respectful tone\n", ".\n", "text: ``` \n", "\u963f\uff0c\u6211\u5f88\u751f\u6c14\uff0c\u56e0\u4e3a\u6211\u7684\u6405\u62cc\u673a\u76d6\u6389\u4e86\uff0c\u628a\u5976\u6614\u6e85\u5230\u4e86\u53a8\u623f\u7684\u5899\u4e0a\uff01\u66f4\u7cdf\u7cd5\u7684\u662f\uff0c\u4fdd\u4fee\u4e0d\u5305\u62ec\u6253\u626b\u53a8\u623f\u7684\u8d39\u7528\u3002\u6211\u73b0\u5728\u9700\u8981\u4f60\u7684\u5e2e\u52a9\uff0c\u4f19\u8ba1\uff01\n", "```\n", "\n"]}], "source": ["# \u8981\u6c42\u6a21\u578b\u6839\u636e\u7ed9\u51fa\u7684\u8bed\u8c03\u8fdb\u884c\u8f6c\u5316\n", "prompt = f\"\"\"Translate the text \\\n", "that is delimited by triple backticks \n", "into a style that is {style}.\n", "text: ```{customer_email}```\n", "\"\"\"\n", "\n", "print(prompt)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["`prompt` \u6784\u9020\u597d\u4e86\uff0c\u6211\u4eec\u53ef\u4ee5\u8c03\u7528`get_completion`\u5f97\u5230\u6211\u4eec\u60f3\u8981\u7684\u7ed3\u679c - \u7528\u5e73\u548c\u5c0a\u91cd\u7684\u8bed\u6c14\uff0c\u7f8e\u5f0f\u82f1\u8bed\u8868\u8fbe\u7684\u6d77\u76d7\u8bed\u8a00\u90ae\u4ef6"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": ["response = get_completion(prompt)"]}, {"cell_type": "code", "execution_count": 11, "metadata": {"tags": []}, "outputs": [{"data": {"text/plain": ["\"Oh, I'm really frustrated because the lid of my blender fell off and splattered the milkshake all over the kitchen wall! To make matters worse, the warranty doesn't cover the cost of cleaning the kitchen. I could really use your help right now, buddy!\""]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}], "source": ["response"]}, {"cell_type": "markdown", "metadata": {}, "source": ["\u5bf9\u6bd4\u8bed\u8a00\u98ce\u683c\u8f6c\u6362\u524d\u540e\uff0c\u7528\u8bcd\u66f4\u4e3a\u6b63\u5f0f\uff0c\u66ff\u6362\u4e86\u6781\u7aef\u60c5\u7eea\u7684\u8868\u8fbe\uff0c\u5e76\u8868\u8fbe\u4e86\u611f\u8c22\u3002\n", "\n", "\u2728 \u4f60\u53ef\u4ee5\u5c1d\u8bd5\u4fee\u6539\u63d0\u793a\uff0c\u770b\u53ef\u4ee5\u5f97\u5230\u4ec0\u4e48\u4e0d\u4e00\u6837\u7684\u7ed3\u679c\ud83d\ude09"]}, {"cell_type": "markdown", "metadata": {"tags": []}, "source": ["### 2.3 \u4e2d\u6587\u7248"]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": ["# \u666e\u901a\u8bdd + \u5e73\u9759\u3001\u5c0a\u656c\u7684\u8bed\u8c03\n", "style = \"\"\"\u6b63\u5f0f\u666e\u901a\u8bdd \\\n", "\u7528\u4e00\u4e2a\u5e73\u9759\u3001\u5c0a\u656c\u7684\u8bed\u8c03\n", "\"\"\""]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["\u628a\u7531\u4e09\u4e2a\u53cd\u5f15\u53f7\u5206\u9694\u7684\u6587\u672c\u7ffb\u8bd1\u6210\u4e00\u79cd\u6b63\u5f0f\u666e\u901a\u8bdd \u7528\u4e00\u4e2a\u5e73\u9759\u3001\u5c0a\u656c\u7684\u8bed\u8c03\n", "\u98ce\u683c\u3002\n", "\u6587\u672c: ``` \n", "\u963f\uff0c\u6211\u5f88\u751f\u6c14\uff0c\u56e0\u4e3a\u6211\u7684\u6405\u62cc\u673a\u76d6\u6389\u4e86\uff0c\u628a\u5976\u6614\u6e85\u5230\u4e86\u53a8\u623f\u7684\u5899\u4e0a\uff01\u66f4\u7cdf\u7cd5\u7684\u662f\uff0c\u4fdd\u4fee\u4e0d\u5305\u62ec\u6253\u626b\u53a8\u623f\u7684\u8d39\u7528\u3002\u6211\u73b0\u5728\u9700\u8981\u4f60\u7684\u5e2e\u52a9\uff0c\u4f19\u8ba1\uff01\n", "```\n", "\n"]}], "source": ["# \u8981\u6c42\u6a21\u578b\u6839\u636e\u7ed9\u51fa\u7684\u8bed\u8c03\u8fdb\u884c\u8f6c\u5316\n", "prompt = f\"\"\"\u628a\u7531\u4e09\u4e2a\u53cd\u5f15\u53f7\u5206\u9694\u7684\u6587\u672c\\\n", "\u7ffb\u8bd1\u6210\u4e00\u79cd{style}\u98ce\u683c\u3002\n", "\u6587\u672c: ```{customer_email}```\n", "\"\"\"\n", "\n", "print(prompt)\n", "\n"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"data": {"text/plain": ["'\u5c0a\u656c\u7684\u670b\u53cb\u4eec\uff0c\u6211\u611f\u5230\u975e\u5e38\u4e0d\u5b89\uff0c\u56e0\u4e3a\u6211\u7684\u6405\u62cc\u673a\u76d6\u5b50\u4e0d\u614e\u6389\u843d\uff0c\u5bfc\u81f4\u5976\u6614\u6e85\u5230\u4e86\u53a8\u623f\u7684\u5899\u58c1\u4e0a\uff01\u66f4\u52a0\u4ee4\u4eba\u7cdf\u5fc3\u7684\u662f\uff0c\u4fdd\u4fee\u670d\u52a1\u5e76\u4e0d\u5305\u542b\u53a8\u623f\u6e05\u6d01\u7684\u8d39\u7528\u3002\u6b64\u523b\uff0c\u6211\u771f\u8bda\u5730\u8bf7\u6c42\u5404\u4f4d\u7684\u5e2e\u52a9\uff0c\u670b\u53cb\u4eec\uff01'"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["response = get_completion(prompt)\n", "\n", "response"]}, {"cell_type": "markdown", "metadata": {"tags": []}, "source": ["## \u4e09\u3001\u901a\u8fc7LangChain\u4f7f\u7528OpenAI\n", "\n", "\u5728\u524d\u9762\u4e00\u90e8\u5206\uff0c\u6211\u4eec\u901a\u8fc7\u5c01\u88c5\u51fd\u6570`get_completion`\u76f4\u63a5\u8c03\u7528\u4e86OpenAI\u5b8c\u6210\u4e86\u5bf9\u65b9\u8a00\u90ae\u4ef6\u8fdb\u884c\u4e86\u7684\u7ffb\u8bd1\uff0c\u5f97\u5230\u7528\u5e73\u548c\u5c0a\u91cd\u7684\u8bed\u6c14\u3001\u6b63\u5f0f\u7684\u666e\u901a\u8bdd\u8868\u8fbe\u7684\u90ae\u4ef6\u3002\n", "\n", "\u8ba9\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528LangChain\u6765\u5b9e\u73b0\u76f8\u540c\u7684\u529f\u80fd\u3002"]}, {"cell_type": "code", "execution_count": 15, "metadata": {"tags": []}, "outputs": [], "source": ["# \u5982\u679c\u4f60\u9700\u8981\u67e5\u770b\u5b89\u88c5\u8fc7\u7a0b\u65e5\u5fd7\uff0c\u53ef\u5220\u9664 -q \n", "# --upgrade \u8ba9\u6211\u4eec\u53ef\u4ee5\u5b89\u88c5\u5230\u6700\u65b0\u7248\u672c\u7684 langchain\n", "!pip install -q --upgrade langchain"]}, {"cell_type": "markdown", "metadata": {"tags": []}, "source": ["### 3.1 \u6a21\u578b\n", "\n", "\u4ece`langchain.chat_models`\u5bfc\u5165`OpenAI`\u7684\u5bf9\u8bdd\u6a21\u578b`ChatOpenAI`\u3002 \u9664\u53bbOpenAI\u4ee5\u5916\uff0c`langchain.chat_models`\u8fd8\u96c6\u6210\u4e86\u5176\u4ed6\u5bf9\u8bdd\u6a21\u578b\uff0c\u66f4\u591a\u7ec6\u8282\u53ef\u4ee5\u67e5\u770b[Langchain\u5b98\u65b9\u6587\u6863](https://python.langchain.com/en/latest/modules/models/chat/integrations.html)\u3002"]}, {"cell_type": "code", "execution_count": 16, "metadata": {"tags": []}, "outputs": [], "source": ["from langchain.chat_models import ChatOpenAI"]}, {"cell_type": "code", "execution_count": 17, "metadata": {"tags": []}, "outputs": [{"data": {"text/plain": ["ChatOpenAI(cache=None, verbose=False, callbacks=None, callback_manager=None, tags=None, metadata=None, client=\n", " OPENAI_API_KEY=\"your_api_key\" \n", "
\n", " \n", " \u66ff\u6362\"your_api_key\"\u4e3a\u4f60\u81ea\u5df1\u7684 API Key"]}, {"cell_type": "code", "execution_count": null, "id": "6932bd47-c6d5-4794-8102-a12b84412a93", "metadata": {}, "outputs": [], "source": ["# \u4e0b\u8f7d\u9700\u8981\u7684\u5305python-dotenv\u548copenai\n", "# \u5982\u679c\u4f60\u9700\u8981\u67e5\u770b\u5b89\u88c5\u8fc7\u7a0b\u65e5\u5fd7\uff0c\u53ef\u5220\u9664 -q \n", "!pip install -q python-dotenv\n", "!pip install -q openai"]}, {"cell_type": "code", "execution_count": null, "id": "10446712-9fa6-4d71-94ce-2ea4cf197e54", "metadata": {}, "outputs": [], "source": ["import os\n", "import openai\n", "from dotenv import load_dotenv, find_dotenv\n", "\n", "# \u8bfb\u53d6\u672c\u5730/\u9879\u76ee\u7684\u73af\u5883\u53d8\u91cf\u3002\n", "\n", "# find_dotenv()\u5bfb\u627e\u5e76\u5b9a\u4f4d.env\u6587\u4ef6\u7684\u8def\u5f84\n", "# load_dotenv()\u8bfb\u53d6\u8be5.env\u6587\u4ef6\uff0c\u5e76\u5c06\u5176\u4e2d\u7684\u73af\u5883\u53d8\u91cf\u52a0\u8f7d\u5230\u5f53\u524d\u7684\u8fd0\u884c\u73af\u5883\u4e2d \n", "# \u5982\u679c\u4f60\u8bbe\u7f6e\u7684\u662f\u5168\u5c40\u7684\u73af\u5883\u53d8\u91cf\uff0c\u8fd9\u884c\u4ee3\u7801\u5219\u6ca1\u6709\u4efb\u4f55\u4f5c\u7528\u3002\n", "_ = load_dotenv(find_dotenv())\n", "\n", "# \u83b7\u53d6\u73af\u5883\u53d8\u91cf OPENAI_API_KEY\n", "openai.api_key = os.environ['OPENAI_API_KEY'] "]}, {"cell_type": "markdown", "id": "1297dcd5", "metadata": {}, "source": ["## \u4e8c\u3001\u5bf9\u8bdd\u7f13\u5b58\u50a8\u5b58 \n", " \n", "\u8fd9\u79cd\u8bb0\u5fc6\u5141\u8bb8\u5b58\u50a8\u6d88\u606f\uff0c\u7136\u540e\u4ece\u53d8\u91cf\u4e2d\u63d0\u53d6\u6d88\u606f\u3002"]}, {"cell_type": "code", "execution_count": null, "id": "20ad6fe2", "metadata": {"height": 98}, "outputs": [], "source": ["from langchain.chat_models import ChatOpenAI\n", "from langchain.chains import ConversationChain\n", "from langchain.memory import ConversationBufferMemory"]}, {"cell_type": "code", "execution_count": null, "id": "88bdf13d", "metadata": {"height": 133}, "outputs": [], "source": ["OPENAI_API_KEY = \"********\" #\"\u586b\u5165\u4f60\u7684\u4e13\u5c5e\u7684API key\"\n", "llm = ChatOpenAI(temperature=0.0,openai_api_key=OPENAI_API_KEY) #temperature\uff1a\u9884\u6d4b\u4e0b\u4e00\u4e2atoken\u65f6\uff0c\u6982\u7387\u8d8a\u5927\u7684\u503c\u5c31\u8d8a\u5e73\u6ed1(\u5e73\u6ed1\u4e5f\u5c31\u662f\u8ba9\u5dee\u5f02\u5927\u7684\u503c\u4e4b\u95f4\u7684\u5dee\u5f02\u53d8\u5f97\u6ca1\u90a3\u4e48\u5927)\uff0ctemperature\u503c\u8d8a\u5c0f\u5219\u751f\u6210\u7684\u5185\u5bb9\u8d8a\u7a33\u5b9a\n", "memory = ConversationBufferMemory()\n", "conversation = ConversationChain( #\u65b0\u5efa\u4e00\u4e2a\u5bf9\u8bdd\u94fe\uff08\u5173\u4e8e\u94fe\u540e\u9762\u4f1a\u63d0\u5230\u66f4\u591a\u7684\u7ec6\u8282\uff09\n", " llm=llm, \n", " memory = memory,\n", " verbose=True #\u67e5\u770bLangchain\u5b9e\u9645\u4e0a\u5728\u505a\u4ec0\u4e48\uff0c\u8bbe\u4e3aFALSE\u7684\u8bdd\u53ea\u7ed9\u51fa\u56de\u7b54\uff0c\u770b\u5230\u4e0d\u5230\u4e0b\u9762\u7eff\u8272\u7684\u5185\u5bb9\n", ")"]}, {"cell_type": "markdown", "id": "dea83837", "metadata": {}, "source": ["### 2.1 \u5f00\u59cb\u5bf9\u8bdd\uff0c\u7b2c\u4e00\u8f6e"]}, {"cell_type": "markdown", "id": "1a3b4c42", "metadata": {}, "source": ["\u5f53\u6211\u4eec\u8fd0\u884cpredict\u65f6\uff0c\u751f\u6210\u4e86\u4e00\u4e9b\u63d0\u793a\uff0c\u5982\u4e0b\u6240\u89c1\uff0c\u4ed6\u8bf4\u201c\u4ee5\u4e0b\u662f\u4eba\u7c7b\u548cAI\u4e4b\u95f4\u53cb\u597d\u7684\u5bf9\u8bdd\uff0cAI\u5065\u8c08\u201c\u7b49\u7b49\uff0c\u8fd9\u5b9e\u9645\u4e0a\u662fLangChain\u751f\u6210\u7684\u63d0\u793a\uff0c\u4ee5\u4f7f\u7cfb\u7edf\u8fdb\u884c\u5e0c\u671b\u548c\u53cb\u597d\u7684\u5bf9\u8bdd\uff0c\u5e76\u4e14\u5fc5\u987b\u4fdd\u5b58\u5bf9\u8bdd\uff0c\u5e76\u63d0\u793a\u4e86\u5f53\u524d\u5df2\u5b8c\u6210\u7684\u6a21\u578b\u94fe\u3002"]}, {"cell_type": "code", "execution_count": null, "id": "db24677d", "metadata": {"height": 47}, "outputs": [], "source": ["conversation.predict(input=\"Hi, my name is Andrew\")"]}, {"cell_type": "code", "execution_count": null, "id": "154561c9", "metadata": {}, "outputs": [], "source": ["#\u4e2d\u6587\n", "conversation.predict(input=\"\u4f60\u597d, \u6211\u53eb\u76ae\u76ae\u9c81\")"]}, {"cell_type": "markdown", "id": "e71564ad", "metadata": {}, "source": ["### 2.2 \u7b2c\u4e8c\u8f6e\u5bf9\u8bdd"]}, {"cell_type": "markdown", "id": "54d006bd", "metadata": {}, "source": ["\u5f53\u6211\u4eec\u8fdb\u884c\u4e0b\u4e00\u8f6e\u5bf9\u8bdd\u65f6\uff0c\u4ed6\u4f1a\u4fdd\u7559\u4e0a\u9762\u7684\u63d0\u793a"]}, {"cell_type": "code", "execution_count": null, "id": "cc3ef937", "metadata": {"height": 31}, "outputs": [], "source": ["conversation.predict(input=\"What is 1+1?\")"]}, {"cell_type": "code", "execution_count": null, "id": "63efc1bb", "metadata": {}, "outputs": [], "source": ["#\u4e2d\u6587\n", "conversation.predict(input=\"1+1\u7b49\u4e8e\u591a\u5c11\uff1f\")"]}, {"cell_type": "markdown", "id": "33cb734b", "metadata": {}, "source": ["### 2.3 \u7b2c\u4e09\u8f6e\u5bf9\u8bdd"]}, {"cell_type": "markdown", "id": "0393df3d", "metadata": {}, "source": ["\u4e3a\u4e86\u9a8c\u8bc1\u4ed6\u662f\u5426\u8bb0\u5fc6\u4e86\u524d\u9762\u7684\u5bf9\u8bdd\u5185\u5bb9\uff0c\u6211\u4eec\u8ba9\u4ed6\u56de\u7b54\u524d\u9762\u5df2\u7ecf\u8bf4\u8fc7\u7684\u5185\u5bb9\uff08\u6211\u7684\u540d\u5b57\uff09\uff0c\u53ef\u4ee5\u770b\u5230\u4ed6\u786e\u5b9e\u8f93\u51fa\u4e86\u6b63\u786e\u7684\u540d\u5b57\uff0c\u56e0\u6b64\u8fd9\u4e2a\u5bf9\u8bdd\u94fe\u968f\u7740\u5f80\u4e0b\u8fdb\u884c\u4f1a\u8d8a\u6765\u8d8a\u957f"]}, {"cell_type": "code", "execution_count": null, "id": "acf3339a", "metadata": {"height": 31}, "outputs": [], "source": ["conversation.predict(input=\"What is my name?\")"]}, {"cell_type": "code", "execution_count": null, "id": "2206e5b7", "metadata": {}, "outputs": [], "source": ["#\u4e2d\u6587\n", "conversation.predict(input=\"\u6211\u53eb\u4ec0\u4e48\u540d\u5b57\uff1f\")"]}, {"cell_type": "markdown", "id": "5a96a8d9", "metadata": {}, "source": ["### 2.4 .memory.buffer\u5b58\u50a8\u4e86\u5f53\u524d\u4e3a\u6b62\u6240\u6709\u7684\u5bf9\u8bdd\u4fe1\u606f"]}, {"cell_type": "code", "execution_count": null, "id": "2529400d", "metadata": {"height": 31}, "outputs": [], "source": ["print(memory.buffer) #\u63d0\u53d6\u5386\u53f2\u6d88\u606f"]}, {"cell_type": "code", "execution_count": null, "id": "d948aeb2", "metadata": {}, "outputs": [], "source": ["# \u4e2d\u6587\n", "print(memory.buffer) #\u63d0\u53d6\u5386\u53f2\u6d88\u606f"]}, {"cell_type": "markdown", "id": "6bd222c3", "metadata": {}, "source": ["### 2.5 \u4e5f\u53ef\u4ee5\u901a\u8fc7memory.load_memory_variables({})\u6253\u5370\u5386\u53f2\u6d88\u606f"]}, {"cell_type": "markdown", "id": "0b5de846", "metadata": {}, "source": ["\u8fd9\u91cc\u7684\u82b1\u62ec\u53f7\u5b9e\u9645\u4e0a\u662f\u4e00\u4e2a\u7a7a\u5b57\u5178\uff0c\u6709\u4e00\u4e9b\u66f4\u9ad8\u7ea7\u7684\u529f\u80fd\uff0c\u4f7f\u7528\u6237\u53ef\u4ee5\u4f7f\u7528\u66f4\u590d\u6742\u7684\u8f93\u5165\uff0c\u4f46\u6211\u4eec\u4e0d\u4f1a\u5728\u8fd9\u4e2a\u77ed\u671f\u8bfe\u7a0b\u4e2d\u8ba8\u8bba\u5b83\u4eec\uff0c\u6240\u4ee5\u4e0d\u8981\u62c5\u5fc3\u4e3a\u4ec0\u4e48\u8fd9\u91cc\u6709\u4e00\u4e2a\u7a7a\u7684\u82b1\u62ec\u53f7\u3002"]}, {"cell_type": "code", "execution_count": null, "id": "5018cb0a", "metadata": {"height": 31}, "outputs": [], "source": ["memory.load_memory_variables({})"]}, {"cell_type": "code", "execution_count": null, "id": "af4b8b12", "metadata": {}, "outputs": [], "source": ["# \u4e2d\u6587\n", "memory.load_memory_variables({})"]}, {"cell_type": "markdown", "id": "07d2e892", "metadata": {}, "source": ["### 2.6 \u6dfb\u52a0\u6307\u5b9a\u7684\u8f93\u5165\u8f93\u51fa\u5185\u5bb9\u5230\u8bb0\u5fc6\u7f13\u5b58\u533a"]}, {"cell_type": "code", "execution_count": null, "id": "14219b70", "metadata": {"height": 31}, "outputs": [], "source": ["memory = ConversationBufferMemory() #\u65b0\u5efa\u4e00\u4e2a\u7a7a\u7684\u5bf9\u8bdd\u7f13\u5b58\u8bb0\u5fc6"]}, {"cell_type": "code", "execution_count": null, "id": "a36e9905", "metadata": {"height": 48}, "outputs": [], "source": ["memory.save_context({\"input\": \"Hi\"}, #\u5411\u7f13\u5b58\u533a\u6dfb\u52a0\u6307\u5b9a\u5bf9\u8bdd\u7684\u8f93\u5165\u8f93\u51fa\n", " {\"output\": \"What's up\"})"]}, {"cell_type": "code", "execution_count": null, "id": "61631b1f", "metadata": {"height": 31}, "outputs": [], "source": ["print(memory.buffer) #\u67e5\u770b\u7f13\u5b58\u533a\u7ed3\u679c"]}, {"cell_type": "code", "execution_count": null, "id": "a2fdf9ec", "metadata": {"height": 31}, "outputs": [], "source": ["memory.load_memory_variables({}) #\u518d\u6b21\u52a0\u8f7d\u8bb0\u5fc6\u53d8\u91cf"]}, {"cell_type": "code", "execution_count": null, "id": "27d8dd2f", "metadata": {}, "outputs": [], "source": ["#\u4e2d\u6587\n", "memory = ConversationBufferMemory()\n", "memory.save_context({\"input\": \"\u4f60\u597d\uff0c\u6211\u53eb\u76ae\u76ae\u9c81\"}, \n", " {\"output\": \"\u4f60\u597d\u554a\uff0c\u6211\u53eb\u9c81\u897f\u897f\"})\n", "memory.load_memory_variables({})"]}, {"cell_type": "markdown", "id": "2ac544f2", "metadata": {}, "source": ["\u7ee7\u7eed\u6dfb\u52a0\u65b0\u7684\u5185\u5bb9\uff0c\u5bf9\u8bdd\u5386\u53f2\u90fd\u4fdd\u5b58\u4e0b\u6765\u5728\u4e86\uff01"]}, {"cell_type": "code", "execution_count": null, "id": "7ca79256", "metadata": {"height": 64}, "outputs": [], "source": ["memory.save_context({\"input\": \"Not much, just hanging\"}, \n", " {\"output\": \"Cool\"})"]}, {"cell_type": "code", "execution_count": null, "id": "890a4497", "metadata": {"height": 31}, "outputs": [], "source": ["memory.load_memory_variables({})"]}, {"cell_type": "code", "execution_count": null, "id": "2b614406", "metadata": {}, "outputs": [], "source": ["#\u4e2d\u6587\n", "memory.save_context({\"input\": \"\u5f88\u9ad8\u5174\u548c\u4f60\u6210\u4e3a\u670b\u53cb\uff01\"}, \n", " {\"output\": \"\u662f\u7684\uff0c\u8ba9\u6211\u4eec\u4e00\u8d77\u53bb\u5192\u9669\u5427\uff01\"})\n", "memory.load_memory_variables({})"]}, {"cell_type": "markdown", "id": "8839314a", "metadata": {}, "source": ["\u5f53\u6211\u4eec\u5728\u4f7f\u7528\u5927\u578b\u8bed\u8a00\u6a21\u578b\u8fdb\u884c\u804a\u5929\u5bf9\u8bdd\u65f6\uff0c**\u5927\u578b\u8bed\u8a00\u6a21\u578b\u672c\u8eab\u5b9e\u9645\u4e0a\u662f\u65e0\u72b6\u6001\u7684\u3002\u8bed\u8a00\u6a21\u578b\u672c\u8eab\u5e76\u4e0d\u8bb0\u5f97\u5230\u76ee\u524d\u4e3a\u6b62\u7684\u5386\u53f2\u5bf9\u8bdd**\u3002\u6bcf\u6b21\u8c03\u7528API\u7ed3\u70b9\u90fd\u662f\u72ec\u7acb\u7684\u3002\n", "\n", "\u804a\u5929\u673a\u5668\u4eba\u4f3c\u4e4e\u6709\u8bb0\u5fc6\uff0c\u53ea\u662f\u56e0\u4e3a\u901a\u5e38\u6709\u5feb\u901f\u7684\u4ee3\u7801\u53ef\u4ee5\u5411LLM\u63d0\u4f9b\u8fc4\u4eca\u4e3a\u6b62\u7684\u5b8c\u6574\u5bf9\u8bdd\u4ee5\u53ca\u4e0a\u4e0b\u6587\u3002\u56e0\u6b64\uff0cMemory\u53ef\u4ee5\u660e\u786e\u5730\u5b58\u50a8\u5230\u76ee\u524d\u4e3a\u6b62\u7684\u6240\u6709\u672f\u8bed\u6216\u5bf9\u8bdd\u3002\u8fd9\u4e2aMemory\u5b58\u50a8\u5668\u88ab\u7528\u4f5c\u8f93\u5165\u6216\u9644\u52a0\u4e0a\u4e0b\u6587\u5230LLM\u4e2d\uff0c\u4ee5\u4fbf\u5b83\u53ef\u4ee5\u751f\u6210\u4e00\u4e2a\u8f93\u51fa\uff0c\u5c31\u597d\u50cf\u5b83\u53ea\u6709\u5728\u8fdb\u884c\u4e0b\u4e00\u8f6e\u5bf9\u8bdd\u7684\u65f6\u5019\uff0c\u624d\u77e5\u9053\u4e4b\u524d\u8bf4\u8fc7\u4ec0\u4e48\u3002\n"]}, {"cell_type": "markdown", "id": "cf98e9ff", "metadata": {}, "source": ["## \u4e09\u3001\u5bf9\u8bdd\u7f13\u5b58\u7a97\u53e3\u50a8\u5b58\n", " \n", "\u968f\u7740\u5bf9\u8bdd\u53d8\u5f97\u8d8a\u6765\u8d8a\u957f\uff0c\u6240\u9700\u7684\u5185\u5b58\u91cf\u4e5f\u53d8\u5f97\u975e\u5e38\u957f\u3002\u5c06\u5927\u91cf\u7684tokens\u53d1\u9001\u5230LLM\u7684\u6210\u672c\uff0c\u4e5f\u4f1a\u53d8\u5f97\u66f4\u52a0\u6602\u8d35,\u8fd9\u4e5f\u5c31\u662f\u4e3a\u4ec0\u4e48API\u7684\u8c03\u7528\u8d39\u7528\uff0c\u901a\u5e38\u662f\u57fa\u4e8e\u5b83\u9700\u8981\u5904\u7406\u7684tokens\u6570\u91cf\u800c\u6536\u8d39\u7684\u3002\n", " \n", "\u9488\u5bf9\u4ee5\u4e0a\u95ee\u9898\uff0cLangChain\u4e5f\u63d0\u4f9b\u4e86\u51e0\u79cd\u65b9\u4fbf\u7684memory\u6765\u4fdd\u5b58\u5386\u53f2\u5bf9\u8bdd\u3002\n", "\u5176\u4e2d\uff0c\u5bf9\u8bdd\u7f13\u5b58\u7a97\u53e3\u8bb0\u5fc6\u53ea\u4fdd\u7559\u4e00\u4e2a\u7a97\u53e3\u5927\u5c0f\u7684\u5bf9\u8bdd\u7f13\u5b58\u533a\u7a97\u53e3\u8bb0\u5fc6\u3002\u5b83\u53ea\u4f7f\u7528\u6700\u8fd1\u7684n\u6b21\u4ea4\u4e92\u3002\u8fd9\u53ef\u4ee5\u7528\u4e8e\u4fdd\u6301\u6700\u8fd1\u4ea4\u4e92\u7684\u6ed1\u52a8\u7a97\u53e3\uff0c\u4ee5\u4fbf\u7f13\u51b2\u533a\u4e0d\u4f1a\u8fc7\u5927"]}, {"cell_type": "code", "execution_count": null, "id": "66eeccc3", "metadata": {"height": 47}, "outputs": [], "source": ["from langchain.memory import ConversationBufferWindowMemory"]}, {"cell_type": "markdown", "id": "641477a4", "metadata": {}, "source": ["### 3.1 \u5411memory\u6dfb\u52a0\u4e24\u8f6e\u5bf9\u8bdd\uff0c\u5e76\u67e5\u770b\u8bb0\u5fc6\u53d8\u91cf\u5f53\u524d\u7684\u8bb0\u5f55"]}, {"cell_type": "code", "execution_count": null, "id": "3ea6233e", "metadata": {"height": 47}, "outputs": [], "source": ["memory = ConversationBufferWindowMemory(k=1) # k=1\u8868\u660e\u53ea\u4fdd\u7559\u4e00\u4e2a\u5bf9\u8bdd\u8bb0\u5fc6 "]}, {"cell_type": "code", "execution_count": null, "id": "dc4553fb", "metadata": {"height": 115}, "outputs": [], "source": ["memory.save_context({\"input\": \"Hi\"},\n", " {\"output\": \"What's up\"})\n", "memory.save_context({\"input\": \"Not much, just hanging\"},\n", " {\"output\": \"Cool\"})\n"]}, {"cell_type": "code", "execution_count": null, "id": "6a788403", "metadata": {"height": 31}, "outputs": [], "source": ["memory.load_memory_variables({})"]}, {"cell_type": "markdown", "id": "9b401f0b", "metadata": {}, "source": ["### 3.2 \u5728\u770b\u4e00\u4e2a\u4f8b\u5b50\uff0c\u53d1\u73b0\u548c\u4e0a\u9762\u7684\u7ed3\u679c\u4e00\u6837\uff0c\u53ea\u4fdd\u7559\u4e86\u4e00\u8f6e\u5bf9\u8bdd\u8bb0\u5fc6"]}, {"cell_type": "code", "execution_count": null, "id": "68a2907c", "metadata": {}, "outputs": [], "source": ["#\u4e2d\u6587\n", "memory = ConversationBufferWindowMemory(k=1) # k=1\u8868\u660e\u53ea\u4fdd\u7559\u4e00\u4e2a\u5bf9\u8bdd\u8bb0\u5fc6 \n", "memory.save_context({\"input\": \"\u4f60\u597d\uff0c\u6211\u53eb\u76ae\u76ae\u9c81\"}, \n", " {\"output\": \"\u4f60\u597d\u554a\uff0c\u6211\u53eb\u9c81\u897f\u897f\"})\n", "memory.save_context({\"input\": \"\u5f88\u9ad8\u5174\u548c\u4f60\u6210\u4e3a\u670b\u53cb\uff01\"}, \n", " {\"output\": \"\u662f\u7684\uff0c\u8ba9\u6211\u4eec\u4e00\u8d77\u53bb\u5192\u9669\u5427\uff01\"})\n", "memory.load_memory_variables({})"]}, {"cell_type": "markdown", "id": "63bda148", "metadata": {}, "source": ["### 3.3 \u5c06\u5bf9\u8bdd\u7f13\u5b58\u7a97\u53e3\u8bb0\u5fc6\u5e94\u7528\u5230\u5bf9\u8bdd\u94fe\u4e2d"]}, {"cell_type": "code", "execution_count": null, "id": "4087bc87", "metadata": {"height": 133}, "outputs": [], "source": ["OPENAI_API_KEY = \"********\" #\"\u586b\u5165\u4f60\u7684\u4e13\u5c5e\u7684API key\"\n", "llm = ChatOpenAI(temperature=0.0,openai_api_key=OPENAI_API_KEY)\n", "memory = ConversationBufferWindowMemory(k=1)\n", "conversation = ConversationChain( \n", " llm=llm, \n", " memory = memory,\n", " verbose=False #\u8fd9\u91cc\u6539\u4e3aFALSE\u4e0d\u663e\u793a\u63d0\u793a\uff0c\u4f60\u53ef\u4ee5\u5c1d\u8bd5\u4fee\u6539\u4e3aTRUE\u540e\u7684\u7ed3\u679c\n", ")"]}, {"cell_type": "markdown", "id": "b6d661e3", "metadata": {}, "source": ["\u6ce8\u610f\u6b64\u5904\uff01\u7531\u4e8e\u8fd9\u91cc\u7528\u7684\u662f\u4e00\u4e2a\u7a97\u53e3\u7684\u8bb0\u5fc6\uff0c\u56e0\u6b64\u53ea\u80fd\u4fdd\u5b58\u4e00\u8f6e\u7684\u5386\u53f2\u6d88\u606f\uff0c\u56e0\u6b64AI\u5e76\u4e0d\u80fd\u77e5\u9053\u4f60\u7b2c\u4e00\u8f6e\u5bf9\u8bdd\u4e2d\u63d0\u5230\u7684\u540d\u5b57\uff0c\u4ed6\u6700\u591a\u53ea\u80fd\u8bb0\u4f4f\u4e0a\u4e00\u8f6e\uff08\u7b2c\u4e8c\u8f6e\uff09\u7684\u5bf9\u8bdd\u4fe1\u606f"]}, {"cell_type": "code", "execution_count": null, "id": "4faaa952", "metadata": {"height": 47}, "outputs": [], "source": ["conversation.predict(input=\"Hi, my name is Andrew\")"]}, {"cell_type": "code", "execution_count": null, "id": "bb20ddaa", "metadata": {"height": 31}, "outputs": [], "source": ["conversation.predict(input=\"What is 1+1?\")"]}, {"cell_type": "code", "execution_count": null, "id": "489b2194", "metadata": {"height": 31}, "outputs": [], "source": ["conversation.predict(input=\"What is my name?\")"]}, {"cell_type": "markdown", "id": "a1080168", "metadata": {}, "source": ["\u518d\u770b\u4e00\u4e2a\u4f8b\u5b50\uff0c\u53d1\u73b0\u548c\u4e0a\u9762\u7684\u7ed3\u679c\u4e00\u6837\uff01"]}, {"cell_type": "code", "execution_count": null, "id": "1ee854d9", "metadata": {}, "outputs": [], "source": ["#\u4e2d\u6587\n", "conversation.predict(input=\"\u4f60\u597d, \u6211\u53eb\u76ae\u76ae\u9c81\")\n", "conversation.predict(input=\"1+1\u7b49\u4e8e\u591a\u5c11\uff1f\")\n", "conversation.predict(input=\"\u6211\u53eb\u4ec0\u4e48\u540d\u5b57\uff1f\")"]}, {"cell_type": "markdown", "id": "d2931b92", "metadata": {}, "source": ["## \u56db\u3001\u5bf9\u8bddtoken\u7f13\u5b58\u50a8\u5b58"]}, {"cell_type": "markdown", "id": "dff5b4c7", "metadata": {}, "source": ["\u4f7f\u7528\u5bf9\u8bddtoken\u7f13\u5b58\u8bb0\u5fc6\uff0c\u5185\u5b58\u5c06\u9650\u5236\u4fdd\u5b58\u7684token\u6570\u91cf\u3002\u5982\u679ctoken\u6570\u91cf\u8d85\u51fa\u6307\u5b9a\u6570\u76ee\uff0c\u5b83\u4f1a\u5207\u6389\u8fd9\u4e2a\u5bf9\u8bdd\u7684\u65e9\u671f\u90e8\u5206\n", "\u4ee5\u4fdd\u7559\u4e0e\u6700\u8fd1\u7684\u4ea4\u6d41\u76f8\u5bf9\u5e94\u7684token\u6570\u91cf\uff0c\u4f46\u4e0d\u8d85\u8fc7token\u9650\u5236\u3002"]}, {"cell_type": "code", "execution_count": null, "id": "9f6d063c", "metadata": {"height": 31}, "outputs": [], "source": ["#!pip install tiktoken #\u9700\u8981\u7528\u5230tiktoken\u5305\uff0c\u6ca1\u6709\u7684\u53ef\u4ee5\u5148\u5b89\u88c5\u4e00\u4e0b"]}, {"cell_type": "markdown", "id": "2187cfe6", "metadata": {}, "source": ["### 4.1 \u5bfc\u5165\u76f8\u5173\u5305\u548cAPI\u5bc6\u94a5"]}, {"cell_type": "code", "execution_count": null, "id": "fb9020ed", "metadata": {"height": 81}, "outputs": [], "source": ["from langchain.memory import ConversationTokenBufferMemory\n", "from langchain.llms import OpenAI\n", "\n", "OPENAI_API_KEY = \"********\" #\"\u586b\u5165\u4f60\u7684\u4e13\u5c5e\u7684API key\"\n", "llm = ChatOpenAI(temperature=0.0,openai_api_key=OPENAI_API_KEY)"]}, {"cell_type": "markdown", "id": "f3a84112", "metadata": {}, "source": ["### 4.2 \u9650\u5236token\u6570\u91cf\uff0c\u8fdb\u884c\u6d4b\u8bd5"]}, {"cell_type": "code", "execution_count": null, "id": "43582ee6", "metadata": {"height": 149}, "outputs": [], "source": ["memory = ConversationTokenBufferMemory(llm=llm, max_token_limit=30)\n", "memory.save_context({\"input\": \"AI is what?!\"},\n", " {\"output\": \"Amazing!\"})\n", "memory.save_context({\"input\": \"Backpropagation is what?\"},\n", " {\"output\": \"Beautiful!\"})\n", "memory.save_context({\"input\": \"Chatbots are what?\"}, \n", " {\"output\": \"Charming!\"})"]}, {"cell_type": "markdown", "id": "7b62b2e1", "metadata": {}, "source": ["\u53ef\u4ee5\u770b\u5230\u524d\u9762\u8d85\u51fa\u7684\u7684token\u5df2\u7ecf\u88ab\u820d\u5f03\u4e86\uff01\uff01\uff01"]}, {"cell_type": "code", "execution_count": null, "id": "284288e1", "metadata": {"height": 31}, "outputs": [], "source": ["memory.load_memory_variables({})"]}, {"cell_type": "markdown", "id": "f7f6be43", "metadata": {}, "source": ["### 4.3 \u4e2d\u6587\u4f8b\u5b50"]}, {"cell_type": "code", "execution_count": null, "id": "e9191020", "metadata": {}, "outputs": [], "source": ["memory = ConversationTokenBufferMemory(llm=llm, max_token_limit=30)\n", "memory.save_context({\"input\": \"\u671d\u8f9e\u767d\u5e1d\u5f69\u4e91\u95f4\uff0c\"}, \n", " {\"output\": \"\u5343\u91cc\u6c5f\u9675\u4e00\u65e5\u8fd8\u3002\"})\n", "memory.save_context({\"input\": \"\u4e24\u5cb8\u733f\u58f0\u557c\u4e0d\u4f4f\uff0c\"},\n", " {\"output\": \"\u8f7b\u821f\u5df2\u8fc7\u4e07\u91cd\u5c71\u3002\"})\n", "memory.load_memory_variables({})"]}, {"cell_type": "markdown", "id": "5e4d918b", "metadata": {}, "source": ["\u8865\u5145\uff1a \n", "\n", "ChatGPT\u4f7f\u7528\u4e00\u79cd\u57fa\u4e8e\u5b57\u8282\u5bf9\u7f16\u7801\uff08Byte Pair Encoding\uff0cBPE\uff09\u7684\u65b9\u6cd5\u6765\u8fdb\u884ctokenization\uff08\u5c06\u8f93\u5165\u6587\u672c\u62c6\u5206\u4e3atoken\uff09\u3002 \n", "BPE\u662f\u4e00\u79cd\u5e38\u89c1\u7684tokenization\u6280\u672f\uff0c\u5b83\u5c06\u8f93\u5165\u6587\u672c\u5206\u5272\u6210\u8f83\u5c0f\u7684\u5b50\u8bcd\u5355\u5143\u3002 \n", "\n", "OpenAI\u5728\u5176\u5b98\u65b9GitHub\u4e0a\u516c\u5f00\u4e86\u4e00\u4e2a\u6700\u65b0\u7684\u5f00\u6e90Python\u5e93\uff1atiktoken\uff0c\u8fd9\u4e2a\u5e93\u4e3b\u8981\u662f\u7528\u6765\u8ba1\u7b97tokens\u6570\u91cf\u7684\u3002\u76f8\u6bd4\u8f83Hugging Face\u7684tokenizer\uff0c\u5176\u901f\u5ea6\u63d0\u5347\u4e86\u597d\u51e0\u500d| \n", " | Product | \n", "Review | \n", "
|---|---|---|
| 0 | \n", "Queen Size Sheet Set | \n", "I ordered a king size set. My only criticism w... | \n", "
| 1 | \n", "Waterproof Phone Pouch | \n", "I loved the waterproof sac, although the openi... | \n", "
| 2 | \n", "Luxury Air Mattress | \n", "This mattress had a small hole in the top of i... | \n", "
| 3 | \n", "Pillows Insert | \n", "This is the best throw pillow fillers on Amazo... | \n", "
| 4 | \n", "Milk Frother Handheld\\n | \n", "I loved this product. But they only seem to l... | \n", "
\n", " OPENAI_API_KEY=\"your_api_key\" \n", "
\n", " \n", " \u66ff\u6362\"your_api_key\"\u4e3a\u4f60\u81ea\u5df1\u7684 API Key"]}, {"cell_type": "code", "execution_count": 1, "id": "adc3519c-4d12-4011-9223-2f3cb3c42b93", "metadata": {}, "outputs": [], "source": ["# \u4e0b\u8f7d\u9700\u8981\u7684\u5305python-dotenv\u548copenai\n", "# \u5982\u679c\u4f60\u9700\u8981\u67e5\u770b\u5b89\u88c5\u8fc7\u7a0b\u65e5\u5fd7\uff0c\u53ef\u5220\u9664 -q \n", "!pip install -q python-dotenv\n", "!pip install -q openai"]}, {"cell_type": "code", "execution_count": 2, "id": "1ad53241-bef6-42b8-894b-bcbbc8c64df7", "metadata": {"tags": []}, "outputs": [], "source": ["import os\n", "import openai\n", "from dotenv import load_dotenv, find_dotenv\n", "\n", "# \u8bfb\u53d6\u672c\u5730/\u9879\u76ee\u7684\u73af\u5883\u53d8\u91cf\u3002\n", "\n", "# find_dotenv()\u5bfb\u627e\u5e76\u5b9a\u4f4d.env\u6587\u4ef6\u7684\u8def\u5f84\n", "# load_dotenv()\u8bfb\u53d6\u8be5.env\u6587\u4ef6\uff0c\u5e76\u5c06\u5176\u4e2d\u7684\u73af\u5883\u53d8\u91cf\u52a0\u8f7d\u5230\u5f53\u524d\u7684\u8fd0\u884c\u73af\u5883\u4e2d \n", "# \u5982\u679c\u4f60\u8bbe\u7f6e\u7684\u662f\u5168\u5c40\u7684\u73af\u5883\u53d8\u91cf\uff0c\u8fd9\u884c\u4ee3\u7801\u5219\u6ca1\u6709\u4efb\u4f55\u4f5c\u7528\u3002\n", "_ = load_dotenv(find_dotenv())\n", "\n", "# \u83b7\u53d6\u73af\u5883\u53d8\u91cf OPENAI_API_KEY\n", "openai.api_key = os.environ['OPENAI_API_KEY'] "]}, {"cell_type": "markdown", "id": "b940ce7c", "metadata": {"tags": []}, "source": ["## \u4e8c\u3001LLMChain"]}, {"cell_type": "markdown", "id": "e000bd16", "metadata": {}, "source": ["LLMChain\u662f\u4e00\u4e2a\u7b80\u5355\u4f46\u975e\u5e38\u5f3a\u5927\u7684\u94fe\uff0c\u4e5f\u662f\u540e\u9762\u6211\u4eec\u5c06\u8981\u4ecb\u7ecd\u7684\u8bb8\u591a\u94fe\u7684\u57fa\u7840\u3002"]}, {"cell_type": "code", "execution_count": 3, "id": "b84e441b", "metadata": {}, "outputs": [], "source": ["#!pip install pandas"]}, {"cell_type": "code", "execution_count": 46, "id": "974acf8e-8f88-42de-88f8-40a82cb58e8b", "metadata": {}, "outputs": [], "source": ["import pandas as pd\n", "df = pd.read_csv('Data.csv')"]}, {"cell_type": "code", "execution_count": 47, "id": "b7a09c35", "metadata": {}, "outputs": [{"data": {"text/html": ["| \n", " | Product | \n", "Review | \n", "
|---|---|---|
| 0 | \n", "Queen Size Sheet Set | \n", "I ordered a king size set. My only criticism w... | \n", "
| 1 | \n", "Waterproof Phone Pouch | \n", "I loved the waterproof sac, although the openi... | \n", "
| 2 | \n", "Luxury Air Mattress | \n", "This mattress had a small hole in the top of i... | \n", "
| 3 | \n", "Pillows Insert | \n", "This is the best throw pillow fillers on Amazo... | \n", "
| 4 | \n", "Milk Frother Handheld\\n | \n", "I loved this product. But they only seem to l... | \n", "
| \n", " | 0 | \n", "1 | \n", "2 | \n", "
|---|---|---|---|
| 0 | \n", "NaN | \n", "name | \n", "description | \n", "
| 1 | \n", "0.0 | \n", "Women's Campside Oxfords | \n", "This ultracomfortable lace-to-toe Oxford boast... | \n", "
| 2 | \n", "1.0 | \n", "Recycled Waterhog Dog Mat, Chevron Weave | \n", "Protect your floors from spills and splashing ... | \n", "
| 3 | \n", "2.0 | \n", "Infant and Toddler Girls' Coastal Chill Swimsu... | \n", "She'll love the bright colors, ruffles and exc... | \n", "
| 4 | \n", "3.0 | \n", "Refresh Swimwear, V-Neck Tankini Contrasts | \n", "Whether you're going for a swim or heading out... | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "
| 996 | \n", "995.0 | \n", "Men's Classic Denim, Standard Fit | \n", "Crafted from premium denim that will last wash... | \n", "
| 997 | \n", "996.0 | \n", "CozyPrint Sweater Fleece Pullover | \n", "The ultimate sweater fleece - made from superi... | \n", "
| 998 | \n", "997.0 | \n", "Women's NRS Endurance Spray Paddling Pants | \n", "These comfortable and affordable splash paddli... | \n", "
| 999 | \n", "998.0 | \n", "Women's Stop Flies Hoodie | \n", "This great-looking hoodie uses No Fly Zone Tec... | \n", "
| 1000 | \n", "999.0 | \n", "Modern Utility Bag | \n", "This US-made crossbody bag is built with the s... | \n", "
1001 rows \u00d7 3 columns
\n", "\n", " OPENAI_API_KEY=\"your_api_key\" \n", "
\n", " \n", " \u66ff\u6362\"your_api_key\"\u4e3a\u4f60\u81ea\u5df1\u7684 API Key"]}, {"cell_type": "code", "execution_count": 1, "id": "cc33ceb1-535f-454d-988c-347a8b14fd72", "metadata": {}, "outputs": [], "source": ["# \u4e0b\u8f7d\u9700\u8981\u7684\u5305python-dotenv\u548copenai\n", "# \u5982\u679c\u4f60\u9700\u8981\u67e5\u770b\u5b89\u88c5\u8fc7\u7a0b\u65e5\u5fd7\uff0c\u53ef\u5220\u9664 -q \n", "!pip install -q python-dotenv\n", "!pip install -q openai"]}, {"cell_type": "code", "execution_count": 2, "id": "e3c97235-f101-47f2-92db-1c37f4bf9845", "metadata": {"tags": []}, "outputs": [], "source": ["import os\n", "import openai\n", "from dotenv import load_dotenv, find_dotenv\n", "\n", "# \u8bfb\u53d6\u672c\u5730/\u9879\u76ee\u7684\u73af\u5883\u53d8\u91cf\u3002\n", "\n", "# find_dotenv()\u5bfb\u627e\u5e76\u5b9a\u4f4d.env\u6587\u4ef6\u7684\u8def\u5f84\n", "# load_dotenv()\u8bfb\u53d6\u8be5.env\u6587\u4ef6\uff0c\u5e76\u5c06\u5176\u4e2d\u7684\u73af\u5883\u53d8\u91cf\u52a0\u8f7d\u5230\u5f53\u524d\u7684\u8fd0\u884c\u73af\u5883\u4e2d \n", "# \u5982\u679c\u4f60\u8bbe\u7f6e\u7684\u662f\u5168\u5c40\u7684\u73af\u5883\u53d8\u91cf\uff0c\u8fd9\u884c\u4ee3\u7801\u5219\u6ca1\u6709\u4efb\u4f55\u4f5c\u7528\u3002\n", "_ = load_dotenv(find_dotenv())\n", "\n", "# \u83b7\u53d6\u73af\u5883\u53d8\u91cf OPENAI_API_KEY\n", "openai.api_key = os.environ['OPENAI_API_KEY'] "]}, {"cell_type": "code", "execution_count": 52, "id": "af8c3c96", "metadata": {}, "outputs": [{"data": {"text/plain": ["'\\n\\n\u4eba\u5de5\u667a\u80fd\u662f\u4e00\u9879\u6781\u5177\u524d\u666f\u7684\u6280\u672f\uff0c\u5b83\u7684\u53d1\u5c55\u6b63\u5728\u6539\u53d8\u4eba\u7c7b\u7684\u751f\u6d3b\u65b9\u5f0f\uff0c\u5e26\u6765\u4e86\u65e0\u6570\u7684\u4fbf\u5229\uff0c\u4e5f\u88ab\u8ba4\u4e3a\u662f\u672a\u6765\u53d1\u5c55\u7684\u91cd\u8981\u6807\u5fd7\u3002\u4eba\u5de5\u667a\u80fd\u7684\u53d1\u5c55\u8ba9\u8bb8\u591a\u590d\u6742\u7684\u4efb\u52a1\u53d8\u5f97\u66f4\u52a0\u5bb9\u6613\uff0c\u66f4\u9ad8\u6548\u7684\u5b8c\u6210\uff0c\u8282\u7701\u4e86\u5927\u91cf\u7684\u65f6\u95f4\u548c\u7cbe\u529b\uff0c\u4e3a\u4eba\u7c7b\u53d1\u5c55\u5e26\u6765\u4e86\u6781\u5927\u7684\u5e2e\u52a9\u3002'"]}, "execution_count": 52, "metadata": {}, "output_type": "execute_result"}], "source": ["from langchain.llms import OpenAI\n", "\n", "llm = OpenAI(model_name=\"text-davinci-003\",max_tokens=1024)\n", "llm(\"\u600e\u4e48\u8bc4\u4ef7\u4eba\u5de5\u667a\u80fd\")"]}, {"cell_type": "markdown", "id": "8cb7a7ec", "metadata": {"height": 30}, "source": ["## \u4e00\u3001\u5bfc\u5165embedding\u6a21\u578b\u548c\u5411\u91cf\u5b58\u50a8\u7ec4\u4ef6\n", "\u4f7f\u7528Dock Array\u5185\u5b58\u641c\u7d22\u5411\u91cf\u5b58\u50a8\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u5185\u5b58\u5411\u91cf\u5b58\u50a8\uff0c\u4e0d\u9700\u8981\u8fde\u63a5\u5916\u90e8\u6570\u636e\u5e93"]}, {"cell_type": "code", "execution_count": 3, "id": "974acf8e-8f88-42de-88f8-40a82cb58e8b", "metadata": {"height": 98}, "outputs": [], "source": ["from langchain.chains import RetrievalQA #\u68c0\u7d22QA\u94fe\uff0c\u5728\u6587\u6863\u4e0a\u8fdb\u884c\u68c0\u7d22\n", "from langchain.chat_models import ChatOpenAI #openai\u6a21\u578b\n", "from langchain.document_loaders import CSVLoader #\u6587\u6863\u52a0\u8f7d\u5668\uff0c\u91c7\u7528csv\u683c\u5f0f\u5b58\u50a8\n", "from langchain.vectorstores import DocArrayInMemorySearch #\u5411\u91cf\u5b58\u50a8\n", "from IPython.display import display, Markdown #\u5728jupyter\u663e\u793a\u4fe1\u606f\u7684\u5de5\u5177"]}, {"cell_type": "code", "execution_count": 4, "id": "7249846e", "metadata": {"height": 75}, "outputs": [], "source": ["#\u8bfb\u53d6\u6587\u4ef6\n", "file = 'OutdoorClothingCatalog_1000.csv'\n", "loader = CSVLoader(file_path=file)"]}, {"cell_type": "code", "execution_count": 24, "id": "7724f00e", "metadata": {"height": 30}, "outputs": [{"data": {"text/html": ["| \n", " | 0 | \n", "1 | \n", "2 | \n", "
|---|---|---|---|
| 0 | \n", "NaN | \n", "name | \n", "description | \n", "
| 1 | \n", "0.0 | \n", "Women's Campside Oxfords | \n", "This ultracomfortable lace-to-toe Oxford boast... | \n", "
| 2 | \n", "1.0 | \n", "Recycled Waterhog Dog Mat, Chevron Weave | \n", "Protect your floors from spills and splashing ... | \n", "
| 3 | \n", "2.0 | \n", "Infant and Toddler Girls' Coastal Chill Swimsu... | \n", "She'll love the bright colors, ruffles and exc... | \n", "
| 4 | \n", "3.0 | \n", "Refresh Swimwear, V-Neck Tankini Contrasts | \n", "Whether you're going for a swim or heading out... | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "
| 996 | \n", "995.0 | \n", "Men's Classic Denim, Standard Fit | \n", "Crafted from premium denim that will last wash... | \n", "
| 997 | \n", "996.0 | \n", "CozyPrint Sweater Fleece Pullover | \n", "The ultimate sweater fleece - made from superi... | \n", "
| 998 | \n", "997.0 | \n", "Women's NRS Endurance Spray Paddling Pants | \n", "These comfortable and affordable splash paddli... | \n", "
| 999 | \n", "998.0 | \n", "Women's Stop Flies Hoodie | \n", "This great-looking hoodie uses No Fly Zone Tec... | \n", "
| 1000 | \n", "999.0 | \n", "Modern Utility Bag | \n", "This US-made crossbody bag is built with the s... | \n", "
1001 rows \u00d7 3 columns
\n", "| \n", " | 0 | \n", "1 | \n", "2 | \n", "
|---|---|---|---|
| 0 | \n", "NaN | \n", "name | \n", "description | \n", "
| 1 | \n", "0.0 | \n", "Women's Campside Oxfords | \n", "This ultracomfortable lace-to-toe Oxford boast... | \n", "
| 2 | \n", "1.0 | \n", "Recycled Waterhog Dog Mat, Chevron Weave | \n", "Protect your floors from spills and splashing ... | \n", "
| 3 | \n", "2.0 | \n", "Infant and Toddler Girls' Coastal Chill Swimsu... | \n", "She'll love the bright colors, ruffles and exc... | \n", "
| 4 | \n", "3.0 | \n", "Refresh Swimwear, V-Neck Tankini Contrasts | \n", "Whether you're going for a swim or heading out... | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "
| 996 | \n", "995.0 | \n", "Men's Classic Denim, Standard Fit | \n", "Crafted from premium denim that will last wash... | \n", "
| 997 | \n", "996.0 | \n", "CozyPrint Sweater Fleece Pullover | \n", "The ultimate sweater fleece - made from superi... | \n", "
| 998 | \n", "997.0 | \n", "Women's NRS Endurance Spray Paddling Pants | \n", "These comfortable and affordable splash paddli... | \n", "
| 999 | \n", "998.0 | \n", "Women's Stop Flies Hoodie | \n", "This great-looking hoodie uses No Fly Zone Tec... | \n", "
| 1000 | \n", "999.0 | \n", "Modern Utility Bag | \n", "This US-made crossbody bag is built with the s... | \n", "
1001 rows \u00d7 3 columns
\n", "| \n", " | 0 | \n", "1 | \n", "
|---|---|---|
| 0 | \n", "product_name | \n", "description | \n", "
| 1 | \n", "\u5168\u81ea\u52a8\u5496\u5561\u673a | \n", "\u89c4\u683c:\\n\u5927\u578b - \u5c3a\u5bf8\uff1a13.8'' x 17.3''\u3002\\n\u4e2d\u578b - \u5c3a\u5bf8\uff1a11.5'' ... | \n", "
| 2 | \n", "\u7535\u52a8\u7259\u5237 | \n", "\u89c4\u683c:\\n\u4e00\u822c\u5927\u5c0f - \u9ad8\u5ea6\uff1a9.5''\uff0c\u5bbd\u5ea6\uff1a1''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684... | \n", "
| 3 | \n", "\u6a59\u5473\u7ef4\u751f\u7d20C\u6ce1\u817e\u7247 | \n", "\u89c4\u683c:\\n\u6bcf\u76d2\u542b\u670920\u7247\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u6a59\u5473\u7ef4\u751f\u7d20C\u6ce1\u817e\u7247\u662f\u5feb\u901f\u8865\u5145\u7ef4... | \n", "
| 4 | \n", "\u65e0\u7ebf\u84dd\u7259\u8033\u673a | \n", "\u89c4\u683c:\\n\u5355\u4e2a\u8033\u673a\u5c3a\u5bf8\uff1a1.5'' x 1.3''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u8fd9\u6b3e\u65e0\u7ebf\u84dd... | \n", "
| 5 | \n", "\u745c\u4f3d\u57ab | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a24'' x 68''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u745c\u4f3d\u57ab\u62e5\u6709\u51fa\u8272\u7684... | \n", "
| 6 | \n", "\u9632\u6c34\u8fd0\u52a8\u624b\u8868 | \n", "\u89c4\u683c:\\n\u8868\u76d8\u76f4\u5f84\uff1a40mm\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u8fd9\u6b3e\u9632\u6c34\u8fd0\u52a8\u624b\u8868\u914d\u5907\u4e86\u5fc3\u7387\u76d1\u6d4b\u548c... | \n", "
| 7 | \n", "\u4e66\u7c4d:\u300a\u673a\u5668\u5b66\u4e60\u57fa\u7840\u300b | \n", "\u89c4\u683c:\\n\u9875\u6570\uff1a580\u9875\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u300a\u673a\u5668\u5b66\u4e60\u57fa\u7840\u300b\u4ee5\u6613\u61c2\u7684\u8bed\u8a00\u8bb2\u89e3\u4e86\u673a... | \n", "
| 8 | \n", "\u7a7a\u6c14\u51c0\u5316\u5668 | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a15'' x 15'' x 20''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u7a7a... | \n", "
| 9 | \n", "\u9676\u74f7\u4fdd\u6e29\u676f | \n", "\u89c4\u683c:\\n\u5bb9\u91cf\uff1a350ml\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u9676\u74f7\u4fdd\u6e29\u676f\u8bbe\u8ba1\u4f18\u96c5\uff0c\u4fdd\u6e29\u6548\u679c... | \n", "
| 10 | \n", "\u5ba0\u7269\u81ea\u52a8\u5582\u98df\u5668 | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a14'' x 9'' x 15''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u5ba0\u7269... | \n", "
| 11 | \n", "\u9ad8\u6e05\u7535\u89c6\u673a | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a50''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u9ad8\u6e05\u7535\u89c6\u673a\u62e5\u6709\u51fa\u8272\u7684\u753b\u8d28\u548c\u5f3a\u5927... | \n", "
| 12 | \n", "\u65c5\u884c\u80cc\u5305 | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a18'' x 12'' x 6''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u65c5\u884c... | \n", "
| 13 | \n", "\u592a\u9633\u80fd\u5ead\u9662\u706f | \n", "\u89c4\u683c:\\n\u9ad8\u5ea6\uff1a18''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u592a\u9633\u80fd\u5ead\u9662\u706f\u65e0\u9700\u7535\u6e90\uff0c\u53ea\u9700\u5c06\u5176... | \n", "
| 14 | \n", "\u53a8\u623f\u5200\u5177\u5957\u88c5 | \n", "\u89c4\u683c:\\n\u4e00\u5957\u5305\u62ec8\u628a\u5200\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u53a8\u623f\u5200\u5177\u5957\u88c5\u7531\u4e13\u4e1a\u7ea7\u4e0d\u9508\u94a2\u5236\u6210... | \n", "
| 15 | \n", "\u8ff7\u4f60\u65e0\u7ebf\u84dd\u7259\u97f3\u7bb1 | \n", "\u89c4\u683c:\\n\u76f4\u5f84\uff1a3''\uff0c\u9ad8\u5ea6\uff1a2''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u8ff7\u4f60\u65e0\u7ebf\u84dd\u7259\u97f3\u7bb1\u4f53... | \n", "
| 16 | \n", "\u6297\u83cc\u6d17\u624b\u6db2 | \n", "\u89c4\u683c:\\n\u5bb9\u91cf\uff1a500ml\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u6297\u83cc\u6d17\u624b\u6db2\u542b\u6709\u5929\u7136\u690d\u7269\u7cbe\u534e\uff0c... | \n", "
| 17 | \n", "\u7eaf\u68c9T\u6064 | \n", "\u89c4\u683c:\\n\u5c3a\u7801\uff1aS, M, L, XL, XXL\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u7eaf\u68c9T... | \n", "
| 18 | \n", "\u81ea\u52a8\u5496\u5561\u673a | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a12'' x 8'' x 14''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u81ea\u52a8... | \n", "
| 19 | \n", "\u6444\u50cf\u5934\u4fdd\u62a4\u5957 | \n", "\u89c4\u683c:\\n\u9002\u7528\u4e8e\u5404\u79cd\u54c1\u724c\u548c\u578b\u53f7\u7684\u6444\u50cf\u5934\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u6444\u50cf\u5934\u4fdd\u62a4\u5957\u53ef\u4ee5... | \n", "
| 20 | \n", "\u73bb\u7483\u4fdd\u62a4\u819c | \n", "\u89c4\u683c:\\n\u9002\u7528\u4e8e\u5404\u79cd\u5c3a\u5bf8\u7684\u624b\u673a\u5c4f\u5e55\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u73bb\u7483\u4fdd\u62a4\u819c\u53ef\u4ee5\u6709\u6548\u9632... | \n", "
| 21 | \n", "\u513f\u7ae5\u76ca\u667a\u73a9\u5177 | \n", "\u89c4\u683c:\\n\u9002\u54083\u5c81\u4ee5\u4e0a\u7684\u513f\u7ae5\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u513f\u7ae5\u76ca\u667a\u73a9\u5177\u8bbe\u8ba1\u72ec\u7279\uff0c\u8272\u5f69... | \n", "
| 22 | \n", "\u8ff7\u4f60\u4e66\u67b6 | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a20'' x 8'' x 24''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u8ff7\u4f60... | \n", "
| 23 | \n", "\u9632\u6ed1\u745c\u4f3d\u57ab | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a72'' x 24''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u9632\u6ed1\u745c\u4f3d\u57ab\u91c7\u7528\u9ad8... | \n", "
| 24 | \n", "LED\u53f0\u706f | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a6'' x 6'' x 18''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684LED... | \n", "
| 25 | \n", "\u6c34\u6676\u9152\u676f | \n", "\u89c4\u683c:\\n\u5bb9\u91cf\uff1a250ml\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u6c34\u6676\u9152\u676f\u91c7\u7528\u9ad8\u54c1\u8d28\u6c34\u6676\u73bb\u7483\u5236... | \n", "
\n", " OPENAI_API_KEY=\"your_api_key\" \n", "
\n", " \n", " \u66ff\u6362\"your_api_key\"\u4e3a\u4f60\u81ea\u5df1\u7684 API Key"]}, {"cell_type": "code", "execution_count": 1, "id": "a8aa66fb-a33b-438f-81f5-0c6ff08035ad", "metadata": {}, "outputs": [], "source": ["# \u4e0b\u8f7d\u9700\u8981\u7684\u5305python-dotenv\u548copenai\n", "# \u5982\u679c\u4f60\u9700\u8981\u67e5\u770b\u5b89\u88c5\u8fc7\u7a0b\u65e5\u5fd7\uff0c\u53ef\u5220\u9664 -q \n", "!pip install -q python-dotenv\n", "!pip install -q openai"]}, {"cell_type": "code", "execution_count": 2, "id": "15a8c608-71bf-4a44-835f-0ff36cbc4533", "metadata": {"tags": []}, "outputs": [], "source": ["import os\n", "import openai\n", "from dotenv import load_dotenv, find_dotenv\n", "\n", "# \u8bfb\u53d6\u672c\u5730/\u9879\u76ee\u7684\u73af\u5883\u53d8\u91cf\u3002\n", "\n", "# find_dotenv()\u5bfb\u627e\u5e76\u5b9a\u4f4d.env\u6587\u4ef6\u7684\u8def\u5f84\n", "# load_dotenv()\u8bfb\u53d6\u8be5.env\u6587\u4ef6\uff0c\u5e76\u5c06\u5176\u4e2d\u7684\u73af\u5883\u53d8\u91cf\u52a0\u8f7d\u5230\u5f53\u524d\u7684\u8fd0\u884c\u73af\u5883\u4e2d \n", "# \u5982\u679c\u4f60\u8bbe\u7f6e\u7684\u662f\u5168\u5c40\u7684\u73af\u5883\u53d8\u91cf\uff0c\u8fd9\u884c\u4ee3\u7801\u5219\u6ca1\u6709\u4efb\u4f55\u4f5c\u7528\u3002\n", "_ = load_dotenv(find_dotenv())\n", "\n", "# \u83b7\u53d6\u73af\u5883\u53d8\u91cf OPENAI_API_KEY\n", "openai.api_key = os.environ['OPENAI_API_KEY'] "]}, {"cell_type": "markdown", "id": "28008949", "metadata": {"tags": []}, "source": ["## \u4e8c\u3001 \u521b\u5efaLLM\u5e94\u7528\n", "\u6309\u7167langchain\u94fe\u7684\u65b9\u5f0f\u8fdb\u884c\u6784\u5efa"]}, {"cell_type": "code", "execution_count": 2, "id": "974acf8e-8f88-42de-88f8-40a82cb58e8b", "metadata": {"height": 98}, "outputs": [], "source": ["from langchain.chains import RetrievalQA #\u68c0\u7d22QA\u94fe\uff0c\u5728\u6587\u6863\u4e0a\u8fdb\u884c\u68c0\u7d22\n", "from langchain.chat_models import ChatOpenAI #openai\u6a21\u578b\n", "from langchain.document_loaders import CSVLoader #\u6587\u6863\u52a0\u8f7d\u5668\uff0c\u91c7\u7528csv\u683c\u5f0f\u5b58\u50a8\n", "from langchain.indexes import VectorstoreIndexCreator #\u5bfc\u5165\u5411\u91cf\u5b58\u50a8\u7d22\u5f15\u521b\u5efa\u5668\n", "from langchain.vectorstores import DocArrayInMemorySearch #\u5411\u91cf\u5b58\u50a8\n"]}, {"cell_type": "code", "execution_count": 3, "id": "9ec1106d", "metadata": {"height": 64}, "outputs": [], "source": ["#\u52a0\u8f7d\u6570\u636e\n", "file = 'OutdoorClothingCatalog_1000.csv'\n", "loader = CSVLoader(file_path=file)\n", "data = loader.load()"]}, {"cell_type": "code", "execution_count": 4, "id": "06b1ffae", "metadata": {}, "outputs": [{"data": {"text/html": ["| \n", " | 0 | \n", "1 | \n", "2 | \n", "
|---|---|---|---|
| 0 | \n", "NaN | \n", "name | \n", "description | \n", "
| 1 | \n", "0.0 | \n", "Women's Campside Oxfords | \n", "This ultracomfortable lace-to-toe Oxford boast... | \n", "
| 2 | \n", "1.0 | \n", "Recycled Waterhog Dog Mat, Chevron Weave | \n", "Protect your floors from spills and splashing ... | \n", "
| 3 | \n", "2.0 | \n", "Infant and Toddler Girls' Coastal Chill Swimsu... | \n", "She'll love the bright colors, ruffles and exc... | \n", "
| 4 | \n", "3.0 | \n", "Refresh Swimwear, V-Neck Tankini Contrasts | \n", "Whether you're going for a swim or heading out... | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "
| 996 | \n", "995.0 | \n", "Men's Classic Denim, Standard Fit | \n", "Crafted from premium denim that will last wash... | \n", "
| 997 | \n", "996.0 | \n", "CozyPrint Sweater Fleece Pullover | \n", "The ultimate sweater fleece - made from superi... | \n", "
| 998 | \n", "997.0 | \n", "Women's NRS Endurance Spray Paddling Pants | \n", "These comfortable and affordable splash paddli... | \n", "
| 999 | \n", "998.0 | \n", "Women's Stop Flies Hoodie | \n", "This great-looking hoodie uses No Fly Zone Tec... | \n", "
| 1000 | \n", "999.0 | \n", "Modern Utility Bag | \n", "This US-made crossbody bag is built with the s... | \n", "
1001 rows \u00d7 3 columns
\n", "| \n", " | 0 | \n", "1 | \n", "
|---|---|---|
| 0 | \n", "product_name | \n", "description | \n", "
| 1 | \n", "\u5168\u81ea\u52a8\u5496\u5561\u673a | \n", "\u89c4\u683c:\\n\u5927\u578b - \u5c3a\u5bf8\uff1a13.8'' x 17.3''\u3002\\n\u4e2d\u578b - \u5c3a\u5bf8\uff1a11.5'' ... | \n", "
| 2 | \n", "\u7535\u52a8\u7259\u5237 | \n", "\u89c4\u683c:\\n\u4e00\u822c\u5927\u5c0f - \u9ad8\u5ea6\uff1a9.5''\uff0c\u5bbd\u5ea6\uff1a1''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684... | \n", "
| 3 | \n", "\u6a59\u5473\u7ef4\u751f\u7d20C\u6ce1\u817e\u7247 | \n", "\u89c4\u683c:\\n\u6bcf\u76d2\u542b\u670920\u7247\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u6a59\u5473\u7ef4\u751f\u7d20C\u6ce1\u817e\u7247\u662f\u5feb\u901f\u8865\u5145\u7ef4... | \n", "
| 4 | \n", "\u65e0\u7ebf\u84dd\u7259\u8033\u673a | \n", "\u89c4\u683c:\\n\u5355\u4e2a\u8033\u673a\u5c3a\u5bf8\uff1a1.5'' x 1.3''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u8fd9\u6b3e\u65e0\u7ebf\u84dd... | \n", "
| 5 | \n", "\u745c\u4f3d\u57ab | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a24'' x 68''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u745c\u4f3d\u57ab\u62e5\u6709\u51fa\u8272\u7684... | \n", "
| 6 | \n", "\u9632\u6c34\u8fd0\u52a8\u624b\u8868 | \n", "\u89c4\u683c:\\n\u8868\u76d8\u76f4\u5f84\uff1a40mm\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u8fd9\u6b3e\u9632\u6c34\u8fd0\u52a8\u624b\u8868\u914d\u5907\u4e86\u5fc3\u7387\u76d1\u6d4b\u548c... | \n", "
| 7 | \n", "\u4e66\u7c4d:\u300a\u673a\u5668\u5b66\u4e60\u57fa\u7840\u300b | \n", "\u89c4\u683c:\\n\u9875\u6570\uff1a580\u9875\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u300a\u673a\u5668\u5b66\u4e60\u57fa\u7840\u300b\u4ee5\u6613\u61c2\u7684\u8bed\u8a00\u8bb2\u89e3\u4e86\u673a... | \n", "
| 8 | \n", "\u7a7a\u6c14\u51c0\u5316\u5668 | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a15'' x 15'' x 20''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u7a7a... | \n", "
| 9 | \n", "\u9676\u74f7\u4fdd\u6e29\u676f | \n", "\u89c4\u683c:\\n\u5bb9\u91cf\uff1a350ml\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u9676\u74f7\u4fdd\u6e29\u676f\u8bbe\u8ba1\u4f18\u96c5\uff0c\u4fdd\u6e29\u6548\u679c... | \n", "
| 10 | \n", "\u5ba0\u7269\u81ea\u52a8\u5582\u98df\u5668 | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a14'' x 9'' x 15''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u5ba0\u7269... | \n", "
| 11 | \n", "\u9ad8\u6e05\u7535\u89c6\u673a | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a50''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u9ad8\u6e05\u7535\u89c6\u673a\u62e5\u6709\u51fa\u8272\u7684\u753b\u8d28\u548c\u5f3a\u5927... | \n", "
| 12 | \n", "\u65c5\u884c\u80cc\u5305 | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a18'' x 12'' x 6''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u65c5\u884c... | \n", "
| 13 | \n", "\u592a\u9633\u80fd\u5ead\u9662\u706f | \n", "\u89c4\u683c:\\n\u9ad8\u5ea6\uff1a18''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u592a\u9633\u80fd\u5ead\u9662\u706f\u65e0\u9700\u7535\u6e90\uff0c\u53ea\u9700\u5c06\u5176... | \n", "
| 14 | \n", "\u53a8\u623f\u5200\u5177\u5957\u88c5 | \n", "\u89c4\u683c:\\n\u4e00\u5957\u5305\u62ec8\u628a\u5200\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u53a8\u623f\u5200\u5177\u5957\u88c5\u7531\u4e13\u4e1a\u7ea7\u4e0d\u9508\u94a2\u5236\u6210... | \n", "
| 15 | \n", "\u8ff7\u4f60\u65e0\u7ebf\u84dd\u7259\u97f3\u7bb1 | \n", "\u89c4\u683c:\\n\u76f4\u5f84\uff1a3''\uff0c\u9ad8\u5ea6\uff1a2''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u8ff7\u4f60\u65e0\u7ebf\u84dd\u7259\u97f3\u7bb1\u4f53... | \n", "
| 16 | \n", "\u6297\u83cc\u6d17\u624b\u6db2 | \n", "\u89c4\u683c:\\n\u5bb9\u91cf\uff1a500ml\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u6297\u83cc\u6d17\u624b\u6db2\u542b\u6709\u5929\u7136\u690d\u7269\u7cbe\u534e\uff0c... | \n", "
| 17 | \n", "\u7eaf\u68c9T\u6064 | \n", "\u89c4\u683c:\\n\u5c3a\u7801\uff1aS, M, L, XL, XXL\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u7eaf\u68c9T... | \n", "
| 18 | \n", "\u81ea\u52a8\u5496\u5561\u673a | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a12'' x 8'' x 14''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u81ea\u52a8... | \n", "
| 19 | \n", "\u6444\u50cf\u5934\u4fdd\u62a4\u5957 | \n", "\u89c4\u683c:\\n\u9002\u7528\u4e8e\u5404\u79cd\u54c1\u724c\u548c\u578b\u53f7\u7684\u6444\u50cf\u5934\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u6444\u50cf\u5934\u4fdd\u62a4\u5957\u53ef\u4ee5... | \n", "
| 20 | \n", "\u73bb\u7483\u4fdd\u62a4\u819c | \n", "\u89c4\u683c:\\n\u9002\u7528\u4e8e\u5404\u79cd\u5c3a\u5bf8\u7684\u624b\u673a\u5c4f\u5e55\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u73bb\u7483\u4fdd\u62a4\u819c\u53ef\u4ee5\u6709\u6548\u9632... | \n", "
| 21 | \n", "\u513f\u7ae5\u76ca\u667a\u73a9\u5177 | \n", "\u89c4\u683c:\\n\u9002\u54083\u5c81\u4ee5\u4e0a\u7684\u513f\u7ae5\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u513f\u7ae5\u76ca\u667a\u73a9\u5177\u8bbe\u8ba1\u72ec\u7279\uff0c\u8272\u5f69... | \n", "
| 22 | \n", "\u8ff7\u4f60\u4e66\u67b6 | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a20'' x 8'' x 24''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u8ff7\u4f60... | \n", "
| 23 | \n", "\u9632\u6ed1\u745c\u4f3d\u57ab | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a72'' x 24''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u9632\u6ed1\u745c\u4f3d\u57ab\u91c7\u7528\u9ad8... | \n", "
| 24 | \n", "LED\u53f0\u706f | \n", "\u89c4\u683c:\\n\u5c3a\u5bf8\uff1a6'' x 6'' x 18''\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684LED... | \n", "
| 25 | \n", "\u6c34\u6676\u9152\u676f | \n", "\u89c4\u683c:\\n\u5bb9\u91cf\uff1a250ml\u3002\\n\\n\u4e3a\u4ec0\u4e48\u6211\u4eec\u70ed\u7231\u5b83:\\n\u6211\u4eec\u7684\u6c34\u6676\u9152\u676f\u91c7\u7528\u9ad8\u54c1\u8d28\u6c34\u6676\u73bb\u7483\u5236... | \n", "