สำรวจข้อมูลในเคอร์เนลถาวร
คู่มือนี้แสดงวิธีให้เอเจนต์โหลดสิ่งที่แพงครั้งเดียว แล้วถามคำถามหลายข้อจากมัน แทนที่จะจ่ายค่าโหลดทุกคำถาม
เครื่องมือ eval รันอินเทอร์พรีเตอร์แบบถาวร ตัวแปร อิมพอร์ต และข้อมูลที่โหลดไว้จะอยู่ต่อระหว่างการเรียก
ทำไมไม่แค่รันสคริปต์
หัวข้อที่มีชื่อว่า “ทำไมไม่แค่รันสคริปต์”การรัน python -c ครั้งเดียวต้องจ่ายค่าเตรียมการทุกคำถาม การโหลดดาต้าเฟรมกินเวลาหลายวินาทีและหลายร้อยเมกะไบต์ ส่วนการวาดแผนภูมิกินเวลาแค่หลักมิลลิวินาที เมื่อทุกคำถามมีค่าโหลดติดมาด้วย เอเจนต์จึงถามคำถามน้อยกว่าที่ควร และแต่ละคำตอบก็กลับมาเป็นข้อความที่มันต้องแยกวิเคราะห์ซ้ำเอง
โหลดครั้งเดียว แล้วถาม
หัวข้อที่มีชื่อว่า “โหลดครั้งเดียว แล้วถาม”โหลด
data/runs.csvแล้วบอกระยะเวลา p95 แยกตามเอเจนต์
import pandas as pdruns = 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 pltruns.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 ครั้งเดียวอย่างน้อยก็จบ ในขณะที่เคอร์เนลคือเชลล์ที่จำได้
มันไม่บูตเอนโคลเจอร์เพื่อไปให้ถึงตรงนั้น ซึ่งเป็นกฎเดียวกับที่หยุดแท็บริกไม่ให้สตาร์ตอัตโนมัติ ถ้าคุณอยากให้เคอร์เนลอยู่ในเอนโคลเจอร์ ให้เปิดเชลล์ของการสนทนาก่อน ดูให้เอเจนต์มีเครื่องสำหรับทดสอบ
ข้อจำกัด
หัวข้อที่มีชื่อว่า “ข้อจำกัด”- หนึ่งเซลล์ต่อครั้งต่อเคอร์เนล สองเซลล์ที่แย่งกันในอินเทอร์พรีเตอร์เดียวคือสองครึ่งของสองโปรแกรมที่สลับกันในเนมสเปซเดียว
- เอาต์พุตมีเพดาน เซลล์ที่อยู่ในลูปพิมพ์จะถูกตัดทอน แทนที่จะปล่อยให้เต็มหน้าต่างบริบท
- สี่รูปภาพต่อเซลล์ ลูปวาดแผนภูมิอาจปล่อยภาพออกมาหนึ่งภาพต่อรอบ และรูปภาพทุกภาพคือต้นทุนคงที่ก้อนใหญ่ในคำขอที่พามันไป
- เคอร์เนลตายไปพร้อมการรัน เคอร์เนลที่ยังถือดาต้าเฟรมอยู่หลังการสนทนาจบคือการรั่วไหล
ที่เกี่ยวข้อง
หัวข้อที่มีชื่อว่า “ที่เกี่ยวข้อง”- แซนด์บ็อกซ์และความปลอดภัย — “อยู่ในเอนโคลเจอร์” หมายถึงอะไรที่นี่
- ให้เอเจนต์มีเครื่องสำหรับทดสอบ — การเปิดเอนโคลเจอร์
- เครื่องมือเอเจนต์ในตัว — อาร์กิวเมนต์ต่าง ๆ