我建造的
我已经开发了一种创新的github动作,该动作通过人工智能的力量增强了GitHub问题。它的主要功能包括查找相关问题,提供有关问题和所有相关评论的简明摘要,产生进度更新,推荐合适的标签等。
类别提交:
维护者的必备品:使开源维护者的生活更加容易。
应用链接
https://github.com/marketplace/actions/clarify-and-improve-issues-with-openai-gpt
屏幕截图
https://github.com/MaurerKrisztian/issue-improver-action-demo/issues/2
描述
可以触发此GitHub操作以收集相关问题数据,对OpenAI GPT模型进行有效的评论/建议。
基本上,它是这样的工作:提示发送到GPT模型,其响应是对问题的评论。提示文本可以包含占位符,例如{{issueTitle}}
,{{issueBody}}
,{{allComments}}
等。这些占位符被当前问题的实际数据替换,但它们还可以包括其他信息,不仅限于问题本身。
"summary": {
"title": "Summary",
"prompt": "Provide a concise summary of the main points and objectives presented in the issue '{{issueTitle}}' and its content: {{issueBody}}."
},
关键组件之一是“部分”。每个部分必须至少具有标题和提示参数。在操作工作流程YML中,您可以指定所需的部分。在操作运行期间,使用OpenAI GPT模型处理所选部分的提示。这些提示具有默认值(请参阅src/config/default-config.ts),但是您可以完全自定义它们并创建自己的部分。生成的响应将作为评论添加到该问题中。
内置部分和输入:
输入 | 必需 | 默认 | info |
---|---|---|---|
OpenAi-key | 是 | n/a | OpenAI API键 |
config-file | 否 | essue-improver-config.json | 配置文件 |
与添加相关的问题节 | 否 | false | 创建一个相关问题部分。 |
附加符号 | 否 | false | 创建摘要部分。 |
附加仪式 | 否 | false | 创建评论摘要 |
add-Custom section | 否 | n/a | 自定义部分标题/ID逗号分隔字符串。 “*”意味着全部。 |
添加标签段 | 否 | false | 创建标签建议 |
模型 | 否 | 'text-davinci-003' | OpenAI模型 |
max-tokens | 否 | 150 | OpenAi max_tokens(响应长度) |
调试模式 | 否 | false | 启用调试模式:不要创建评论 |
-
相关问题节
在开放问题之间找到相关问题。有些问题是重复的,而另一些问题相互关联。这些细节对维护者很有用。 -
标签部分
该动作将分析问题和所有可用标签,描述和数据,以建议相关标签。 -
摘要部分
总结问题文本。 -
自定义段
在配置文件,特别是在sections.custom
部分下,您可以使用自己的提示创建自定义部分。 -
评论 - 萨华章
总结本期本期的所有评论,进行进度报告等。有时,某些GitHub问题可能会以大量的评论而感到不知所措,因此很难理解这种情况。为了解决这个问题,我已经开发了评论摘要功能。
调试模式
如果打开调试模式,它将执行以下操作:解决提示,为您提供更多有关正在发生的事情的详细日志,而不是创建评论。要启用此内容,请将debug-mode
输入设置为true
。
如果您想在没有发表任何问题的情况下测试操作,则打开调试模式很有用。这将使您可以查看日志,并查看如果关闭调试模式,将创建哪些评论。对结果感到满意后,可以关闭调试模式。
行动示例:
当新问题打开时,此操作将触发,
并创建一个评论,包括:相关发行部分,摘要部分,标签部分,自定义部分
name: Improve issues
on:
issues:
types: [opened]
jobs:
gpt-comment:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Create useful comment with AI
uses: MaurerKrisztian/issue-improver-action@v1
with:
openai-key: ${{ secrets.GPT_KEY }}
max-tokens: 400
add-related-issues-section: true
add-summary-section: true
add-label-section: true
add-custom-section: "my_custom_section1,my_custom_section2"
评论摘要
下面的YAML代码演示了如何使用“!总结”命令来激活评论摘要,进度报告。
on:
issue_comment:
jobs:
comment-summary:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Comment summary
uses: MaurerKrisztian/issue-improver-action@v1
if: contains(github.event.comment.body, '!summarize')
with:
openai-key: ${{ secrets.GPT_KEY }}
max-tokens: 400
add-comment-summary-section: true
自定义部分:
所有部分提示都是完全可自定义的。
要创建自定义部分 /提示,只需创建一个JSON文件(位置是config-file
输入),然后根据需要修改提示和部分标题。这将使默认配置(请参阅:src/config/default-config.ts
)。
此外,您可以在配置文件中的sections.custom
数组中添加新的自定义部分。
示例配置:
{
"sections": {
"custom": [
{
"title": "Joke",
"prompt": "Make a joke about this: {{issueTitle}}"
},
{
"title": "Poem",
"prompt": "Write a short poem about this: {{issueTitle}}"
}
],
"relatedIssues": {
"title": "Related Issues",
"prompt": "From the list of open issues: {{openIssues}}, identify the most relevant ones related to '{{issueTitle}}' and provide a brief description of their similarities. Just the very simmilar related issues to '{{issueTitle}}' shoud be included in the answer, if none is very similar, andwer with 'none',"
},
"summary": {
"title": "Summary",
"prompt": "Provide a concise summary of the main points and objectives presented in the issue '{{issueTitle}}' and its content: {{issueBody}}."
},
"commentSummary": {
"title": "Comment summary",
"prompt": "Review the comments in {{issueComments}} for the issue '{{issueTitle}}' and its content: {{issueBody}}. Extract the key takeaways, notable updates, and any consensus reached, and provide a concise summary of the discussion."
},
"labelSuggestion": {
"title": "Label Suggestion",
"prompt": "Analyze the issue '{{issueTitle}}' and its content: {{issueBody}}, and suggest appropriate labels from the available labels {{allLabels}} that accurately represent the topic, scope, and complexity of the issue. The response shoud only include a label and why its suitable."
}
}
}
可用占位符:
名称 | 描述 |
---|---|
{{issueTitle}} |
问题标题 |
{{issueBody}} |
问题主体 |
{{issueComments}} |
所有问题评论 |
{{issueAuthor}} |
发行创建者 |
{{allLabels}} |
存储库中的所有可用标签 |
{{openIssues}} |
存储库中的所有开放问题 |
为了优化github动作时间的使用情况,占位符的解决方案被缓存,只有在必要时解决。这有助于避免不必要的浪费有价值的GitHub行动资源。
如果您需要其他占位持有人,请打开问题或发送pr。
我已经设置了具有配置操作的演示存储库。随意探索并通过访问以下链接来尝试一下:https://github.com/MaurerKrisztian/issue-improver-action-demo
链接到源代码
https://github.com/MaurerKrisztian/issue-improver-action
允许许可证
什么
背景(是什么让您决定构建这个特定的应用程序?是什么启发了您?)
我创建此特定应用程序的灵感源于对AI可以帮助我们完成任务和简化过程的方式的好奇心。我想探索人工智能在提高生产率和效率方面的潜力。
我已经注意到,许多开源项目的维护人员和很多问题。有些问题是重复的,而另一些问题相互关联,有些问题有很多评论,并且很难跟上它。这些细节对维护者很有用。在AI的帮助下,此行动将尝试解决Thies。
我是如何构建它的(您是如何利用GitHub Action或Github代码?
这是我的第一个自定义GitHub动作,我学到了很多有关它的工作方式的知识。我发现GitHub动作是自动执行许多任务的非常有用的工具。我的项目同时使用了GitHub API和OpenAI API。
测试自定义的github动作可能很难。与常规代码不同,Github上需要某些事情才能正确工作。这使得难以检查一切是否正常,尤其是当您只能依靠GitHub内的日志进行调试时。值得庆幸的是,我在一些挣扎之后发现了一个名为act的工具。此工具使您可以在本地运行GitHub操作,这使得测试变得更加容易,更快。这是用于开发github动作的真正改变游戏规则。
我还使用了项目存储库中的GitHub操作来构建打字稿代码并将其推到“最新”分支。因为我不想将node_modules和Dist保留在主分支中。我还发布了一个版本和测试工作流程。
发展过程充满了学习和挑战。它使我对GitHub行动,AI及其提高生产率和效率的潜力有了更深入的了解。
其他资源/信息
我收到了Kris的宝贵改进建议,谢谢!
未来计划:
- 添加更多占位符
- 添加对更多OpenAI模型的支持
- 通过将其分成多个块来添加对冗长上下文的支持
- 实验其他用例以扩展应用程序范围
- 不断改进提示以增强用户体验