昨日の記事に関連して、今回はLangChainでgithubリポジトリのソースコードを読む方法です。
↑サンプルソースコードを載せています。
↑使い方はこちら
実行例
npx ts-node githubLoader.ts https://github.com/shu-kob/langchain-sample-code
Document { pageContent: "import { CheerioWebBaseLoader } from '@langchain/community/document_loaders/web/cheerio'\n" + "import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters'\n" + "import { HtmlToTextTransformer } from '@langchain/community/document_transformers/html_to_text'\n" + '\n' + 'const url = process.argv[2]\n' + '\n' + 'async function webLoad (url: string) {\n' + ' const loader = new CheerioWebBaseLoader(url)\n' + ' const docs = await loader.load()\n' + " const splitter = RecursiveCharacterTextSplitter.fromLanguage('html')\n" + ' const transformer = new HtmlToTextTransformer()\n' + ' const sequence = splitter.pipe(transformer)\n' + ' const newDocuments = await sequence.invoke(docs)\n' + " console.log('newDocuments:')\n" + ' console.log(newDocuments)\n' + '}\n' + '\n' + 'webLoad(url)\n', metadata: { source: 'cheerioWebBaseLoader.ts', repository: 'https://github.com/shu-kob/langchain-sample-code', branch: 'main' }, id: undefined } Document { pageContent: "import { GithubRepoLoader } from '@langchain/community/document_loaders/web/github'\n" + '\n' + 'const url = process.argv[2]\n' + '\n' + 'async function readSorceCodesFromGithub(url: string) {\n' + '\n' + ' const loader = new GithubRepoLoader(\n' + ' url,\n' + ' {\n' + ' branch: "main", // Defaultブランチが "master" でないか注意。他のブランチも選択可能\n' + ' recursive: true,\n' + ' processSubmodules: true,\n' + ' unknown: "warn",\n' + ' maxConcurrency: 5, // Defaults to 2\n' + ' ignorePaths: ["*.json", "*.yaml", "*.yml", "*config*", "*.md", "Dockerfile", "*ignore", ".eslintrc.js", "*.svg"] // 除外するファイルパス\n' + ' }\n' + ' );\n' + '\n' + ' for await (const doc of loader.loadAsStream()) {\n' + ' console.log(doc)\n' + ' }\n' + '};\n' + '\n' + 'readSorceCodesFromGithub(url)\n', metadata: { source: 'githubLoader.ts', repository: 'https://github.com/shu-kob/langchain-sample-code', branch: 'main' }, id: undefined } Document { pageContent: "import * as cheerio from 'cheerio'\n" + '\n' + 'const url = process.argv[2]\n' + '\n' + 'async function webLoad (url: string) {\n' + ' // HTMLの取得\n' + ' const response = await fetch(url)\n' + ' const htmlText = await response.text()\n' + ' const cheerioText = cheerio.load(htmlText)\n' + '\n' + ' // styleとscriptを除去\n' + " cheerioText('style').remove()\n" + " cheerioText('script').remove()\n" + '\n' + " const bodyContent: string = cheerioText('body').text().replace(/\\s+/g, '')\n" + '\n' + " console.log('bodyContent:')\n" + ' console.log(bodyContent)\n' + ' return bodyContent\n' + '}\n' + '\n' + 'webLoad(url)\n', metadata: { source: 'webLoad.ts', repository: 'https://github.com/shu-kob/langchain-sample-code', branch: 'main' }, id: undefined }
これらのソースコードをプロンプトに含めて、生成AIに投げます。
多くの場合、ソースコードの文量は多くなり、それなりのトークン数になるので、
200万トークン対応のGemini-1.5などを使うのが良いでしょう。