ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s

This commit is contained in:
2026-08-20 13:12:50 +00:00
commit b119135836
10275 changed files with 3284984 additions and 0 deletions
@@ -0,0 +1,239 @@
{
"formats": [
{
"name": "live_pipe_parser",
"raw_log": "live-format-1.log",
"raw_log_sha256": "0e6df83a5a373e7adb217708ccfa45df197f2ee84edd638b9db981cba85d5b80",
"samples": 3,
"initial_failures": 3,
"required_keys": [
"timestamp",
"level",
"module",
"step",
"message"
],
"parser": "parsers/live_pipe_parser.py",
"parser_sha256": "8c03fe6676bfe61f78900065f1a4caae5f2ee16ebe563cb57ed2c68bd4e8d4d5",
"test": {
"passed": true,
"report": "[样本1] 通过,解析出字段:['level', 'message', 'module', 'step', 'timestamp']\n[样本2] 通过,解析出字段:['level', 'message', 'module', 'step', 'timestamp']\n[样本3] 通过,解析出字段:['level', 'message', 'module', 'step', 'timestamp']",
"results": [
{
"timestamp": "2026-07-30T05:23:42Z",
"level": "INFO",
"module": "checkout.worker",
"step": "1",
"message": "accepted real request req-81"
},
{
"timestamp": "2026-07-30T05:23:42Z",
"level": "WARNING",
"module": "checkout.worker",
"step": "2",
"message": "retrying payment authorization req-81"
},
{
"timestamp": "2026-07-30T05:23:42Z",
"level": "ERROR",
"module": "checkout.worker",
"step": "3",
"message": "authorization exhausted req-81"
}
]
},
"parsed_after_hot_update": [
{
"_parser": "live_pipe_parser",
"timestamp": "2026-07-30T05:23:42Z",
"level": "INFO",
"module": "checkout.worker",
"step": "1",
"message": "accepted real request req-81"
},
{
"_parser": "live_pipe_parser",
"timestamp": "2026-07-30T05:23:42Z",
"level": "WARNING",
"module": "checkout.worker",
"step": "2",
"message": "retrying payment authorization req-81"
},
{
"_parser": "live_pipe_parser",
"timestamp": "2026-07-30T05:23:42Z",
"level": "ERROR",
"module": "checkout.worker",
"step": "3",
"message": "authorization exhausted req-81"
}
]
},
{
"name": "live_bracket_parser",
"raw_log": "live-format-2.log",
"raw_log_sha256": "b52aa925d76f1c10017d42f16efd4daacf5ed73c9184067bdee9a9e50a7878b6",
"samples": 3,
"initial_failures": 3,
"required_keys": [
"timestamp",
"level",
"tool",
"latency_ms",
"status",
"message"
],
"parser": "parsers/live_bracket_parser.py",
"parser_sha256": "4f1780d6d2e9886eafc1f5a0c3cce09c9873cb4113f9de5f34482d1efc35e07c",
"test": {
"passed": true,
"report": "[样本1] 通过,解析出字段:['latency_ms', 'level', 'message', 'status', 'timestamp', 'tool']\n[样本2] 通过,解析出字段:['latency_ms', 'level', 'message', 'status', 'timestamp', 'tool']\n[样本3] 通过,解析出字段:['latency_ms', 'level', 'message', 'status', 'timestamp', 'tool']",
"results": [
{
"timestamp": "2026-07-29T21:23:42.606+00:00",
"level": "INFO",
"tool": "inventory_lookup",
"latency_ms": 34,
"status": "ok",
"message": "stock check completed"
},
{
"timestamp": "2026-07-29T21:23:42.609+00:00",
"level": "WARNING",
"tool": "payment_api",
"latency_ms": 181,
"status": "retry",
"message": "upstream requested retry"
},
{
"timestamp": "2026-07-29T21:23:42.612+00:00",
"level": "ERROR",
"tool": "payment_api",
"latency_ms": 412,
"status": "timeout",
"message": "deadline exceeded"
}
]
},
"parsed_after_hot_update": [
{
"_parser": "live_bracket_parser",
"timestamp": "2026-07-29T21:23:42.606+00:00",
"level": "INFO",
"tool": "inventory_lookup",
"latency_ms": 34,
"status": "ok",
"message": "stock check completed"
},
{
"_parser": "live_bracket_parser",
"timestamp": "2026-07-29T21:23:42.609+00:00",
"level": "WARNING",
"tool": "payment_api",
"latency_ms": 181,
"status": "retry",
"message": "upstream requested retry"
},
{
"_parser": "live_bracket_parser",
"timestamp": "2026-07-29T21:23:42.612+00:00",
"level": "ERROR",
"tool": "payment_api",
"latency_ms": 412,
"status": "timeout",
"message": "deadline exceeded"
}
]
}
],
"loaded_after_restart": [
"live_bracket_parser",
"live_pipe_parser"
],
"rows_after_restart": [
{
"_parser": "live_pipe_parser",
"timestamp": "2026-07-30T05:23:42Z",
"level": "INFO",
"module": "checkout.worker",
"step": "1",
"message": "accepted real request req-81"
},
{
"_parser": "live_pipe_parser",
"timestamp": "2026-07-30T05:23:42Z",
"level": "WARNING",
"module": "checkout.worker",
"step": "2",
"message": "retrying payment authorization req-81"
},
{
"_parser": "live_pipe_parser",
"timestamp": "2026-07-30T05:23:42Z",
"level": "ERROR",
"module": "checkout.worker",
"step": "3",
"message": "authorization exhausted req-81"
},
{
"_parser": "live_bracket_parser",
"timestamp": "2026-07-29T21:23:42.606+00:00",
"level": "INFO",
"tool": "inventory_lookup",
"latency_ms": 34,
"status": "ok",
"message": "stock check completed"
},
{
"_parser": "live_bracket_parser",
"timestamp": "2026-07-29T21:23:42.609+00:00",
"level": "WARNING",
"tool": "payment_api",
"latency_ms": 181,
"status": "retry",
"message": "upstream requested retry"
},
{
"_parser": "live_bracket_parser",
"timestamp": "2026-07-29T21:23:42.612+00:00",
"level": "ERROR",
"tool": "payment_api",
"latency_ms": 412,
"status": "timeout",
"message": "deadline exceeded"
}
],
"browser": {
"browser": "Chromium",
"version": "139.0.7258.5",
"rows": 6,
"columns": [
"_parser",
"latency_ms",
"level",
"message",
"module",
"status",
"step",
"timestamp",
"tool"
]
},
"vision_judgment": {
"pass": true,
"readable": true,
"has_multiple_parsers": true,
"observed_columns": [
"_parser",
"latency_ms",
"level",
"message",
"module",
"status",
"step",
"timestamp",
"tool"
],
"reason": "The table is readable with clear columns, contains 6 parsed rows, includes multiple parser identifiers (_parser: live_pipe_parser, live_bracket_parser), and structured fields (latency_ms, level, message, etc.)"
}
}
@@ -0,0 +1,276 @@
{
"schema_version": "1.0",
"experiment": "5-7",
"run_id": "20260729T212342Z-5_7-live",
"started_at_utc": "2026-07-29T21:23:42.501795+00:00",
"completed_at_utc": "2026-07-29T21:25:15.353838+00:00",
"provider": "ark",
"endpoint": "https://ark.cn-beijing.volces.com/api/v3",
"model": "doubao-seed-1-6-250615",
"source": {
"manuscript": "book/chapter5.md#实验-5-7",
"campaign_sha256": "cafda97001032d4720a5cdd3e920e4c025102486e6158b017be9352b3935664a"
},
"formats": [
{
"name": "live_pipe_parser",
"raw_log": "live-format-1.log",
"raw_log_sha256": "0e6df83a5a373e7adb217708ccfa45df197f2ee84edd638b9db981cba85d5b80",
"samples": 3,
"initial_failures": 3,
"required_keys": [
"timestamp",
"level",
"module",
"step",
"message"
],
"parser": "parsers/live_pipe_parser.py",
"parser_sha256": "8c03fe6676bfe61f78900065f1a4caae5f2ee16ebe563cb57ed2c68bd4e8d4d5",
"test": {
"passed": true,
"report": "[样本1] 通过,解析出字段:['level', 'message', 'module', 'step', 'timestamp']\n[样本2] 通过,解析出字段:['level', 'message', 'module', 'step', 'timestamp']\n[样本3] 通过,解析出字段:['level', 'message', 'module', 'step', 'timestamp']",
"results": [
{
"timestamp": "2026-07-30T05:23:42Z",
"level": "INFO",
"module": "checkout.worker",
"step": "1",
"message": "accepted real request req-81"
},
{
"timestamp": "2026-07-30T05:23:42Z",
"level": "WARNING",
"module": "checkout.worker",
"step": "2",
"message": "retrying payment authorization req-81"
},
{
"timestamp": "2026-07-30T05:23:42Z",
"level": "ERROR",
"module": "checkout.worker",
"step": "3",
"message": "authorization exhausted req-81"
}
]
},
"parsed_after_hot_update": [
{
"_parser": "live_pipe_parser",
"timestamp": "2026-07-30T05:23:42Z",
"level": "INFO",
"module": "checkout.worker",
"step": "1",
"message": "accepted real request req-81"
},
{
"_parser": "live_pipe_parser",
"timestamp": "2026-07-30T05:23:42Z",
"level": "WARNING",
"module": "checkout.worker",
"step": "2",
"message": "retrying payment authorization req-81"
},
{
"_parser": "live_pipe_parser",
"timestamp": "2026-07-30T05:23:42Z",
"level": "ERROR",
"module": "checkout.worker",
"step": "3",
"message": "authorization exhausted req-81"
}
]
},
{
"name": "live_bracket_parser",
"raw_log": "live-format-2.log",
"raw_log_sha256": "b52aa925d76f1c10017d42f16efd4daacf5ed73c9184067bdee9a9e50a7878b6",
"samples": 3,
"initial_failures": 3,
"required_keys": [
"timestamp",
"level",
"tool",
"latency_ms",
"status",
"message"
],
"parser": "parsers/live_bracket_parser.py",
"parser_sha256": "4f1780d6d2e9886eafc1f5a0c3cce09c9873cb4113f9de5f34482d1efc35e07c",
"test": {
"passed": true,
"report": "[样本1] 通过,解析出字段:['latency_ms', 'level', 'message', 'status', 'timestamp', 'tool']\n[样本2] 通过,解析出字段:['latency_ms', 'level', 'message', 'status', 'timestamp', 'tool']\n[样本3] 通过,解析出字段:['latency_ms', 'level', 'message', 'status', 'timestamp', 'tool']",
"results": [
{
"timestamp": "2026-07-29T21:23:42.606+00:00",
"level": "INFO",
"tool": "inventory_lookup",
"latency_ms": 34,
"status": "ok",
"message": "stock check completed"
},
{
"timestamp": "2026-07-29T21:23:42.609+00:00",
"level": "WARNING",
"tool": "payment_api",
"latency_ms": 181,
"status": "retry",
"message": "upstream requested retry"
},
{
"timestamp": "2026-07-29T21:23:42.612+00:00",
"level": "ERROR",
"tool": "payment_api",
"latency_ms": 412,
"status": "timeout",
"message": "deadline exceeded"
}
]
},
"parsed_after_hot_update": [
{
"_parser": "live_bracket_parser",
"timestamp": "2026-07-29T21:23:42.606+00:00",
"level": "INFO",
"tool": "inventory_lookup",
"latency_ms": 34,
"status": "ok",
"message": "stock check completed"
},
{
"_parser": "live_bracket_parser",
"timestamp": "2026-07-29T21:23:42.609+00:00",
"level": "WARNING",
"tool": "payment_api",
"latency_ms": 181,
"status": "retry",
"message": "upstream requested retry"
},
{
"_parser": "live_bracket_parser",
"timestamp": "2026-07-29T21:23:42.612+00:00",
"level": "ERROR",
"tool": "payment_api",
"latency_ms": 412,
"status": "timeout",
"message": "deadline exceeded"
}
]
}
],
"browser": {
"browser": "Chromium",
"version": "139.0.7258.5",
"rows": 6,
"columns": [
"_parser",
"latency_ms",
"level",
"message",
"module",
"status",
"step",
"timestamp",
"tool"
]
},
"vision_judgment": {
"pass": true,
"readable": true,
"has_multiple_parsers": true,
"observed_columns": [
"_parser",
"latency_ms",
"level",
"message",
"module",
"status",
"step",
"timestamp",
"tool"
],
"reason": "The table is readable with clear columns, contains 6 parsed rows, includes multiple parser identifiers (_parser: live_pipe_parser, live_bracket_parser), and structured fields (latency_ms, level, message, etc.)"
},
"usage": {
"calls": 3,
"prompt_tokens": 3696,
"completion_tokens": 4069,
"total_tokens": 7765,
"latency_s": 92.052
},
"artifacts": {
"evidence.json": {
"path": "evidence.json",
"sha256": "5bbdfd7a34e133c51ce96f6cb3139cc90a50462a9f1ddf3963850c7136851d75",
"bytes": 7273
},
"live-format-1.log": {
"path": "live-format-1.log",
"sha256": "0e6df83a5a373e7adb217708ccfa45df197f2ee84edd638b9db981cba85d5b80",
"bytes": 249
},
"live-format-2.log": {
"path": "live-format-2.log",
"sha256": "b52aa925d76f1c10017d42f16efd4daacf5ed73c9184067bdee9a9e50a7878b6",
"bytes": 345
},
"parsers/__pycache__/live_bracket_parser.cpython-311.pyc": {
"path": "parsers/__pycache__/live_bracket_parser.cpython-311.pyc",
"sha256": "096ea41a2b5b1a6cf683d18d05579810f499dbea75366e798c98f882eeab5a8a",
"bytes": 1232
},
"parsers/__pycache__/live_pipe_parser.cpython-311.pyc": {
"path": "parsers/__pycache__/live_pipe_parser.cpython-311.pyc",
"sha256": "fa59fd91273396f06f51866d8cc206cbad0b73a146a0de78f1d5752b6cc4be86",
"bytes": 1200
},
"parsers/live_bracket_parser.py": {
"path": "parsers/live_bracket_parser.py",
"sha256": "4f1780d6d2e9886eafc1f5a0c3cce09c9873cb4113f9de5f34482d1efc35e07c",
"bytes": 869
},
"parsers/live_pipe_parser.py": {
"path": "parsers/live_pipe_parser.py",
"sha256": "8c03fe6676bfe61f78900065f1a4caae5f2ee16ebe563cb57ed2c68bd4e8d4d5",
"bytes": 733
},
"producer-1.py": {
"path": "producer-1.py",
"sha256": "dda2a6a04f198f038d74f78375f8d03eb9e48aeadd672c0b39c13fb2900c69f2",
"bytes": 547
},
"producer-2.py": {
"path": "producer-2.py",
"sha256": "cb6999b88a3bd22a9187cc37efdeec0e02d5a0f70390f21620cab2218b53bb71",
"bytes": 638
},
"receipts.json": {
"path": "receipts.json",
"sha256": "31a3da57aa08f7ec90b591567721fb4a09698365fc7c7710cd9c958e2c647a45",
"bytes": 8546
},
"visualization.html": {
"path": "visualization.html",
"sha256": "3f236a29650312ca11579cd1918e98affc1082c2dac3aeb8dc90bcdae0aaf185",
"bytes": 1693
},
"visualization.png": {
"path": "visualization.png",
"sha256": "d8dfad31b33fc0fa5dcf60b99041e61ef531627e5bde64e92f1cb345ab2cec52",
"bytes": 96289
}
},
"acceptance_gates": {
"raw_logs_emitted_by_real_runtime_processes": true,
"initial_system_detected_every_new_format_failure": true,
"real_model_generated_both_parser_modules": true,
"generated_code_passed_automatic_tests": true,
"hot_update_parsed_every_failed_sample": true,
"persisted_parsers_loaded_after_fresh_engine_restart": true,
"fresh_engine_parsed_entire_mixed_stream": true,
"real_chromium_rendered_visualization": true,
"real_vision_model_approved_rendered_pixels": true,
"raw_provider_receipts_complete": true
},
"official_complete": true
}
@@ -0,0 +1,27 @@
import re
def parse(line: str) -> dict | None:
# 定义日志格式的正则表达式模式
pattern = r'^\[(?P<timestamp>[^\]]+)\]\s*\((?P<level>[^)]+)\)\s*<tool=(?P<tool>[^>]+)>\s*\{latency_ms=(?P<latency_ms>\d+)\s+status=(?P<status>\w+)\}\s*::\s*(?P<message>.*)$'
# 尝试匹配日志行
match = re.match(pattern, line.strip())
if not match:
return None
# 提取匹配的组
groups = match.groupdict()
# 检查所有必需字段是否存在且不为空
required_keys = ['timestamp', 'level', 'tool', 'latency_ms', 'status', 'message']
for key in required_keys:
if key not in groups or not groups[key]:
return None
# 转换latency_ms为整数
try:
groups['latency_ms'] = int(groups['latency_ms'])
except ValueError:
return None
return groups
@@ -0,0 +1,28 @@
import re
def parse(line: str) -> dict | None:
# 定义匹配日志格式的正则表达式
pattern = r'^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z)\|([A-Z]+)\|([\w.]+)\|step=(\d+)\|(.*)$'
match = re.match(pattern, line.strip())
if not match:
return None
# 提取各个字段
timestamp = match.group(1)
level = match.group(2)
module = match.group(3)
step = match.group(4)
message = match.group(5)
# 确保所有必需字段都不为空
if not all([timestamp, level, module, step, message]):
return None
return {
'timestamp': timestamp,
'level': level,
'module': module,
'step': step,
'message': message
}
@@ -0,0 +1,7 @@
import logging, sys
formatter=logging.Formatter('%(asctime)s|%(levelname)s|%(name)s|step=%(step)s|%(message)s', datefmt='%Y-%m-%dT%H:%M:%SZ')
handler=logging.StreamHandler(sys.stdout); handler.setFormatter(formatter)
logger=logging.getLogger('checkout.worker'); logger.handlers=[handler]; logger.setLevel(logging.INFO); logger.propagate=False
logger.info('accepted real request req-81', extra={'step': 1})
logger.warning('retrying payment authorization req-81', extra={'step': 2})
logger.error('authorization exhausted req-81', extra={'step': 3})
@@ -0,0 +1,7 @@
import datetime, time
events=[('inventory_lookup',34,'ok','stock check completed'),('payment_api',181,'retry','upstream requested retry'),('payment_api',412,'timeout','deadline exceeded')]
for tool,latency,status,message in events:
started=time.perf_counter(); time.sleep(0.003); observed=max(latency,int((time.perf_counter()-started)*1000))
stamp=datetime.datetime.now(datetime.timezone.utc).isoformat(timespec='milliseconds')
level='ERROR' if status=='timeout' else ('WARNING' if status=='retry' else 'INFO')
print(f'[{stamp}] ({level}) <tool={tool}> {{latency_ms={observed} status={status}}} :: {message}', flush=True)
@@ -0,0 +1,103 @@
[
{
"purpose": "generate-live_pipe_parser-attempt-1",
"called_at_utc": "2026-07-29T21:24:10.369834+00:00",
"latency_s": 27.68,
"request": {
"model": "doubao-seed-1-6-250615",
"messages": [
{
"role": "system",
"content": "你是一个\"日志解析器代码生成器\"。用户会给你一批**同一种未知格式**的日志样本,\n以及现有系统解析失败的报错。你的任务:编写一个 Python 函数,把这种格式的每一行解析成结构化字段。\n\n严格要求:\n1. 只输出一个 Python 代码块(```python ... ```),不要任何解释文字。\n2. 代码块里必须定义一个函数:def parse(line: str) -> dict | None\n - 输入是一行日志(字符串)。\n - 如果这行符合你要解析的格式,返回一个 dict,键为字段名(英文小写下划线),值为解析出的内容。\n - 如果这行**不符合**这种格式,必须返回 None(不要抛异常,把机会让给其它解析器)。\n3. 只能使用 Python 标准库(re、json、datetime 等),不要 import 第三方库。\n4. 不要有任何 print、input、文件读写、网络访问等副作用。\n5. 必须解析出用户指定的**所有必需字段**(required_keys),字段值不能为空。\n6. 尽量健壮:用正则/分隔符解析,容忍字段顺序内的空格。\n"
},
{
"role": "user",
"content": "现有系统无法解析下面这种格式的日志,请生成解析函数。\n\n【失败样本(同一种新格式)】\n2026-07-30T05:23:42Z|INFO|checkout.worker|step=1|accepted real request req-81\n2026-07-30T05:23:42Z|WARNING|checkout.worker|step=2|retrying payment authorization req-81\n2026-07-30T05:23:42Z|ERROR|checkout.worker|step=3|authorization exhausted req-81\n\n【系统报错】\n没有任何已注册解析器能解析该行:'2026-07-30T05:23:42Z|INFO|checkout.worker|step=1|accepted real request req-81'\n\n【必需解析出的字段 required_keys】\n['timestamp', 'level', 'module', 'step', 'message']"
}
],
"temperature": 0
},
"response": {
"id": "0217853602230262b35cfdb86d4e4b324c5d7f5a75557a23d3680",
"model": "doubao-seed-1-6-250615",
"finish_reason": "stop",
"content": "```python\nimport re\n\ndef parse(line: str) -> dict | None:\n # 定义匹配日志格式的正则表达式\n pattern = r'^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z)\\|([A-Z]+)\\|([\\w.]+)\\|step=(\\d+)\\|(.*)$'\n match = re.match(pattern, line.strip())\n \n if not match:\n return None\n \n # 提取各个字段\n timestamp = match.group(1)\n level = match.group(2)\n module = match.group(3)\n step = match.group(4)\n message = match.group(5)\n \n # 确保所有必需字段都不为空\n if not all([timestamp, level, module, step, message]):\n return None\n \n return {\n 'timestamp': timestamp,\n 'level': level,\n 'module': module,\n 'step': step,\n 'message': message\n }\n```"
},
"usage": {
"prompt_tokens": 588,
"completion_tokens": 1136,
"total_tokens": 1724,
"cached_prompt_tokens": 0
}
},
{
"purpose": "generate-live_bracket_parser-attempt-1",
"called_at_utc": "2026-07-29T21:25:00.326777+00:00",
"latency_s": 49.954,
"request": {
"model": "doubao-seed-1-6-250615",
"messages": [
{
"role": "system",
"content": "你是一个\"日志解析器代码生成器\"。用户会给你一批**同一种未知格式**的日志样本,\n以及现有系统解析失败的报错。你的任务:编写一个 Python 函数,把这种格式的每一行解析成结构化字段。\n\n严格要求:\n1. 只输出一个 Python 代码块(```python ... ```),不要任何解释文字。\n2. 代码块里必须定义一个函数:def parse(line: str) -> dict | None\n - 输入是一行日志(字符串)。\n - 如果这行符合你要解析的格式,返回一个 dict,键为字段名(英文小写下划线),值为解析出的内容。\n - 如果这行**不符合**这种格式,必须返回 None(不要抛异常,把机会让给其它解析器)。\n3. 只能使用 Python 标准库(re、json、datetime 等),不要 import 第三方库。\n4. 不要有任何 print、input、文件读写、网络访问等副作用。\n5. 必须解析出用户指定的**所有必需字段**(required_keys),字段值不能为空。\n6. 尽量健壮:用正则/分隔符解析,容忍字段顺序内的空格。\n"
},
{
"role": "user",
"content": "现有系统无法解析下面这种格式的日志,请生成解析函数。\n\n【失败样本(同一种新格式)】\n[2026-07-29T21:23:42.606+00:00] (INFO) <tool=inventory_lookup> {latency_ms=34 status=ok} :: stock check completed\n[2026-07-29T21:23:42.609+00:00] (WARNING) <tool=payment_api> {latency_ms=181 status=retry} :: upstream requested retry\n[2026-07-29T21:23:42.612+00:00] (ERROR) <tool=payment_api> {latency_ms=412 status=timeout} :: deadline exceeded\n\n【系统报错】\n没有任何已注册解析器能解析该行:'[2026-07-29T21:23:42.606+00:00] (INFO) <tool=inventory_lookup> {latency_ms=34 status=ok} :: stock check completed'\n\n【必需解析出的字段 required_keys】\n['timestamp', 'level', 'tool', 'latency_ms', 'status', 'message']"
}
],
"temperature": 0
},
"response": {
"id": "0217853602505592b35cfdb86d4e4b324c5d7f5a75557a2d2f0d6",
"model": "doubao-seed-1-6-250615",
"finish_reason": "stop",
"content": "```python\nimport re\n\ndef parse(line: str) -> dict | None:\n # 定义日志格式的正则表达式模式\n pattern = r'^\\[(?P<timestamp>[^\\]]+)\\]\\s*\\((?P<level>[^)]+)\\)\\s*<tool=(?P<tool>[^>]+)>\\s*\\{latency_ms=(?P<latency_ms>\\d+)\\s+status=(?P<status>\\w+)\\}\\s*::\\s*(?P<message>.*)$'\n \n # 尝试匹配日志行\n match = re.match(pattern, line.strip())\n if not match:\n return None\n \n # 提取匹配的组\n groups = match.groupdict()\n \n # 检查所有必需字段是否存在且不为空\n required_keys = ['timestamp', 'level', 'tool', 'latency_ms', 'status', 'message']\n for key in required_keys:\n if key not in groups or not groups[key]:\n return None\n \n # 转换latency_ms为整数\n try:\n groups['latency_ms'] = int(groups['latency_ms'])\n except ValueError:\n return None\n \n return groups\n```"
},
"usage": {
"prompt_tokens": 661,
"completion_tokens": 2452,
"total_tokens": 3113,
"cached_prompt_tokens": 0
}
},
{
"purpose": "vision-review-rendered-parser-table",
"called_at_utc": "2026-07-29T21:25:15.349082+00:00",
"latency_s": 14.418,
"request": {
"model": "doubao-seed-1-6-250615",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Inspect this rendered adaptive-log table. Return strict JSON: {\"pass\": bool, \"readable\": bool, \"has_multiple_parsers\": bool, \"observed_columns\": [strings], \"reason\": string}. Pass only if the table is readable, contains multiple parsed rows, and visibly includes both parser identifiers and structured fields."
},
{
"type": "image_url",
"image_url": {
"sha256": "d8dfad31b33fc0fa5dcf60b99041e61ef531627e5bde64e92f1cb345ab2cec52",
"bytes": 96289
}
}
]
}
],
"temperature": 0
},
"response": {
"id": "0217853603011172b35cfdb86d4e4b324c5d7f5a75557a2e2712e",
"model": "doubao-seed-1-6-250615",
"finish_reason": "stop",
"content": "{\"pass\": true, \"readable\": true, \"has_multiple_parsers\": true, \"observed_columns\": [\"_parser\", \"latency_ms\", \"level\", \"message\", \"module\", \"status\", \"step\", \"timestamp\", \"tool\"], \"reason\": \"The table is readable with clear columns, contains 6 parsed rows, includes multiple parser identifiers (_parser: live_pipe_parser, live_bracket_parser), and structured fields (latency_ms, level, message, etc.)\"}"
},
"usage": {
"prompt_tokens": 2447,
"completion_tokens": 481,
"total_tokens": 2928,
"cached_prompt_tokens": 0
}
}
]
@@ -0,0 +1,4 @@
<!doctype html><meta charset=utf-8><title>Adaptive log parser</title>
<style>body{font-family:system-ui;background:#0b1020;color:#e8eefc;padding:30px}table{border-collapse:collapse;width:100%;background:#121a30}th,td{border:1px solid #33415f;padding:9px;text-align:left}th{color:#79c0ff}h1{color:#a5d6ff}</style>
<h1>Self-healed live log stream</h1><p>6 runtime records parsed after hot update.</p>
<table><thead><tr><th>_parser</th><th>latency_ms</th><th>level</th><th>message</th><th>module</th><th>status</th><th>step</th><th>timestamp</th><th>tool</th></tr></thead><tbody><tr><td>live_pipe_parser</td><td></td><td>INFO</td><td>accepted real request req-81</td><td>checkout.worker</td><td></td><td>1</td><td>2026-07-30T05:23:42Z</td><td></td></tr><tr><td>live_pipe_parser</td><td></td><td>WARNING</td><td>retrying payment authorization req-81</td><td>checkout.worker</td><td></td><td>2</td><td>2026-07-30T05:23:42Z</td><td></td></tr><tr><td>live_pipe_parser</td><td></td><td>ERROR</td><td>authorization exhausted req-81</td><td>checkout.worker</td><td></td><td>3</td><td>2026-07-30T05:23:42Z</td><td></td></tr><tr><td>live_bracket_parser</td><td>34</td><td>INFO</td><td>stock check completed</td><td></td><td>ok</td><td></td><td>2026-07-29T21:23:42.606+00:00</td><td>inventory_lookup</td></tr><tr><td>live_bracket_parser</td><td>181</td><td>WARNING</td><td>upstream requested retry</td><td></td><td>retry</td><td></td><td>2026-07-29T21:23:42.609+00:00</td><td>payment_api</td></tr><tr><td>live_bracket_parser</td><td>412</td><td>ERROR</td><td>deadline exceeded</td><td></td><td>timeout</td><td></td><td>2026-07-29T21:23:42.612+00:00</td><td>payment_api</td></tr></tbody></table>
Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB