في هذا البرنامج التعليمي، نقوم بتكوين وتشغيل كيمي كلي كعامل ترميز للذكاء الاصطناعي غير تفاعلي تمامًا. نقوم بتثبيت واجهة سطر الأوامر (CLI) من خلال الأشعة فوق البنفسجية باستخدام بيئة Python 3.13 المعزولة، وتكوين مصادقة Moonshot API من خلال موفر يستند إلى TOML وتعريف النموذج، وإنشاء غلاف Python قابل لإعادة الاستخدام لتنفيذ أوامر CLI غير التفاعلية. نقوم بعد ذلك بتطبيق Kimi على سير عمل واقعي للمشروع حيث نقوم بفحص قاعدة التعليمات البرمجية، وتحديد مخاطر التنفيذ، وتعديل ملفات المصدر بشكل مستقل، وإنشاء اختبارات الوحدة، وتنفيذ أوامر التحقق من الصحة، والتكرار حتى يجتاز المشروع مجموعة الاختبار الخاصة به. نستكشف أيضًا تدفقات أحداث JSONL المنظمة، والجلسات المستمرة متعددة المنعطفات، ووضع الخطة، واختيار النموذج، وحلقات Ralph، وتكاملات MCP، وتصدير الجلسة، والوصول عبر الويب، مما يمنحنا أساسًا عمليًا لدمج Kimi CLI في التطوير الآلي وخطوط أنابيب الهندسة الوكيلة.
إعداد البيئة وتثبيت Kimi CLI
import os, subprocess, textwrap, json, getpass, pathlib, shutil
HOME = pathlib.Path.home()
def sh(cmd, check=True, env=None, cwd=None):
"""Run a shell command, stream its output, return CompletedProcess."""
print(f"\n$ {cmd}")
e = {**os.environ, **(env or {})}
r = subprocess.run(cmd, shell=True, env=e, cwd=cwd,
capture_output=True, text=True)
if r.stdout: print(r.stdout)
if r.stderr: print(r.stderr[-2000:])
if check and r.returncode != 0:
raise RuntimeError(f"Command failed ({r.returncode}): {cmd}")
return r
print("=" * 70, "\nPART 1: Installing uv + Kimi CLI\n", "=" * 70)
sh("curl -LsSf https://astral.sh/uv/install.sh | sh")
UV_BIN = str(HOME / ".local" / "bin")
os.environ["PATH"] = f"{UV_BIN}:{os.environ['PATH']}"
sh("uv tool install --python 3.13 kimi-cli")
sh("kimi --version")
نبدأ باستيراد وحدات Python المطلوبة وتحديد مساعد أوامر shell القابل لإعادة الاستخدام لتنفيذ العمليات الفرعية الخاضعة للتحكم. نقوم بتثبيت uv، ونضيف دليله الثنائي إلى مسار البيئة، ونستخدمه لتزويد Kimi CLI بوقت تشغيل Python 3.13 معزول. نقوم بعد ذلك بالتحقق من التثبيت عن طريق الاستعلام عن إصدار Kimi CLI المثبت.
تكوين مصادقة Moonshot API والوصول إلى النموذج
print("=" * 70, "\nPART 2: Configuring API access\n", "=" * 70)
try:
from google.colab import userdata
API_KEY = userdata.get("MOONSHOT_API_KEY")
print("Loaded key from Colab Secrets.")
except Exception:
API_KEY = getpass.getpass("Paste your Moonshot API key (hidden): ")
BASE_URL = "https://api.moonshot.ai/v1"
MODEL_NAME = "kimi-k2-0711-preview"
kimi_dir = HOME / ".kimi"
kimi_dir.mkdir(exist_ok=True)
(kimi_dir / "config.toml").write_text(textwrap.dedent(f"""\
default_model = "kimi-k2"
[providers.moonshot]
type = "kimi"
base_url = "{BASE_URL}"
api_key = "{API_KEY}"
[models.kimi-k2]
provider = "moonshot"
model = "{MODEL_NAME}"
max_context_size = 131072
"""))
print("Wrote ~/.kimi/config.toml")
نقوم باسترداد مفتاح Moonshot API بشكل آمن من Google Colab Secrets أو نطلبه عبر مطالبة إدخال مخفية. نقوم بتحديد نقطة نهاية Moonshot API ونموذج Kimi المستهدف، ثم نقوم بإنشاء دليل تكوين .kimi المطلوب. نكتب إعدادات الموفر والنموذج ونافذة السياق والنموذج الافتراضي إلى config.toml للمصادقة غير التفاعلية.
بناء غلاف تنفيذ كيمي غير تفاعلي قابل لإعادة الاستخدام
def kimi(prompt, work_dir=".", yolo=False, cont=False, quiet=True,
stream_json=False, extra="", timeout=600):
"""Run one headless Kimi CLI turn and return its stdout."""
flags = []
if stream_json:
flags.append("--print --output-format stream-json")
elif quiet:
flags.append("--quiet")
else:
flags.append("--print")
if yolo: flags.append("--yolo")
if cont: flags.append("--continue")
flags.append(f'-w "{work_dir}"')
if extra: flags.append(extra)
cmd = f'kimi {" ".join(flags)} -p "{prompt}"'
print(f"\n$ {cmd}\n" + "-" * 60)
r = subprocess.run(cmd, shell=True, capture_output=True,
text=True, timeout=timeout)
out = r.stdout.strip()
print(out if out else r.stderr[-1500:])
return out
نحن نحدد غلاف Python الذي ينفذ مطالبات Kimi CLI برمجيًا دون الحاجة إلى جلسة طرفية تفاعلية. نقوم بتجميع العلامات ديناميكيًا للإخراج الهادئ، وأحداث JSON المتدفقة، والموافقة على الأداة المستقلة، واستمرار الجلسة، وعزل دليل العمل، وحدود الخطوات. نقوم بالتقاط مخرجات الأمر، وعرض الاستجابة النهائية أو تفاصيل الخطأ، وإرجاع النتيجة لمزيد من المعالجة.
إنشاء وتحليل نموذج مشروع واقعي
print("=" * 70, "\nPART 4: Demo A â codebase Q&A\n", "=" * 70)
proj = pathlib.Path("/content/demo_project")
if proj.exists(): shutil.rmtree(proj)
(proj / "app").mkdir(parents=True)
(proj / "app" / "inventory.py").write_text(textwrap.dedent("""\
class Inventory:
def __init__(self):
self.items = {}
def add(self, name, qty):
self.items[name] = self.items.get(name, 0) + qty
def remove(self, name, qty):
# BUG: allows negative stock and KeyError on missing items
self.items[name] = self.items[name] - qty
def total(self):
return sum(self.items.values())
"""))
(proj / "app" / "main.py").write_text(textwrap.dedent("""\
from inventory import Inventory
inv = Inventory()
inv.add("widget", 10)
inv.remove("widget", 3)
print("Total stock:", inv.total())
"""))
(proj / "README.md").write_text("# Demo: a tiny inventory service\n")
kimi("Summarize this project's structure and purpose in under 120 words, "
"then list any bugs or design risks you can spot in inventory.py.",
work_dir=str(proj))
نقوم بإنشاء مشروع صغير لإدارة المخزون يتضمن وحدة Python، وبرنامج نصي قابل للتنفيذ، وملف README. لقد قمنا عمدًا بتضمين عيوب التنفيذ لتمكين Kimi من فحص هيكل المستودع وتحديد المخاطر الوظيفية ومخاطر التصميم. نقوم بعد ذلك بتشغيل موجه تحليل المشروع للقراءة فقط في دليل المشروع ونطلب تقييمًا فنيًا موجزًا.
أتمتة إصلاح التعليمات البرمجية والاختبار والتحقق المستقل
print("=" * 70, "\nPART 5: Demo B â Kimi fixes the bug & adds tests\n", "=" * 70)
kimi("Fix the bugs in app/inventory.py: remove() must raise KeyError->ValueError "
"for unknown items and never allow negative stock. Then create tests.py at "
"the project root using unittest covering add/remove/total and edge cases, "
"run it with 'python -m unittest tests -v', and iterate until all tests pass. "
"Finally print the test results.",
work_dir=str(proj), yolo=True, extra="--max-steps-per-turn 30")
print("\n--- Files after Kimi's edits ---")
for f in sorted(proj.rglob("*.py")):
print(f"\n### {f.relative_to(proj)} ###\n{f.read_text()}")
sh("python -m unittest tests -v", cwd=str(proj), check=False)
نحن نسمح لـ Kimi بتعديل المشروع بشكل مستقل، وتصحيح منطق المخزون، وإنشاء اختبارات الوحدة، وتنفيذ مجموعة الاختبار. نقوم بتكوين حد أقصى لخطوة الوكيل حتى يتمكن النموذج من تشخيص حالات الفشل بشكل متكرر وتحسين تنفيذها حتى نجاح التحقق من الصحة. نقوم بفحص ملفات Python الناتجة ونعيد تشغيل الاختبارات بشكل مستقل للتأكد من أن التغييرات التي تم إنشاؤها تعمل بشكل صحيح.
استكشاف JSONL المهيكلة والجلسات والميزات المتقدمة
print("=" * 70, "\nPART 6: Demo C â machine-readable JSONL events\n", "=" * 70)
raw = kimi("In one sentence, what does app/main.py print when run?",
work_dir=str(proj), stream_json=True, quiet=False)
print("\nParsed event types:")
for line in raw.splitlines():
try:
evt = json.loads(line)
print(" â¢", evt.get("type", "?"), "-",
str(evt)[:100].replace("\n", " "))
except json.JSONDecodeError:
pass
print("=" * 70, "\nPART 7: Demo D â conversational memory\n", "=" * 70)
kimi("Remember this: our release codename is BLUE-FALCON.", work_dir=str(proj))
kimi("What is our release codename? Answer with just the codename.",
work_dir=str(proj), cont=True)
print("=" * 70, "\nPART 8: Power-user reference\n", "=" * 70)
print(textwrap.dedent("""
# Plan mode â read-only exploration, produces an implementation plan:
kimi --quiet --plan -w /content/demo_project -p "Plan adding SQLite persistence"
# Pick a different model at runtime (must exist in config.toml):
kimi --quiet -m kimi-k2 -p "hello"
# Thinking mode (if the model supports it):
kimi --quiet --thinking -p "Prove sqrt(2) is irrational"
# Ralph loop â feed the same prompt repeatedly for one big task
# until the agent outputs <choice>STOP</choice> or the limit hits:
kimi --print --yolo --max-ralph-iterations 5 -w /content/demo_project \\
-p "Keep improving test coverage; STOP when everything is covered."
# MCP tools â give Kimi extra capabilities via an MCP config file:
# /content/mcp.json -> {"mcpServers": {"context7":
# {"url": "https://mcp.context7.com/mcp",
# "headers": {"CONTEXT7_API_KEY": "YOUR_KEY"}}}}
kimi --quiet --mcp-config-file /content/mcp.json -p "Use context7 to ..."
# Export a session (context.jsonl, wire.jsonl, state.json) for debugging:
kimi export --yes
# Web UI (needs a tunnel on Colab, e.g. cloudflared/ngrok, since it
# binds locally): kimi web --no-open --port 5494
"""))
print("Tutorial complete â â Kimi CLI is installed, authenticated, and has "
"explored, fixed, tested, and remembered a real project headlessly.")
نقوم بتنفيذ Kimi باستخدام مخرجات JSON المتدفقة ونحلل كل حدث JSONL لفحص أنواع الاستجابة التي يمكن قراءتها آليًا. نعرض الذاكرة المستمرة متعددة المنعطفات من خلال تخزين الاسم الرمزي للإصدار واسترجاعه أثناء جلسة مستمرة في نفس دليل العمل. نختتم بمراجعة الأوامر المتقدمة للتخطيط، وتبديل النماذج، ووضع التفكير، وحلقات رالف، وأدوات MCP، وتصدير الجلسة، والوصول إلى الويب.
في الختام، أنشأنا سير عمل Kimi CLI شاملًا يعمل بالكامل دون الاعتماد على جلسة طرفية تفاعلية. لقد انتقلنا من توفير البيئة وتكوين واجهة برمجة التطبيقات (API) إلى تحليل المشروع وإصلاح التعليمات البرمجية المستقلة وإنشاء الاختبار وتحليل المخرجات المنظم واستمرار الجلسة. لقد تحققنا أيضًا بشكل مستقل من تغييرات الوكيل، مما يساعدنا على التمييز بين المخرجات الناتجة ونتائج التنفيذ الفعلية وتحسين موثوقية سير العمل. مع وجود أوامر الغلاف والأوامر المرجعية القابلة لإعادة الاستخدام، يمكننا الآن توسيع نفس البنية لتشمل مستودعات أكبر، ومهام التحقق من صحة نمط CI، وسلاسل الأدوات التي تدعم MCP، وحلقات تحسين البرامج التكرارية، وغيرها من مسارات عمل التطوير المدعومة بالذكاء الاصطناعي القابلة للبرمجة.
تحقق من الرمز الكامل هنا أيضًا، لا تتردد في متابعتنا على تغريدÂ ولا تنسى الانضمام إلينا 150 ألف + مل§ والاشتراك في النشرة الإخبارية لدينا. انتظر! هل أنت على برقية؟ الآن يمكنك الانضمام إلينا على التليجرام أيضًا.
هل تحتاج إلى الشراكة معنا للترويج لصفحة GitHub Repo أو صفحة الوجه المعانقة أو إصدار المنتج أو الندوة عبر الويب وما إلى ذلك؟ تواصل معنا
سناء حسن، مستشارة متدربة في Marktechpost وطالبة بدرجة مزدوجة في IIT Madras، شغوفة بتطبيق التكنولوجيا والذكاء الاصطناعي لمواجهة تحديات العالم الحقيقي. ومع اهتمامه الشديد بحل المشكلات العملية، فهو يقدم منظورًا جديدًا للتقاطع بين الذكاء الاصطناعي وحلول الحياة الواقعية.
اكتشاف المزيد من كحيل | أخبار التقنية
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.
