AIパーソナル・ラーニング
と実践的なガイダンス

DuckDuckGoの検索APIを使い、ビッグモデルにネットワーク機能への無料アクセスを提供し、New Bingのような効果を狙う。

プロジェクト概要

統合によって ダックダックゴー 一般的な大規模言語モデルに似たものを与える検索API ニュー・ビング リアルタイムのウェブアクセスとインテリジェントなQ&A機能。既存の 関数呼び出し関数は、効率的で柔軟なクエリ処理と回答生成プロセスを実現します。

コアの実現

システムは 関数呼び出し クエリ処理と回答生成をシームレスに統合するためのメカニズム:

  1. クエリ分析と検索:クエリの使用 クロード3俳句 もしかしたら gpt-3.5-ターボ より単純なモデルは、最適化された検索語を生成し、関数呼び出しによって検索APIを呼び出す。
  2. ウェブ検索: DuckDuckGo APIを呼び出して、リアルタイムで情報検索を行う。
  3. インテリジェントな回答生成 クロード-3-5-ソネット もしかしたら ガット このような、より複雑なモデルは、検索結果とオリジナルの質問を組み合わせて、正確で包括的な回答を生成する。

コードの実装

1.環境設定と機能定義

インポート os
インポート json
from openai import OpenAI
from duckduckgo_search import DDGS
API_KEY = os.getenv("OPENAI_API_KEY")
BASE_URL = os.getenv("OPENAI_BASE_URL")
client = OpenAI(api_key=API_KEY, base_url=BASE_URL)
FUNCTIONS = [
{
"name": "search_duckduckgo"、
"description": "DuckDuckGo検索エンジンを使って情報を検索します。最新のニュース、記事、ブログなどを検索できます。",
「パラメータ": {
"type": "object"、
「プロパティ": {
「keywords": {
"タイプ": "配列", "項目": { "タイプ": "文字列", { "文字列": {
"items": { "type": "string"}, "description": "searchlist".
"description": "検索するキーワードのリスト。例えば、['Python', 'machine learning', 'recent advances']など。
}
},.
"required": ["keywords"].
}
}
]

2.関連補助機能

def search_duckduckgo(keywords):
search_term = " ".join(keywords)
with DDGS() as ddgs:
return list(ddgs.text(keywords=search_term, region="cn-zh", safesearch="on", max_results=5))
def print_search_results(results):
for result in results:
print(
f"标题: {result['title']}\n链接: {result['href']}\n摘要: {result['body']}\n---")
def get_openai_response(messages, model="gpt-3.5-turbo", functions=None, function_call=None):
try:
response = client.chat.completions.create(
model=model,
messages=messages,
functions=functions,
function_call=function_call
)
return response.choices[0].message
except Exception as e:
print(f"调用OpenAI API时出错: {str(e)}")
return None
def process_function_call(response_message):
function_name = response_message.function_call.name
function_args = json.loads(response_message.function_call.arguments)
print(f"\n模型选择调用函数: {function_name}")
if function_name == "search_duckduckgo":
keywords = function_args.get('keywords', [])
if not keywords:
print("错误:模型没有提供搜索关键词")
return None
print(f"关键词: {', '.join(keywords)}")
function_response = search_duckduckgo(keywords)
print("\nDuckDuckGo搜索返回结果:")
print_search_results(function_response)
return function_response
else:
print(f"未知的函数名称: {function_name}")
return None

3.主な加工機能

def main(question).
print(f "質問: {question}")
messages = [{"role": "user", "content": question}].
response_message = get_openai_response(
messages, functions=FUNCTIONS, function_call="auto")
if not response_message: return
if not response_message: return
if response_message.function_call.
function_response = process_function_call(response_message)
if function_response.
messages.extend([)
response_message.model_dump(),{」を返します。
{
"role": "function", "name": response_message.model_dump(), { { "name": response_message.model_dump()
"name": response_message.function_call.name, { { "content": json.dump()
"content": json.dumps(function_response, ensure_ascii=False)
}
])
final_response = get_openai_response(messages, model="gpt-4o")
if final_response.
print("最終応答:")
print(final_response.content)
else: if final_response: print("\n final response:")
print("ⅳモデル直接応答:")
print(response_message.content)

実現

このようにして、例えば様々な質問に答えることができる大規模なモデルを作ることができる:

  1. 地理情報:"PRDは仏山を含むのか?"
  2. AI自身の能力に関する質問、"何ができるのか?"
  3. ドメイン固有の質問、"Plants vs. Zombies Hybridの作者は誰ですか?"
  4. 哲学的雑感:"人生には2つの言葉がある。
  5. "ジャンピング不平等とは何か "に関連する時事問題
  6. 時間に関する質問:「現在の北京時間は?

DuckDuckGoの検索APIを使い、ビッグモデルにネットワーク機能への自由なアクセスを提供し、New Bingのような効果を狙う-1

 


フルコード

import os
import json
from openai import OpenAI
from duckduckgo_search import DDGS

API_KEY = os.getenv("OPENAI_API_KEY")
BASE_URL = os.getenv("OPENAI_BASE_URL")
client = OpenAI(api_key=API_KEY, base_url=BASE_URL)

FUNCTIONS = [
{
"name": "search_duckduckgo",
"description": "使用DuckDuckGo搜索引擎查询信息。可以搜索最新新闻、文章、博客等内容。",
"parameters": {
"type": "object",
"properties": {
"keywords": {
"type": "array",
"items": {"type": "string"},
"description": "搜索的关键词列表。例如:['Python', '机器学习', '最新进展']。"
}
},
"required": ["keywords"]
}
}
]

def search_duckduckgo(keywords):
search_term = " ".join(keywords)
with DDGS() as ddgs:
return list(ddgs.text(keywords=search_term, region="cn-zh", safesearch="on", max_results=5))

def print_search_results(results):
for result in results:
print(
f"标题: {result['title']}\n链接: {result['href']}\n摘要: {result['body']}\n---")

def get_openai_response(messages, model="gpt-3.5-turbo", functions=None, function_call=None):
try:
response = client.chat.completions.create(
model=model,
messages=messages,
functions=functions,
function_call=function_call
)
return response.choices[0].message
except Exception as e:
print(f"调用OpenAI API时出错: {str(e)}")
return None

def process_function_call(response_message):
function_name = response_message.function_call.name
function_args = json.loads(response_message.function_call.arguments)

print(f"\n模型选择调用函数: {function_name}")

if function_name == "search_duckduckgo":
keywords = function_args.get('keywords', [])

if not keywords:
print("错误:模型没有提供搜索关键词")
return None

print(f"关键词: {', '.join(keywords)}")

function_response = search_duckduckgo(keywords)
print("\nDuckDuckGo搜索返回结果:")
print_search_results(function_response)

return function_response
else:
print(f"未知的函数名称: {function_name}")
return None

def main(question):
print(f"问题:{question}")

messages = [{"role": "user", "content": question}]
response_message = get_openai_response(
messages, functions=FUNCTIONS, function_call="auto")

if not response_message:
return

if response_message.function_call:
if not response_message.content:
response_message.content = ""
function_response = process_function_call(response_message)
if function_response:
messages.extend([
response_message.model_dump(),
{
"role": "function",
"name": response_message.function_call.name,
"content": json.dumps(function_response, ensure_ascii=False)
}
])

final_response = get_openai_response(messages, model="gpt-4o")
if final_response:
print("\n最终回答:")
print(final_response.content)
else:
print("\n模型直接回答:")
print(response_message.content)

if __name__ == "__main__":
main("植物大战僵尸杂交版的作者是谁?他是怎么想到做出来这个游戏的?")
AIイージー・ラーニング

AIを始めるための素人ガイド

AIツールの活用方法を、低コスト・ゼロベースから学ぶことができます。AIはオフィスソフトと同様、誰にとっても必須のスキルです。 AIをマスターすれば、就職活動で有利になり、今後の仕事や勉強の労力も半減します。

詳細を見る
無断転載を禁じます:チーフAIシェアリングサークル " DuckDuckGoの検索APIを使い、ビッグモデルにネットワーク機能への無料アクセスを提供し、New Bingのような効果を狙う。

チーフAIシェアリングサークル

チーフAIシェアリングサークルは、AI学習に焦点を当て、包括的なAI学習コンテンツ、AIツール、実践指導を提供しています。私たちの目標は、高品質のコンテンツと実践的な経験の共有を通じて、ユーザーがAI技術を習得し、AIの無限の可能性を一緒に探求することです。AI初心者でも上級者でも、知識を得てスキルを向上させ、イノベーションを実現するための理想的な場所です。

お問い合わせ
ja日本語