PythonでもGitHub Copilot Extensions作れるもん!
準備用カンペ
-
GitHub Appの「Copilot」メニューを編集できるようにしておく(認証が必要になる)
共有はデスクトップ
PythonでもGitHub Copilot Extensions作れるもん!
- Event:
みんなのPython勉強会#110 LT
- Presented:
2024/11/14 nikkie
お前、誰よ
nikkie @ Copilotを馬車馬のように働かせ隊
機械学習エンジニア・自然言語処理(We're hiring!)
みんなのPython勉強会 スタッフ・4代目LT王子
GitHub Copilot Extensionsって、何よ
聞いたことありますか?🙋♂️
GitHub Copilotは様々な機能を搭載(進化中!)
- コード補完:
Tab を押すだけ!(少し直す)
- チャット:
ChatGPTがVS Codeやgithub.comに住んでいるイメージ。色々聞けちゃう
🏃♂️ご参考
GitHub Copilot Extensions
Extension=拡張
チャット相手 =エージェント
GitHub Copilot Extensionsで実現
@docker
: Docker専門エージェント🏃♂️*VS Code チャット拡張機能* というものもあるが、本LTではスコープ外
GitHub Copilot Extensions🤖
GitHubが提供する LLM を使って実装できる(エンドポイント
/chat/completions
)例えば特定のリポジトリでRAGをするエージェント(プライベートのコードベースで)
服部さんの発表で知りました
実装例
Node.js, TypeScript
Go
Python でもGitHub Copilot Extensions作れるもん!
得意なPythonを使いたい...!
Hello worldにあたる blackbeard-extension
海賊黒ひげとしてChatに応じる(※ONE PIECEではない)
Node.jsによる実装
blackbeard-extension (Node.js) 抜粋
// https://github.com/copilot-extensions/blackbeard-extension/blob/11b5a9abaec14f57ee1c92350bf64553411deb02/index.js#L7-L48
app.post("/", express.json(), async (req, res) => {
const payload = req.body;
const messages = payload.messages;
messages.unshift({
role: "system", content: "You are a helpful assistant that replies to user messages as if you were the Blackbeard Pirate.",
});
// Chatのユーザの入力にシステムプロンプトを加え、LLMに返答を生成させる
const copilotLLMResponse = await fetch(
"https://api.githubcopilot.com/chat/completions",
// 省略
)
Readable.from(copilotLLMResponse.body).pipe(res);
})
Pythonでもできました✌️(FastAPI❤️)
# https://github.com/ftnext/blackbeard-extension-python/blob/56ae295c54e2241645382a8a027a81316072b43b/app.py#L10-L40
@app.post("/")
async def stream(request: Request, x_github_token: str = Header(None)):
payload = await request.json()
messages = payload["messages"]
messages.insert(
0, {"role": "system", "content": "You are a helpful assistant that replies to user messages as if you were the Blackbeard Pirate."})
def pass_generator():
with httpx.stream(
"POST", "https://api.githubcopilot.com/chat/completions", headers=headers, json=data,
) as response:
# response.iter_lines() を yield
return StreamingResponse(pass_generator(), media_type="text/event-stream")
簡単に動かせます!
まとめ🌯 PythonでもGitHub Copilot Extensions作れるもん!
Copilot Chatのエージェントを作れるGitHub Copilot Extensions
海賊黒ひげ拡張をPythonで実装 してみました
OpenAIのGPTsのようなものをプログラミングで作っている感覚でとってもワクワク
ご清聴ありがとうございました
blackbeard-extension-python お試しあれ!
☠️ゼハハハハ☠️