281 lines
30 KiB
Plaintext
281 lines
30 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"id": "initial_id",
|
|
"metadata": {
|
|
"collapsed": true,
|
|
"ExecuteTime": {
|
|
"end_time": "2026-08-04T11:46:45.964787Z",
|
|
"start_time": "2026-08-04T11:46:45.760685Z"
|
|
}
|
|
},
|
|
"source": [
|
|
"import os\n",
|
|
"\n",
|
|
"from langchain_core.messages import SystemMessage, HumanMessage\n",
|
|
"from langgraph.store.postgres import PostgresStore\n",
|
|
"from langgraph.checkpoint.postgres import PostgresSaver\n",
|
|
"from dotenv import load_dotenv\n",
|
|
"\n",
|
|
"load_dotenv(override=True)\n",
|
|
"\n",
|
|
"with PostgresStore.from_conn_string(os.getenv(\"LANGGRAPH_DATABASE_URL\")) as store:\n",
|
|
" store.setup()\n",
|
|
"\n",
|
|
" namespace_root = (\"users\",)\n",
|
|
"\n",
|
|
" namespace1 = (*namespace_root, \"Alice\")\n",
|
|
" value1 = {\n",
|
|
" \"course\": \"计算机组成原理\",\n",
|
|
" \"sports\": \"跑步\",\n",
|
|
" \"food\": \"紫光园奶皮子酸奶\"\n",
|
|
" }\n",
|
|
"\n",
|
|
" namespace2 = (*namespace_root, \"Bob\")\n",
|
|
" value2 = {\n",
|
|
" \"course\": \"数字电路与模拟电路\",\n",
|
|
" \"sports\": \"跑步\",\n",
|
|
" \"food\": \"奶皮子糖葫芦\"\n",
|
|
" }\n",
|
|
"\n",
|
|
" namespace3 = (*namespace_root, \"Black\")\n",
|
|
" value3 = {\n",
|
|
" \"course\": \"数字电路与模拟电路\",\n",
|
|
" \"sports\": \"羽毛球\",\n",
|
|
" \"food\": \"紫光园奶皮子酸奶\"\n",
|
|
" }\n",
|
|
"\n",
|
|
" store.put(namespace1, \"preferences_key\", value1)\n",
|
|
" store.put(namespace2, \"preferences_key\", value2)\n",
|
|
" store.put(namespace3, \"preferences_key\", value3)\n",
|
|
"\n",
|
|
" for item in store.search(namespace_root):\n",
|
|
" print(item)\n"
|
|
],
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Item(namespace=['users', 'Black'], key='preferences_key', value={'food': '紫光园奶皮子酸奶', 'course': '数字电路与模拟电路', 'sports': '羽毛球'}, created_at='2026-08-04T10:45:38.755093+00:00', updated_at='2026-08-04T11:46:45.948064+00:00', score=None)\n",
|
|
"Item(namespace=['users', 'Bob'], key='preferences_key', value={'food': '奶皮子糖葫芦', 'course': '数字电路与模拟电路', 'sports': '跑步'}, created_at='2026-08-04T10:45:38.754688+00:00', updated_at='2026-08-04T11:46:45.947122+00:00', score=None)\n",
|
|
"Item(namespace=['users', 'Alice'], key='preferences_key', value={'food': '紫光园奶皮子酸奶', 'course': '计算机组成原理', 'sports': '跑步'}, created_at='2026-08-04T10:45:38.753947+00:00', updated_at='2026-08-04T11:46:45.945722+00:00', score=None)\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 1
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-08-04T11:46:46.446236Z",
|
|
"start_time": "2026-08-04T11:46:45.965910Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"import os\n",
|
|
"from langchain.chat_models import init_chat_model\n",
|
|
"from loguru import logger\n",
|
|
"\n",
|
|
"llm = init_chat_model(\n",
|
|
" model=\"openai:qwen3.6-flash\",\n",
|
|
" base_url=os.getenv(\"BASE_URL\"),\n",
|
|
" api_key=os.getenv(\"API_KEY\")\n",
|
|
")\n",
|
|
"from typing import TypedDict, Literal\n",
|
|
"from langgraph.graph.message import MessagesState\n",
|
|
"\n",
|
|
"\n",
|
|
"class OverAllState(MessagesState):\n",
|
|
" username: str\n",
|
|
" user_input: str\n",
|
|
" output: str\n",
|
|
" preferences: dict[str, str]"
|
|
],
|
|
"id": "620e9e56cb68c08c",
|
|
"outputs": [],
|
|
"execution_count": 2
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-08-04T11:46:46.462880Z",
|
|
"start_time": "2026-08-04T11:46:46.446947Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"def router(state: OverAllState) -> Literal[\"check_preference_node\", \"llm_node\"]:\n",
|
|
" if not state.get(\"preferences\"):\n",
|
|
" logger.info(\"需要从长期记忆里面查询\")\n",
|
|
" return \"check_preference_node\"\n",
|
|
" return \"llm_node\"\n",
|
|
"\n",
|
|
"\n",
|
|
"from langgraph.runtime import Runtime\n",
|
|
"\n",
|
|
"\n",
|
|
"def check_preference_node(state: OverAllState, runtime: Runtime) -> OverAllState:\n",
|
|
" namespace_root = (\"users\",)\n",
|
|
" username = state[\"username\"]\n",
|
|
" namespace = (*namespace_root, username)\n",
|
|
" preferences = runtime.store.get(namespace, \"preferences_key\")\n",
|
|
"\n",
|
|
" if not item:\n",
|
|
" logger.info(\"没有找到用户偏好\")\n",
|
|
" return {}\n",
|
|
"\n",
|
|
" logger.info(f\"用户偏好: {preferences}\")\n",
|
|
" return {\n",
|
|
" \"preferences\": preferences\n",
|
|
" }\n",
|
|
"\n",
|
|
"\n",
|
|
"def llm_node(state: OverAllState) -> OverAllState:\n",
|
|
" preference = state[\"preferences\"]\n",
|
|
" logger.info(f\"用户偏好: {preference}\")\n",
|
|
"\n",
|
|
" user_input = state[\"user_input\"]\n",
|
|
" human_prompt = f\"\"\"\n",
|
|
" 用户输入: {user_input}\n",
|
|
" 用户偏好: {preference}\n",
|
|
" \"\"\"\n",
|
|
" system_prompt = \"\"\"\n",
|
|
" 你是一个助手,你需要根据用户的输入和偏好,给出一个回答。\n",
|
|
" \"\"\"\n",
|
|
"\n",
|
|
" messages = [SystemMessage(content=system_prompt)] if not state.get(\"messages\", []) else state[\"messages\"]\n",
|
|
" res = llm.invoke(messages + [HumanMessage(content=human_prompt)])\n",
|
|
"\n",
|
|
" messages = messages + [HumanMessage(content=human_prompt), res]\n",
|
|
"\n",
|
|
" return {\n",
|
|
" \"output\": res.content,\n",
|
|
" \"messages\": messages\n",
|
|
" }"
|
|
],
|
|
"id": "12a3b5c23aae5688",
|
|
"outputs": [],
|
|
"execution_count": 3
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-08-04T11:46:46.481789Z",
|
|
"start_time": "2026-08-04T11:46:46.464391Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"from langgraph.graph import StateGraph, START, END\n",
|
|
"\n",
|
|
"builder = StateGraph(state_schema=OverAllState)\n",
|
|
"\n",
|
|
"builder.add_node(\"check_preference_node\", check_preference_node)\n",
|
|
"builder.add_node(\"llm_node\", llm_node)\n",
|
|
"\n",
|
|
"builder.add_conditional_edges(START, router, path_map=[\"check_preference_node\", \"llm_node\"], )\n",
|
|
"builder.add_edge(\"check_preference_node\", \"llm_node\")\n",
|
|
"builder.add_edge(\"llm_node\", END)"
|
|
],
|
|
"id": "3973036e6adb9466",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<langgraph.graph.state.StateGraph at 0x110ee92b0>"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 4
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-08-04T11:49:25.366389Z",
|
|
"start_time": "2026-08-04T11:49:13.660229Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"from langchain_core.runnables import RunnableConfig\n",
|
|
"\n",
|
|
"with PostgresStore.from_conn_string(os.getenv(\"LANGGRAPH_DATABASE_URL\")) as store, \\\n",
|
|
" PostgresSaver.from_conn_string(os.getenv(\"LANGGRAPH_DATABASE_URL\")) as checkpointer:\n",
|
|
" graph = builder.compile(checkpointer=checkpointer, store=store)\n",
|
|
"\n",
|
|
" from IPython.display import display\n",
|
|
"\n",
|
|
" display(graph)\n",
|
|
"\n",
|
|
" config: RunnableConfig = {\n",
|
|
" \"configurable\": {\n",
|
|
" \"thread_id\": \"77777\"\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" res = graph.invoke({\"username\": \"Alice\", \"user_input\": \"我有些无聊,跟我聊聊天\"}, config=config)\n",
|
|
"\n",
|
|
" print(\"=\" * 50)\n",
|
|
" print(res)"
|
|
],
|
|
"id": "ffeeb995bfb8780e",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<langgraph.graph.state.CompiledStateGraph object at 0x1118d8a50>"
|
|
],
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAAFNCAIAAABE6v5qAAAQAElEQVR4nOzdBXwTZxsA8Ddad6pUaIu0xQoURhlSoDjDxkaRAQMGbIwNHzpkuI0xBgz34RQ+tuFuY0iLWwVK3SVN0tj3JAchQNsVyCWX3PP/se78Lslz7z333t17fJVKRRBiGS5BiH0w7hEbYdwjNsK4R2yEcY/YCOMesRGfMMC9q0XP7ooK82QlUqVcqq5X5fI5SrmKwyMKhYrLAUSlJNBLVOoOFVfFITBI3Us4Khj9qjJWRThczcTwl6MkCu6rXs1fpUrFUU/MoYZQiyDUAgk1RIOjGcNVEaV6OIdPVHKdLeaquDyO0ILr7G4ZUNs6sK4NQSaFY8T6+zN7MhPuisQiBYS1hRVPwOdy+UQhV4fey7jnqBTQp3oRtTyOJu5VhKuJSohVCGKOOoZVml71UBjC5cA08Ff94RTkZe+LJbyIddWL4S/im0c0O4NO3MPsyheLgj4en6OQ63xRsCVKIitRKpWkRALbz7Gx59du4lC/tSNBpsA4cX9sW0bcrUK+gFO5qs3HnSo5uPGIKXv+SHr1aFZmshT2k3qtnBpGYvQznRHifv3URMgTwjtVCvnIjpiXC9HZd6/kW9rwBkzzI4jBDBr3ty8VnN2XGdLIoVWvSsR87V+RkppQPGJJVYKYynBxX5Sv2DwrYcTCqsS0k5oKeXxTdGxb6vCFVXks+LCmyEBxH3uu4MrfWcPmBRA2+W1c3IiFgVhXzECG+E2KcsiFQ5lsC3rQob/Xqh/iCGIeQ8T9tgXxDVo5EfYJqGPlGWC1edZTghiG9riPXpkitOI17uhMWKnb115ikfzqkVyCmIT2uE+JE/f42puwWK0mjtdP5RDEJPTG/cFVqVCZ7ejO6kqNpl1doO7g36NY5DMIvXGfHF9cM9ygFy/j4uI6d+5M3t3u3bunT59O6FE50ObBtQKCGIPGuE9/KoNy7qMOBo37e/fukffy3jNWRON2zgW5coIYg8b7MSGptbCka78qLCxcvXr1hQsXcnJyQkJCOnTo0K1bNxiybt06GBsWFjZ69Oi+ffueP3/+6NGjN2/ezM/Pr1Wr1pAhQ2AUTPDkyZOoqKhly5bNnj3bycnJzs7uxo0bMPzPP//ctm1bUFAQ0St3fyGPy3l4XVSjAd65yQg0xn1uutTOUUDoMXPmzPT09EmTJvn7+0OKMm/evICAgOHDh5eUlBw7duzw4cMwjUQimTp1aqNGjWBi6D1x4gTsDNHR0S4uLgKBesNgJ/niiy9CQ0Nr1qw5cOBAPz8/ako6CK05cbeKMO4Zgsa4LxErnapYEHpA8dy/f//GjRtD98iRIyMjIx0d30yoLC0td+7caWVlRY2C8n7v3r0xMTGtW7dW39EP6UfjxnBMIAZhYckT5WOqwxQ0xr1crrKw5BB6QCENCUleXl79+vXDw8ODg4NLnUwkEq1YseL69etZWVnUkNzcV/UqZc1FB66AI5Vg3DMFjee1Ko6SS9viZ8yY0adPn8uXL48ZM6ZNmzarVq2Sy9+MqrS0NEjoZTLZ3LlzYcorV668MYGFBV2Ho7epvwklXaUAelc0lvdcDldSrCT0sLe3HzRo0JdffhkbG3v69On169fDuWm/fv10pzl+/Dik+5CyQ6pDXi/pDU9eQgSWeHMmU9AY90JLXkEOLUd2qJw5cuRI165dIYMP1Xj48OGDBw/engx2DyrowcmTJ4nxiEVydxdLgpiBxjzH3plfkFNCaMDn89esWfPDDz9AYZ+dnQ2VjxD0EP0wytfXF1L5M2fOPH36tFq1atC9b98+SIEuXbp09epVOMGF5KfUZfr4+Ny5c+fff/+FilFCA1mJ0re6LUHMQGPc127sWCKlJc+xsbFZtGhRRkbG4MGD27Vrt2XLllGjRvXo0QNGNW3aFHaAcePGQbU9jIIJ1q5dC/U2O3bsmDBhQseOHTdt2gTp/tvLhNmhkmfEiBGPHz8m+pafpVTIVXUjzO25StNF73MnK8Y8iejpWquJA2G3/61LTY0XD53LuicQGIve+3Mc3QRXj+KtiCQtXly9nj1BjEFvu1G9x/utHFde2gCJONRIljrKwcEBTkxLHdWtWzdIbAg9YMlwbavUUVKptKyqT7j0W7Vq6Q+S37tSBJcyIj4z50fpTQ7tz9dun/9MqVR9Mbn0djXEYnFZ1YswSlsV8wZra+u3r87qC5wKQ+1nqaMKCgqggqjUUa6urtS9D29b/UNclZp27fu7EcQYhniufOW4uM6DvHxDrAj7nNqZ+Ti2kIXPFjOcIZ6vjfjU7fDGFMJCCnL/aj4GPQMZIu5Dwu0CatlumsG6x6tXT45v2cuDIOYxXLtRj64VndqdMXwhWwq/38Y++ex7XzdfIUHMY9B2Ao9szki8X9S2r0dAbWtivi4eyrl5Jqf9F55V6+Hd9gxl6HZhoVLv7P50Bxdhnx98iNnJeFpyeH1KSYlq0HR/IRtP402GcdoB37XkeVaKxN5JGBrhVLupOVy9v3Qo98GNPEmR0reGTeevMKdnOmO+92HfLymZqRKVQmVpzbOy41vZ8SyEXJlcoZ1A+9oFLpco1W8r4aqUSu0oDvWWBqXm5PzVe0rUL3xQaubSnR36qIGvJqZO6WGxnBdfgvq9KlyOUqHUzki9LYILvbAyBTW75n0QfC6PcEX5MolIIRYpSqRKvpBTOdC68xCMeNNgzLinJD8uuXMlNzdNJhbJFXKluFjO57+4iqwObZVuh+adPC9HUVSaV/2o331CDdf893Iu9dtPqIk5sMsoNNO8jHsu9aIgle5kKk3c665XPYqjec3Ki1Vo1gXD5QqppZWVrb2gkrewcTsXW2e8t96UGD/udXXr1m3MmDHNmzcnjLdu3brU1NRp06YRZIIYEfe3b99OT0+PjIwkJoW6bWH//v3t2rWzscGqG1Ni/LbZHz58uHTp0oYNGxJTQ92rExwc3LFjR4lEQpDpMGZ5v3fv3p49e6alpXl4mPzpoEgkgkOWWCyuWbMmQYxntPJ+5syZSUlJ0GEGQU80j4BVrlx50aJFZ8+eJYjxDF3el5SUnDlzpm3btnBS6OnpSczOvXv3QkJCLl++HB4eThBTGbS8z8/Pj4iI8PFRX6k1y6AHEPREc6Y+btw4gpjKUO91i4319vaGdVWqxJbHjuAj161bF87aa9SoQRDDGKK8P3To0PLlyx0dHdkT9ACCnqgvFXPbt2+fnZ1NEJPQW95funSpSZMmt27dqlOnDmGrrKys58+fh4aGQp0PVvMzBF3lPexOvXv3hqo96GZz0AM4ylFtWnXv3v3UqVMEMYD+y3upVAp1NVCpl5iYWK1aNYJ0mNMlC5Om5/IeavFatWplZ2cnEAgw6N8GQQ9/odSfN28eQcajt7h/9OgR/C0qKrp48aKLiwtBZevTpw9U8kDSDxk/Qcagn7j/+eeft23bBh2NGjUiqAJ69OgBFbtisXjYsGFlNY+F6POh+X18fHxAQMCJEydM7m5Khrh+/Tpc5Bo4cCBBBvT+5T2UUlFRUZDYQDcG/Xtr0KABFfTjx4+/fPkyQQbxPuW9TCaD01YoqOBSVGBgIEH6UFBQMGfOnAULFsjlr544QzR557iHuohZs2adOXOGIHrAN5ySkvLGO4uQfr1DngO18kRz9RGDnlZQEQxf8vnz5wmiTYXKe5hmxowZcNn1008/Jcgg4MTJ1tZ28eLFeF8nHf67vIe6tidPnkAFJQa9IUHQE81dzUOHDiVI38or75OTk8eOHbt27Vq4/kqQkVAtmezfvz8sLMzX15cgfSivvD927Njs2bMx6I2Lo2kqKDw8fNSoUXg/s76UXt7funULhlN3kCPmyMvLo+9FL6xSenl/5cqVf/75hyCGOX369Nuvp0bvofTrIyy/Y56xoDCCtDMoKIigD8OsdgJR+eA47K1B0IfB/B6xEeb3puTAgQOY3+sF5vemBPN7fcH83pRgfq8vmN8jNsL83pRgfq8vmN+bEszv9QXze1OC+b2+YH6P2Ajze1OC+b2+YH5vSjC/1xfM700J5vf6gvk9YqPS8xwoV8jLNxcgo2vbtq2FhQWHwxGJREKhkM/nQzf83b9/P0HvBfN7E+Dg4JCQkKA7RKlU9u7dm6D3VXp9TmMNgpgBQhzKe90hPj4+2LDUhyg97iG/j42NJYgZevToUblyZd0hzZo1M9cXQhoG1t+bhl69emmLfCjso6KiCPoApcd9HQ2CGKN79+7axnPCw8OxKvMDYX5vGrhcLmQ7UORDwtO3b1+CPkzp9TlGqb+XilU5qVJRoZyg0oRWax/sGxscHCzOcniSVUTQW3g8jkMlgZO7UNPWVnlKv261Zs0a+GvIlhnP7s+Mvy2ycxJYWvMIQu/F2oGfEldsbcur3dShWqhtOVMyov7+701pLl5WPUe5EoQ+GJTkp/5IhSK/at0yQ9/49+cc357u7GlVvYE9QUh/jm9Nrt/KqUqIdaljjVx/n5EkhbQegx7pXfgn7rHn8soaa+T7c7JSpAILPb87GiFg68hPjhMr5Coev5STXCPn96J8uYObkCBEAw8/q/wsmbNHKQFWetwbrPJeqSBymZIgRIPiQllZFZp4fw5iI7z/HrER3n+P2MjI+T1CRoH5PWIjzO8RG2F+j9gI83vERpjfIzbC/B6xEeb3iI3M5/naz3p1WLf+N6IP8fFPWrYOu3XrJjG4CxfPfDW0D6z97t1bhH2+HPz5sl/mE/phfs8sf+zcrCKqpUtW+/kFEEQbzO+ZpbhYVLdO/XqhYQTRyfTye4VCsWfv9s1b1E++hwTXHjhgWO3aodQoPl+w/8Cu1b8vEwqFtWqFTpo4y8HeAYbL5fL1G1Ze+edCRkYaDO/e9fPGjZtSsxQUFvz++y9//X3QwcExrMFHXw0Z6e7u8cYat2xdt+OPjT8vXRMcVLOsrXr0+MGw4f1mzlgIGwZpkotLpZYRbUd8MwZG7du/E2YfPWrS9BkTunX7fOSIcaVuDwxs006dWyYmxh88tHfF8g01a9Y5cvR/h/63LyHhib9/1VYt237aozdHc2ctLIrH47m7e+7ctQVW2rxZK8iLYNUPHtx1cHQKb9xsQP+hNjY2MOWB6N1bt61btnTN9JkTYMkBAVU/69m3fbtPqM2+fPn8L78uyMzMqBpYHbatQ/su1PCy1luObj0ivxw4PD8/DzbDysqqYVj4tyPGwfeg/Q6PHjuclZXh5uYRWrcBfBtcLpf6sPMXTH/6LCE0NKx/vyG6C8zJyV65aumdu7ESiaRhw3AY6+PjR/TE9PL7NWt/PXhwz6yZi6dOnuPq6v7DpJHPniVSo86eOyESFS2Y/+v4cT/euROzceMqavjyXxfu3beje7deO7b/r0Xz1hABZ8+dJJr9YeKk77KyMyGvGPnt+IzM9ImTv4OBuqs7cfLIxk2rp02ZW07QAz5PXYJs27Z+9k9Lj/59acQ3Yw8e2vPnX9EwEHZCKMUPHdoL+yGEeFnbw+fzT5+8VqVKvg0R3QAAEABJREFUQNcuPaEDgh5WvWDhzOrVgnZsOzRk8AiYZcXKJdTqBAJBfMIT+Dfnp6V1atd7npw0bsI3Eqlkxa8bf5q5OD7+8egxQ6kPAlMWFRXCGsePnXbqxL8tmkcuXDQrPT2NaIJ+2vRxgweNmD9vedOmLWE4rJH6yGWttxywol27tkA0Rx84uXnjvtt3YjZt/p0aBV9g9MHdXw8btXfP0cGDvjlz9jiUXDBcJpPBzwc/4qYNe4d99R3sw9nZWdQsULqNHjssJvb66FGTN6zb5eTo/M2IAckpz4meMKj9nIrIL8jfvWfbqO8nNgxT75YfffQxhFR2TpavbxXotba2+aLfYGrKi5fO3rqtPjGVSqVQ0vTpPbDLJ59Cb8cOXe/cid2ydS0EHJS49+/f2bxxLzU7FCewcChmtKuLibm+YOGMYUO/+/jjFhXZvGbNWnl6eEFHy4g2J07+ffLkkU4du0FJCSVWVNSA+vUalr89byztr7+i69SpBx8Wup2cnL8cMHzh4ln9+gyCblhmWlrK6pVbLS0tYWz0wT0CvgAiHo5a0Dtu7LTefT+BU+SIFpFEE15Q/IeE1Ibudm07QxQ+efIQDmvQAQeKNpEdYDh8n1BkwJdZ/nrL//iVK/v06ztI3WVrB+X9o0f3obOwqBBOWr4ePrpp0wjohU2C3XLb9vU9ukedO38qIyP9l5/XUcfY70ZOgMoJalG3b8dAcbZk8SrqS/t6+Cj4Qfft2wHTEH0ovbyPiYlh5nltYkIc/A16WfRCGTlr5iJtNly7Vqh2Sgd7xxKpFDrg2y8pKYGfQTsKjrOQisAuFBf32Nramgp6ACXc1Mmz3dzcqd5nSYlTfxzTulX7qF79ScVUq1pD213Zyyfxaby2N6jGi20uZ3t0F6VUKuEQrztZvXoNYSC1MwM/X38q6MHdu7HwnVBBDzw8PL28vLVTEp1vzM5O/Qg/HAFgUXHxj4N0DmLDh30Pu+J/rrcc1asHa7thRbAjQUdS0lPY8YKDa+lOVlRUlJycBP/gI8DWUsMhKdJ++XC4gAMIFfQA9nP4lmJv3SB6wi/jA1QnjAQ/GPy1tLAsdSzsBtpubT5KzTLy+8FvTJybkw0/jEUZiwK/LF8AqYKzswupMEtLK51uS+qHp0C285/bQ52NUGDfgHCB0wD499pkuTkvFqjTMjgs88HDe1D7+cYCtd1vZ+dwCIJofvvj/+d6y1HqOUBOjjp10f3JrKzUbXuIxcUFBflUt5Z2e+ATwWa88YkcHZ2InpjY/Tk2NuqWgKjDcQW5VFI3RzV2zBQ4CusOhxMsyIvg24efnzrHegOkBFAcLlk6JyyssbbgKR8V0xQILN3doCLbo9sLuw0ci9q26dT89fzHy7OUFmGdXSrByT2cVuoOhCMeKZuFhQV8at098z3WWxHUTyaWiLVDqJ/P2bmSvb0DfP+6E2t/WSj74eR4zuyfdcfyuHprS8/E8vuqVWtAoQ7HO+q4CRs5acqoli3atGvXuaxZvCv7Ui1oa9MhKLpgRvh1g2qEQHQ+fHSfOmeFhHLpsrkjR4ynyi347SHN/fffy3PmTt2wfrduYVwWOA+jslgAOXSAf9V32p43pgwMrA7JsXYyKP9SU5O1mcBrUwZUO3b8T6gA1e7AUE/i7e1LygbVQTVqhEA6oR2ydt0KKOyhDqri660IWBqsCzIxbcUAnFPZ2dq5urp5uHvC9w85HtQyEfU39igrK1M7l1gshrKgsteL/S0lNdnRQW/lvYm1f29ra9smsiPU5/x95NDNmGu/rlh0/fo/urnj2yCeoK4TThzhVAl+V6g5gaoP6qIgFORQ6K5Zs/z8hdP/XrsCAzMz0v38/HVnnzB+OuxpUNdGKuDfa5f/uXqJaC67wuZFRnZ4p+15w1eDv7148QzUscIRCSae9dOkMeOGwyxvT9mzZ1+YBmpdIIwgn/59zfJBQ3pBbQ8pV9dPesJevWv3VthUqDmFs09//8B3Wm9F2NvZw0+2bfuGS5fOQa3xsWN/HojeBRsMu2iTJi0g/Vu8dDZsNkT8rNmT7F8WLg3qN2rUqMnixT9B1RPUjcKJ+/Cvvzhy5BDRE9Orv//+ux8gSiD9gKouqHWeNWOR9sS0LHBiCuXHjp2bbty4CofdmiF1xo6dSjTnA4sXrpy34Mcfp48n6nblm82b+4vuSQJRH6Ztpk+b/+13g+DKQI/uvcpfUZ+ogevX/wZ1o5pmu6OgMuedtucNkLqsWb19+46NEMcSiRgmg0rSN174Q4HYWr9u186dm4d93Q+OWpCejR83DU7Ty91YAgfJgsJ8qG4XiUSQVwz9aiRULr3TeisIanXhC/lpzmQ4X4IT7j69v+wdNYBoSrG5c5ZBudO5SwvIr4Z+9R1UgmnnmjdnGVxDgJ3h3r3bUNUGhQh8pURPjNw+5j9/58hkpG4LZ2Li4GA9+KuoX35eC6kRQcxwcOXTToM8ndxLaTcK789BbIT351TUjj82/fHHplJH+VUJGDNqMjF3n3SJKGvUDz/MaPpxBDEdeP99RX3yyactW7YtdRSfx4faidMnrxGztmbNjrJGOTmaWKaKz9dWFFS9wT/CYtQtGOYB83vERpjfIzbC/B6xEeb3iI0wv0dshPk9YiPM7xEbYX6P2Ajze8RGRs7vLWy4qnd4dgqhd2DvIiz15bWkrPK+jgahn2MlYdrTYoKQvsmkytQEsb2LoNSxRs7vfapbXT2aQ1SEcAhCepSeKAkKsy9rrJHzezgMNe7gfGxbCkFIf/IzZf/8ndHi00plTWD8+nvfIGu+kLt7SULdFi5ObkJLW709M4/Yhsfl5KRLRXnye1dz+00ur1HB0p8zpOLekLWZxYWKG6dzM55JRflygspQXCwWqPEJKg31SKF3VavQCMfypzTy87XonUycODFSg6APg/X3iI3w/hzERnh/DmIjvD8HsRHm94iNML9HbIT5PWIjzO8RG2F+j9gI83vERpjfIzbC/B6xEeb3iI0wv0dshPk9YiPM7xEbYX6P2Ajze8RGmN8jNsL8HrER5veIjTC/R2yE+T1iozLze6lUWlxcbG1tTRAzxMXFPX/+vFatWgR9MG5ZIwQCQfv27eG7JogBduzYMXny5BUrVnh4eBD0wcqMey6Xe+7cuTt37hBkbN9//31aWtquXbscHR0J0gdu+aO7du0Kf8eMGZOVlUWQwV2/fh1yzl69esFPQJD+VKh9zPT09IULFy5ZsoQgA1q5ciXUJsNfHg/biNYzbkUmcnd3p4I+OjqaIPoVFRUNGDDA0tLy999/x6CnQ4XiXiskJCQiIgKbUKbViRMnOnfuPGHChEGDBhFEj3duBxyKIgsLi2fPngUGBhKkb3PmzCksLJw/fz5BdHq38h7Y2tpCFadCoRg2bBgW/HqUlJTUpUsXOKJi0BvA+7/3AaoalEolXNmF4p+gD7N3797t27f/9ttvXl5eBNHvQ993kpOTs3nz5tGjRxP0vsaPH+/i4jJx4kSCDOWd85w3ODs7u7m5HThwgKB3d+vWrWbNmnXs2BGD3sD0834rKPVhBzh16lSrVq0Iqpi1a9devnwZchsrKyuCDOtDy3sKBD38jYmJ2bZtG0H/RSqVDhkyBM6ONmzYgEFvFHp+n+HVq1cbNWqUlpaGt0+V5dy5c5MmTYJiPjQ0lCAj0fObUCHo4e+ePXtcXV2joqIIet2iRYtSU1MvXrxIkFHpJ895w8iRI3NzcwnSkZ6e3rNnTz8/v6VLlxJkbPS+t3nXrl0BAQENGzYk7Hbo0KE1a9ZAbgNxTxAD0FLea33++edw6qZ7D3OnTp06d+5sxo+znDx5smXLlrpDpkyZEhsbe/jwYQx65qA37jkczqpVq3g8XkJCQmFhIQxJ1di4cSMxU1u2bCkoKGjQoAF0P3jwIDIyskWLFtOmTSOISfR8XlsqJycnqK3r0KFDcXExl6ve065duwYxERQURMzL0aNHk5KSYG+H7vDw8MDAwH379jk4OBDEMPSW91qWlpZQ6isUCqo3MzMTrtoQs7N58+a8vDyqWyaT5efnY9Azk4HivkuXLtqAIJr8B1Le27dvEzNy4MCBZ8+eUQc0SnJyMkGMZKC4h4CAy5Pa8h5ARaeZFflwrRoSOW0vVVEWFhZGEPMYIr/Py5B99/VkOLVNSUmRSCQQ/RAfIpEo7kH6qaNX69WrR0wf1FTmZcqd7XxtbW0hqePz+TY2Np6enlWqVCnIltu7GOJ7RhVHY/29uEhx4WDW45gi3yCb3DQpNVClKQhfUCoFAgExFzK5nPMSV3NqS3FwFaYliqvXt4vo6UoQM9AV90W5ij8WP43sW9nJXcjjcwi7lUiU6U8l//yV8cUUP76A7d8GE9AS9/Azb5yZ2GdiAEE6CrJlx7cmD5xehSBjoyXuT+/J9K5m6+GPd9i+6dH1AqJSNmiNzZ4ZGS31OYl3RfYu5pO465GNA//5k2KCjE3/9Qwyqcq+ktDaHmswSuHoJuQQzO+Nj4bo5JDM52KCSqNSktwMKUHGZqDrVggxCsY9YiOMe8RGGPeIjTDuERth3CM2wrhHbIRxj9gI4x6xEcY9YiOMe8RGjIj7fft3Rrb9iOru1iNyy9Z1hDHy8nJbtg47feY4QWYEy3vERhj3iI2Ye5f8gejdW7etWzh/xZRpo7Ozs/z8/MeOngJZx7z5P8oV8oZh4WNGT3Z0dCpnCQkJcYOG9Fr52+YdOzZeuHjG1dWtZUTboV+NpN6EXFxcvHTZ3JiYa4WFBVX8Ajp06Nqt62fUjCdPHd24cVVBYUGTJs17ffaF7jLv3r21ecuaBw/uOjg6hTduNqD/UBsbG4JMDXPLe4FAUFRUuGnL74sXrvzfwTMymWzu/B//PnJo3dqd27cevH0nZtfurf+5BPi7ZOns1q3bHztyecqk2bv3bNNm6hMnf5eS8vynWUt27/yrefPWvyxfcP/BXRgeH/9kztypbdt23rY1ul3bzr+uWKRd4PPkpHETvpFIJSt+3fjTzMXx8Y9Hjxkql8sJMjWMznMg1qFA9fHxs7Ky+qjRx6mpyaNHTXJ393B2dgmt2yAu7lFFFtKieWREi0jYB+rWre/lWfnRo/sw8Mo/F2/fjhk/dlpwUE0HB8e+fb6sXTsUCnIYdfDQHnc3j/5fDLG3s68XGtapU3ftok6c+FvAF0DE+/pWqVIlYNzYaY+fPIQjCUGmhun5PWQgVIe1tbWTkzNEPNVrZWVdJCqqyBKqVw/Wdtva2sExhKhToCeWlpb+/q9euV69WvDDh/eIunG/pCo6w4OCamq7796NDdLsJ1Svh4enl5f3rds3CTI1TH8KlqPTAJNud8XpNlipBScMlpavNfcA+5VYrH7iu6Ag39vbVzvcSmcy2GcePLwH1Zq6M+bmZBNkalj69DecjEokrz0ELCoWVXJRt2dmb+8AGbx2eHGxSNvt7FIJ0qEvBw7XndHBHhsFMT0sjfsa1UMkEhXsJdAAAAqzSURBVAlk59Wq1qCG3L9/h0pv3N09L10+p1QqqQPF5SvntXMFBlQ7dvzPunXqa48hiYnxugcHZCpYWn/fqFETSM2XLp0DeUtOTvb6DSsh7qkqy4iINlBbCtU4KpXqZsy16Ojd2rl69uwL+8OKlUtgn0lKevr7muVQTxqf8IQgU8PSuOfz+bNnLYGU5psRA/r063L9xtWfZi2GHAZGNQxrPHzY91evXmoV2XDBwhkTf5hJXjbqDTU869ftgox/2Nf9+g/8NCb2+vhx06pXM7e3trCB/tsJlJWo1v8Y33dSIEFvKcqTH9vyfMC0KgQZFd6ngNjItM9r4drT5CmjyhoLF1y1de0I6TLtuIeMfM2aHWWNxaBHZTH5ekxPDy+C0DvC/B6xEcY9YiOMe8RGGPeIjTDuERth3CM2wrhHbIRxj9gI4x6xkf6v13II8fDFNzaXgUNcPC0IMjb9l/d8ISc/p6QwV0bQW3LT8CWejEBLnhNYyzYvo4Sgt0Bx4FPDmiBjoyXum3ardGZ3qkyq5ydaTN2zB6LEu4V1mzkQZGz6f96KIpep1k6Jb9HTw6GS0N5FQNgtN70kK0USF1vw2Xfe5H0aQ0F6RlfcUy4cykq4I7J1FKQliomRaD7g+zW9ox9u3pZSiaJaqF3Dtk4EMQO9cU+Ry9WrIUayaNGiwMDAHj16ECPhcjkcHkGMYojnTvjqlRivvOUqOTwVT4DpBXoFr1shNsK4R2yEcY/YCOMesRHGPWIjjHvERhj3iI0w7hEbYdwjNsK4R2yEcY/YCOMesRHGPWIjjHvERhj3iI0w7hEbYdwjNsK4R2yEcY/YCOMesRHGPWIjjHvERib//tr/5OTkZG2NTVKi15h/3BcUFBQVFRGEdJh/3PP5fLlcThDSgXGP2AjjHrGR+cc9j8fDuEdvMP96TCzv0dswz0FsZP5xLxAIZDJ8yRx6DZb3iI0w7hEbYdwjNsK4R2yEcY/YCOMesRHGPWIjjHvERhj3iI0M8b5yo+jSpcvz58+hAz4gl8ulOsDNmzcJYj2zvS+tb9++tra2EPE8Ho+jAd2BgYEEITOO+169evn5+ekOgbiHgwBByLzvQ46KirKxsdH2wm7Qs2dPgpB5x32nTp38/f2pbshz2rdvjw0rIIqZP3cCWb6DgwN0eHt7d+/enSCkYeZx36ZNm4CAAOho3bq1s7MzQUiDEfWY4nxy9kBaamKJVCyXlSjUWQlUO2pHQxcH/qg48L+Xvdr/kdcnK33I2x3qak3Nav7ba8t9MQuHcDkcW0dB5arWraMqEWRqjBz3N0/l3ziTKxEpeHye0FZo42Bp7SS0tLFU8ZQ8BdFEJmwgJOfwByJQ00sN1AQjdMNwruYjvIpt2D9UL3YbaogSKjE10yi5hKt8seqXy3m1NKXm8AdD1Et9+a0oNbGu7SU8nkKhkBZKC7LFkoISqUiqUhAbB36rXh6+QRYEmQijxX2JmGydmyCVqGycrP3quRKTpZCpEm+mifMl9i6C/lP8CDIFxon7kzuz7l/Ns3e18Q11I+Yi7p8UcaG0bR/P6g1sCGI2I8T9gZUp6QnSoFa+xOwU50kTr6V93M2lbjMHghjM0HH/18b0xHuikFbmnA/cPZHYpEulei0w9JnLoHEfvTot85m0WjNvYu7un3n6URuX+pEY+gxluPr7W+cKkp+I2BD0IDjC79JfmcQ8b3U1B4aL+/OHMn1qexDWcPKwWzs1kSBGMlDc7/slRWjJt3ezJKxRuXYluUx1bl82QcxjoLhPe1bsX9+LsIyLt+O9q/kEMY8h4v7w2lS+kMe3Yui9QDG3T4yb9lGRKJfom1s1e6WSxJwuIIgwiyFiMe2pxM7VjrCShbUg9oL+9yj0gQwR95JihVewE2Elx8oOxUVKghiG9vYU/j2Wx6nYfY/vJ/HZrWOn1yU9v2dr4xRco2nblkMsLdW3CVy8suf42Q1fD1q1Zeek9Ix4T/eqzZv0bli/MzXX4SO/Xov9y0JoXa9OO7dKNF45dvGxSb2fISlQWtrjq4IZhPYfI+2pmCegay1Z2Um/bxopk0m/HbpuQJ8FqemPV234WqFQtxrC4wvE4sLoPxd/3m3yollX6tRqtTt6dm5eGoy6dHXfpat7e3Qa//2wjS5OXsdPrye04pD7NwoJYhLa416UL+dy6Srvb8Qe4fMEA3svcHet4uEW8FnXKcmpD+/cP0uNVShkbVoO8fOpDQecsNBOcGU6OfURDL9weXedmq1hT7C2tocjQNWAMEInDpeTkyYliEloj3u5TKmiLe4hyfHxDrGxcaR6nZ08XZy9E57GaCfwrVyT6rC2soe/YkkhRH9WTpK7m792Gm+vIEIniHuFDK/cMgvt+T2PD9k9XSd2YklRUvI9qIXUHVhQ+OpS0dunFhKpSKlUWFi8esBcKLQiNOOaf7N0Job2H8TaVlCQQ9dR3s7Oxd8vtF2roboDbWzKuxvM0sKGy+XJZBLtEGlJMaETHO0cnVl0odok0B73Lp4WKQliQg8v92rXY/8KqFKPagkQpGXEu7qUVz8DRwAnR8/EZ7dbfPxiyP2HFwmdFHKlTxDthxT0TmjP72s3cVAq6MpuoWpSqVQe+vvnkhJJRubTw0dXLFnRJzX9Sflz1a0VefveabhMC92nzm95+vwOoU1hlhTye3c/IUFMQnvcO7jx+HxOZgIt1+qhQmbctzuEAqtlqwcsXP55fOKNz7pN+c/z1MgWX37UoGv0X0vgxAAK+y4dRhFNq7GEBjlJ+Va2PIIYxhDPnexZ9jw3W1G9CSvuvH/Dg7PPatS3bfm5CT84b5YMcRExsre7rJiNb04uyBArFUoMegYyRAWbk7vA1lGY8G+af8PSnzvJy09fvKJPqaOsLGzF0qJSR3m4Bnw7dC3Rn6lzWpc1Cq4B83ilfFd+3rW+GvBLWXOlPcr2CsAWOZnIQM/XlpSQtZOe1Iz0L3UsRFV+QUYZM0qEwtIrAblcvqODPpshyclNKWtUiUwqFJTSLBSfJ7S3L729tNzU4tQHmd8sDCCIeQx0QUUoJFVq2j48m1Sjhc/bY6EodXYy/lMp+t2G1HsZzbuZT+tAZsZwNwl2GuQBBXfijTTCAo8uJLn7WdVqytKnDpjPoDfHfjmjSklxyePLycSsPTjzzM6J9+lI1j1XaUKM0F7axhlPlSpuYGPzDAuouPSuZtV5MItajjBFxmkfc8vsZ6JCuU9tT1sX87mQmRmXnx6f4+lvjSU98xmtPeQL0dmx53OFlgKvYFcbF9NuQTvzaVF2fLZSqWrbz7NqKFZcmgAjt3+/f3lyWpKEw+FY2lk4uNo6+9kSE6GUk8zEPFFWsURUAr1+wbadBrsTZCIY8b6Ts3uzEu+JigrkKoWKvHyhiPr9DS9xXr7W4cW2clSvjeVQd9dwiO40b3UTde/rLy+hJnixNNWb71l58QaJ15fDU7+DQqGEWdSvo7B3EQY3dGjYFtvBNDEMe1+5nMTdFeVly0rESpVS52kVzqv3kxDNE0wq5avN5nK5KuhXvZryxUycV59O8/wJBLHm1SeaeV8M0b7xRDMjl6MOdJXm7SpQ16WiXn5CCHnx0hUVh8+xthHYVxL4h+CtxSaMYXGPkEFg4xaIjTDuERth3CM2wrhHbIRxj9gI4x6x0f8BAAD///GYCYMAAAAGSURBVAMASDMqTN7ugeYAAAAASUVORK5CYII="
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\u001B[32m2026-08-04 19:49:16.090\u001B[0m | \u001B[1mINFO \u001B[0m | \u001B[36m__main__\u001B[0m:\u001B[36mllm_node\u001B[0m:\u001B[36m29\u001B[0m - \u001B[1m用户偏好: Item(namespace=['users', 'Alice'], key='preferences_key', value={'food': '紫光园奶皮子酸奶', 'course': '计算机组成原理', 'sports': '跑步'}, created_at='2026-08-04T10:45:38.753947+00:00', updated_at='2026-08-04T11:46:45.945722+00:00')\u001B[0m\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"==================================================\n",
|
|
"{'messages': [SystemMessage(content='\\n 你是一个助手,你需要根据用户的输入和偏好,给出一个回答。\\n ', additional_kwargs={}, response_metadata={}, id='7a32b0e6-ab68-4bac-8092-c700e31f95ee'), HumanMessage(content=\"\\n 用户输入: 我有些无聊,跟我聊聊天\\n 用户偏好: Item(namespace=['users', 'Alice'], key='preferences_key', value={'food': '紫光园奶皮子酸奶', 'course': '计算机组成原理', 'sports': '跑步'}, created_at='2026-08-04T10:45:38.753947+00:00', updated_at='2026-08-04T11:46:45.945722+00:00')\\n \", additional_kwargs={}, response_metadata={}, id='78e7f212-2f10-482e-a498-8f0c4cff4fd6'), AIMessage(content='嗨 Alice,无聊的时候找个人随便聊聊最解压啦!既然咱们正好碰上,我先悄悄用你的小偏好来抛几个话题接风:\\n\\n🥛 你超爱的**紫光园奶皮子酸奶**,我想象中那种厚厚的奶皮裹着浓稠酸奶,勺子一挖直接“哗啦”掉下来的感觉肯定超治愈~你是习惯把它当下午茶解馋,还是运动后必来一杯补充能量呀?\\n\\n💻 看你最近在学**《计算机组成原理》**,这可是门既硬核又充满逻辑美感的课!不知道你现在进度到哪了?是卡在流水线的冒险冲突上,还是在琢磨 Cache 的映射方式?要是碰到什么让人头秃的考点,随时吐吐槽,我给你递虚拟纸巾~\\n\\n🏃\\u200d♀️ 还有你平时坚持**跑步**的习惯真的很棒!最近天气慢慢回暖/转凉(根据当前实际气候可微调),你更喜欢去操场听歌绕圈,还是偏爱城市步道或公园林荫道?跑完步喝上那杯奶皮子酸奶,算不算一天的完美收官?\\n\\n你可以随便挑一个最想聊的方向开头,或者咱们就纯闲聊、分享点最近遇到的趣事、电影、甚至天马行空的脑洞也行。我在这儿,你说哪儿我接哪儿~✨', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 1379, 'prompt_tokens': 157, 'total_tokens': 1536, 'completion_tokens_details': {'accepted_prediction_tokens': None, 'audio_tokens': None, 'reasoning_tokens': 1102, 'rejected_prediction_tokens': None, 'text_tokens': 1379}, 'prompt_tokens_details': None}, 'model_provider': 'openai', 'model_name': 'qwen3.6-flash', 'system_fingerprint': None, 'id': 'chatcmpl-6737d989-2290-98db-a5fb-5eb527bd05db', 'finish_reason': 'stop', 'logprobs': None}, id='lc_run--019fcc9a-6dab-74a3-9bab-4400bf2ddce6-0', tool_calls=[], invalid_tool_calls=[], usage_metadata={'input_tokens': 157, 'output_tokens': 1379, 'total_tokens': 1536, 'input_token_details': {}, 'output_token_details': {'reasoning': 1102}}), HumanMessage(content=\"\\n 用户输入: 我有些无聊,跟我聊聊天\\n 用户偏好: Item(namespace=['users', 'Alice'], key='preferences_key', value={'food': '紫光园奶皮子酸奶', 'course': '计算机组成原理', 'sports': '跑步'}, created_at='2026-08-04T10:45:38.753947+00:00', updated_at='2026-08-04T11:46:45.945722+00:00')\\n \", additional_kwargs={}, response_metadata={}, id='5adab8fb-211a-4591-ba35-a8106c72d860'), AIMessage(content='嗨 Alice,无聊的时候随便扯聊天确实最解压啦~看你平时的喜好,我先悄悄用你的“舒适区”抛几个小话头,你看哪个顺眼咱们就从哪儿开始:\\n\\n🥛 **关于那口奶皮子**:紫光园的奶皮子酸奶是不是属于“挖一勺能听见奶皮滑落声”的快乐?你是习惯把它当成学习/运动后的专属犒赏,还是闲时随手来一杯的日常小确幸?有没有试过加水果或麦片自己DIY?\\n\\n💻 **关于《计算机组成原理》**:这门课可是出了名的“逻辑密度高+抽象程度强”,你现在进度到哪一章了?是卡在数据通路的设计上,还是在琢磨Cache的命中率优化?要是觉得脑细胞不够用了,随时吐吐槽,我给你递虚拟咖啡和橡皮擦~\\n\\n🏃\\u200d♀️ **关于跑步**:跑步其实是很好的“无聊克星”之一。你平时更偏爱操场绕圈听播客,还是城市步道看风景?跑完步配上那杯奶皮子酸奶,算不算一套完美的“身心重启套餐”?最近有定什么小目标吗,比如连续打卡7天、尝试间歇跑之类的?\\n\\n你可以挑一个最想接的话茬随口聊聊,或者完全抛开这些,跟我说说最近刷到的有趣视频、纠结的小选择、甚至天马行空的白日梦都行。我在这儿,你说哪儿我接哪儿~✨', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 1013, 'prompt_tokens': 567, 'total_tokens': 1580, 'completion_tokens_details': {'accepted_prediction_tokens': None, 'audio_tokens': None, 'reasoning_tokens': 708, 'rejected_prediction_tokens': None, 'text_tokens': 1013}, 'prompt_tokens_details': None}, 'model_provider': 'openai', 'model_name': 'qwen3.6-flash', 'system_fingerprint': None, 'id': 'chatcmpl-a24f98e8-a2f9-99c0-a76b-9024f9c1c3e4', 'finish_reason': 'stop', 'logprobs': None}, id='lc_run--019fcc9b-46bb-7d50-b20f-73b8f4cfe0ab-0', tool_calls=[], invalid_tool_calls=[], usage_metadata={'input_tokens': 567, 'output_tokens': 1013, 'total_tokens': 1580, 'input_token_details': {}, 'output_token_details': {'reasoning': 708}})], 'username': 'Alice', 'user_input': '我有些无聊,跟我聊聊天', 'output': '嗨 Alice,无聊的时候随便扯聊天确实最解压啦~看你平时的喜好,我先悄悄用你的“舒适区”抛几个小话头,你看哪个顺眼咱们就从哪儿开始:\\n\\n🥛 **关于那口奶皮子**:紫光园的奶皮子酸奶是不是属于“挖一勺能听见奶皮滑落声”的快乐?你是习惯把它当成学习/运动后的专属犒赏,还是闲时随手来一杯的日常小确幸?有没有试过加水果或麦片自己DIY?\\n\\n💻 **关于《计算机组成原理》**:这门课可是出了名的“逻辑密度高+抽象程度强”,你现在进度到哪一章了?是卡在数据通路的设计上,还是在琢磨Cache的命中率优化?要是觉得脑细胞不够用了,随时吐吐槽,我给你递虚拟咖啡和橡皮擦~\\n\\n🏃\\u200d♀️ **关于跑步**:跑步其实是很好的“无聊克星”之一。你平时更偏爱操场绕圈听播客,还是城市步道看风景?跑完步配上那杯奶皮子酸奶,算不算一套完美的“身心重启套餐”?最近有定什么小目标吗,比如连续打卡7天、尝试间歇跑之类的?\\n\\n你可以挑一个最想接的话茬随口聊聊,或者完全抛开这些,跟我说说最近刷到的有趣视频、纠结的小选择、甚至天马行空的白日梦都行。我在这儿,你说哪儿我接哪儿~✨', 'preferences': Item(namespace=['users', 'Alice'], key='preferences_key', value={'food': '紫光园奶皮子酸奶', 'course': '计算机组成原理', 'sports': '跑步'}, created_at='2026-08-04T10:45:38.753947+00:00', updated_at='2026-08-04T11:46:45.945722+00:00')}\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 7
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 2
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython2",
|
|
"version": "2.7.6"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|