llm-docsmith - وبلاگ سایمون ویلیسون

llm-docsmith (از طریق) ماتئوس پدرونی این پلاگین مرتب را برای LLM برای افزودن داک‌استرینگ به کد پایتون موجود منتشر کرد. می‌توانید آن را به این صورت اجرا کنید:

llm install llm-docsmith
llm docsmith ./scripts/main.py -o

گزینه -o تغییراتی را که اعمال می‌شوند پیش‌نمایش می‌کند - بدون -o فایل‌ها را مستقیماً ویرایش می‌کند.

همچنین یک پارامتر -m claude-3.7-sonnet برای استفاده از یک مدل جایگزین از مدل پیش‌فرض (GPT-4o mini) می‌پذیرد.

پیاده‌سازی از بسته "Concrete Syntax Tree" پایتون libcst برای دستکاری کد استفاده می‌کند، که به این معنی است که هیچ شانسی وجود ندارد که چیزی غیر از داک‌استرینگ‌ها را ویرایش کند.

در اینجا سیستم پرامپت کامل مورد استفاده آمده است.

یک ترفند مرتب در انتهای سیستم پرامپت این است که می‌گوید:

یک قالب JSON دریافت خواهید کرد. اسلات‌های مشخص شده با <SLOT> را با توضیحات مناسب پر کنید. به صورت JSON برگردانید.

این قالب در واقع JSON ارائه شده است که با استفاده از این کلاس‌های Pydantic تولید شده است:

class Argument(BaseModel):
    name: str
    description: str
    annotation: str | None = None
    default: str | None = None

class Return(BaseModel):
    description: str
    annotation: str | None

class Docstring(BaseModel):
    node_type: Literal["class", "function"]
    name: str
    docstring: str
    args: list[Argument] | None = None
    ret: Return | None = None

class Documentation(BaseModel):
    entries: list[Docstring]

کد یادداشت‌های <SLOT> را به این در مکان‌های مختلف اضافه می‌کند، بنابراین قالب موجود در پرامپت به این صورت در می‌آید:

{
  "entries": [
    {
      "node_type": "function",
      "name": "create_docstring_node",
      "docstring": "<SLOT>",
      "args": [
        {
          "name": "docstring_text",
          "description": "<SLOT>",
          "annotation": "str",
          "default": null
        },
        {
          "name": "indent",
          "description": "<SLOT>",
          "annotation": "str",
          "default": null
        }
      ],
      "ret": {
        "description": "<SLOT>",
        "annotation": "cst.BaseStatement"
      }
    }
  ]
}