The moderators updated the participation guidelines yesterday to clarify how AI or LLM tools may be used when participating here.
The policy has not meaningfully changed, although previously it was only listed under the “Asking Questions” and “Answering Questions” sections. We added an “AI Use” section to emphasize that it applies to the entire site.
This is not due to any particular incident, but has been under observation and discussion by the moderators for a few weeks now. We noticed an uptick in copy/paste directly from (or with little meaningful transformation of) output generated by such tools, where the user admitted that they did not write the code or understand what it produced.
With the update, we want to emphasize that the community is looking for expertise from other members, and that you must apply your own expertise and voice when posting, regardless of what tools you may use before writing the post.
Prior to yesterday, the policy said:
Those remain in place, along with a new summary point at the top, and a dedicated section:
I think most participants on this forum can read between the lines and understand that there is difference between curated AI-assisted code and just throwing hundreds of lines of code on discussion participants. I think that is also what the second sentence alludes to. However, having to read between the lines in a policy often leads to disputes. I trust you have discussed this at length, but from my perspective the current wording feels a bit too strong about what is exactly allowed in terms of posting code that was (partially) written by using AI.
I guess stated more plainly, since PEPs need to be discussed here: what is the policy for using AI models to work on PEP prototype implementations, PEP drafts, and pre-PEP ideas?
adding to what daniel and nathan raised above. stopping unverified, not-understood output is a reasonable goal, but the wording doesn’t actually test for that. it bans anything generated with AI or LLM tools as a category, and adds that disclosure does not change the outcome: Disclosing that you used an AI tool does not exempt you from this rule.
if disclosure carries no weight, someone who uses AI as part of their normal research or drafting process, discloses it, and fully understands and stands behind the result, the same situation as the Claude-attributed PEP 810 demo, gets treated identically to someone who pasted output they never read. that puts disclosure and concealment on equal footing, which only encourages people to stop disclosing.
a policy that targets unverified, not-understood, not-owned output directly, instead of using AI-generated as the label, would match the stated intent more closely and give contributors a clearer bar to meet.
I am not a native speaker but they way I read it this directly contradicts:
Do not use AI or LLM (large language model) tools to generate posts or code
How can you choose to use such tools anyway if you are not allowed to use AI or LLM (“such tools”) in the first place?
To reiterate: I think everything else in the policy makes a lot of sense and seems to nudge users towards a community I would like to be a part of. I mainly responded to this thread to point out that from my reading there seems to be a slight contradiction. If others don’t think that contradiction exists then let us spend our time on something that is more useful
Do not use it to generate posts or code. If you use it to work on posts or code, that’s your prerogative. Whatever you post, it should be your own words and work, using your own expertise to produce and vouch for it.
So, for example (but not exhaustively), “here’s an example I asked Codex to generate” is not acceptable. On the other hand, “I know a lot about the internals of strings in Python, but fiddling around with them is really annoying. Using my expertise, I used an AI tool to produce this example, then verified that it works and looks like what I would have done on my own” is acceptable.
“Here’s some code review that ChatGPT produced. I don’t know if these questions make sense, or how to answer them myself.” isn’t acceptable. “I used an AI tool to review this code, and it came up with some interesting questions. Since I’m familiar with the system, I think the answers should be…”.
The “disclosing doesn’t exempt you” clause is because we’ve been getting more of “I vibe coded this, I know that’s bad but it seems like it works” being used as a preface to posts. It doesn’t mean do or don’t disclose, that already will or won’t be done and we can’t control that. It means that saying you know it’s bad does not suddenly make it ok to post it.
IMO, the important point is if you are the author. This means, is the code as-if you have written every single line of code. Is every decision the same you would have done?
If you feel like “This code was authored by Claude”, that means that you are distancing yourself from it. That’s exactly what I don’t want. It should be your code. The same way it doesn’t matter if you are using PyCharm, vim, VS Code or notepad, it shouldn’t matter if you used an LLM or not. If there is a meaningful distinction in your mind between code you have written and code an LLM wrote, then don’t post the latter. If there is a meaningful visible difference in code you wrote and that an LLM wrote, don’t post the latter and your post will be moderated.
This feels like an unfair standard, or at least 1 I don’t empathise with.
I have a plugin that’s written entirely in a language that I don’t understand, so every single line of code in that plugin is written by AI. Yet it feels like my creative work, because I made all the all the decisions about what the behaviour should be, tested it, tweaked it repeatedly, curated it to ensure it is ‘safe’, and tweaked a few lines by hand.
In the context of writing Python, there is code where it is important that every single line of code is perfect, and there is code where you only need to verify that the code doesn’t look overly complicated and has correct input-output correspondence on a selected test set. Those are decisions an author makes.
And then there is “this code isn’t good enough (for production) but it basically works and I want to have a discussion with this basis”. Sometimes such code is generated by AI, sometimes it is a hackjob written by hand. Either way, discussing the half-finished work is often a much better use of time then trying to make the code perfect before any discussion happens.
I don’t want this site to become a place where dots and Grok bots talk to each other. I agree that we should take responsibility for our posts as a whole and stay within the bounds of our own knowledge. However, I think asking us to consider whether we are the author of every single line of prose or code is excessive.
For example, I’m not good at English, and most of my posts are AI translations that I copy and paste as they are. I sometimes edit the output, but rarely. I can read it, but my English skills are not good enough to write it myself. Are these my words?
I was selected for Codex for Open Source, and I may have gone a little too far in trying to use that opportunity to give back to Python. Trying to create a reference implementation of Safe Parallel Python was beyond my abilities. On the other hand, for projects I understand and am working on myself, such as d-strings and optimizing C APIs that use UTF-8, I think it is reasonable to obtain useful validation results and post them here, even if I don’t understand every single line.
For example, AI wrote the tool for converting existing uses of textwrap.dedent() to d-strings. I saved the tool and actual conversion results on GitHub and posted them here. I have briefly reviewed those results, but I cannot claim to be the author of every single line.
This is about a clarification of the moderation policy, not a set of exact rules. There will always be room for flexibility and judgement, and none of the scenarios you described, when explained the way you did, seem unreasonable.
Unfortunately, real-life posts don’t generally provide that context. We often find out that what looked like a discussion about a question that’s illustrated using some generated code is actually just the OP pasting replies into the LLM and copying the responses back. So we’re not discussing anything, just interacting (indirectly) with the poster’s LLM. And that’s not what a lot of us want to be spending our time doing.
The moderation rules as posted are clear that the intent is to shut down discussions which don’t meet that requirement of human interaction, and to do so fast, without wasting people’s time on discovering that participants are using LLMs inappropriately. If that means that people who want to have a discussion need to introduce their LLM use more carefully, that’s (IMO) an entirely reasonable bar to set.
Taking your example:
Why not start with a 100% human-written post, that says “I have a question around some code that I’ve produced (using an LLM). The code tries to achieve X, and in doing so it hit the following odd behaviour (describe the behaviour here). What do people think is going on?” Then, in a follow-up post, say “Here’s the LLM-generated code that demonstrates the problem I found - I’ve reviewed it and I can’t see any obvious mistakes or hallucinations. Am I missing something, or does it indeed demonstrate the issue I described in my original post?”
That’s exactly the same scenario as you described, but the interaction is clearly with a human, and is (in my view at least) perfectly acceptable within the new AI policy. It’s more work for the poster, but why is that a bad thing? Low-effort posts are generally unhelpful whether or not they include LLM content, so expecting a bit more work producing a good introductory post isn’t unreasonable.
There’s a qualification here, of course - people who struggle with English for whatever reason may be disadvantaged by having to explain their problem in this sort of detail. But we’re generally pretty welcoming towards such users, and willing to work with them. So I don’t think this case is notably worse than any other. Mention that you’re not a native speaker[1] and people will usually help you frame your question better if needed.
Or just that you struggle with English, if you’re uncomfortable explaining why ↩︎
Maybe, but it’s often hard to express nuance when talking about LLM usage. There are a lot of people who seem happy to disclose “I used an LLM for this” and then take no responsibility for the quality or content of the generated output. Maybe the statement in the policy is extreme, but (IMO) reasonable people will behave reasonably anyway, and unreasonable people need extreme statements to make them take notice.
What matters is whether you behave like the code is yours. If I see something odd in code you post, and say “wait, what do these two lines mean?” I expect a human response along the lines of “I intended them to calculate XYZ. Looking at them now, I see that it’s not obvious - does the following rewrite (with an explanatory comment) help?” What I don’t want is the typical LLM response of “Good catch! I got that wrong” attached to a newly-generated rework of the whole section of code those two lines were part of. It’s unfortunate that sometimes people naturally respond in a way that feels like an LLM, and that LLMs are getting better at hiding the fact that their responses aren’t human generated, but that’s something we all have to deal with - both LLM users and people who want to interact with other people rather than LLMs.
I don’t know[1] what LLM you use to translate your posts, but they generally come across as very natural. Whether that’s because you take care with your posts, or have a good LLM, isn’t that important. What matters is that I feel like I’m interacting with you.
FWIW, I have found your recent “I used Codex to generate this code” posts to be a little too much. But it’s not so much because I want to discuss the code with you line by line, instead it’s because for my own reasons I prefer to avoid using tools that are largely or exclusively LLM-built.
I do have concerns that if people are contributing tools or reference implementations using LLMs, how will that code be maintained? Will people with no access to (paid) LLM services be able to understand and/or maintain it? How will you hand over maintenance of the code if you don’t understand it yourself? But that’s off-topic here. The only relevance to the forum policy is that I think we should be applying the same standards - if you publish or post code, you should accept the responsibility of explaining it to someone who asks about it. That applies whether or not the code is LLM-generated.
I just want to say that I appreciate the good work that the moderators here do. While the rest of the world is filling up with LLM spam these forums seem to remain refreshingly human. I expect that strict moderation and community feedback will be the only way that could be maintained going forwards. In other forums it seems that tolerating LLM communication is a very slippery slope that is hard to climb back up.
I did mean to address this as well in the policy, but forgot. It’s another common reason we are given for AI use.
You, specifically, are doing fine. If you’re using AI to translate what you write, it’s not apparent. However, many people are using it as an excuse after the fact, when they clearly asked their AI tool to “generate a response to this” or “I think this, expand that into a whole response” rather than “translated exactly what I’ve written into English”.
I’m not very familiar with translation tools myself. From what I’ve heard from others, purpose-built translation tools are still a way better option than general purpose AI tools. It’s a lot more likely for AI to insert words or change grammar to say something you didn’t intend, and will have trouble reviewing.
We’ve all been reading varying qualities of English (translated or not) well before AI was a thing. It’s ok if it’s not your primary language, or if it has some typos or spelling or grammar mistakes. It’s ok if the translation uses some awkward phrases. Try to use a “traditional” translation tool if possible, or at least give very clear instructions to “translate exactly what’s written”.