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"
}
}
]
}