こんにちは、JS2IIUです。
近年、OpenAIのChatGPTをはじめとする大規模言語モデルが注目を集めています。そんな中、AnthropicはAIの安全性と研究に焦点を当てた企業として、独自の強力な言語モデルClaudeを提供しています。
Anthropicは、Googleと提携し、倫理的で責任あるAI開発を重視しています。Claudeは、ChatGPTと同様に、テキスト生成、翻訳、質疑応答など、様々なタスクに優れた能力を発揮します。
Anthropicの特徴
- 安全性: 有害な出力やバイアスを最小限に抑えるように設計されています。
- 憲法AI: 倫理的なガイドラインに基づいて動作する「憲法AI」を採用しています。
- 多様なモデル: Claude-Instant、Claude-2など、用途に合わせた様々なモデルを提供しています。

ClaudeのAPI呼び出し方法
PythonでClaudeのAPIを呼び出すには、anthropicライブラリを使用します。事前にAnthropicのWEBサイトでAPI KEYを入手しておきましょう。

import anthropic
client = anthropic.Client("YOUR_API_KEY")
response = client.completions.create(
model="claude-2",
prompt="こんにちは!",
)
print(response.completion)StreamlitでClaudeを使ったチャットシステムを構築
では、StreamlitとLangChainを使って、Claudeと対話できるチャットシステムを構築してみましょう。コードの下に、実際に動作している時のスクリーンショットを載せています。
コード
import streamlit as st
from langchain_anthropic import ChatAnthropic
from langchain.schema import HumanMessage, AIMessage, SystemMessage
# Anthropicクライアントを生成
chat = ChatAnthropic(
model="claude-3-5-haiku-20241022", # 適切なClaudeモデル名を指定してください
temperature=0.7,
streaming=True,
anthropic_api_key="YOUR_KEY_HERE" # ここにあなたのAPIキーを入力してください
)
# title
st.subheader('Chat with Anthropic claude-3-5-haiku-20241022')
# セッションステートを初期化
if "messages" not in st.session_state:
st.session_state.messages = [SystemMessage(content="You are a helpful assistant.")]
# メッセージ履歴を表示
for message in st.session_state.messages:
if isinstance(message, HumanMessage):
with st.chat_message("user"):
st.markdown(message.content)
elif isinstance(message, AIMessage):
with st.chat_message("assistant"):
st.markdown(message.content)
# ユーザーからの入力を受け取る
if prompt := st.chat_input("What is up?"):
# ユーザーのメッセージを履歴に追加
user_message = HumanMessage(content=prompt)
st.session_state.messages.append(user_message)
# チャットメッセージとして表示
with st.chat_message("user"):
st.markdown(prompt)
# Anthropic APIを使ってAIからの応答をストリーミングで生成
with st.chat_message("assistant"):
full_response = ""
placeholder = st.empty() # プレースホルダーを作成
for chunk in chat.stream(st.session_state.messages):
content = chunk.content
if content:
full_response += content
placeholder.markdown(full_response + "▌") # 途中経過を表示
placeholder.markdown(full_response) # 最終的な応答を表示
# AIのメッセージを履歴に追加
ai_message = AIMessage(content=full_response)
st.session_state.messages.append(ai_message)コードの説明
このコードは、Streamlitアプリケーションを使用して、Anthropic APIを介してAIモデル(Claude-3.5)とリアルタイムにチャットする機能を提供します。
1. 必要なライブラリのインポート
import streamlit as st
from langchain_anthropic import ChatAnthropic
from langchain.schema import HumanMessage, AIMessage, SystemMessage- Streamlit (st): ウェブアプリケーションを簡単に作成するためのPythonライブラリ。
- langchain_anthropic: Anthropic社のAIモデルと統合するためのライブラリ。
ChatAnthropicクラスを使ってAPIクライアントを生成します。 - langchain.schema: メッセージのタイプを定義するクラスを提供します。
HumanMessage: ユーザーからのメッセージを表現。AIMessage: AIからの応答メッセージを表現。SystemMessage: システムの指示やAIの初期設定を表現。
2. Anthropicクライアントの生成
chat = ChatAnthropic(
model="claude-3-5-haiku-20241022",
temperature=0.7,
streaming=True,
anthropic_api_key="YOUR_KEY_HERE"
)- model: 使用するAnthropic AIモデルの名前を指定します。ここでは
claude-3-5-haiku-20241022を指定していますが、利用可能なモデルを確認する必要があります。 - temperature: 応答のランダム性を制御します。値が低いほど応答は決定的(予測可能)になり、高いほど多様性が増します。
- streaming: ストリーミングで応答を受け取る設定。
Trueに設定すると、リアルタイムで応答が更新されます。 - anthropic_api_key: Anthropic APIの認証キーを指定します。
"YOUR_KEY_HERE"の部分に自分のAPIキーを入力します。
3. アプリケーションのヘッダー
st.subheader('Chat with Anthropic claude-3-5-haiku-20241022')Streamlitのsubheader関数を使い、アプリケーションのヘッダーを表示します。
4. セッションステートの初期化
if "messages" not in st.session_state:
st.session_state.messages = [SystemMessage(content="You are a helpful assistant.")]- セッションステート (st.session_state): Streamlitでセッション中にデータを保持する仕組み。
- この部分では、セッションに
messagesというリストを初期化します。 - SystemMessage: 初期設定として、AIに「あなたは役に立つアシスタントです」という指示を与えています。
5. メッセージ履歴の表示
for message in st.session_state.messages:
if isinstance(message, HumanMessage):
with st.chat_message("user"):
st.markdown(message.content)
elif isinstance(message, AIMessage):
with st.chat_message("assistant"):
st.markdown(message.content)st.session_state.messages内のメッセージを順に処理し、ユーザーとAIのメッセージを分けて表示します。- st.chat_message: メッセージの種類(
"user"または"assistant")に応じて異なるスタイルでメッセージを表示します。 - st.markdown: メッセージ内容をマークダウン形式で表示します。
6. ユーザー入力の受け取り
if prompt := st.chat_input("What is up?"):
user_message = HumanMessage(content=prompt)
st.session_state.messages.append(user_message)
with st.chat_message("user"):
st.markdown(prompt)- st.chat_input: ユーザーからの入力を受け取るためのUI要素。
prompt変数に入力値を格納。- 入力がある場合:
- HumanMessageとしてユーザーの入力内容を作成し、
st.session_state.messagesに追加。 - 入力内容をチャットメッセージとして表示。
7. Anthropic APIでの応答生成
with st.chat_message("assistant"):
full_response = ""
placeholder = st.empty()
for chunk in chat.stream(st.session_state.messages):
content = chunk.content
if content:
full_response += content
placeholder.markdown(full_response + "▌")
placeholder.markdown(full_response)- st.chat_message: AIからの応答を表示するセクションを作成。
- chat.stream:
ChatAnthropicクラスのストリーミングメソッドを使用し、st.session_state.messagesを基に応答を生成。 - 応答がストリーミングで届くたびに以下を実行:
full_responseに応答内容を追加。- st.empty(): プレースホルダーとして一時的なUI要素を作成し、リアルタイムで応答内容を更新。
- 応答が完了したら、最終結果を表示。
8. AIメッセージの履歴への追加
ai_message = AIMessage(content=full_response)
st.session_state.messages.append(ai_message)生成されたAIの応答をAIMessageとして作成し、セッションステートに追加します。
まとめ
このコードは、以下の主要な機能を実現しています:
- Anthropic社のAIモデルを利用したチャットシステムの構築。
- Streamlitを使ったリアルタイムチャットUIの実装。
- ユーザー入力とAI応答をセッションステートで管理し、履歴を保持。
注意点:
- 必ず有効なAnthropic APIキーを設定する必要があります。
- モデル名が利用可能か事前に確認してください。
temperatureやstreamingの設定は必要に応じて調整してください。
実行時エラー
以下のエラーはapi-keyを入手したものの、APIのクレジットを購入していない、もしくは月額プランに登録していないときに返ってくるエラーです。最低$5のクレジットを入れないとAPIが使えないので注意が必要です。
anthropic.BadRequestError: Error code: 400 - {'type': 'error', 'error': {'type': 'invalid_request_error', 'message': 'Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits.'}}以下のエラーはAPI KEYの設定ミスをしている場合に返ってくるエラーです。本当はお勧めできないのですが、今回のサンプルコード、10行目に正しくapi-keyを設定して下さい。可能なら環境変数に設定して下さい。
TypeError: "Could not resolve authentication method. Expected either api_key or auth_token to be set. Or for one of the `X-Api-Key` or `Authorization` headers to be explicitly omitted"参考リンク
同様に、OpenAIのgpt-o4やGoogleのGeminiを使ったアプリの構築についてはこちらの記事を参照して下さい。
最後に、書籍のPRです。
最新のOpenAIのチャットAPIの使い方もしっかりと解説されている良書です。2024年11月初版発行、「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」西見、吉田、大嶋著。
最後まで読んでいただきありがとうございます。73




コメント