paint-brush
গিটহাব ইস্যু ফিক্সগুলি স্বয়ংক্রিয় করার জন্য আমি কীভাবে একটি এআই প্রোগ্রামার তৈরি করেছি 🤯দ্বারা@sunilkumardash9
514 পড়া
514 পড়া

গিটহাব ইস্যু ফিক্সগুলি স্বয়ংক্রিয় করার জন্য আমি কীভাবে একটি এআই প্রোগ্রামার তৈরি করেছি 🤯

দ্বারা Sunil Kumar Dash16m2024/08/01
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

টাইপস্ক্রিপ্ট ব্যবহার করে গিটহাব ওয়ার্কফ্লোগুলি স্বয়ংক্রিয় করতে কীভাবে একটি AI-চালিত SWE এজেন্ট তৈরি করবেন তা আবিষ্কার করুন। এই নির্দেশিকাটি একটি স্বায়ত্তশাসিত এজেন্টের সেটআপ, উপাদান এবং বাস্তবায়নকে কভার করে যা ডকুমেন্টেশন আপডেট করা, বাগ ফিক্স করা এবং প্যাচগুলি পুশ করা, ডেভেলপারদের আরও সৃজনশীল কাজের উপর ফোকাস করতে মুক্ত করার মতো কাজগুলি পরিচালনা করতে পারে।
featured image - গিটহাব ইস্যু ফিক্সগুলি স্বয়ংক্রিয় করার জন্য আমি কীভাবে একটি এআই প্রোগ্রামার তৈরি করেছি 🤯
Sunil Kumar Dash HackerNoon profile picture


গত কয়েক সপ্তাহ ধরে, আমরা Composio- এ দ্রুত বর্ধনশীল একটি সংগ্রহস্থলে পরিশ্রমের সাথে কাজ করছি। আমরা শীঘ্রই বুঝতে পেরেছি যে ReadMes আপডেট করা, ডকস্ট্রিংগুলি ঠিক করা এবং ছোটখাটো বাগ ফিক্স করা—যদিও পুনরাবৃত্ত এবং জাগতিক—আমাদের ব্যান্ডউইথের বেশির ভাগই গ্রাস করছে।


তাই, আমি ভেবেছিলাম, কেন এই গ্রান্ট কাজগুলি পরিচালনা করার জন্য একটি এআই-চালিত স্বায়ত্তশাসিত এজেন্ট তৈরি করবেন না?

আমরা এমন একজন এআই এজেন্ট চেয়েছিলাম যা পারে।


  • GitHub সংগ্রহস্থল অ্যাক্সেস করুন।
  • যে কোন সমস্যা নিন এবং এর জন্য একটি সমাধান লিখুন।
  • প্রয়োজন হলে, কোডটি ভাল কিনা তা পরীক্ষা করতে চালান।
  • অবশেষে, প্যাচ ফাইলগুলিকে রিমোট রিপোজিটরিতে পুশ করুন।


অবশেষে, আমরা সফ্টওয়্যার ইঞ্জিনিয়ারিং এজেন্ট তৈরির জন্য একটি সহজ এবং এক্সটেনসিবল মেটা-ফ্রেমওয়ার্ক তৈরি করেছি।

এই এজেন্টরা এই ধরনের অনেক কাজে তাদের মানব প্রতিপক্ষের মতোই কাজ করতে পারে। এই এজেন্টদের কাছে জাগতিক কাজগুলি অফলোড করা আপনার ডেভেলপারদের আরও সৃজনশীল কাজগুলিতে ফোকাস করার জন্য মুক্ত করার অর্থবোধ করে।


জেরি


এই নিবন্ধে, আমি আপনাকে দেখাব কীভাবে আপনার GitHub ওয়ার্কফ্লোগুলি স্বয়ংক্রিয় করতে টাইপস্ক্রিপ্টে একটি SWE এজেন্ট তৈরি করবেন।

তবে তার আগে, আসুন জেনে নেওয়া যাক AI এবং SWE এজেন্ট কি।


এআই এজেন্ট কি?

AI এজেন্ট হল AI মডেল দ্বারা চালিত সিস্টেম যা স্বায়ত্তশাসিতভাবে কাজগুলি সম্পাদন করতে পারে, তাদের পরিবেশের সাথে যোগাযোগ করতে পারে এবং তাদের প্রোগ্রামিং এবং তারা যে ডেটা প্রক্রিয়া করে তার উপর ভিত্তি করে সিদ্ধান্ত নিতে পারে।

এআই এজেন্টের উপাদান

একটি এআই এজেন্ট তিনটি গুরুত্বপূর্ণ উপাদান নিয়ে গঠিত:

  • LLMs : লার্জ ল্যাঙ্গুয়েজ মডেল যুক্তি, সিদ্ধান্ত গ্রহণ, টুল কলিং ইত্যাদির জন্য দায়ী।
  • মেমরি : কর্মপ্রবাহ ট্র্যাক করতে স্বল্পমেয়াদী এবং দীর্ঘমেয়াদী তথ্য পরিচালনা করে।
  • টুলস : বাহ্যিক পরিবেশের সাথে মিথস্ক্রিয়া সক্ষম করুন, যেমন রিপোজিটরি থেকে তথ্য বের করার জন্য এবং প্রয়োজনীয় পরিবর্তন করার জন্য একটি GitHub টুল।

SWE এজেন্ট কি?

তাহলে, আপনি কখন একজন AI এজেন্টকে SWE এজেন্ট বলবেন?

SWE এজেন্ট হল AI এজেন্ট যা একজন মানব সফটওয়্যার ইঞ্জিনিয়ারের গুণাবলী এবং বৈশিষ্ট্য অনুকরণ করে, যেমন

  • দীর্ঘমেয়াদী পরিকল্পনা এবং যুক্তি।
  • স্ট্যান্ডার্ড ডেভেলপার টুল ব্যবহার করে।
  • পরীক্ষা এবং প্রতিক্রিয়ার মাধ্যমে কোডের মান উন্নত করা।
  • ডিবাগিং এবং স্বায়ত্তশাসিতভাবে সমস্যাগুলি সমাধান করা।

swekit

ওভারভিউ SWE এজেন্ট

এখানে SWE এজেন্টের কিছু বৈশিষ্ট্য রয়েছে যা আমরা তৈরি করতে যাচ্ছি:

  • এটি ফ্রেমওয়ার্ক অজ্ঞেয়বাদী, তাই আপনি যেকোন ফ্রেমওয়ার্ক ব্যবহার করতে পারেন, যেমন ল্যাংচেইন, ওপেনএআই এসডিকে, ইত্যাদি...
  • আপনি এর বহুমুখিতা বাড়ানোর জন্য টুল যোগ করতে পারেন, যেমন ইন্টারনেট অ্যাক্সেসের জন্য Tavily।


SWE এজেন্টরা আপনার পাবলিক এবং প্রাইভেট রিপোজিটরি অ্যাক্সেস করতে পারে, প্রদত্ত সমস্যাগুলির উপর কাজ করতে পারে এবং রিপোজিটরিগুলিতে পরিবর্তন করতে পারে।

এটি হোস্ট মেশিন, ডকার, বা অন্য কোন ক্লাউড পরিবেশ (E2B, FlyIo) ব্যবহার করে কোডগুলি চালাতে পারে। যাইহোক, আপনি যদি স্যান্ডবক্সিং কোড এক্সিকিউশনের জন্য পরের দুটি ব্যবহার করতে পছন্দ করেন তবে এটি সর্বোত্তম হবে।


স্যান্ডবক্সিং নির্বিচারে কোড সম্পাদনের কোনো অনিচ্ছাকৃত পরিণতি প্রতিরোধ করতে সাহায্য করে।


SWE এজেন্ট জন্য পূর্বশর্ত

এখানে সফলভাবে এজেন্ট তৈরি করার পূর্বশর্ত রয়েছে:

  1. OpenAI API কী: আমরা GPT মডেল এবং অর্কেস্ট্রেট টুল কল অ্যাক্সেস করতে OpenAI SDK ব্যবহার করব।
  2. গিটহাব অ্যাক্সেস টোকেন: আপনাকে অবশ্যই একটি ব্যবহার করে আপনার গিটহাব অ্যাকাউন্ট লিঙ্ক করতে হবে ব্যক্তিগত অ্যাক্সেস টোকেন SWE এজেন্টকে আপনার কোড রিপোজিটরি অ্যাক্সেস এবং পরিবর্তন করতে সক্ষম করতে।
  3. Composio API কী: আপনার Composio থেকে একটি API কী প্রয়োজন হবে। একটি পেতে, একটি ব্যবহারকারী তৈরি করুন অ্যাকাউন্ট Composio দিয়ে এবং ড্যাশবোর্ডের সেটিংস ট্যাবে নেভিগেট করুন।

লগইন পৃষ্ঠায়


চলুন শুরু করা যাক 🔥

নির্ভরতা

আপনার প্রিয় প্যাকেজ ম্যানেজার ব্যবহার করে নির্ভরতা ইনস্টল করে শুরু করুন। প্রস্তাবিত পদ্ধতি হল pnpm , কিন্তু আপনি npm বা yarn ব্যবহার করতে পারেন।

 pnpm install -g composio-core

এনভায়রনমেন্ট ভেরিয়েবল সেট আপ করুন 🌐

প্রকল্পটি সম্পূর্ণ করতে আপনার একটি GITHUB_ACCESS_TOKEN, OPENAI_API_KEY, COMPOSIO_API_KEY, GITHUB_USERNAME এবং GITHUB_USER_EMAIL প্রয়োজন হবে৷


সুতরাং, একটি .env ফাইল তৈরি করুন এবং উপরের ভেরিয়েবল যোগ করুন।

 GITHUB_ACCESS_TOKEN="your access token" OPENAI_API_KEY="openai_key" COMPOSIO_API_KEY="composio-api-key" GITHUB_USER_NAME="GitHub username" GITHUB_USER_EMAIL="GitHub user email"

প্রকল্পের কাঠামো 📁

প্রকল্পটি নিম্নরূপ সংগঠিত হয়:

src
├── এজেন্ট
│ └── swe.ts
├── app.ts
├── prompts.ts
└── utils.ts

এখানে ফাইলগুলির একটি সংক্ষিপ্ত বিবরণ।

  • এজেন্ট/swe.ts : SWE এজেন্টের বাস্তবায়ন ধারণ করে।
  • app.ts : অ্যাপ্লিকেশনের প্রধান এন্ট্রি পয়েন্ট।
  • prompts.ts : এজেন্টদের দ্বারা ব্যবহৃত প্রম্পট সংজ্ঞায়িত করে।
  • utils.ts : প্রকল্প জুড়ে ব্যবহৃত ইউটিলিটি ফাংশন।

দ্রুত শুরু করতে, এই সংগ্রহস্থলটি ক্লোন করুন এবং বাকি নির্ভরতাগুলি ইনস্টল করুন।

 git clone https://github.com/ComposioHQ/swe-js-template.git swe-js cd swe-js && pnpm i


এখন আপনি পুরো সেট আপ দিয়ে শেষ করেছেন। আসুন আমাদের AI এজেন্টকে কোড করি।


কোডার পেপে



প্রম্পট এবং লক্ষ্য সংজ্ঞায়িত করা 🎯

আমরা SWE এজেন্টের জন্য প্রম্পট এবং লক্ষ্য নির্ধারণ করে শুরু করি। প্রতিটি ধাপের বিস্তারিত ব্যাখ্যা করা অত্যন্ত গুরুত্বপূর্ণ, কারণ এই সংজ্ঞাগুলি এজেন্টের কর্মক্ষমতা এবং সম্পাদনকে উল্লেখযোগ্যভাবে প্রভাবিত করে।

সুতরাং, আপনি যদি না করে থাকেন তাহলে একটি prompts.ts ফাইল তৈরি করুন।

এর পরে, এজেন্টের ভূমিকা এবং লক্ষ্য নির্ধারণ করুন।

 export const ROLE = "Software Engineer"; export const GOAL = "Fix the coding issues given by the user, and finally generate a patch with the newly created files using `filetool_git_patch` tool";


এখানে, আমরা ভূমিকাটিকে SWE হিসাবে সংজ্ঞায়িত করেছি, এবং লক্ষ্য হল যেকোন কোডিং সমস্যা সমাধান করা এবং filetool_git_patch ব্যবহার করে ফিক্সের জন্য একটি প্যাচ তৈরি করা। এটি প্যাচ ফাইল তৈরির জন্য GitHub ইন্টিগ্রেশনের জন্য একটি Compsoio অ্যাকশন।

এখন, ব্যাকস্টোরি এবং Swe এজেন্টের একটি বিবরণ সংজ্ঞায়িত করুন।

 export const BACKSTORY = `You are an autonomous programmer; your task is to solve the issue given in the task with the tools in hand. Your mentor gave you the following tips. 1. Please clone the github repo using the 'FILETOOL_GIT_CLONE' tool, and if it already exists - you can proceed with the rest of the instructions after going into the directory using \`cd\` shell command. 2. PLEASE READ THE CODE AND UNDERSTAND THE FILE STRUCTURE OF THE CODEBASE USING GIT REPO TREE ACTION. 3. POST THAT READ ALL THE RELEVANT READMES AND TRY TO LOOK AT THE FILES RELATED TO THE ISSUE. 4. Form a thesis around the issue and the codebase. Think step by step. Form pseudocode in case of large problems. 5. THEN TRY TO REPLICATE THE BUG THAT THE ISSUES DISCUSS. - If the issue includes code for reproducing the bug, we recommend that you re-implement that in your environment, and run it to make sure you can reproduce the bug. - Then start trying to fix it. - When you think you've fixed the bug, re-run the bug reproduction script to make sure that the bug has indeed been fixed. - If the bug reproduction script does not print anything when it is successfully runs, we recommend adding a print("Script completed successfully, no errors.") command at the end of the file so that you can be sure that the script indeed, it ran fine all the way through. 6. If you run a command that doesn't work, try running a different one. A command that did not work once will not work the second time unless you modify it! 7. If you open a file and need to get to an area around a specific line that is not in the first 100 lines, say line 583, don't just use the scroll_down command multiple times. Instead, use the goto 583 command. It's much quicker. 8. If the bug reproduction script requires inputting/reading a specific file, such as buggy-input.png, and you'd like to understand how to input that file, conduct a search in the existing repo code to see whether someone else has I've already done that. Do this by running the command find_file "buggy-input.png" If that doesn't work, use the Linux 'find' command. 9. Always make sure to look at the currently open file and the current working directory (which appears right after the currently open file). The currently open file might be in a different directory than the working directory! Some commands, such as 'create', open files, so they might change the currently open file. 10. When editing files, it is easy to accidentally specify a wrong line number or write code with incorrect indentation. Always check the code after You issue an edit to ensure it reflects what you want to accomplish. If it didn't, issue another command to fix it. 11. When you FINISH WORKING on the issue, USE THE 'filetool_git_patch' ACTION with the new files using the "new_file_paths" parameters created to create the final patch to be submitted to fix the issue. Example, if you add \`js/src/app.js\`, then pass \`new_file_paths\` for the action like below, { "new_file_paths": ["js/src/app.js"] } `; export const DESCRIPTION = `We're solving the following issue within our repository. Here's the issue text: ISSUE: {issue} REPO: {repo} Now, you're going to solve this issue on your own. When you're satisfied with all your changes, you can submit them to the code base by simply running the submit command. Note, however, that you cannot use any interactive session commands (eg python, vim) in this environment, but you can write scripts and run them. Eg you can write a Python script and then run it with \`python </path/to/script>.py\`. If you face a "module not found error", you can install dependencies. Example: in case the error is "pandas not found", install pandas like this \`pip install pandas\` Respond to the human as helpfully and accurately as possible`;

উপরের কোড ব্লকে, আমরা সাবধানে এবং স্পষ্টভাবে সংজ্ঞায়িত করেছি যে কাজটি সম্পন্ন করার জন্য এজেন্টকে নিতে হবে। সাধারণ প্রোগ্রামিং বাধার সম্মুখীন হলে এজেন্ট কী করতে হবে তা নিশ্চিত করার জন্য এটি গুরুত্বপূর্ণ।


ইউটিলিটি ফাংশন সংজ্ঞায়িত করা 🛠️

এই বিভাগে, আমরা from GitHub এবং getBranchNameFromIssue থেকে দুটি প্রধান ফাংশন সংজ্ঞায়িত করব, যা একটি সমস্যা সম্পর্কে তথ্য বের করবে।

 import * as fs from 'fs'; import * as path from 'path'; import * as readline from 'readline'; import { ComposioToolSet } from "composio-core/lib/sdk/base.toolset"; import { nanoid } from "nanoid"; type InputType = any; function readUserInput( prompt: string, metavar: string, validator: (value: string) => InputType ): InputType { const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); return new Promise<InputType>((resolve, reject) => { rl.question(`${prompt} > `, (value) => { try { const validatedValue = validator(value); rl.close(); resolve(validatedValue); } catch (e) { console.error(`Invalid value for \`${metavar}\` error parsing \`${value}\`; ${e}`); rl.close(); reject(e); } }); }); } function createGithubIssueValidator(owner: string, name: string, toolset: ComposioToolSet) { return async function githubIssueValidator(value: string): Promise<string> { const resolvedPath = path.resolve(value); if (fs.existsSync(resolvedPath)) { return fs.readFileSync(resolvedPath, 'utf-8'); } if (/^\d+$/.test(value)) { const responseData = await toolset.executeAction('github_issues_get', { owner, repo: name, issue_number: parseInt(value, 10), }); return responseData.body as string; } return value; }; } export async function fromGithub(toolset: ComposioToolSet): Promise<{ repo: string; issue: string }> { const owner = await readUserInput( 'Enter github repository owner', 'github repository owner', (value: string) => value ); const name = await readUserInput( 'Enter github repository name', 'github repository name', (value: string) => value ); const repo = `${owner}/${name.replace(",", "")}`; const issue = await readUserInput( 'Enter the github issue ID or description or path to the file containing the description', 'github issue', createGithubIssueValidator(owner, name, toolset) ); return { repo, issue }; }

সুতরাং, উপরের কোড ব্লকে যা চলছে তা এখানে।

  • readUserInput : এই ফাংশন কমান্ড লাইন থেকে ব্যবহারকারীর ইনপুট পড়ে। আমাদের শুধুমাত্র GitHub ব্যবহারকারী আইডি, সংগ্রহস্থলের নাম এবং ইস্যু নম্বর বা বিবরণ প্রয়োজন।
  • createGithubIssueValidator : এই ফাংশনটি GitHub সমস্যাগুলির জন্য একটি বৈধতা প্রদান করে। এটি একটি ফাইল পাথ, একটি সংখ্যাসূচক সমস্যা আইডি, বা একটি প্লেইন স্ট্রিং বিবরণ হিসাবে ইনপুট পরিচালনা করতে পারে। যদি ইনপুটটি একটি সংখ্যাসূচক ইস্যু আইডি হয়, তবে এটি Composio-এর github_issues_get অ্যাকশন ব্যবহার করে GitHub থেকে সমস্যার বিবরণ নিয়ে আসে।
  • fromGitHub : এই ফাংশনটি একটি গিটহাব সংগ্রহস্থল এবং একটি সমস্যা সম্পর্কে প্রয়োজনীয় তথ্য সংগ্রহ এবং যাচাই করতে এই উপাদানগুলিকে একত্রিত করে।

এখন, সমস্যার বিবরণ থেকে একটি শাখার নাম তৈরি করতে getBranchNameFromIssue সংজ্ঞায়িত করুন।

 export function getBranchNameFromIssue(issue: string): string { return "swe/" + issue.toLowerCase().replace(/\s+/g, '-') + "-" + nanoid(); }

Swe এজেন্ট সংজ্ঞায়িত করা 🤖

এটি সবচেয়ে গুরুত্বপূর্ণ বিভাগ, যেখানে আপনি OpenAI সহকারী এবং কম্পোজিও টুলসেট ব্যবহার করে Swe এজেন্টকে সংজ্ঞায়িত করবেন।

সুতরাং, প্রথমে, লাইব্রেরিগুলি আমদানি করুন এবং এলএলএম এবং সরঞ্জামগুলি সংজ্ঞায়িত করুন৷

 import { OpenAIToolSet, Workspace } from 'composio-core'; import { BACKSTORY, DESCRIPTION, GOAL } from '../prompts'; import OpenAI from 'openai'; // Initialize tool. const llm = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, }); const composioToolset = new OpenAIToolSet({ workspaceConfig: Workspace.Docker({}) }); // To use E2B Code interpreter /* const composioToolset = new OpenAIToolSet({ workspaceConfig: Workspace.E2B({ apiKey: process.env.E2B_API_KEY, }) }); */

উপরের কোড ব্লকে,

  • আমরা API কী দিয়ে OpenAI এর একটি উদাহরণ তৈরি করেছি।
  • আমরা ডকারে workspaceConfig সেট সহ OpenAIToolSet এর একটি উদাহরণ তৈরি করেছি। এটি Swe এজেন্টের জন্য কোডিং পরিবেশ স্যান্ডবক্স করতে ডকার ব্যবহার করতে হয়। আপনি ক্লাউড কোড ইন্টারপ্রেটার যেমন E2B এবং FlyIo ব্যবহার করতে পারেন।

এখন, আমরা Swe Agent সংজ্ঞায়িত করব।

 export async function initSWEAgent(): Promise<{composioToolset: OpenAIToolSet; assistantThread: OpenAI.Beta.Thread; llm: OpenAI; tools: Array<any>}> { let tools = await composioToolset.getTools({ apps: [ "filetool", "fileedittool", "shelltool" ], }); tools = tools.map((a) => { if (a.function?.description?.length || 0 > 1024) { a.function.description = a.function.description?.substring(0, 1024); } return a; }); tools = tools.map((tool) => { const updateNullToEmptyArray = (obj) => { for (const key in obj) { if (obj[key] === null) { obj[key] = []; } else if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) { updateNullToEmptyArray(obj[key]); } } }; updateNullToEmptyArray(tool); return tool; }); const assistantThread = await llm.beta.threads.create({ messages: [ { role: "assistant", content:`${BACKSTORY}\n\n${GOAL}\n\n${DESCRIPTION}` } ] }); return { assistantThread, llm, tools, composioToolset }; }

উপরের কোড ব্লকে যা চলছে তা এখানে।

  • টুলস পান : filetool , file edit tool এবং shelltool এর জন্য কম্পোজিও টুলসেট থেকে টুল আনে। নাম অনুসারে, এগুলি ফাইলগুলি অ্যাক্সেস করতে, ফাইলগুলি সম্পাদনা করতে এবং কমান্ড চালানোর জন্য শেল ব্যবহার করতে ব্যবহৃত হবে।
  • ট্রিম টুল বর্ণনা : টুলের বর্ণনা সর্বোচ্চ 1024 অক্ষরের মধ্যে সীমাবদ্ধ করে।
  • নাল মান আপডেট করুন : খালি অ্যারে দিয়ে টুল কনফিগারেশনে নাল মান প্রতিস্থাপন করে।
  • সহকারী থ্রেড তৈরি করুন : পূর্বনির্ধারিত প্রম্পট সহ একটি OpenAI সহকারী থ্রেড শুরু করে।
  • রিটার্ন স্টেটমেন্ট : ইনিশিয়ালাইজ করা টুল, অ্যাসিস্ট্যান্ট থ্রেড, ওপেনএআই ইনস্ট্যান্স এবং কম্পোজিও টুলসেট প্রদান করে।

অ্যাপ্লিকেশানে প্রবেশ-বিন্দু সংজ্ঞায়িত করা 🚀

এটি চূড়ান্ত বিভাগ, যেখানে আমরা অ্যাপ্লিকেশনের এন্ট্রি পয়েন্ট সংজ্ঞায়িত করি। অতএব, পরিবেশ ভেরিয়েবল লোড করুন এবং প্রয়োজনীয় মডিউল আমদানি করুন।

 import dotenv from "dotenv"; dotenv.config(); import { fromGithub, getBranchNameFromIssue } from './utils'; import { initSWEAgent } from './agents/swe'; import { GOAL } from './prompts';

কোড ব্লক

  • পরিবেশের ভেরিয়েবল লোড করে।
  • প্রয়োজনীয় ইউটিলিটি ফাংশন আমদানি করে।
  • Swe এজেন্ট এবং এজেন্ট লক্ষ্য আমদানি করে যা আমরা আগে সংজ্ঞায়িত করেছি।

এখন, main ফাংশন সংজ্ঞায়িত করুন।

 async function main() { /**Run the agent.**/ const { assistantThread, llm, tools, composioToolset } = await initSWEAgent(); const { repo, issue } = await fromGithub(composioToolset); const assistant = await llm.beta.assistants.create({ name: "SWE agent", instructions: GOAL + `\nRepo is: ${repo} and your goal is to ${issue}`, model: "gpt-4o", tools: tools }); await llm.beta.threads.messages.create( assistantThread.id, { role: "user", content: issue } ); const stream = await llm.beta.threads.runs.createAndPoll(assistantThread.id, { assistant_id: assistant.id, instructions: `Repo is: ${repo} and your goal is to ${issue}`, tool_choice: "required" }); await composioToolset.waitAndHandleAssistantToolCalls(llm as any, stream, assistantThread, "default"); const response = await composioToolset.executeAction("filetool_git_patch", { }); if (response.patch && response.patch?.length > 0) { console.log('=== Generated Patch ===\n' + response.patch, response); const branchName = getBranchNameFromIssue(issue); const output = await composioToolset.executeAction("SHELL_EXEC_COMMAND", { cmd: `cp -r ${response.current_working_directory} git_repo && cd git_repo && git config --global --add safe.directory '*' && git config --global user.name ${process.env.GITHUB_USER_NAME} && git config --global user.email ${process.env.GITHUB_USER_EMAIL} && git checkout -b ${branchName} && git commit -m 'feat: ${issue}' && git push origin ${branchName}` }); // Wait for 2s await new Promise((resolve) => setTimeout(() => resolve(true), 2000)); console.log("Have pushed the code changes to the repo. Let's create the PR now", output); await composioToolset.executeAction("GITHUB_PULLS_CREATE", { owner: repo.split("/")[0], repo: repo.split("/")[1], head: branchName, base: "master", title: `SWE: ${issue}` }) console.log("Done! The PR has been created for this issue in " + repo); } else { console.log('No output available - no patch was generated :('); } await composioToolset.workspace.close(); } main();


এটি আমাদের সম্পূর্ণ app.ts ফাইল, যা এজেন্টিক ওয়ার্কফ্লো চালানোর জন্য ব্যবহার করা হবে।


সুতরাং, উপরের কোডে যা ঘটছে তা এখানে।

  • এসডব্লিউই এজেন্ট শুরু করুন : সহকারী থ্রেড, ওপেনএআই ইনস্ট্যান্স, টুলস এবং কম্পোজিও টুলসেট পেতে initSWEAgent কল করে।
  • সংগ্রহস্থল এবং ইস্যু আনয়ন : fromGithub থেকে সংগ্রহস্থল এবং ইস্যু বিবরণ আনয়ন করে।
  • সহকারী তৈরি করুন : নির্দেশাবলী, সরঞ্জাম এবং ভাষা মডেল সহ একটি OpenAI সহকারীকে সূচনা করে।
  • সহকারীকে ইস্যু পাঠান : সহকারী থ্রেডে বার্তা হিসাবে সমস্যার বিষয়বস্তু পাঠায়।
  • সহকারী চালান এবং পোল : টুল কল প্রতিক্রিয়াগুলির জন্য সহকারী এবং পোল চালান। পোলিং প্রতিক্রিয়া সম্পর্কে আরও তথ্যের জন্য, দেখুন OpenAI SDK সংগ্রহস্থল।
  • প্যাচ অ্যাকশন চালান : একটি প্যাচ তৈরি করতে filetool_git_patch এক্সিকিউট করে।
  • প্যাচ প্রতিক্রিয়া হ্যান্ডেল করুন : যদি একটি প্যাচ তৈরি করা হয়, তবে এটি লগ করুন, একটি শাখা তৈরি করুন, প্রতিশ্রুতি দিন এবং পরিবর্তনগুলি পুশ করুন। একটি টান অনুরোধ তৈরি করার আগে 2 সেকেন্ডের জন্য অপেক্ষা করুন। GitHub এ একটি টান অনুরোধ তৈরি করুন।
  • ওয়ার্কস্পেস বন্ধ করুন : কম্পোজিও টুলসেট ওয়ার্কস্পেস বন্ধ করে।
  • প্রধান ফাংশন চালান : উপরের ধাপগুলি সম্পাদন করতে main() কল করে।


এখন, pnpm start ব্যবহার করে অ্যাপ্লিকেশনটি চালান।


এটি আপনাকে GitHub ব্যবহারকারী আইডি, সংগ্রহস্থলের নাম এবং ইস্যু আইডি বা আপনি যে সমস্যার সমাধান করতে চান তার বিবরণ লিখতে অনুরোধ করবে।

একবার সম্পূর্ণ হলে, এটি রেজিস্ট্রি থেকে একটি কম্পোজিও ডকার কন্টেইনার টানবে এবং সমস্যাটিতে কাজ শুরু করবে।


অবশেষে, ওয়ার্কফ্লো সম্পন্ন হলে, প্যাচটি রিমোট রিপোজিটরিতে পুশ করা হবে। এখন, যখন আপনি আপনার GitHub সংগ্রহস্থল খুলবেন, আপনি সমস্যার জন্য প্রস্তাবিত সমাধান সহ একটি নতুন শাখা দেখতে পাবেন। আপনি প্রধান শাখার সাথে এটি তুলনা করতে পারেন এবং একটি টান অনুরোধ তৈরি করতে পারেন।
আপনাকে ধন্যবাদ, মাইক স্কট

আপনি সম্পূর্ণ কোড খুঁজে পেতে পারেন এখানে GitHub-এ .


পরবর্তী পদক্ষেপ ⏭️

এই SWE এজেন্ট সম্পর্কে সবচেয়ে ভাল জিনিস হল আপনি Composio টুল এবং ইন্টিগ্রেশন ব্যবহার করে এর ক্ষমতা প্রসারিত করতে পারেন।

কার্যকরী সম্পন্ন হলে আপনাকে জানানোর জন্য আপনি আপনার এজেন্টে স্ল্যাক বা ডিসকর্ড যোগ করতে পারেন। আপনি এজেন্টের কার্যকলাপের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে কাজগুলি তৈরি এবং আপডেট করতে জিরা বা লিনিয়ার সংযোগ করতে পারেন।


এর সাথে সংযোগ দিন! 🔌

আপনি রক্ষণাবেক্ষণকারীদের সাথে যুক্ত হতে এবং একজন ওপেন-সোর্স বিকাশকারী হিসাবে অবদান রাখতে আমাদের সম্প্রদায়ে যোগ দিতে পারেন। অবদান রাখতে এবং কম্পোজিও সম্পর্কিত সমস্যা তৈরি করতে আমাদের GitHub সংগ্রহস্থলে যেতে দ্বিধা করবেন না। দেব।

কম্পোজিও তারকা। dev সংগ্রহস্থল ⭐

রেপো তারকা


পড়ার জন্য আপনাকে ধন্যবাদ!