cocode.dk EN FA

فایلی را پیدا کنید که پاسخ در آن است

zjm-rag یعنی RAG روی فایل‌های خودتان. zg پوشه‌هایتان را می‌گردد، Jev نتیجه‌ها را می‌خواند و می‌سنجد کدام فایل‌ها واقعاً پاسخ را در خود دارند، و بعد یک LLM فقط از روی همان فایل‌ها جواب می‌دهد و مسیرشان را هم می‌آورد.

کتابخانهٔ zjm_rag و فرمان zjm آماده‌اند، با خروجی --json برای اسکریپت‌ها. API روی HTTP و سرور MCP مشخصاتشان نوشته شده و قدم بعدی ساختن آن‌هاست.

>>> zjm_rag.ask("which linter checks CSS files")
  1. 0.96agent-linters/README.md
  2. 0.81agent-linters/bin/lintp
  3. 0.58agent-linters/llms.txt
  4. آستانه ۰٫۵: فایل‌های زیر آن به‌عنوان ردشده برمی‌گردند. سه فایل برتر از میان پذیرفته‌ها به LLM می‌رسند.
  5. 0.22agent-linters/shell/linters.fish
  6. 0.14agent-linters/website/index.html
  7. 0.09agent-linters/install.sh
  8. 0.03message-test-plugin/CONTRIBUTING.md
  9. 0.02message-test-plugin/scripts/validate-plugin.py

Biome checks .css and .scss files. It is listed in the linter table in agent-linters/README.md.

این یک نمونهٔ نمایشی است، نه خروجی یک اجرای واقعی. مسیرها از فایل آزمون خود مخزن آمده‌اند و امتیازها ساختگی‌اند تا شکل نتیجه را نشان دهند.

سه مرحله، هر کدام باریک‌تر از قبلی

جست‌وجو تور را پهن می‌اندازد و یک داور صید را سوا می‌کند. فقط فایل‌هایی که داور می‌پذیرد به مدل می‌رسند، پس مدل خود فایل‌ها را می‌خواند، از هر کدام تا ۲۰٬۰۰۰ نویسه، نه انبوهی از تکه‌های پراکنده.

۴۰ نتیجه، در حداکثر ۸ فایل

zg پیدا می‌کند

یک جست‌وجوی ترکیبی، هم کلیدواژه‌ای و هم معنایی، روی نمایهٔ محلی zg. find تا ۴۰ نتیجه برمی‌دارد، آن‌ها را بر اساس فایل گروه می‌کند و از هر فایل دو تکهٔ کوتاه نگه می‌دارد.

۸ فایل، هر کدام با یک احتمال

Jev داوری می‌کند

یک درخواست به Jev، یعنی OpenRouter Decisions API، از همهٔ فایل‌ها یک سؤال را می‌پرسد: آیا این فایل چیزی را که پاسخ لازم دارد در خود دارد؟ Jev هر فایل را از روی مسیر و تکه‌هایش می‌سنجد و یک احتمال برمی‌گرداند. فایل‌هایی با ۰٫۵ یا بیشتر پذیرفته می‌شوند. بقیه به‌عنوان ردشده برمی‌گردند، پس هیچ فایلی بی‌سروصدا گم نمی‌شود.

حداکثر ۳ فایل پذیرفته، یک پاسخ

LLM جواب می‌دهد

ask سه فایل پذیرفتهٔ برتر را با یک دستور به claude CLI می‌دهد: فقط از روی همین فایل‌ها جواب بده، مسیر فایل را بیاور، و اگر پاسخ در آن‌ها نیست همین را بگو. اگر هیچ فایلی به آستانه نرسد، سراغ LLM نمی‌رود.

چه چیزی از رایانهٔ شما بیرون می‌رود

جست‌وجو محلی است، اما داوری و پاسخ نه. فقط پوشه‌هایی را به آن بدهید که حاضرید محتوایشان را در گفت‌وگو با همین سرویس‌ها بچسبانید.

zgروی رایانهٔ خودتان اجرا می‌شود، روی نمایهٔ یک کپی از پوشه‌هایتان.
Jevسؤال، همراه با مسیر و حداکثر دو تکه از هر فایل، از حداکثر ۸ فایل، به OpenRouter می‌رود.
claudeسؤال، همراه با مسیر و ۲۰٬۰۰۰ نویسهٔ اول هر فایلی که پاسخ از آن می‌آید، حداکثر سه فایل، به Anthropic می‌رود.

آنچه امروز هست و آنچه در برنامه است

امروز

  • کتابخانهٔ zjm_rag، فقط با کتابخانهٔ استاندارد پایتون: index، find و ask.
  • فرمان zjm همین کارها را از خط فرمان انجام می‌دهد، به‌علاوهٔ zjm doctor. با --json نتیجه به شکل یک شیء JSON چاپ می‌شود. مشخصات خط فرمان
  • index پوشه‌هایتان را در یک پوشهٔ جدا (به‌طور پیش‌فرض در پوشهٔ موقت سیستم) کپی می‌کند و از کپی نمایه می‌سازد، پس به پروژه‌هایتان دست نمی‌زند. multilingual=True مدلی برای محتوای غیرانگلیسی انتخاب می‌کند.
  • find فایل‌ها را با یک آستانه به پذیرفته و ردشده تقسیم می‌کند و بر اساس امتیاز، رتبهٔ zg، زمان تغییر یا مسیر مرتب می‌کند.
  • تست‌ها با نسخه‌های ساختگی کار می‌کنند و هیچ‌وقت zg، Jev یا LLM را صدا نمی‌زنند.

در برنامه، برای هر مشخصه یک pull request

  • zjm serve، یک API از نوع JSON روی 127.0.0.1 برای برنامه‌هایی به هر زبانی. مشخصات HTTP
  • zjm mcp، یک سرور MCP برای عامل‌های هوش مصنوعی، و یک اسکریپت نصب یک‌خطی. مشخصات MCP و نصب

نصب کنید و امتحانش کنید

از یک کلون مخزن نصبش کنید

git clone https://github.com/cocodedk/zjm-rag.git && cd zjm-rag
pip install .

یک پوشه را نمایه کنید، بعد بپرسید، از خط فرمان یا از پایتون

zjm index ~/projects/some-repo              # copy, then index the copy
zjm find "which linter checks CSS files"    # accepted and rejected files
zjm ask "which linter checks CSS files"     # the answer and its sources
zjm doctor                                  # checks zg, claude and the API key
import os, zjm_rag
zjm_rag.index([os.path.expanduser("~/projects/some-repo")])   # copy, then index the copy
hits = zjm_rag.find("which linter checks CSS files")          # accepted and rejected files
reply = zjm_rag.ask("which linter checks CSS files")
print(reply["answer"], reply["files"])
cocode.dk