From 583b47dedfa0fa437cd6df4a246743c3e8c89f3d Mon Sep 17 00:00:00 2001 From: "fangyaozheng@bytedance.com" Date: Tue, 19 Aug 2025 12:42:50 +0800 Subject: [PATCH 1/3] add runner options for save tracing --- docs/docs/tracing.md | 17 ++++++++++++++--- veadk/runner.py | 5 ++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/docs/tracing.md b/docs/docs/tracing.md index a6f931f2..0169c209 100644 --- a/docs/docs/tracing.md +++ b/docs/docs/tracing.md @@ -4,17 +4,28 @@ VeADK 提供可观测(Tracing)的能力,用于记录 Agent 执行过程中 ## 本地观测 -通过如下方式开启本地观测,并且将运行时数据保存至本地: +通过如下方式开启本地观测,并且在 `runner` 的运行函数中指定 `save_tracing_data=True` 来将运行时数据保存至本地: ```python +import asyncio + +from veadk import Agent, Runner +from veadk.memory.short_term_memory import ShortTermMemory from veadk.tracing.telemetry.opentelemetry_tracer import OpentelemetryTracer tracer = OpentelemetryTracer() agent = Agent(tracers=[tracer]) -# ... run agent ... -# the data will be automatically saved to local +session_id = "session_id" + +runner = Runner(agent=agent, short_term_memory=ShortTermMemory()) + +prompt = "How is the weather like in Beijing? Besides, tell me which tool you invoked." + +# 设置 `save_tracing_data` 来保存运行时的 Tracing 数据 +asyncio.run(runner.run(messages=prompt, session_id=session_id, save_tracing_data=True)) + print(f"Tracing file path: {tracer._trace_file_path}") ``` diff --git a/veadk/runner.py b/veadk/runner.py index 7327ed3e..829d3376 100644 --- a/veadk/runner.py +++ b/veadk/runner.py @@ -145,6 +145,7 @@ async def run( messages: RunnerMessage, session_id: str, stream: bool = False, + save_tracing_data: bool = False, ): converted_messages: list = self._convert_messages(messages) @@ -159,7 +160,8 @@ async def run( final_output = await self._run(session_id, converted_message, stream) # try to save tracing file - self.save_tracing_file(session_id) + if save_tracing_data: + self.save_tracing_file(session_id) return final_output @@ -173,6 +175,7 @@ def save_tracing_file(self, session_id: str) -> str: return "" if not self.agent.tracers: + logger.warning("No tracer is configured in the agent.") return "" try: From f574d506dd1e527b0d289b269900c7fb2b40fa41 Mon Sep 17 00:00:00 2001 From: "fangyaozheng@bytedance.com" Date: Tue, 19 Aug 2025 12:44:40 +0800 Subject: [PATCH 2/3] fix tutorial --- veadk_tutorial.ipynb | 224 ++++++++++++++++++++++--------------------- 1 file changed, 117 insertions(+), 107 deletions(-) diff --git a/veadk_tutorial.ipynb b/veadk_tutorial.ipynb index 257e429e..0289432f 100644 --- a/veadk_tutorial.ipynb +++ b/veadk_tutorial.ipynb @@ -84,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "id": "B6o2LmjGXdb2" }, @@ -92,11 +92,11 @@ "source": [ "import os\n", "\n", - "os.environ[\"MODEL_AGENT_NAME\"] = \"doubao-seed-1-6-250615\" # <-- 火山方舟大模型名称\n", + "os.environ[\"MODEL_AGENT_NAME\"] = \"doubao-seed-1-6-250615\" # <-- 火山方舟大模型名称\n", "\n", "os.environ[\"MODEL_AGENT_API_KEY\"] = \"\" # <-- 设置火山方舟的API KEY来访问模型\n", "\n", - "os.environ[\"LOGGING_LEVEL\"] = \"ERROR\" # <-- 调整日志等级" + "os.environ[\"LOGGING_LEVEL\"] = \"ERROR\" # <-- 调整日志等级" ] }, { @@ -141,7 +141,7 @@ "source": [ "from veadk import Agent\n", "\n", - "agent = Agent() # 初始化 Agent\n", + "agent = Agent() # 初始化 Agent\n", "\n", "response = await agent.run(\"你好,我是一名 Agent 开发者。\")\n", "\n", @@ -187,17 +187,16 @@ "session_id = \"veadk_playground_session\"\n", "\n", "agent = Agent()\n", - "short_term_memory = ShortTermMemory() # 短期记忆代表的是用户单次会话内的对话记录\n", + "short_term_memory = ShortTermMemory() # 短期记忆代表的是用户单次会话内的对话记录\n", "\n", "runner = Runner(\n", - " agent=agent,\n", - " short_term_memory=short_term_memory,\n", - " app_name=app_name,\n", - " user_id=user_id\n", - " )\n", + " agent=agent, short_term_memory=short_term_memory, app_name=app_name, user_id=user_id\n", + ")\n", "\n", "# 使用 runner 中的`run`方法来调用 Agent\n", - "response = await runner.run(messages=\"你好,我是一名 Agent 开发者。\", session_id=session_id)\n", + "response = await runner.run(\n", + " messages=\"你好,我是一名 Agent 开发者。\", session_id=session_id\n", + ")\n", "\n", "print(response)" ] @@ -252,11 +251,8 @@ "short_term_memory = ShortTermMemory()\n", "\n", "runner = Runner(\n", - " agent=agent,\n", - " short_term_memory=short_term_memory,\n", - " app_name=app_name,\n", - " user_id=user_id\n", - " )\n", + " agent=agent, short_term_memory=short_term_memory, app_name=app_name, user_id=user_id\n", + ")\n", "\n", "response = await runner.run(messages=\"北京的天气怎么样?\", session_id=session_id)\n", "\n", @@ -298,7 +294,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -338,11 +334,8 @@ "short_term_memory = ShortTermMemory()\n", "\n", "runner = Runner(\n", - " agent=agent,\n", - " short_term_memory=short_term_memory,\n", - " app_name=app_name,\n", - " user_id=user_id\n", - " )\n", + " agent=agent, short_term_memory=short_term_memory, app_name=app_name, user_id=user_id\n", + ")\n", "\n", "response = await runner.run(messages=\"北京今天的空气质量\", session_id=session_id)\n", "\n", @@ -375,7 +368,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -416,11 +409,8 @@ "short_term_memory = ShortTermMemory()\n", "\n", "runner = Runner(\n", - " agent=agent,\n", - " short_term_memory=short_term_memory,\n", - " app_name=app_name,\n", - " user_id=user_id\n", - " )\n", + " agent=agent, short_term_memory=short_term_memory, app_name=app_name, user_id=user_id\n", + ")\n", "\n", "response = await runner.run(messages=\"未来七天北京的天气\", session_id=session_id)\n", "\n", @@ -473,16 +463,17 @@ "session_id = \"veadk_playground_session\"\n", "\n", "agent = Agent()\n", - "short_term_memory = ShortTermMemory(backend=\"local\") # 指定 local 后端,或直接 ShortTermMemory()\n", + "short_term_memory = ShortTermMemory(\n", + " backend=\"local\"\n", + ") # 指定 local 后端,或直接 ShortTermMemory()\n", "\n", "runner = Runner(\n", - " agent=agent,\n", - " short_term_memory=short_term_memory,\n", - " app_name=app_name,\n", - " user_id=user_id\n", - " )\n", + " agent=agent, short_term_memory=short_term_memory, app_name=app_name, user_id=user_id\n", + ")\n", "\n", - "response = await runner.run(messages=[\"我叫VeADK\", \"你还记得我叫什么吗?\"], session_id=session_id)\n", + "response = await runner.run(\n", + " messages=[\"我叫VeADK\", \"你还记得我叫什么吗?\"], session_id=session_id\n", + ")\n", "\n", "print(response)" ] @@ -564,11 +555,10 @@ "session_id = \"veadk_playground_session\"\n", "\n", "agent = Agent()\n", - "short_term_memory = ShortTermMemory(backend=\"mysql\") # 指定 mysql 后端\n", - "runner = Runner(agent=agent,\n", - " short_term_memory=short_term_memory,\n", - " app_name=app_name,\n", - " user_id=user_id)\n", + "short_term_memory = ShortTermMemory(backend=\"mysql\") # 指定 mysql 后端\n", + "runner = Runner(\n", + " agent=agent, short_term_memory=short_term_memory, app_name=app_name, user_id=user_id\n", + ")\n", "\n", "prompt = \"我在 7 月 15 日购买了 20 个冰激凌\"\n", "response = await runner.run(messages=prompt, session_id=session_id)\n", @@ -637,7 +627,9 @@ "# Embedding 配置(使用 OpenSearch 时,需要对文本进行向量化处理)\n", "# 设置访问火山方舟的 Embedding 模型\n", "os.environ[\"MODEL_EMBEDDING_NAME\"] = \"doubao-embedding-text-240715\"\n", - "os.environ[\"MODEL_EMBEDDING_API_BASE\"] = \"https://ark.cn-beijing.volces.com/api/v3/embeddings\"\n", + "os.environ[\"MODEL_EMBEDDING_API_BASE\"] = (\n", + " \"https://ark.cn-beijing.volces.com/api/v3/embeddings\"\n", + ")\n", "os.environ[\"MODEL_EMBEDDING_DIM\"] = \"2560\"\n", "os.environ[\"MODEL_EMBEDDING_API_KEY\"] = \"\"" ] @@ -688,11 +680,13 @@ "teaching_prompt = \"我上周五购买了一支冰激凌。\"\n", "\n", "await runner.run(messages=teaching_prompt, session_id=session_id)\n", - "await runner.save_session_to_long_term_memory(session_id=session_id) # 将 teaching prompt 和智能体回答保存到长期记忆中\n", + "await runner.save_session_to_long_term_memory(\n", + " session_id=session_id\n", + ") # 将 teaching prompt 和智能体回答保存到长期记忆中\n", "\n", "\n", "# ===== 检验记忆 =====\n", - "session_id = \"veadk_playground_session_2\" # 使用一个新的 Session 来检测跨 Session 检索\n", + "session_id = \"veadk_playground_session_2\" # 使用一个新的 Session 来检测跨 Session 检索\n", "student_prompt = \"我上周五购买了什么? 用中文回答我。\"\n", "\n", "response = await runner.run(messages=student_prompt, session_id=session_id)\n", @@ -726,7 +720,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { "id": "3QJbO5JqixP6" }, @@ -758,7 +752,9 @@ "teaching_prompt = \"我这周三购买了三本书。\"\n", "\n", "await runner.run(messages=teaching_prompt, session_id=session_id)\n", - "await runner.save_session_to_long_term_memory(session_id=session_id) # 将 teaching prompt 和智能体回答保存到长期记忆中" + "await runner.save_session_to_long_term_memory(\n", + " session_id=session_id\n", + ") # 将 teaching prompt 和智能体回答保存到长期记忆中" ] }, { @@ -772,7 +768,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -791,7 +787,7 @@ ], "source": [ "# ===== 检验记忆 =====\n", - "session_id = \"veadk_playground_session_4\" # 使用一个新的 Session 来检测跨 Session 检索\n", + "session_id = \"veadk_playground_session_4\" # 使用一个新的 Session 来检测跨 Session 检索\n", "student_prompt = \"我这周三购买了什么? 用中文回答我。\"\n", "\n", "response = await runner.run(messages=student_prompt, session_id=session_id)\n", @@ -839,7 +835,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "id": "hxemLCX_0FP6" }, @@ -855,7 +851,9 @@ "\n", "# 设置访问火山方舟的 Embedding 模型\n", "os.environ[\"MODEL_EMBEDDING_NAME\"] = \"doubao-embedding-text-240715\"\n", - "os.environ[\"MODEL_EMBEDDING_API_BASE\"] = \"https://ark.cn-beijing.volces.com/api/v3/embeddings\"\n", + "os.environ[\"MODEL_EMBEDDING_API_BASE\"] = (\n", + " \"https://ark.cn-beijing.volces.com/api/v3/embeddings\"\n", + ")\n", "os.environ[\"MODEL_EMBEDDING_DIM\"] = \"2560\"\n", "os.environ[\"MODEL_EMBEDDING_API_KEY\"] = \"\"" ] @@ -897,7 +895,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -927,9 +925,11 @@ "\n", "if os.path.exists(knowledgebase_file):\n", " with open(knowledgebase_file, \"r\", encoding=\"utf-8\") as f:\n", - " knowledgebase_data = [line.strip() for line in f if line.strip()] # 手动切片文档内容\n", + " knowledgebase_data = [\n", + " line.strip() for line in f if line.strip()\n", + " ] # 手动切片文档内容\n", "\n", - "knowledgebase = KnowledgeBase(backend=\"opensearch\") # 指定 opensearch 后端\n", + "knowledgebase = KnowledgeBase(backend=\"opensearch\") # 指定 opensearch 后端\n", "knowledgebase.add(knowledgebase_data, app_name=app_name)\n", "\n", "agent = Agent(knowledgebase=knowledgebase)\n", @@ -941,7 +941,9 @@ " user_id=user_id,\n", ")\n", "\n", - "response = await runner.run(messages=\"Tell me the secret of green.\", session_id=session_id)\n", + "response = await runner.run(\n", + " messages=\"Tell me the secret of green.\", session_id=session_id\n", + ")\n", "print(response)" ] }, @@ -1009,7 +1011,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": { "id": "YERFdXvBxLUa" }, @@ -1023,10 +1025,10 @@ "user_id = \"veadk_playground_user\"\n", "session_id = \"veadk_playground_session\"\n", "\n", - "knowledgebase = KnowledgeBase(backend=\"viking\") # 指定 viking 后端\n", + "knowledgebase = KnowledgeBase(backend=\"viking\") # 指定 viking 后端\n", "\n", "with open(pdf_path, \"rb\") as f:\n", - " knowledgebase.add(f, app_name=app_name) # 直接添加文档,无需手动切片\n", + " knowledgebase.add(f, app_name=app_name) # 直接添加文档,无需手动切片\n", "\n", "agent = Agent(knowledgebase=knowledgebase)" ] @@ -1042,7 +1044,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1107,7 +1109,9 @@ " user_id=user_id,\n", ")\n", "\n", - "response = await runner.run(messages=\"What is `Multi-Head Attention`?\", session_id=session_id)\n", + "response = await runner.run(\n", + " messages=\"What is `Multi-Head Attention`?\", session_id=session_id\n", + ")\n", "print(response)" ] }, @@ -1197,14 +1201,14 @@ " name=\"python_coder\",\n", " description=\"擅长使用 Python 编程语言来解决问题。\",\n", " instruction=\"\"\"使用 Python 语言来解决问题。\n", - " 注意,你生成的代码第一行需要有注释,标明作者是`python-coder`。\"\"\"\n", + " 注意,你生成的代码第一行需要有注释,标明作者是`python-coder`。\"\"\",\n", ")\n", "\n", "java_coding_agent = Agent(\n", " name=\"java_coder\",\n", " description=\"擅长使用 Java 编程语言来解决问题。\",\n", " instruction=\"\"\"使用 Java 语言来解决问题。\n", - " 注意,你生成的代码第一行需要有注释,标明作者是`java-coder`。\"\"\"\n", + " 注意,你生成的代码第一行需要有注释,标明作者是`java-coder`。\"\"\",\n", ")\n", "\n", "# root agent\n", @@ -1212,7 +1216,7 @@ " name=\"coding_agent\",\n", " description=\"可以调用适合的智能体来解决用户问题。\",\n", " instruction=\"调用适合的智能体来解决用户问题。\",\n", - " sub_agents=[python_coding_agent, java_coding_agent]\n", + " sub_agents=[python_coding_agent, java_coding_agent],\n", ")\n", "\n", "\n", @@ -1224,9 +1228,8 @@ ")\n", "\n", "response = await runner.run(\n", - " messages=\"使用 Python 帮我写一段快速排序的代码。\",\n", - " session_id=session_id\n", - " )\n", + " messages=\"使用 Python 帮我写一段快速排序的代码。\", session_id=session_id\n", + ")\n", "\n", "print(response)" ] @@ -1293,19 +1296,21 @@ "\n", "tracer = OpentelemetryTracer()\n", "\n", - "agent = Agent(tools=[get_city_weather], tracers=[tracer]) # 创建一个配置 tracers 的 Agent\n", + "agent = Agent(\n", + " tools=[get_city_weather], tracers=[tracer]\n", + ") # 创建一个配置 tracers 的 Agent\n", "\n", "short_term_memory = ShortTermMemory()\n", "\n", "runner = Runner(\n", - " agent=agent,\n", - " short_term_memory=short_term_memory,\n", - " app_name=app_name,\n", - " user_id=user_id\n", - " )\n", + " agent=agent, short_term_memory=short_term_memory, app_name=app_name, user_id=user_id\n", + ")\n", "\n", - "# 如果在 agent 中设置了tracer,runner将会自动尝试保存 tracing 文件至`/tmp`中\n", - "await runner.run(messages=\"北京的天气怎么样?\", session_id=session_id)\n", + "# 如果在 agent 中设置了tracer,\n", + "# 并且在 `run` 中指定保存,runner将会尝试保存 tracing 文件\n", + "await runner.run(\n", + " messages=\"北京的天气怎么样?\", session_id=session_id, save_tracing_data=True\n", + ")\n", "\n", "print(f\"Tracing file path: {tracer._trace_file_path}\")\n", "\n", @@ -1344,7 +1349,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": { "id": "edfntQAt3OCR" }, @@ -1353,17 +1358,23 @@ "import os\n", "\n", "# TLS 上报器环境变量\n", - "os.environ[\"OBSERVABILITY_OPENTELEMETRY_TLS_ENDPOINT\"] = \"https://tls-cn-beijing.volces.com:4318/v1/traces\"\n", + "os.environ[\"OBSERVABILITY_OPENTELEMETRY_TLS_ENDPOINT\"] = (\n", + " \"https://tls-cn-beijing.volces.com:4318/v1/traces\"\n", + ")\n", "os.environ[\"OBSERVABILITY_OPENTELEMETRY_TLS_REGION\"] = \"cn-beijing\"\n", "os.environ[\"OBSERVABILITY_OPENTELEMETRY_TLS_SERVICE_NAME\"] = \"\"\n", "\n", "# APMPlus 上报器环境变量\n", - "os.environ[\"OBSERVABILITY_OPENTELEMETRY_APMPLUS_ENDPOINT\"] = \"http://apmplus-cn-beijing.volces.com:4317\"\n", + "os.environ[\"OBSERVABILITY_OPENTELEMETRY_APMPLUS_ENDPOINT\"] = (\n", + " \"http://apmplus-cn-beijing.volces.com:4317\"\n", + ")\n", "os.environ[\"OBSERVABILITY_OPENTELEMETRY_APMPLUS_SERVICE_NAME\"] = \"\"\n", "os.environ[\"OBSERVABILITY_OPENTELEMETRY_APMPLUS_API_KEY\"] = \"\"\n", "\n", "# Coze Loop 上报器环境变量\n", - "os.environ[\"OBSERVABILITY_OPENTELEMETRY_COZELOOP_ENDPOINT\"] = \"https://api.coze.cn/v1/loop/opentelemetry/v1/traces\"\n", + "os.environ[\"OBSERVABILITY_OPENTELEMETRY_COZELOOP_ENDPOINT\"] = (\n", + " \"https://api.coze.cn/v1/loop/opentelemetry/v1/traces\"\n", + ")\n", "os.environ[\"OBSERVABILITY_OPENTELEMETRY_COZELOOP_SERVICE_NAME\"] = \"\"\n", "os.environ[\"OBSERVABILITY_OPENTELEMETRY_COZELOOP_API_KEY\"] = \"\"" ] @@ -1379,7 +1390,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1409,19 +1420,22 @@ "user_id = \"veadk_playground_user\"\n", "session_id = \"veadk_playground_session\"\n", "\n", - "exporters = [CozeloopExporter(), APMPlusExporter(), TLSExporter()] # 初始化 tracing 上报器\n", + "exporters = [\n", + " CozeloopExporter(),\n", + " APMPlusExporter(),\n", + " TLSExporter(),\n", + "] # 初始化 tracing 上报器\n", "tracer = OpentelemetryTracer(exporters=exporters)\n", "\n", - "agent = Agent(tools=[get_city_weather], tracers=[tracer]) # 创建一个配置 tracers 的 Agent\n", + "agent = Agent(\n", + " tools=[get_city_weather], tracers=[tracer]\n", + ") # 创建一个配置 tracers 的 Agent\n", "\n", "short_term_memory = ShortTermMemory()\n", "\n", "runner = Runner(\n", - " agent=agent,\n", - " short_term_memory=short_term_memory,\n", - " app_name=app_name,\n", - " user_id=user_id\n", - " )\n", + " agent=agent, short_term_memory=short_term_memory, app_name=app_name, user_id=user_id\n", + ")\n", "\n", "await runner.run(messages=\"北京的天气怎么样?\", session_id=session_id)\n", "\n", @@ -1510,11 +1524,8 @@ "short_term_memory = ShortTermMemory()\n", "\n", "runner = Runner(\n", - " agent=agent,\n", - " short_term_memory=short_term_memory,\n", - " app_name=app_name,\n", - " user_id=user_id\n", - " )\n", + " agent=agent, short_term_memory=short_term_memory, app_name=app_name, user_id=user_id\n", + ")\n", "\n", "await runner.run(messages=\"北京的天气怎么样?\", session_id=session_id)\n", "\n", @@ -1621,8 +1632,8 @@ "\n" ], "text/plain": [ - "✨ You're running DeepEval's latest \u001B[38;2;106;0;255mBase Evaluation \u001B[0m\u001B[1;38;2;106;0;255m[\u001B[0m\u001B[38;2;106;0;255mGEval\u001B[0m\u001B[1;38;2;106;0;255m]\u001B[0m\u001B[38;2;106;0;255m Metric\u001B[0m! \u001B[1;38;2;55;65;81m(\u001B[0m\u001B[38;2;55;65;81musing \u001B[0m\u001B[3;38;2;55;65;81mNone\u001B[0m\u001B[38;2;55;65;81m \u001B[0m\u001B[1;38;2;55;65;81m(\u001B[0m\u001B[38;2;55;65;81mLocal Model\u001B[0m\u001B[1;38;2;55;65;81m)\u001B[0m\u001B[38;2;55;65;81m, \u001B[0m\u001B[38;2;55;65;81mstrict\u001B[0m\u001B[38;2;55;65;81m=\u001B[0m\u001B[3;38;2;55;65;81mFalse\u001B[0m\u001B[38;2;55;65;81m, \u001B[0m\n", - "\u001B[38;2;55;65;81masync_mode\u001B[0m\u001B[38;2;55;65;81m=\u001B[0m\u001B[3;38;2;55;65;81mTrue\u001B[0m\u001B[1;38;2;55;65;81m)\u001B[0m\u001B[38;2;55;65;81m...\u001B[0m\n" + "✨ You're running DeepEval's latest \u001b[38;2;106;0;255mBase Evaluation \u001b[0m\u001b[1;38;2;106;0;255m[\u001b[0m\u001b[38;2;106;0;255mGEval\u001b[0m\u001b[1;38;2;106;0;255m]\u001b[0m\u001b[38;2;106;0;255m Metric\u001b[0m! \u001b[1;38;2;55;65;81m(\u001b[0m\u001b[38;2;55;65;81musing \u001b[0m\u001b[3;38;2;55;65;81mNone\u001b[0m\u001b[38;2;55;65;81m \u001b[0m\u001b[1;38;2;55;65;81m(\u001b[0m\u001b[38;2;55;65;81mLocal Model\u001b[0m\u001b[1;38;2;55;65;81m)\u001b[0m\u001b[38;2;55;65;81m, \u001b[0m\u001b[38;2;55;65;81mstrict\u001b[0m\u001b[38;2;55;65;81m=\u001b[0m\u001b[3;38;2;55;65;81mFalse\u001b[0m\u001b[38;2;55;65;81m, \u001b[0m\n", + "\u001b[38;2;55;65;81masync_mode\u001b[0m\u001b[38;2;55;65;81m=\u001b[0m\u001b[3;38;2;55;65;81mTrue\u001b[0m\u001b[1;38;2;55;65;81m)\u001b[0m\u001b[38;2;55;65;81m...\u001b[0m\n" ] }, "metadata": {}, @@ -1635,7 +1646,7 @@ "\n" ], "text/plain": [ - "✨ You're running DeepEval's latest \u001B[38;2;106;0;255mTool Correctness Metric\u001B[0m! \u001B[1;38;2;55;65;81m(\u001B[0m\u001B[38;2;55;65;81musing \u001B[0m\u001B[3;38;2;55;65;81mNone\u001B[0m\u001B[38;2;55;65;81m, \u001B[0m\u001B[38;2;55;65;81mstrict\u001B[0m\u001B[38;2;55;65;81m=\u001B[0m\u001B[3;38;2;55;65;81mFalse\u001B[0m\u001B[38;2;55;65;81m, \u001B[0m\u001B[38;2;55;65;81masync_mode\u001B[0m\u001B[38;2;55;65;81m=\u001B[0m\u001B[3;38;2;55;65;81mTrue\u001B[0m\u001B[1;38;2;55;65;81m)\u001B[0m\u001B[38;2;55;65;81m...\u001B[0m\n" + "✨ You're running DeepEval's latest \u001b[38;2;106;0;255mTool Correctness Metric\u001b[0m! \u001b[1;38;2;55;65;81m(\u001b[0m\u001b[38;2;55;65;81musing \u001b[0m\u001b[3;38;2;55;65;81mNone\u001b[0m\u001b[38;2;55;65;81m, \u001b[0m\u001b[38;2;55;65;81mstrict\u001b[0m\u001b[38;2;55;65;81m=\u001b[0m\u001b[3;38;2;55;65;81mFalse\u001b[0m\u001b[38;2;55;65;81m, \u001b[0m\u001b[38;2;55;65;81masync_mode\u001b[0m\u001b[38;2;55;65;81m=\u001b[0m\u001b[3;38;2;55;65;81mTrue\u001b[0m\u001b[1;38;2;55;65;81m)\u001b[0m\u001b[38;2;55;65;81m...\u001b[0m\n" ] }, "metadata": {}, @@ -1716,14 +1727,14 @@ "text/plain": [ "\n", "\n", - "\u001B[38;2;5;245;141m✓\u001B[0m Evaluation completed 🎉! \u001B[1m(\u001B[0mtime taken: \u001B[1;36m24.\u001B[0m09s | token cost: \u001B[1;36m0.0\u001B[0m USD\u001B[1m)\u001B[0m\n", - "» Test Results \u001B[1m(\u001B[0m\u001B[1;36m1\u001B[0m total tests\u001B[1m)\u001B[0m:\n", - " » Pass Rate: \u001B[1;36m100.0\u001B[0m% | Passed: \u001B[1;32m1\u001B[0m | Failed: \u001B[1;31m0\u001B[0m\n", + "\u001b[38;2;5;245;141m✓\u001b[0m Evaluation completed 🎉! \u001b[1m(\u001b[0mtime taken: \u001b[1;36m24.\u001b[0m09s | token cost: \u001b[1;36m0.0\u001b[0m USD\u001b[1m)\u001b[0m\n", + "» Test Results \u001b[1m(\u001b[0m\u001b[1;36m1\u001b[0m total tests\u001b[1m)\u001b[0m:\n", + " » Pass Rate: \u001b[1;36m100.0\u001b[0m% | Passed: \u001b[1;32m1\u001b[0m | Failed: \u001b[1;31m0\u001b[0m\n", "\n", " ================================================================================ \n", "\n", "» What to share evals with your team, or a place for your test cases to live? ❤️ 🏡\n", - " » Run \u001B[1;32m'deepeval view'\u001B[0m to analyze and save testing results on \u001B[38;2;106;0;255mConfident AI\u001B[0m.\n", + " » Run \u001b[1;32m'deepeval view'\u001b[0m to analyze and save testing results on \u001b[38;2;106;0;255mConfident AI\u001b[0m.\n", "\n", "\n" ] @@ -1754,10 +1765,13 @@ "\n", "agent = Agent(tools=[get_city_weather])\n", "\n", - "evaluator = DeepevalEvaluator(agent=agent,\n", - " judge_model_api_key=getenv(\"MODEL_JUDGE_API_KEY\"))\n", + "evaluator = DeepevalEvaluator(\n", + " agent=agent, judge_model_api_key=getenv(\"MODEL_JUDGE_API_KEY\")\n", + ")\n", "\n", - "judge_model = evaluator.judge_model # 如果你希望使用方舟作为 judge model,那么 evaluator 会帮你自动初始化\n", + "judge_model = (\n", + " evaluator.judge_model\n", + ") # 如果你希望使用方舟作为 judge model,那么 evaluator 会帮你自动初始化\n", "\n", "metrics = [\n", " GEval(\n", @@ -1769,11 +1783,9 @@ " LLMTestCaseParams.ACTUAL_OUTPUT,\n", " LLMTestCaseParams.EXPECTED_OUTPUT,\n", " ],\n", - " model=judge_model, # 这里需要传入 judge model\n", - " ),\n", - " ToolCorrectnessMetric(\n", - " threshold=0.5\n", + " model=judge_model, # 这里需要传入 judge model\n", " ),\n", + " ToolCorrectnessMetric(threshold=0.5),\n", "]\n", "\n", "await evaluator.eval(eval_set_file_path=eval_set_path, metrics=metrics)" @@ -2008,10 +2020,8 @@ "\n", "# 发送消息\n", "response_message = await cloud_app.message_send(\n", - " message=\"你好,我是一名 Agent 开发者。\",\n", - " user_id=user_id,\n", - " session_id=session_id\n", - " )\n", + " message=\"你好,我是一名 Agent 开发者。\", user_id=user_id, session_id=session_id\n", + ")\n", "\n", "print(f\"返回的消息源: {cloud_app.vefaas_endpoint}\")\n", "print(f\"返回的消息内容: {response_message.parts[0].root.text}\")" From 6b6b2bf5888911713253dde86fa8dd16754703db Mon Sep 17 00:00:00 2001 From: "fangyaozheng@bytedance.com" Date: Tue, 19 Aug 2025 13:10:09 +0800 Subject: [PATCH 3/3] fix typos in agent doc --- docs/docs/agent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/agent.md b/docs/docs/agent.md index 30ea65a8..056e7405 100644 --- a/docs/docs/agent.md +++ b/docs/docs/agent.md @@ -93,7 +93,7 @@ from veadk.tools.demo_tools import get_city_weather session_id = "..." prompt = "..." -# define three agents, one for planner, two for write poem and polish +# 定义三个智能体,分别为天气预报智能体、穿衣建议智能体以及一个Planner智能体 weather_reporter = Agent( name="weather_reporter", description="A weather reporter agent to report the weather.",