ข้ามไปยังเนื้อหา

สำรวจข้อมูลในเคอร์เนลถาวร

คู่มือนี้แสดงวิธีให้เอเจนต์โหลดสิ่งที่แพงครั้งเดียว แล้วถามคำถามหลายข้อจากมัน แทนที่จะจ่ายค่าโหลดทุกคำถาม

เครื่องมือ eval รันอินเทอร์พรีเตอร์แบบถาวร ตัวแปร อิมพอร์ต และข้อมูลที่โหลดไว้จะอยู่ต่อระหว่างการเรียก

การรัน python -c ครั้งเดียวต้องจ่ายค่าเตรียมการทุกคำถาม การโหลดดาต้าเฟรมกินเวลาหลายวินาทีและหลายร้อยเมกะไบต์ ส่วนการวาดแผนภูมิกินเวลาแค่หลักมิลลิวินาที เมื่อทุกคำถามมีค่าโหลดติดมาด้วย เอเจนต์จึงถามคำถามน้อยกว่าที่ควร และแต่ละคำตอบก็กลับมาเป็นข้อความที่มันต้องแยกวิเคราะห์ซ้ำเอง

โหลด data/runs.csv แล้วบอกระยะเวลา p95 แยกตามเอเจนต์

import pandas as pd
runs = pd.read_csv("data/runs.csv")
len(runs)

นิพจน์สุดท้ายจะถูกสะท้อนกลับแบบที่โน้ตบุ๊กทำ len(runs) จึงรายงานจำนวนแถวโดยไม่ต้องใช้ print

จากนั้นในการเรียกแยกต่างหาก:

runs.groupby("agent")["duration_ms"].quantile(0.95).sort_values()

runs ยังโหลดอยู่ ดาต้าเฟรมของ pandas จะกลับมาโดยแสดงผลเป็นตาราง ไม่ใช่เป็น repr

import matplotlib.pyplot as plt
runs.groupby("agent")["duration_ms"].mean().plot.bar()

ภาพจะถูกจับหลังจบเซลล์และส่งกลับมาเป็นรูปภาพ ซึ่งทรานสคริปต์แสดงผล คุณเห็นแผนภูมิ และเอเจนต์ก็เห็นด้วย

ภาพจะถูกปิดหลังการจับ ภาพที่ไม่ได้ถูกเก็บจะถูกวาดใหม่และส่งซ้ำโดยเซลล์ถัดไปด้วย เซสชันห้าเซลล์จึงส่งแผนภูมิแรกออกมาห้าครั้ง

สิ่งเหล่านี้ถูกเขียนใหม่เป็นโค้ดธรรมดาแทนที่จะขึ้นข้อผิดพลาด:

สิ่งที่คุณพิมพ์ สิ่งที่เกิดขึ้น
%pip install x รัน pip แล้วล้างแคชโมดูลเพื่อให้ import ครั้งถัดไปเห็นมัน
%cd path os.chdir
!command โพรเซสย่อยที่ถูกจับ
%%bash ส่วนที่เหลือของเซลล์เป็นสคริปต์เชลล์
%%timeit การรันจับเวลา 1000 ครั้ง

การไล่แคชของ %pip คือข้อที่สำคัญ การติดตั้งลงในอินเทอร์พรีเตอร์ที่ทำงานอยู่ไม่ส่งผลใด ๆ กับโมดูลที่ถูกอิมพอร์ตไปแล้ว หากไม่มีมัน เวอร์ชันที่คุณเพิ่งติดตั้งก็ไม่ใช่เวอร์ชันที่กำลังรัน

paths = tool("find", {"pattern": "**/*.dart", "path": "lib"})
for path in paths.splitlines()[:100]:
contents = tool("read", {"path": path})
...

tool(name, args) เข้าไปในทะเบียนเครื่องมือของเอเจนต์เองอีกครั้ง เซลล์จึงกระจายงานไปยังไฟล์เป็นร้อยไฟล์ หรือมอบหมายผ่าน task ได้ โดยที่โมเดลไม่ต้องใช้หนึ่งเทิร์นต่อรายการ

การเรียกผ่านสะพานจะระงับการหมดเวลาของเซลล์ขณะที่ยังค้างอยู่ งบประมาณนี้วัดความไม่มีการใช้งาน ไม่ใช่นาฬิกาแขวน เซลล์ที่กระจายงานไปยังเอเจนต์ย่อยแล้วรอสี่นาทีจึงไม่ถือว่าค้าง และการฆ่ามันกลางการกระจายงานจะทำให้สถานะทั้งหมดของเคอร์เนลหายไป

eval(code: "…", reset: true, description: "Start a clean interpreter")

ทิ้งอินเทอร์พรีเตอร์แล้วเริ่มตัวใหม่ที่สะอาด ทุกอย่างที่โหลดไว้หายไป ซึ่งนั่นคือจุดประสงค์

อยู่ในเอนโคลเจอร์ของการสนทนาเมื่อมี ไม่งั้นอยู่บนโฮสต์

อินเทอร์พรีเตอร์แบบถาวรที่ขับเคลื่อนโดยโมเดลที่อ่านรีโปที่ไม่น่าเชื่อถือ คือสิ่งที่การรันแบบอยู่ในเอนโคลเจอร์เท่านั้นมีอยู่เพื่อรองรับพอดี การเรียก bash ครั้งเดียวอย่างน้อยก็จบ ในขณะที่เคอร์เนลคือเชลล์ที่จำได้

มันไม่บูตเอนโคลเจอร์เพื่อไปให้ถึงตรงนั้น ซึ่งเป็นกฎเดียวกับที่หยุดแท็บริกไม่ให้สตาร์ตอัตโนมัติ ถ้าคุณอยากให้เคอร์เนลอยู่ในเอนโคลเจอร์ ให้เปิดเชลล์ของการสนทนาก่อน ดูให้เอเจนต์มีเครื่องสำหรับทดสอบ

  • หนึ่งเซลล์ต่อครั้งต่อเคอร์เนล สองเซลล์ที่แย่งกันในอินเทอร์พรีเตอร์เดียวคือสองครึ่งของสองโปรแกรมที่สลับกันในเนมสเปซเดียว
  • เอาต์พุตมีเพดาน เซลล์ที่อยู่ในลูปพิมพ์จะถูกตัดทอน แทนที่จะปล่อยให้เต็มหน้าต่างบริบท
  • สี่รูปภาพต่อเซลล์ ลูปวาดแผนภูมิอาจปล่อยภาพออกมาหนึ่งภาพต่อรอบ และรูปภาพทุกภาพคือต้นทุนคงที่ก้อนใหญ่ในคำขอที่พามันไป
  • เคอร์เนลตายไปพร้อมการรัน เคอร์เนลที่ยังถือดาต้าเฟรมอยู่หลังการสนทนาจบคือการรั่วไหล