diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b3b8fdf --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.env +.idea +.venv diff --git a/pyproject.toml b/pyproject.toml index 0e1ae07..095a451 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,5 +7,8 @@ requires-python = ">=3.12" dependencies = [ "agno>=1.2.6", "anthropic>=0.49.0", + "ipywidgets>=8.1.5", "notebook>=7.3.3", + "openai>=1.69.0", + "python-dotenv>=1.1.0", ] diff --git a/uv.lock b/uv.lock index bc0d3cc..9d56c26 100644 --- a/uv.lock +++ b/uv.lock @@ -32,14 +32,20 @@ source = { virtual = "." } dependencies = [ { name = "agno" }, { name = "anthropic" }, + { name = "ipywidgets" }, { name = "notebook" }, + { name = "openai" }, + { name = "python-dotenv" }, ] [package.metadata] requires-dist = [ { name = "agno", specifier = ">=1.2.6" }, { name = "anthropic", specifier = ">=0.49.0" }, + { name = "ipywidgets", specifier = ">=8.1.5" }, { name = "notebook", specifier = ">=7.3.3" }, + { name = "openai", specifier = ">=1.69.0" }, + { name = "python-dotenv", specifier = ">=1.1.0" }, ] [[package]] @@ -521,6 +527,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, ] +[[package]] +name = "ipywidgets" +version = "8.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "comm" }, + { name = "ipython" }, + { name = "jupyterlab-widgets" }, + { name = "traitlets" }, + { name = "widgetsnbextension" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/4c/dab2a281b07596a5fc220d49827fe6c794c66f1493d7a74f1df0640f2cc5/ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17", size = 116723 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/2d/9c0b76f2f9cc0ebede1b9371b6f317243028ed60b90705863d493bae622e/ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245", size = 139767 }, +] + [[package]] name = "isoduration" version = "20.11.0" @@ -804,6 +826,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700 }, ] +[[package]] +name = "jupyterlab-widgets" +version = "3.0.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/73/fa26bbb747a9ea4fca6b01453aa22990d52ab62dd61384f1ac0dc9d4e7ba/jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed", size = 203556 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/93/858e87edc634d628e5d752ba944c2833133a28fa87bb093e6832ced36a3e/jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54", size = 214392 }, +] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -976,6 +1007,25 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307 }, ] +[[package]] +name = "openai" +version = "1.69.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/99/d164612528dfb7a9b19330623daded608e75d25823b01f81e0376eb388a4/openai-1.69.0.tar.gz", hash = "sha256:7b8a10a8ff77e1ae827e5e4c8480410af2070fb68bc973d6c994cf8218f1f98d", size = 409579 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/a4/28113be8b7bc937656aaf7b06feff7e9a5eb742ee4e405c6c48c30d879c4/openai-1.69.0-py3-none-any.whl", hash = "sha256:73c4b2ddfd050060f8d93c70367189bd891e70a5adb6d69c04c3571f4fea5627", size = 599068 }, +] + [[package]] name = "overrides" version = "7.7.0" @@ -1565,6 +1615,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907 }, ] +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, +] + [[package]] name = "traitlets" version = "5.14.3" @@ -1672,3 +1734,12 @@ sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf594 wheels = [ { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826 }, ] + +[[package]] +name = "widgetsnbextension" +version = "4.0.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/fc/238c424fd7f4ebb25f8b1da9a934a3ad7c848286732ae04263661eb0fc03/widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6", size = 1164730 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/02/88b65cc394961a60c43c70517066b6b679738caf78506a5da7b88ffcb643/widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71", size = 2335872 }, +] diff --git a/数据库优化工程师.ipynb b/数据库优化工程师.ipynb index fd7efab..e5ed497 100644 --- a/数据库优化工程师.ipynb +++ b/数据库优化工程师.ipynb @@ -19,19 +19,45 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1\n" - ] + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T15:44:44.236141Z", + "start_time": "2025-03-30T15:44:44.223728Z" } - ], + }, + "outputs": [], "source": [ - "print(1)" + "# 然后在notebook中加载\n", + "from dotenv import load_dotenv\n", + "\n", + "# 加载当前目录下的.env文件\n", + "load_dotenv()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "ExecuteTime": { + "end_time": "2025-03-30T15:44:58.492402Z", + "start_time": "2025-03-30T15:44:45.695125Z" + } + }, + "outputs": [], + "source": [ + "from agno.agent import Agent, RunResponse # noqa\n", + "from agno.models.deepseek import DeepSeek\n", + "\n", + "agent = Agent(model=DeepSeek(id=\"deepseek-chat\"), markdown=True)\n", + "\n", + "# Get the response in a variable\n", + "# run: RunResponse = agent.run(\"Share a 2 sentence horror story\")\n", + "# print(run.content)\n", + "\n", + "# Print the response in the terminal\n", + "agent.print_response(\"傻狗\")\n", + "# 用jupyter的话输出有问题,妈的,转到py文件" ] } ], diff --git a/数据库优化工程师.py b/数据库优化工程师.py new file mode 100644 index 0000000..2f33b0b --- /dev/null +++ b/数据库优化工程师.py @@ -0,0 +1,31 @@ +if __name__ == "__main__": + """ + ## 背景 + + 我有一个`postgresql`数据库,现在需要一个专业的数据库优化工程师,来帮我看下设计是否合理,以及如何优化. + + ## 目标 + + 这个数据库优化工程师智能体应该具备以下能力: + + - [ ] 使用`claude3.7`作为模型(相当于拥有一个聪明的大脑,总是能够做出正确的决策) + - [ ] 精通关系型数据库系统的理论知识以及`postgresql`的实现细节(知识库) + - [ ] 能够使用`postgresql mcp server`来分析现有数据库设计(行为) + + """ + # 然后在notebook中加载 + from dotenv import load_dotenv + + # 加载当前目录下的.env文件 + load_dotenv() + from agno.agent import Agent, RunResponse # noqa + from agno.models.deepseek import DeepSeek + + agent = Agent(model=DeepSeek(id="deepseek-chat"), markdown=True) + + # Get the response in a variable + # run: RunResponse = agent.run("Share a 2 sentence horror story") + # print(run.content) + + # Print the response in the terminal + agent.print_response("你好") \ No newline at end of file