「Computer use」Claude 3.5 SonnetでPCを操作
の編集
Top
/ 「Computer use」Claude 3.5 SonnetでPCを操作
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
.git/info/exclude の使い方と活用シーン - 個人的なファイルをローカルだけで除外する方法
10の質問
2024/09月時点でのおすすめAI
ABC予想
AGIアーキテクチャ設計図:自己参照型注意モデル_SRAM
AGI時代の「評価の一元化」が奪う再起の権利
AI
AI API
AI Scheduler MCP導入手順 - Google Tasks/CalendarをMCP経由で操作
AI プロンプト
AIが詳細を避けがちな合法分野
AIでつかわれているtransformerのまとめ
AIとIDEの共存:ドキュメント整合性のための新しいアプローチ
AIとの効果的な協働のための設計アプローチ:S式とコード生成テンプレートの活用
AIと上手に付き合うコツ:「自分らしさ」を失わないために
AIと共存する時代のソフトウェア開発:コンパイラー開発からの学び
AIの男女と美醜について学習の問題点
AIの話題
AIエージェント階層PMシステムのGit基盤選択
AIチャットの文脈を記憶する!Apache UnomiとModel Context Protocolで実現する次世代のAIチャット管理
AI大規模開発とTDDの意外な関係
AI時代でもエンジニアだらけにならない説
AI開発の「いきなり統合」から脱却!層別テスト駆動開発のテンプレート集
AI開発の現在と未来:統計的限界を超えるために
AI関連の自分がよく見るチャンネル
ANTLR
ANTLR v3 FAQ よくある質問
ANTLR 独学
ANTLR4 独学
ANTLRでOracleのDDLを解析してみる
ANTLRチュートリアル
AOP
API
ARMマイコン基盤
ATOM SHELL理論
Access VBAメモ
Access-Control-Allow-Origin
AndroidとTensorflow
Android開発
Android開発 入門
AngularJS
Anko
Apache Bench
ArchUnitを学ぶ
Axiosとは
Axis2
BI Publisherで始めるデータ駆動型レポート作成
BPMNの勉強
BackTrack4
Blog from iPhone
Bootstrapとは
BracketName
C3 AI Applications
C3 AI エクスマキナ
CSS備忘録
CentOS
ChatGPTの話題
Chevrotainのパーサメソッド
Chevrotain一覧
Chromeエクステンション
Claud MCP
Claude CodeがWindows Nativeサポート開始!Claude-Flowで究極のAI駆動開発体験
Claude Codeサブエージェントで実現する「AIチーム開発」
Claude DesktopのNeo4j接続でCypher構文エラーが出る時の対処法
Claude sonnet computer useを実践投入してみる
ClaudeCode のRalph Wiggum Plugin活用テクニック
ClaudeやMCPでGoogle CalendarにTODO(タスク)を記入できるMCPサーバまとめ
Clojureの実行のお作法
Clojureの3万個以上あるライブラリエコシステム
Clojureをつかってみる
Cocoa Touch Static Library
CoffeeScript
Confluent Control Centerやってみる
C言語でオブジェクト志向な記述方法
DDD ドメイン駆動設計
DDL生成ツール
DJUnit
DMM.comのAPIとか
DOSコマンドメモ
DX人材とUMLによる「設計可視化」の実践ガイド
Dashcode
DeepFloyd IF
Dockerが動かない場合の対処
DockerでLillyMolを爆速起動!化学式から合成経路を探る旅に出よう!
DuckDB導入メモ
ES2015
Eclipse Monkey
Eclipse Plugin
Eclipseの色設定
Eclipse使いがXCode使い初めて知りたいこと
ElasticMQメモ
Elixir
Emmet
Erlangメモ
ExcelファイルをAIに読ませる
Exceptionを見やすく
Expression Tree
FLEX
FLEX リフレクション
Firebase App Check
Firebase Emulator Suite
Fisheye
FlashやJavascriptを使った演出
FlutterとReactとOptiWeb
Flutterの開発環境をDockerで整える
FlyonUI
Forgejo MCP環境設定ガイド
FormattingRules
FrontPage
GAE
GAE Data Store API
GENERAL SQL PARSER JAVA を試してみる
GLOBAL
GPT4ALL
GQL
GUIからMacPortsを管理するアプリケーション - Porticus
Generative Adversarial Networks
Gin JavaScriptで構文解析
Git Blame
Git リポジトリのクローンができないときの解決法
GitHubアクションを使ったトロイの木馬のまとめ
GitLab
GitLabRunnerを増やす
GitLabでPlantUML使ってみる
GitLabでプロジェクト管理する
GitLabの機能をそのまま使って認証システム作ったらどこまでできる?
GitLabサーバインストールとメンテ注意事項
GitとAntとSpringとJUnit
Google Antigravity
Google ClientID
Google Cloud Platform
Google Cloud Platform (GCP) と gcloud CLI 入門
Google MCP Toolbox for Databases と BigQuery で Google Sheets を SQL 操作するガイド
Google Maps Platformを学ぶ
GoogleMapレンダリング
Googleの裏技
Google認定プロジェクトマネージャの勉強メモ
Gradioで簡単GUI作成
Grails
GraphHopperを使用した住所のジオコーディング例
GraphQL
HTM 階層型時間メモリ
HTML スクレイピング
HTML パース
HTML5
HTML5 Canvas
Hadoop
Help
If Then Maybe プログラミング
Inkscape script
InterWiki
InterWikiName
InterWikiSandBox
JAVAの記事一覧
JBoss
JDBC テーブル一覧を得る
JDBC カラム一覧を得る
JDT eclipse
JGRIB
JHIPSTER JDL
JHIPSTER OpenAPI
JHIPSTER エンティティをフィルタリングする
JHIPSTER6.1.2
JHIPSTERでスマホサイト
JHIPSTERのBLUEPRINTを作る
JHIPSTER一覧
JHipster
JHipster API FirstDepelop
JHipster エンティティを更新する
JHipster7をつかってみる
JHipsterでBuleprintを使いこなす
JHipsterのコード生成を改造
JHipsterのプロジェクトをGitLabでCI/CDする
JHipsterのプロジェクトをデプロイする
JIRAをAPI使って操作する
JMeter
JOOQとは
JSFとStruts
JSqlParser
Java Closure
Java Compiler API
Java Function
Java SQL Parserを調査する
Java Spring AOP
Java Spriteを設計してみる
Java オブジェクトのダンプ
Java ドラックできる曲線
Java 備忘録
Java 文字化け
Java11以降のJRE
Java7サンプルコード
JavaFx
JavaScriptでパーサを作る Chevrotain
Javaasist 動的にクラスを編集
Javascript グラフィックライブラリ
Javascript コーディングパターン
Javascript界隈
Javassist
JavaでSVG
Javaで関数型で引数をとる
JavaのジェネリクスTip
Javaのラムダ式
Javaの有名なライブラリ紹介
Javaは、IDEのテンプレートを使いこなせばいいよ
Javaプログラマ向けモナド
Javaメモリリーク
Jenkins
Jenkins(Hudson)メモ
Jestとは
Jhipsterマイグレーション
Json Yaml Xml Hash Scala
KIROナレッジ蓄積フォルダ構成
Kafka REST Proxy さわってみる
Kotolin
LDAPサーバをdockerで立ち上げる
LINE Bot AI翻訳システム構築記(2):n8nでMySQL・翻訳API連携を実装する
LISPで自分の言語を作る
LibreOfficeのCalcをハックしてみる
Linux メモ
LiquiBaseとは
Lispの学び
Lombok
MCP「ここまでのチャットを整理して保存しておいて」
MDBをコンパクトにするVBA
MQL5 半値インジケータ作った
MQL5 小作品
MT4
MT5 EA
MT5お気に入りのインジケータ
MYSQL
MYSQLのバックアップとローカル利用
MacTool
Macにしゃべらせる
Mac用のメモ
Mattermostを使ってオンプレミスでチャット環境を作る
Maven
Mementoパターン
MenuBar
MoonsharpとLuaとUnityについて学ぶ
NILScript
Neo4j バックアップ・復元ガイド
Neo4jでシステムダウン!グラフデータベース選択の失敗談と安全な代替案
NetBeanでプロファイル
Network Service Desk Engineer
Nimbalyst活用メモ
Node-RED
Node-Red
Notion MCP関連について学ぶ
NumPy
OQL オブジェクト問い合わせ言語
OSコマンドインジェクション
ObjctiveC サウンド
ObjectMapperの備忘録
ObjectiveC NSString
ObjectiveC サーバ
ObjectiveC ターミナル用コマンドを作る
ObjectiveC バックグラウンド
ObjectiveC ワーニング
Obsidian MCP インストール
Obsidianの使い方:プロ開発者のための必須プラグインガイド
Obsidianは「メモ帳」ではなく「圧縮帳」である
Oculusアプリの開発
OpenAI Swarm Examples Basic
OpenAI Swarmについて学ぶ
OpenAI Swarmについて認識を深める
OpenFeint
OpenOffice
OpenResty
OpenStreetMapを利用した車両ルーティング問題(VRP)のOptaPlanner解決例
OptaPlanner
OptaPlannerとは
OptaWeb
Outlook VBA
PHP
POSTGRESQL
Pandas Python Data Analysis Library
PdfBox Java用PDFライブラリ
Plagger
Playwrightの実用ガイド:MCPとの統合による新たな可能性
PostgreSQL+AGEでNeo4jの代替え環境構築
PrismaでGraphQL APIを自動生成しよう - チュートリアル
PrismaとGraphQLで作るシンプルなAPI - クイックスタート
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
PyHipster
QuartzCore
RAD
REST
RWKV
Rails3
Railsと差分開発についての考察
React.js
React.js モーダル画面
RecentDeleted
RedmineLE
Redshift
Relumeでサイトの骨格を作る
Require.js
Roo Codeを使う
Rubycocoa
RubyでScalaをコンパイルするツールをつくる
Rubyアソシエーション認定証
Ruby入門
SCALA REPL
SCALA support tool
SCALAの記事一覧
SDL3で始めるクロスプラットフォームゲーム開発 - 環境構築ガイド
SELinux
SEO
SEO Yahoo対策
SEO対策一覧
SPAM対策
SQLite
SRP×A2A×MCP まとめ:kagentとGoogle A2A Project比較メモ
SSH
SST OpenCode:Claude Codeを超える次世代AIコーディングエージェント
SVNをJavaで操作
SakuraZencoding
SandBox
Scala / Hadoop
Scala Process exec
Scala 遅延評価
Scala/LiftでSlim3
ScalaSigParser
ScalaWithExcel
Scala チュートリアル
Scalaで3D
ScalaでLisp
ScalaとGroovyのPOJO比較
ScalaのIDEについて
Scala言語を学ぶやさしいツール「Kojo」
Slack API やってみる
SocketAppender
Spring
Spring bootでのテストのTIPS
SpringBoot-JPA-NotAManagedType解決記録
SpringBootとSeleniumとJunitの連携
SpringBootのSTSの新規プロジェクトでるエラーの対応
SpringSecurity SAML
Sqlite
Squirrel
StringTemplate
Stringクラス拡張
TALEND
ThreadLocal
Todo一覧
Trac Lightning
Twitter
UltraEdit
UnityでClojureCLRをREPLで使う
UnityでClojureCLRを使いたい
Unityでシューティングゲーム作る際のメモ
VBAでREST通信
VBAのコード
VBAをOpenOffice.org Basicにする
VBAをOpenOffice.org+Basicにする
VPN構築の勉強メモ
VPSやIaaSメモ
VSCodeでRuby開発
VSCodeメモ
VSCode用ChatGptのPlugin
VSCode設定
VirtualBox On Mac
Visual Studio Code プラグイン開発
Vuexとは
WBS管理の弊害
WIN32API
WSDL
WSL2 + Podman 環境を快適にする Flatnet CLI を公開しました
Watson
WebDesign探訪
WebLogic フィルタ
WikiEngines
WikiName
WikiWikiWeb
Windows10のPowerShell でキーボードの言語切り替え
WindowsTool
WindowsでRustからGPUアセンブリ(PTX)を生成する
Windows上でOpenCode + MCP連携環境構築 - 実際のハマりポイントと解決法
Windows環境でJavaバージョンを制御する方法 - Java Shimと環境変数の活用
Windsurf
Windsurf能紹介:カスタムワークフロー(Workflow)とファイルベースルール(Rules)紹介
Windsurf+PlantUMLでAWTエラーに遭遇した話
Worker Thread パターン
XBee
XDOCLET
XForms
XPath
XSL
YahooPIPES
Yahooインフォセンター
Yet Another Pragger
YouTuber
Youtubuのあれ
YukiWiki
anacondaをcygwinで使う
ansible
antlr snippet
antlr 再入門
antlrと日本語
autoit
automator
bluemix
bootstrap2
bower
ccze Colorize log files on CentOS and Ubuntu using ccze tool
centos7
cglibを使って動的コード生成
claude-bridgeでローカルLLMを使い放題
cocos2d
collection/collection.dart
cygwin
diff
dockerのローカルイメージをDocker-in-Dockerで参照する
eclipse設定
emacs 備忘録
emacs 文字列置換
emacsをviライクにする
excel tips
excelのdiff
expectで自動化
figmaにプラグインをインストールする
firebase デプロイ
flutterで、google認証させてFirebaseAuthするメモ
flutterをngrok経由で動作させる
flutter環境設定
ftp自動化
gemini
generator-jhipster-gql
git diffを使った構成管理の省力化
goをやってみる
go言語でファイルサーバ
grizzly
gulp
homebrew
iPhone Bluetoothプログラミング
iPhone iAd
iPhone 実機テスト手続き
iPhoneでグラフィックのHellowWorld
iPhoneとGmailメール
iPhoneに実機転送
iPhoneプログラミング
iPhoneプログラミング/ビューを理解すればiPhoneアプリの基礎を押さえられる
iPhoneプログラミング一覧
iPhoneプログラミング入門
iPhone開発/Interface Builder Plug-in
iPhone開発/キャプチャの取り方
intra-mart
jQuery.Flickableのメモ
java spring boot 認証 memo
jersey
jhipster-codeにアノテーション追加してみる
jhipsterのテンプレート改造準備
jparsecドキュメント日本語訳
jparsec入門
kafkaの勉強
log4j2の脆弱性
mac diff
mailcowのインストール
marmaid
mcp-atlassian バージョン互換性の問題と解決方法
memcached
metabaseはダッシュボードなのか
minecraft マイクラ あるきながら、高速ダンジョン作成
mqttの勉強
n8nとDockerでLINE翻訳ボットを作る時に遭遇した5つの罠とその解決法
n8n入門:Docker-composeでWebhook→データ処理→ファイル保存のワークフローを作る
nginx_lua
nginxのメモ
ngrokを利用したLINE Webhookの動的更新 - グローバルIP不要の開発環境構築
node_moduleをnpm linkを使って自分用にする
npm
openapi generator
openapi-generatorをコンパイル
openstack
oraclerac
play framework 1.2.5 sample
play! framework
play!framework selenium
playframework テンプレート
postmanとopenapi
postman使ってみる
prezi プレゼン
pukiwikiで行動管理
pukiwikiに類似したツール
pukiwiki勉強
pukiwiki記事一覧
python
python3のwindowsでの日本語文字化け対応
pythonでseleniumを使う
pythonのテストに使うライブラリ
rails5
rate.jsを使ってみる
reactでポップアップ表示
redmine
ruby on rails 6.0.0
scala
scala 99problem 32~
scala prototype.zip
scala repl
scala sbaz
scala spring
scala/インストール
scalaでまだ不勉強なところ
scalaのインストール
selenium
skills
slack api
spark
spring boot
spring initializerをつかってプロジェクトのひな型をゲットする
spring-test
springboot
springboot env
storybook
sublimetext2
swagger
tracについて
ubuntu
vaadin
vue を typescriptで開発
vue 共通部品作成
vue.js memo
vue.jsとは
vue.jsのデバッグ
vue一覧
webの編集画面のよくあるパターン
windows版のwindsurfのアップデートが失敗する場合、com surrogateが原因かもしれない
windows環境構築
windsurfでフロント開発用プラグイン
wordpress
xamppについて
•Axis2の本家のスタートガイドによるWebサービスの作り方
「AIによる動的実行」と「従来の静的最適化済みコード」が棲み分けられる時代
「AI促進法」国会審議をDXする提案メモ
「Computer use」Claude 3.5 SonnetでPCを操作
【Javascript】【CLIライブラリ】commanderの勉強
【MQL5】KuniRangeBreakoutEA
【初心者必見】テーマだけ決めてスムーズに話せる!動画撮影のコツと練習法
【実践Tips】Node.jsでレスポンス切替型モックAPIを超シンプルに作る方法
いまさらながらC++
おすすめされたフリーソフト
びっくりする短いコード
もう合成ルート探索で迷わない! ASKCOSでスマートに逆合成解析!
アクター
アニメーション
アノテーション
アプリコット
アプリコット PukiWiki
アプリコード
アプリコード林邦行
イラストのエフェクト
インテンショナルプログラミング
オープンソースLSPプロバイダーのMCPであるSerenaの紹介
カスタマイズjhipster7.9.3イメージ
カブロボ
ガイガーカウンター
クラスとハッシュマップの関係
クラック対策
クロス集計
コマンドラインという概念への考察
コマンドラインの出力に色を付ける
コミニュケーション
コラッツ予想:シンプルな数学の問題が隠す深遠な謎
コード生成
サロゲートキーを使ったテーブル設計
シェルのサンプル
シェルサンプル
スクレイピング
スマートコントラクト開発環境Hardhatを学ぶ
スレッドプログラミングメモ
ソースtoソース変形
ターミナルをAppleScriptで制御
テキストエディタ作成javascriptフレームワーク
テスト用まっさらDBをdockerでたてる
テスト駆動
テレワーク環境の比較
ドキュメント指摘AIエージェント定義
ドット絵
ナイアシンと脂質代謝に関する新仮説
ハーネスフォルダを作ってSWE改善
バイオビルダー合成生物学メモ
バグの少ない設計のためのValueObject
パフォーマンスチューニング
フロントエンドとバックエンド(API)を1つのリポジトリで管理するメリット
フロントエンドのテストの結合テストを減らすには?
プッシュ技術
プログラマーじゃない人に覚えてほしいプログラムのコメントの書き方
プロジェクト管理スプレッドシート
プロンプトエンジニア以外のこれからのAI技術者
マイクラ 有名ディメンション モッド
マクスウェル方程式
メタ
ライフハック_選挙を楽しむ方法
ラムダ計算について考える
リベリカJava13いいみたい
リモートワークでのプロジェクト注意点
レイアウトツール
ログ解析
世界の構文解析グラマーたち
予定表
予定表/2009-12-14
予定表/2009-12-18
予定表/2009-12-19
予定表/2009-12-22
予定表/2009-12-23
予定表/2009-12-24
事業の心構え
事業計画方針
五蘊と経営を磨く徳目表
五蘊と経営を磨く徳目表:ウェルビーイング対応一覧
人工知能とCUDA
人工知能コンペKaggle
仕様書のフォーマットについての考察
他言語サイトサンプル作成
仮説Oracleの罠
作曲と効果音作り
僕が無意識に使っていた設計パターンたちに、ちゃんと名前があった話
免疫型社会モデル:性善説でも性悪説でもない第三の道
共和分
効率的なAI活用戦略:S式ベースの問題解決ライブラリの構築
厚黒学から見た日本の構造的脆弱性
口コミ
古いRails5を入れる
哲学
型落ちノートPCでDockerサービスを公開したい
大文字小文字変換
契約書で避けたい条項リスト(エンジニア視点)
学習をHackする
扶養とシステム
投薬のみのガンの治療薬
擬似コーディングのすすめ
放射能対策
数学を学んでいて気づいた物理学との驚くべきつながり
数式を扱う
文章を書く
新エネルギー
新年の抱負2010
新技術 プログラム編
日本のゼネコン式IT開発が失敗する理由
日本半導体産業の敗北から学ぶ経営の本質
最近更新したページ
未来のAIは「私はここまでできます、ここからは専門家にお任せを!」と語りかける
未来技術/新技術
枯れた技術の水平思考
株価データ
業界の動向
構文解析の記事一覧
正規表現
気象データ
流れるようなインタフェース
究極の集中状態を実現する:プログラマーのためのディープワーク実践ガイド
管理画面の生成におけるopenapiとJDLなどの考察
細胞の若返り
経済のことをまとめてみる
脆弱性
脳腫瘍の開発中治療薬LY367385とリンゴ酢
自分でPlaggerみたいなのを作るためのメモ
虚数軸への新たな視点
話せるAIの記事のリンク
論語/学而第一
負荷テスト
販売/デスクトップPC
販売/ノートパソコン
販売/外部ストレージ
起業
超小型ローカルLLM
酸化グラフェン
開発哲学
電子出版
電子出版の記事一覧
非可換幾何学
顧客分析のデシル分析とRFM分析
DIコンテナについて考える
MP3から携帯着うたを作る方法
* 目次 [#ae8b0b60] #contents * 概要 [#e38ebfde] AIでPCを操作できるということだ 通常のClaudeのチャットからは、メニューが見当たらない。 aiに、Computer useを使ってみたいと質問したところ以下のURLを紹介してもらえた https://docs.anthropic.com/en/docs/build-with-claude/computer-use (英文) まだ、beta版のようである。(この記事を書いているのは、2024/10/25) * 推奨スペック [#j5cc746f] dockerでPC内に仮想PC入れる感じになるので、 本格的に使うのであれば、 32GBぐらいのRAMと、コア数の多めのPCを別途用意したほうが良さそうに思えた。 そうしないと、スワップ処理で、もっさり動作になってしまい。ほぼ停止しているかのような錯覚を感じた。 ** デモのソースコード [#b81c330d] https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo *** ご意見はこちら、、、だそうだ [#k997ddc5] https://docs.google.com/forms/d/e/1FAIpQLSeD3IqITWsuepB19SEv889HsBvN9WOi6HRblPrJNyA9G7q02w/viewform * セットアップ [#fe20dbe8] ** APIキーを用意 [#i6cde43e] https://console.anthropic.com/dashboard ** Dockerを呼ぶ [#ud24ce95] Docker本体のインストール手順は割愛する。他を見てほしい。 dockerが使える状態前提。 *** シェルの場合 [#jdaa2f50] export ANTHROPIC_API_KEY=%your_api_key% docker run \ -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \ -v $HOME/.anthropic:/home/computeruse/.anthropic \ -p 5900:5900 \ -p 8501:8501 \ -p 6080:6080 \ -p 8080:8080 \ -it ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest *** 実行結果 [#v78154d4] Xvfb started successfully on display :1 Xvfb PID: 9 starting tint2 on display :1 ... starting mutter starting vnc PORT=5900 starting noVNC noVNC started successfully ✨ Computer Use Demo is ready! ➡️ Open http://localhost:8080 in your browser to begin noVNCはオープンソースで開発されている、ブラウザ上で動作するHTML5製のVNCクライアントです。 このnoVNCをサーバー側にインストールして、HTTPサーバーで公開しておけば、クライアント側はブラウザでアクセスするだけでリモートデスクトップ環境を使えるようになります ブラウザで、http://localhost:8080 を開いてみると、おそらくdockerのイメージだと思うが、dockerで立ち上げたであろうPCが立ち上がる。 dockerの中身を操作するだけならば、セキュリティは大丈夫そうだ。 &ref(claude_use_computer.png); ** 会話してみる [#s3bbefb7] ブラウザで表示した上記の画面の左側のChat欄に、どのようなことができるのか質問したら、教えてくれた。 アカウントの作成やログイン関連については、手伝えないといわれた。 OSは何ですか?と聞いたところ以下の回答だった。 Ubuntu 22.04.5 LTS gitは、すでにインストール済みのようだ。 *** 言語のインストール状況 [#wb563b4a] インストール済み: - Python 3.11.6 pyenvを使用して管理されています 多数のPythonパッケージがインストールされています(numpy, pandas, streamlit, requests など) 未インストール: - Node.js - Java - Go - Ruby - PHP ** vi [#f19f6b45] テキストエディタのVIはインストールされていないようだ。 「viをインストールしてみて」 とお願いしてみた。できた。 「viのカラースキームをmonokaiにして」 とお願いしてみた。できた。日本語に対応してなかったので、まだ設定が必要そうだ ** CPUのプロセスが100%に! [#ke6eae66] PCのメモリが16GBだと、ブラウザを立ち上げようとすると、固まってしまった。 VmmemVSLというプロセスがめちゃめちゃ占有している。 dockerがフリーズしてしまった。メモリを食いすぎ PCにメモリはたくさん積んでおいたほうがいいだろう。 *** VmmemVSLのメモリ対策の記事 [#o27c5f04] 暫定対応 https://zenn.dev/quantum/articles/b29722e8795335 power shell用のコマンド # WSLに入るコマンド。すでにWSLに入っている場合は不要 wsl # メモリをフラッシュするコマンド sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches" * 懸念点 [#r6760159] チャットが複数セッションに分かれていないので、上限に来た場合にどうするのか? 長文のチャットだと会話の継続はできなくなってくるが、dockerでたちあげた環境に紐づいてしまっていると、チャットだけクリアすることはできるのだろうか? 自主的にどんどんファイルを更新してくれたりするのは頼もしいが、複雑になってくると、やらかしてしまった場合、戻る方法はどうするのだろうか? ソースコードならば、gitがインストールされているので、都度コミットしましょうというルールでいけそうだが、設定ファイルなどを改変されると、バックアップしていないと戻せなくなってしまう。 処理が進むと重くなってくる、となると、これを使った開発は、課題を1つ解決したらまたリセットして使う仕組みならば行けそうだ。 * 自分だったらこう使う。を考えてみた [#f8326c01] AIとコラボ用にGitLabサーバを立てる AI用に最低32GBのPCを用意する。 並列で作業させたい場合もあるから、もしかしたら複数台用意したほうがいいかもしれない 問題解決に近い環境をdockerのイメージを作る - 日本語 - 言語の実行環境 - Git系の環境へのアクセス権 - gitのリポジトリをpullしてもらう 関連するファイルは自分で見に行ってもらうように指示する Issue経由などで課題を与える 課題を手伝ってもらう gitにコミットする githabなどに pushする 不本意ながら、AIの処理できるトークン数に限界がくるので、次の課題に向けリセットし、上記の手順を 再度行う * ローカルファイルをマウントするようにしてみる [#xfa7a4e6] dockerで作業するのではなく、ホストマシンでgit cloneしたファイルを対象にすれば、いろいろと便利なのでは?と思った。 サンプルとして、以下を持ってきた。これはanthropicの公式をforkして、自分が好き勝手にできるようにしたリポジトリです。 git clone https://github.com/khayashi4337/courses.git 目標は、github上の英語の資料を、ローカルに用意して、Couputer useにdocker-compose経由で連携し、翻訳できるかどうかチャレンジしてみるのです。そのまま、git に commitやpushできたら楽なので、ローカルの情報をどこまで持たせることができるのかも確認していきます。 ローカルファイルを使えるようにするには、Dockerfile形式ではなくdocker-compose形式が一般的だ。 なので、上記のコードをローカルファイルに変換してみます。 ** ローカルのgitの設定を環境変数に入れておくbash [#m9bb7c41] # Git設定を確認して環境変数に設定 export GIT_USER_NAME=$(git config --global user.name) export GIT_USER_EMAIL=$(git config --global user.email) # 設定された値を確認 echo "Git User Name: $GIT_USER_NAME" echo "Git User Email: $GIT_USER_EMAIL" ** docker-compose.yml [#jffcd092] version: '3' services: anthropic: image: ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest environment: - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - GIT_USER_NAME=${GIT_USER_NAME} - GIT_USER_EMAIL=${GIT_USER_EMAIL} volumes: - ${HOME}/.anthropic:/home/computeruse/.anthropic - /c/Users/kh/prj/courses:/home/computeruse/courses # サンプルとして追加したディレクトリ - /c/Users/kh/.ssh:/home/computeruse/.ssh:ro # 読み取り専用 ports: - "5900:5900" - "8501:8501" - "6080:6080" - "8080:8080" tty: true # -it フラグの代わり stdin_open: true # -it フラグの代わり はいdocker-composeでも起動できました。.sshフォルダ丸ごと共有はお行儀がよくない気がするが、とりあえず実験用ってことにしておく。 これができるということは、今までできなかった以下のことができるようになったのです。 - AIが修正したコードをGitで管理できるようになった。つまり、修正した差分がどこなのかわかるようになった。長文のコードを出力してきて、修正部分と、既存のところはそのままという表現の区別がいらなくなった。もしくは、わかりやすくなった。理由はgit diffコマンドで緑色と赤色で区別されるようになるからだ。まだ、確認していないがきっとそうだ。 *** start-demo.sh [#q172430a] 毎回ブラウザでlocalhost:8080を開くのが面倒になってきたので、起動スクリプトを用意しました。 #!/bin/bash docker-compose down # コンテナを起動 docker-compose up & # 20秒待機(コンテナの起動を待つ) sleep 20 # OSタイプに応じてブラウザを起動 case "$OSTYPE" in "msys"*|"cygwin"*|"win"*) # Windows if command -v start &> /dev/null; then start chrome http://localhost:8080 else cmd.exe /c start http://localhost:8080 fi ;; "darwin"*) # macOS open -a "Google Chrome" http://localhost:8080 ;; "linux-gnu"*) # Linux or WSL if grep -q Microsoft /proc/version; then # WSL環境 cmd.exe /c start http://localhost:8080 else # 通常のLinux if command -v google-chrome &> /dev/null; then google-chrome http://localhost:8080 elif command -v chrome &> /dev/null; then chrome http://localhost:8080 elif command -v chromium &> /dev/null; then chromium http://localhost:8080 else xdg-open http://localhost:8080 fi fi ;; esac ** 仮想PCの環境を改善できるかチャレンジしてみる [#t20a85d9] Dockerファイルに、よくやる手順を追記する。 *** Dockerfile [#r96f55db] 以下をDockerfileとして保存する。手順を追加してある。 注意: 下記コード中のyou@example.comと、Your Nameは、各自のアカウントなどの設定に合わせてください。 以下のコマンドで確認できます。 echo $(git config --global user.name) echo $(git config --global user.email) FROM ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest # 最初にrootユーザーとして実行することを明示 USER root # 日本語環境のセットアップ RUN apt-get update && \ apt-get install -y \ language-pack-ja-base \ language-pack-ja \ locales \ xclip \ vim && \ locale-gen ja_JP.UTF-8 && \ rm -rf /var/lib/apt/lists/* # デフォルトユーザー(computeruse)の.bashrcに日本語設定を追加 USER computeruse RUN echo "export LANG=ja_JP.UTF-8" >> ~/.bashrc && \ git config --global --add safe.directory /home/computeruse/courses && \ git config --global user.email "you@example.com" && \ git config --global user.name "Your Name" echo '# Gitブランチ表示の設定' >> ~/.bashrc && \ echo 'parse_git_branch() {' >> ~/.bashrc && \ echo ' git branch 2> /dev/null | sed -e "/^[^*]/d" -e "s/* \(.*\)/ (\1)/"' >> ~/.bashrc && \ echo '}' >> ~/.bashrc && \ echo 'export PS1="\u@\h:\w\[\e[32m\]\$(parse_git_branch)\[\e[00m\]\$ "' >> ~/.bashrc # システム全体のロケール設定 ENV LANG=ja_JP.UTF-8 \ LANGUAGE=ja_JP:ja \ LC_ALL=ja_JP.UTF-8 *** docker-compose.yml [#l92535b5] 以下の、volumes:の設定項目は、各自が連携させたいディレクトリ名に置き換えること version: '3' services: anthropic: build: context: . dockerfile: Dockerfile environment: - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - GIT_USER_NAME=${GIT_USER_NAME} - GIT_USER_EMAIL=${GIT_USER_EMAIL} volumes: - ${HOME}/.anthropic:/home/computeruse/.anthropic - /c/Users/kh/prj/courses:/home/computeruse/courses - /c/Users/kh/.ssh:/home/computeruse/.ssh:ro ports: - "5900:5900" - "8501:8501" - "6080:6080" - "8080:8080" tty: true stdin_open: true ** 使い方 [#me9dc882] Dockerfileを修正後、初回のみ docker-compose up --build 2回目以降は docker-compose up * gitでの管理を手伝ってもらう。 [#n27ad2e7] 最初のコミットぐらいは、手動でもいいかな。でもdockerで立ち上げた仮想PC上でコマンドを入れてみる。 git add . --all git commit -m 'first commit' できた、自分の認証情報を与えているのでできるようになっている。 コンソールの日本語も適切に表示できている。 準備は整った。 今回は、練習として、英文のドキュメントがjupyter形式だったので、それをmarkdown形式にしてもらうというのを練習課題としてやってみようと思う。 ただし以下の縛りを付ける。 修正前にgitでブランチを切ること 作業が終わったらコミットすること ** 見どころ [#p2466675] - 長文のドキュメントの修正に対応しているのかどうか? - gitの操作を行いながら作業ができるかどうか。 - AIの仕事っぷりをgitのdiffを使ってレビューできるのかどうか?(一番これがやりたかった) ** gitで管理しているブランチのドキュメントを翻訳してもらう [#s15317fe] では、やってみよう。 以下のようにお願いしてみた。 以下のディレクトリ配下の /home/computeruse/courses 拡張子 .ipynb のファイルをmarkdown形式に変換しコミット、さらに日本語にしてコミットしてください。 作成するにあたって、gitのブランチを作成し、作業をお願いします。 作業が完了したら、コミットをお願いします。 まずは作業指示の認識確認のため、1つのファイルのみで作業を行ってください。 すると、claude sonnetは、こともあろうか、自分がforkしたリポジトリからブランチを切らずに、本家のほうからブランチを気って来た。。。まあ、そこで学習してたのだから、そうしたがるのはわかるが。。。。いけない。 タスクが複雑になると、ポンコツになってくるようなので、gitのコミットはさせないようにしたほうがよさそうだ。大量のタスクもやらせると、ろくでもない対応を横展開するので、NGな使い方だと思った。 * AIの処理が早すぎて、制限に引っかかる問題 [#ted4387a] Tier1という契約レベルだと、1分間に50リクエスト超えると制限に引っかかる。1つのお願いだったとしても、AIが内部で数十回リクエストを消費してしまうのだ。 いろいろやろうとすると、リクエストの頻度が高いせいか以下のエラーになる。 RateLimitError You have been rate limited. Retry after 0:01:31 (HH:MM:SS). See our API documentation for more details. 感覚的には、今のリミットの20倍ぐらい制限を緩和しないと、業務に使えないと感じた。 翻訳の依頼対象が30ファイルぐらいになることがわかって、こちらが意図しない作業を30個やってしまったあとに、「いやいやそうではない」と再度指示した段階で、「リクエストのリミットなんで、お休みします」となるわけだ。 技術的にはできるけれども、サービスデザイン起因の制限によってダメになっているというのは、実にもったいないことをしていると思った。 ** 急がば回れ的なやり方がよさそう [#d0a316f9] 今までうまくいかなかったので、方針を変えよう。 とりあえず、1つのファイルを丁寧にやって、小さな成功体験を積ませるのが、近道かもしれない。 *** ipynbファイルをmdファイルに変換するツールを作ってもらった。 [#p84c4ad4] 人為的な制限のため、ある程度、自分でやるようにしないといけない。 ツール作ってもらって、処理はツールでやるなどして、リクエスト回数を減らす工夫が必要だ。 本当は、ipynbファイルを直接翻訳してもらおうとしたのだが、なぜかpythonライブラリを使おうとしてしまうので、だったら、ツール作ってもらおうと思って、以下を作ってもらった - ipynb_to_md.py #!/usr/bin/env python3 import sys import os import nbformat from nbconvert import MarkdownExporter def convert_ipynb_to_md(input_path, output_path=None): """ Jupyter NotebookファイルをMarkdownファイルに変換する Args: input_path (str): 入力.ipynbファイルのパス output_path (str, optional): 出力.mdファイルのパス。指定がない場合は同じディレクトリに同名の.mdファイルを作成 """ try: # 出力パスが指定されていない場合、入力ファイルと同じディレクトリに.mdファイルを作成 if output_path is None: output_path = os.path.splitext(input_path)[0] + '.md' # .ipynbファイルを読み込む with open(input_path, 'r', encoding='utf-8') as f: notebook = nbformat.read(f, as_version=4) # MarkdownExporterを初期化 markdown_exporter = MarkdownExporter() # notebookをMarkdownに変換 (body, resources) = markdown_exporter.from_notebook_node(notebook) # Markdownファイルとして保存 with open(output_path, 'w', encoding='utf-8') as f: f.write(body) print(f"変換が完了しました: {output_path}") except Exception as e: print(f"エラーが発生しました: {str(e)}") sys.exit(1) def main(): # コマンドライン引数をチェック if len(sys.argv) < 2: print("使用方法: python ipynb_to_md.py input.ipynb [output.md]") sys.exit(1) input_path = sys.argv[1] output_path = sys.argv[2] if len(sys.argv) > 2 else None # 入力ファイルの存在確認 if not os.path.exists(input_path): print(f"エラー: 入力ファイル '{input_path}' が見つかりません。") sys.exit(1) # 変換を実行 convert_ipynb_to_md(input_path, output_path) if __name__ == '__main__': main() ** .ipynbファイル一覧を出すプログラムも作ってもらった [#kedb3037] - find_ipynb.py #!/usr/bin/env python # -*- coding: utf-8 -*- import os import glob import sys def find_ipynb_files(directory="."): """ 指定されたディレクトリ配下の.ipynbファイルを再帰的に検索して一覧表示する Args: directory (str): 検索を開始するディレクトリパス(デフォルトは現在のディレクトリ) """ try: # 絶対パスに変換 abs_directory = os.path.abspath(directory) # .ipynbファイルを再帰的に検索 pattern = os.path.join(abs_directory, "**", "*.ipynb") ipynb_files = glob.glob(pattern, recursive=True) # 結果を標準出力に出力 for file_path in ipynb_files: print(file_path) except Exception as e: print(f"エラーが発生しました: {str(e)}", file=sys.stderr) sys.exit(1) def main(): # コマンドライン引数からディレクトリを取得(指定がない場合は現在のディレクトリを使用) directory = sys.argv[1] if len(sys.argv) > 1 else "." # ディレクトリの存在確認 if not os.path.exists(directory): print(f"エラー: ディレクトリ '{directory}' が見つかりません。", file=sys.stderr) sys.exit(1) if not os.path.isdir(directory): print(f"エラー: '{directory}' はディレクトリではありません。", file=sys.stderr) sys.exit(1) # 検索を実行 find_ipynb_files(directory) if __name__ == '__main__': main() ** 1つの修正が終わったら、dockerを再起動したほうがいいかもしれない。 [#gb1663d8] おそらく、会話の履歴がたまってきたら、後半のリクエストって、前半のリクエスト全部をコストにしてしまっている感じがする。後半になるとリミット制限が、あっという間に来た。制限後の時間で1つのお願いをすると、すぐにリミットになったからそのような推測に至った。 いずれ、claude3.5のインターフェースのように新規チャット開始、みたいなインターフェースになるのだと思う
spamではない場合はチェックをいれてください。
タイムスタンプを変更しない
* 目次 [#ae8b0b60] #contents * 概要 [#e38ebfde] AIでPCを操作できるということだ 通常のClaudeのチャットからは、メニューが見当たらない。 aiに、Computer useを使ってみたいと質問したところ以下のURLを紹介してもらえた https://docs.anthropic.com/en/docs/build-with-claude/computer-use (英文) まだ、beta版のようである。(この記事を書いているのは、2024/10/25) * 推奨スペック [#j5cc746f] dockerでPC内に仮想PC入れる感じになるので、 本格的に使うのであれば、 32GBぐらいのRAMと、コア数の多めのPCを別途用意したほうが良さそうに思えた。 そうしないと、スワップ処理で、もっさり動作になってしまい。ほぼ停止しているかのような錯覚を感じた。 ** デモのソースコード [#b81c330d] https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo *** ご意見はこちら、、、だそうだ [#k997ddc5] https://docs.google.com/forms/d/e/1FAIpQLSeD3IqITWsuepB19SEv889HsBvN9WOi6HRblPrJNyA9G7q02w/viewform * セットアップ [#fe20dbe8] ** APIキーを用意 [#i6cde43e] https://console.anthropic.com/dashboard ** Dockerを呼ぶ [#ud24ce95] Docker本体のインストール手順は割愛する。他を見てほしい。 dockerが使える状態前提。 *** シェルの場合 [#jdaa2f50] export ANTHROPIC_API_KEY=%your_api_key% docker run \ -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \ -v $HOME/.anthropic:/home/computeruse/.anthropic \ -p 5900:5900 \ -p 8501:8501 \ -p 6080:6080 \ -p 8080:8080 \ -it ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest *** 実行結果 [#v78154d4] Xvfb started successfully on display :1 Xvfb PID: 9 starting tint2 on display :1 ... starting mutter starting vnc PORT=5900 starting noVNC noVNC started successfully ✨ Computer Use Demo is ready! ➡️ Open http://localhost:8080 in your browser to begin noVNCはオープンソースで開発されている、ブラウザ上で動作するHTML5製のVNCクライアントです。 このnoVNCをサーバー側にインストールして、HTTPサーバーで公開しておけば、クライアント側はブラウザでアクセスするだけでリモートデスクトップ環境を使えるようになります ブラウザで、http://localhost:8080 を開いてみると、おそらくdockerのイメージだと思うが、dockerで立ち上げたであろうPCが立ち上がる。 dockerの中身を操作するだけならば、セキュリティは大丈夫そうだ。 &ref(claude_use_computer.png); ** 会話してみる [#s3bbefb7] ブラウザで表示した上記の画面の左側のChat欄に、どのようなことができるのか質問したら、教えてくれた。 アカウントの作成やログイン関連については、手伝えないといわれた。 OSは何ですか?と聞いたところ以下の回答だった。 Ubuntu 22.04.5 LTS gitは、すでにインストール済みのようだ。 *** 言語のインストール状況 [#wb563b4a] インストール済み: - Python 3.11.6 pyenvを使用して管理されています 多数のPythonパッケージがインストールされています(numpy, pandas, streamlit, requests など) 未インストール: - Node.js - Java - Go - Ruby - PHP ** vi [#f19f6b45] テキストエディタのVIはインストールされていないようだ。 「viをインストールしてみて」 とお願いしてみた。できた。 「viのカラースキームをmonokaiにして」 とお願いしてみた。できた。日本語に対応してなかったので、まだ設定が必要そうだ ** CPUのプロセスが100%に! [#ke6eae66] PCのメモリが16GBだと、ブラウザを立ち上げようとすると、固まってしまった。 VmmemVSLというプロセスがめちゃめちゃ占有している。 dockerがフリーズしてしまった。メモリを食いすぎ PCにメモリはたくさん積んでおいたほうがいいだろう。 *** VmmemVSLのメモリ対策の記事 [#o27c5f04] 暫定対応 https://zenn.dev/quantum/articles/b29722e8795335 power shell用のコマンド # WSLに入るコマンド。すでにWSLに入っている場合は不要 wsl # メモリをフラッシュするコマンド sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches" * 懸念点 [#r6760159] チャットが複数セッションに分かれていないので、上限に来た場合にどうするのか? 長文のチャットだと会話の継続はできなくなってくるが、dockerでたちあげた環境に紐づいてしまっていると、チャットだけクリアすることはできるのだろうか? 自主的にどんどんファイルを更新してくれたりするのは頼もしいが、複雑になってくると、やらかしてしまった場合、戻る方法はどうするのだろうか? ソースコードならば、gitがインストールされているので、都度コミットしましょうというルールでいけそうだが、設定ファイルなどを改変されると、バックアップしていないと戻せなくなってしまう。 処理が進むと重くなってくる、となると、これを使った開発は、課題を1つ解決したらまたリセットして使う仕組みならば行けそうだ。 * 自分だったらこう使う。を考えてみた [#f8326c01] AIとコラボ用にGitLabサーバを立てる AI用に最低32GBのPCを用意する。 並列で作業させたい場合もあるから、もしかしたら複数台用意したほうがいいかもしれない 問題解決に近い環境をdockerのイメージを作る - 日本語 - 言語の実行環境 - Git系の環境へのアクセス権 - gitのリポジトリをpullしてもらう 関連するファイルは自分で見に行ってもらうように指示する Issue経由などで課題を与える 課題を手伝ってもらう gitにコミットする githabなどに pushする 不本意ながら、AIの処理できるトークン数に限界がくるので、次の課題に向けリセットし、上記の手順を 再度行う * ローカルファイルをマウントするようにしてみる [#xfa7a4e6] dockerで作業するのではなく、ホストマシンでgit cloneしたファイルを対象にすれば、いろいろと便利なのでは?と思った。 サンプルとして、以下を持ってきた。これはanthropicの公式をforkして、自分が好き勝手にできるようにしたリポジトリです。 git clone https://github.com/khayashi4337/courses.git 目標は、github上の英語の資料を、ローカルに用意して、Couputer useにdocker-compose経由で連携し、翻訳できるかどうかチャレンジしてみるのです。そのまま、git に commitやpushできたら楽なので、ローカルの情報をどこまで持たせることができるのかも確認していきます。 ローカルファイルを使えるようにするには、Dockerfile形式ではなくdocker-compose形式が一般的だ。 なので、上記のコードをローカルファイルに変換してみます。 ** ローカルのgitの設定を環境変数に入れておくbash [#m9bb7c41] # Git設定を確認して環境変数に設定 export GIT_USER_NAME=$(git config --global user.name) export GIT_USER_EMAIL=$(git config --global user.email) # 設定された値を確認 echo "Git User Name: $GIT_USER_NAME" echo "Git User Email: $GIT_USER_EMAIL" ** docker-compose.yml [#jffcd092] version: '3' services: anthropic: image: ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest environment: - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - GIT_USER_NAME=${GIT_USER_NAME} - GIT_USER_EMAIL=${GIT_USER_EMAIL} volumes: - ${HOME}/.anthropic:/home/computeruse/.anthropic - /c/Users/kh/prj/courses:/home/computeruse/courses # サンプルとして追加したディレクトリ - /c/Users/kh/.ssh:/home/computeruse/.ssh:ro # 読み取り専用 ports: - "5900:5900" - "8501:8501" - "6080:6080" - "8080:8080" tty: true # -it フラグの代わり stdin_open: true # -it フラグの代わり はいdocker-composeでも起動できました。.sshフォルダ丸ごと共有はお行儀がよくない気がするが、とりあえず実験用ってことにしておく。 これができるということは、今までできなかった以下のことができるようになったのです。 - AIが修正したコードをGitで管理できるようになった。つまり、修正した差分がどこなのかわかるようになった。長文のコードを出力してきて、修正部分と、既存のところはそのままという表現の区別がいらなくなった。もしくは、わかりやすくなった。理由はgit diffコマンドで緑色と赤色で区別されるようになるからだ。まだ、確認していないがきっとそうだ。 *** start-demo.sh [#q172430a] 毎回ブラウザでlocalhost:8080を開くのが面倒になってきたので、起動スクリプトを用意しました。 #!/bin/bash docker-compose down # コンテナを起動 docker-compose up & # 20秒待機(コンテナの起動を待つ) sleep 20 # OSタイプに応じてブラウザを起動 case "$OSTYPE" in "msys"*|"cygwin"*|"win"*) # Windows if command -v start &> /dev/null; then start chrome http://localhost:8080 else cmd.exe /c start http://localhost:8080 fi ;; "darwin"*) # macOS open -a "Google Chrome" http://localhost:8080 ;; "linux-gnu"*) # Linux or WSL if grep -q Microsoft /proc/version; then # WSL環境 cmd.exe /c start http://localhost:8080 else # 通常のLinux if command -v google-chrome &> /dev/null; then google-chrome http://localhost:8080 elif command -v chrome &> /dev/null; then chrome http://localhost:8080 elif command -v chromium &> /dev/null; then chromium http://localhost:8080 else xdg-open http://localhost:8080 fi fi ;; esac ** 仮想PCの環境を改善できるかチャレンジしてみる [#t20a85d9] Dockerファイルに、よくやる手順を追記する。 *** Dockerfile [#r96f55db] 以下をDockerfileとして保存する。手順を追加してある。 注意: 下記コード中のyou@example.comと、Your Nameは、各自のアカウントなどの設定に合わせてください。 以下のコマンドで確認できます。 echo $(git config --global user.name) echo $(git config --global user.email) FROM ghcr.io/anthropics/anthropic-quickstarts:computer-use-demo-latest # 最初にrootユーザーとして実行することを明示 USER root # 日本語環境のセットアップ RUN apt-get update && \ apt-get install -y \ language-pack-ja-base \ language-pack-ja \ locales \ xclip \ vim && \ locale-gen ja_JP.UTF-8 && \ rm -rf /var/lib/apt/lists/* # デフォルトユーザー(computeruse)の.bashrcに日本語設定を追加 USER computeruse RUN echo "export LANG=ja_JP.UTF-8" >> ~/.bashrc && \ git config --global --add safe.directory /home/computeruse/courses && \ git config --global user.email "you@example.com" && \ git config --global user.name "Your Name" echo '# Gitブランチ表示の設定' >> ~/.bashrc && \ echo 'parse_git_branch() {' >> ~/.bashrc && \ echo ' git branch 2> /dev/null | sed -e "/^[^*]/d" -e "s/* \(.*\)/ (\1)/"' >> ~/.bashrc && \ echo '}' >> ~/.bashrc && \ echo 'export PS1="\u@\h:\w\[\e[32m\]\$(parse_git_branch)\[\e[00m\]\$ "' >> ~/.bashrc # システム全体のロケール設定 ENV LANG=ja_JP.UTF-8 \ LANGUAGE=ja_JP:ja \ LC_ALL=ja_JP.UTF-8 *** docker-compose.yml [#l92535b5] 以下の、volumes:の設定項目は、各自が連携させたいディレクトリ名に置き換えること version: '3' services: anthropic: build: context: . dockerfile: Dockerfile environment: - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - GIT_USER_NAME=${GIT_USER_NAME} - GIT_USER_EMAIL=${GIT_USER_EMAIL} volumes: - ${HOME}/.anthropic:/home/computeruse/.anthropic - /c/Users/kh/prj/courses:/home/computeruse/courses - /c/Users/kh/.ssh:/home/computeruse/.ssh:ro ports: - "5900:5900" - "8501:8501" - "6080:6080" - "8080:8080" tty: true stdin_open: true ** 使い方 [#me9dc882] Dockerfileを修正後、初回のみ docker-compose up --build 2回目以降は docker-compose up * gitでの管理を手伝ってもらう。 [#n27ad2e7] 最初のコミットぐらいは、手動でもいいかな。でもdockerで立ち上げた仮想PC上でコマンドを入れてみる。 git add . --all git commit -m 'first commit' できた、自分の認証情報を与えているのでできるようになっている。 コンソールの日本語も適切に表示できている。 準備は整った。 今回は、練習として、英文のドキュメントがjupyter形式だったので、それをmarkdown形式にしてもらうというのを練習課題としてやってみようと思う。 ただし以下の縛りを付ける。 修正前にgitでブランチを切ること 作業が終わったらコミットすること ** 見どころ [#p2466675] - 長文のドキュメントの修正に対応しているのかどうか? - gitの操作を行いながら作業ができるかどうか。 - AIの仕事っぷりをgitのdiffを使ってレビューできるのかどうか?(一番これがやりたかった) ** gitで管理しているブランチのドキュメントを翻訳してもらう [#s15317fe] では、やってみよう。 以下のようにお願いしてみた。 以下のディレクトリ配下の /home/computeruse/courses 拡張子 .ipynb のファイルをmarkdown形式に変換しコミット、さらに日本語にしてコミットしてください。 作成するにあたって、gitのブランチを作成し、作業をお願いします。 作業が完了したら、コミットをお願いします。 まずは作業指示の認識確認のため、1つのファイルのみで作業を行ってください。 すると、claude sonnetは、こともあろうか、自分がforkしたリポジトリからブランチを切らずに、本家のほうからブランチを気って来た。。。まあ、そこで学習してたのだから、そうしたがるのはわかるが。。。。いけない。 タスクが複雑になると、ポンコツになってくるようなので、gitのコミットはさせないようにしたほうがよさそうだ。大量のタスクもやらせると、ろくでもない対応を横展開するので、NGな使い方だと思った。 * AIの処理が早すぎて、制限に引っかかる問題 [#ted4387a] Tier1という契約レベルだと、1分間に50リクエスト超えると制限に引っかかる。1つのお願いだったとしても、AIが内部で数十回リクエストを消費してしまうのだ。 いろいろやろうとすると、リクエストの頻度が高いせいか以下のエラーになる。 RateLimitError You have been rate limited. Retry after 0:01:31 (HH:MM:SS). See our API documentation for more details. 感覚的には、今のリミットの20倍ぐらい制限を緩和しないと、業務に使えないと感じた。 翻訳の依頼対象が30ファイルぐらいになることがわかって、こちらが意図しない作業を30個やってしまったあとに、「いやいやそうではない」と再度指示した段階で、「リクエストのリミットなんで、お休みします」となるわけだ。 技術的にはできるけれども、サービスデザイン起因の制限によってダメになっているというのは、実にもったいないことをしていると思った。 ** 急がば回れ的なやり方がよさそう [#d0a316f9] 今までうまくいかなかったので、方針を変えよう。 とりあえず、1つのファイルを丁寧にやって、小さな成功体験を積ませるのが、近道かもしれない。 *** ipynbファイルをmdファイルに変換するツールを作ってもらった。 [#p84c4ad4] 人為的な制限のため、ある程度、自分でやるようにしないといけない。 ツール作ってもらって、処理はツールでやるなどして、リクエスト回数を減らす工夫が必要だ。 本当は、ipynbファイルを直接翻訳してもらおうとしたのだが、なぜかpythonライブラリを使おうとしてしまうので、だったら、ツール作ってもらおうと思って、以下を作ってもらった - ipynb_to_md.py #!/usr/bin/env python3 import sys import os import nbformat from nbconvert import MarkdownExporter def convert_ipynb_to_md(input_path, output_path=None): """ Jupyter NotebookファイルをMarkdownファイルに変換する Args: input_path (str): 入力.ipynbファイルのパス output_path (str, optional): 出力.mdファイルのパス。指定がない場合は同じディレクトリに同名の.mdファイルを作成 """ try: # 出力パスが指定されていない場合、入力ファイルと同じディレクトリに.mdファイルを作成 if output_path is None: output_path = os.path.splitext(input_path)[0] + '.md' # .ipynbファイルを読み込む with open(input_path, 'r', encoding='utf-8') as f: notebook = nbformat.read(f, as_version=4) # MarkdownExporterを初期化 markdown_exporter = MarkdownExporter() # notebookをMarkdownに変換 (body, resources) = markdown_exporter.from_notebook_node(notebook) # Markdownファイルとして保存 with open(output_path, 'w', encoding='utf-8') as f: f.write(body) print(f"変換が完了しました: {output_path}") except Exception as e: print(f"エラーが発生しました: {str(e)}") sys.exit(1) def main(): # コマンドライン引数をチェック if len(sys.argv) < 2: print("使用方法: python ipynb_to_md.py input.ipynb [output.md]") sys.exit(1) input_path = sys.argv[1] output_path = sys.argv[2] if len(sys.argv) > 2 else None # 入力ファイルの存在確認 if not os.path.exists(input_path): print(f"エラー: 入力ファイル '{input_path}' が見つかりません。") sys.exit(1) # 変換を実行 convert_ipynb_to_md(input_path, output_path) if __name__ == '__main__': main() ** .ipynbファイル一覧を出すプログラムも作ってもらった [#kedb3037] - find_ipynb.py #!/usr/bin/env python # -*- coding: utf-8 -*- import os import glob import sys def find_ipynb_files(directory="."): """ 指定されたディレクトリ配下の.ipynbファイルを再帰的に検索して一覧表示する Args: directory (str): 検索を開始するディレクトリパス(デフォルトは現在のディレクトリ) """ try: # 絶対パスに変換 abs_directory = os.path.abspath(directory) # .ipynbファイルを再帰的に検索 pattern = os.path.join(abs_directory, "**", "*.ipynb") ipynb_files = glob.glob(pattern, recursive=True) # 結果を標準出力に出力 for file_path in ipynb_files: print(file_path) except Exception as e: print(f"エラーが発生しました: {str(e)}", file=sys.stderr) sys.exit(1) def main(): # コマンドライン引数からディレクトリを取得(指定がない場合は現在のディレクトリを使用) directory = sys.argv[1] if len(sys.argv) > 1 else "." # ディレクトリの存在確認 if not os.path.exists(directory): print(f"エラー: ディレクトリ '{directory}' が見つかりません。", file=sys.stderr) sys.exit(1) if not os.path.isdir(directory): print(f"エラー: '{directory}' はディレクトリではありません。", file=sys.stderr) sys.exit(1) # 検索を実行 find_ipynb_files(directory) if __name__ == '__main__': main() ** 1つの修正が終わったら、dockerを再起動したほうがいいかもしれない。 [#gb1663d8] おそらく、会話の履歴がたまってきたら、後半のリクエストって、前半のリクエスト全部をコストにしてしまっている感じがする。後半になるとリミット制限が、あっという間に来た。制限後の時間で1つのお願いをすると、すぐにリミットになったからそのような推測に至った。 いずれ、claude3.5のインターフェースのように新規チャット開始、みたいなインターフェースになるのだと思う
テキスト整形のルールを表示する