mirror of
https://github.com/camel-ai/owl.git
synced 2025-12-26 02:06:20 +08:00
fix issue 431
This commit is contained in:
parent
082f12de34
commit
9592eab0d4
@ -16,12 +16,10 @@ import pathlib
|
||||
from dotenv import load_dotenv
|
||||
from camel.models import ModelFactory
|
||||
from camel.toolkits import (
|
||||
AudioAnalysisToolkit,
|
||||
CodeExecutionToolkit,
|
||||
ExcelToolkit,
|
||||
ImageAnalysisToolkit,
|
||||
SearchToolkit,
|
||||
VideoAnalysisToolkit,
|
||||
BrowserToolkit,
|
||||
FileWriteToolkit,
|
||||
)
|
||||
|
||||
@ -16,18 +16,22 @@
|
||||
# You can obtain your API key from Bailian platform: bailian.console.aliyun.com
|
||||
# Set it as QWEN_API_KEY="your-api-key" in your .env file or add it to your environment variables
|
||||
|
||||
from dotenv import load_dotenv
|
||||
import sys
|
||||
from dotenv import load_dotenv
|
||||
from camel.models import ModelFactory
|
||||
from camel.toolkits import BrowserToolkit, SearchToolkit, FileWriteToolkit
|
||||
from camel.toolkits import (
|
||||
SearchToolkit,
|
||||
BrowserToolkit,
|
||||
FileWriteToolkit,
|
||||
)
|
||||
from camel.types import ModelPlatformType, ModelType
|
||||
from camel.societies import RolePlaying
|
||||
|
||||
from owl.utils import run_society
|
||||
|
||||
from camel.societies import RolePlaying
|
||||
|
||||
from camel.logger import set_log_level
|
||||
|
||||
|
||||
import pathlib
|
||||
|
||||
base_dir = pathlib.Path(__file__).parent.parent
|
||||
@ -38,61 +42,83 @@ set_log_level(level="DEBUG")
|
||||
|
||||
|
||||
def construct_society(question: str) -> RolePlaying:
|
||||
r"""Construct the society based on the question."""
|
||||
"""
|
||||
Construct a society of agents based on the given question.
|
||||
|
||||
user_role_name = "user"
|
||||
assistant_role_name = "assistant"
|
||||
Args:
|
||||
question (str): The task or question to be addressed by the society.
|
||||
|
||||
user_model = ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
)
|
||||
Returns:
|
||||
RolePlaying: A configured society of agents ready to address the question.
|
||||
"""
|
||||
|
||||
assistant_model = ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
)
|
||||
# Create models for different components
|
||||
models = {
|
||||
"user": ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
),
|
||||
"assistant": ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
),
|
||||
"browsing": ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_VL_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
),
|
||||
"planning": ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
),
|
||||
"video": ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_VL_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
),
|
||||
"image": ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_VL_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
),
|
||||
"document": ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_VL_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
),
|
||||
}
|
||||
|
||||
planning_model = ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
)
|
||||
|
||||
web_model = ModelFactory.create(
|
||||
model_platform=ModelPlatformType.QWEN,
|
||||
model_type=ModelType.QWEN_VL_MAX,
|
||||
model_config_dict={"temperature": 0},
|
||||
)
|
||||
|
||||
tools_list = [
|
||||
# Configure toolkits
|
||||
tools = [
|
||||
*BrowserToolkit(
|
||||
headless=False,
|
||||
web_agent_model=web_model,
|
||||
planning_agent_model=planning_model,
|
||||
headless=False, # Set to True for headless mode (e.g., on remote servers)
|
||||
web_agent_model=models["browsing"],
|
||||
planning_agent_model=models["planning"],
|
||||
output_language="Chinese",
|
||||
).get_tools(),
|
||||
SearchToolkit().search_baidu,
|
||||
*FileWriteToolkit(output_dir="./").get_tools(),
|
||||
]
|
||||
|
||||
user_role_name = "user"
|
||||
user_agent_kwargs = dict(model=user_model)
|
||||
assistant_role_name = "assistant"
|
||||
assistant_agent_kwargs = dict(model=assistant_model, tools=tools_list)
|
||||
# Configure agent roles and parameters
|
||||
user_agent_kwargs = {"model": models["user"]}
|
||||
assistant_agent_kwargs = {"model": models["assistant"], "tools": tools}
|
||||
|
||||
# Configure task parameters
|
||||
task_kwargs = {
|
||||
"task_prompt": question,
|
||||
"with_task_specify": False,
|
||||
}
|
||||
|
||||
# Create and return the society
|
||||
society = RolePlaying(
|
||||
**task_kwargs,
|
||||
user_role_name=user_role_name,
|
||||
user_role_name="user",
|
||||
user_agent_kwargs=user_agent_kwargs,
|
||||
assistant_role_name=assistant_role_name,
|
||||
assistant_role_name="assistant",
|
||||
assistant_agent_kwargs=assistant_agent_kwargs,
|
||||
output_language="Chinese",
|
||||
)
|
||||
@ -100,15 +126,21 @@ def construct_society(question: str) -> RolePlaying:
|
||||
return society
|
||||
|
||||
|
||||
# Example case
|
||||
default_task = "浏览亚马逊并找出一款对程序员有吸引力的产品。请提供产品名称和价格"
|
||||
def main():
|
||||
r"""Main function to run the OWL system with an example question."""
|
||||
# Example research question
|
||||
default_task = "浏览亚马逊并找出一款对程序员有吸引力的产品。请提供产品名称和价格"
|
||||
|
||||
# Override default task if command line argument is provided
|
||||
task = sys.argv[1] if len(sys.argv) > 1 else default_task
|
||||
# Override default task if command line argument is provided
|
||||
task = sys.argv[1] if len(sys.argv) > 1 else default_task
|
||||
|
||||
# Construct and run the society
|
||||
society = construct_society(task)
|
||||
# Construct and run the society
|
||||
society = construct_society(task)
|
||||
answer, chat_history, token_count = run_society(society)
|
||||
|
||||
answer, chat_history, token_count = run_society(society)
|
||||
# Output the result
|
||||
print(f"\033[94mAnswer: {answer}\033[0m")
|
||||
|
||||
print(f"\033[94mAnswer: {answer}\033[0m")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@ -1,14 +1,15 @@
|
||||
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
||||
# Apache License 2.0(「ライセンス」)に基づいてライセンスされています。
|
||||
# あなたはライセンスに準拠している場合を除き、このファイルを使用できません。
|
||||
# ライセンスのコピーは以下から入手できます。
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# 適用される法律で要求されているか、書面で合意されていない限り、
|
||||
# ライセンスに基づいて配布されるソフトウェアは「現状のまま」で、
|
||||
# 明示的または黙示的ないかなる種類の保証や条件もなく配布されます。
|
||||
# ライセンスに基づく特定の言語での権限と制限については、ライセンスを参照してください。
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
||||
# 正しいモジュールパスからインポート
|
||||
from utils import run_society
|
||||
@ -333,13 +334,13 @@ def run_owl(question: str, example_module: str) -> Tuple[str, str, str]:
|
||||
try:
|
||||
# Ensure environment variables are loaded
|
||||
load_dotenv(find_dotenv(), override=True)
|
||||
logging.info(
|
||||
f"質問を処理中: '{question}', モジュール使用: {example_module}"
|
||||
)
|
||||
logging.info(f"質問を処理中: '{question}', モジュール使用: {example_module}")
|
||||
|
||||
# Check if the module is in MODULE_DESCRIPTIONS
|
||||
if example_module not in MODULE_DESCRIPTIONS:
|
||||
logging.error(f"ユーザーがサポートされていないモジュールを選択しました: {example_module}")
|
||||
logging.error(
|
||||
f"ユーザーがサポートされていないモジュールを選択しました: {example_module}"
|
||||
)
|
||||
return (
|
||||
f"選択されたモジュール '{example_module}' はサポートされていません",
|
||||
"0",
|
||||
@ -385,7 +386,9 @@ def run_owl(question: str, example_module: str) -> Tuple[str, str, str]:
|
||||
society = module.construct_society(question)
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"社会シミュレーションの構築中にエラーが発生しました: {str(e)}")
|
||||
logging.error(
|
||||
f"社会シミュレーションの構築中にエラーが発生しました: {str(e)}"
|
||||
)
|
||||
return (
|
||||
f"社会シミュレーションの構築中にエラーが発生しました: {str(e)}",
|
||||
"0",
|
||||
@ -398,7 +401,9 @@ def run_owl(question: str, example_module: str) -> Tuple[str, str, str]:
|
||||
answer, chat_history, token_info = run_society(society)
|
||||
logging.info("社会シミュレーションが完了しました")
|
||||
except Exception as e:
|
||||
logging.error(f"社会シミュレーションの実行中にエラーが発生しました: {str(e)}")
|
||||
logging.error(
|
||||
f"社会シミュレーションの実行中にエラーが発生しました: {str(e)}"
|
||||
)
|
||||
return (
|
||||
f"社会シミュレーションの実行中にエラーが発生しました: {str(e)}",
|
||||
"0",
|
||||
@ -424,9 +429,7 @@ def run_owl(question: str, example_module: str) -> Tuple[str, str, str]:
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logging.error(
|
||||
f"質問の処理中に予期しないエラーが発生しました: {str(e)}"
|
||||
)
|
||||
logging.error(f"質問の処理中に予期しないエラーが発生しました: {str(e)}")
|
||||
return (f"エラーが発生しました: {str(e)}", "0", f"❌ エラー: {str(e)}")
|
||||
|
||||
|
||||
@ -668,9 +671,7 @@ def save_env_table_changes(data):
|
||||
str: 操作ステータス情報、HTML形式のステータスメッセージを含む
|
||||
"""
|
||||
try:
|
||||
logging.info(
|
||||
f"環境変数テーブルデータの処理を開始します、タイプ: {type(data)}"
|
||||
)
|
||||
logging.info(f"環境変数テーブルデータの処理を開始します、タイプ: {type(data)}")
|
||||
|
||||
# Get all current environment variables
|
||||
current_env_vars = load_env_vars()
|
||||
@ -696,9 +697,7 @@ def save_env_table_changes(data):
|
||||
if (
|
||||
key and str(key).strip()
|
||||
): # If key name is not empty, add or update
|
||||
logging.info(
|
||||
f"環境変数の処理: {key} = {value}"
|
||||
)
|
||||
logging.info(f"環境変数の処理: {key} = {value}")
|
||||
add_env_var(key, str(value))
|
||||
processed_keys.add(key)
|
||||
# Process other formats
|
||||
@ -751,7 +750,9 @@ def save_env_table_changes(data):
|
||||
import traceback
|
||||
|
||||
error_details = traceback.format_exc()
|
||||
logging.error(f"環境変数の保存中にエラーが発生しました: {str(e)}\n{error_details}")
|
||||
logging.error(
|
||||
f"環境変数の保存中にエラーが発生しました: {str(e)}\n{error_details}"
|
||||
)
|
||||
return f"❌ 保存に失敗しました: {str(e)}"
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user