関数呼び出しによる電卓ツールの実装
実験の目的
- LLM(大規模言語モデル)を用いて、四則演算や三角関数演算などの電卓機能を実現します。
機能要件
電卓機能の画面を作成し、四則演算や三角関数演算などを実現します。
ハードウェアの準備
ディスプレイ * 1、Bluetooth キーボード・マウス * 1、メインコンソール * 1

回路接続
ハードウェアモジュール
ヒント:ハードウェアモジュールの使用説明
ハードウェアシステムの全体組み立て
組み込み AI 開発ボード RDK_X5
Uni mega2560 拡張ボード【V1.1】使用説明
電子モジュールの紹介
物理配線
具体的な配線・取り付け方法については、ハードウェアシステムの全体組み立てを参照してください。
ソフトウェア設計
設計フローチャート

ソースコードのダウンロード
ソースコードのリンク:(HumansX サポートより提供)
プログラムコード
コードの構成:
calculator.py は基本的な数学演算と高度な数学演算を提供します。
具体的なコード:
プロジェクトの完全なコードは(ソースコードのリンク)からダウンロードしてください。
"""
计算器工具实现
支持基本的数学运算
"""
import logging
import math
from typing import Union
from ..function_call.function_registry import FunctionRegistry
logger = logging.getLogger(__name__)
class Calculator:
"""计算器类"""
@staticmethod
def calculate(op: str, a: float, b: float) -> float:
"""执行基本数学运算"""
try:
if op == 'add':
return a + b
elif op == 'sub':
return a - b
elif op == 'mul':
return a * b
elif op == 'div':
if b == 0:
raise ValueError('除数不能为0')
return a / b
elif op == 'pow':
return a ** b
elif op == 'mod':
if b == 0:
raise ValueError('模数不能为0')
return a % b
else:
raise ValueError(f'不支持的操作: {op}')
except Exception as e:
logger.error(f"计算错误: {op}({a}, {b}) - {e}")
raise
@staticmethod
def advanced_calculate(operation: str, *args) -> float:
"""执行高级数学运算"""
try:
if operation == 'sqrt':
if len(args) != 1:
raise ValueError('sqrt需要1个参数')
if args[0] < 0:
raise ValueError('不能计算负数的平方根')
return math.sqrt(args[0])
elif operation == 'sin':
if len(args) != 1:
raise ValueError('sin需要1个参数')
return math.sin(math.radians(args[0]))
elif operation == 'cos':
if len(args) != 1:
raise ValueError('cos需要1个参数')
return math.cos(math.radians(args[0]))
elif operation == 'tan':
if len(args) != 1:
raise ValueError('tan需要1个参数')
return math.tan(math.radians(args[0]))
elif operation == 'log':
if len(args) == 1:
if args[0] <= 0:
raise ValueError('对数的真数必须大于0')
return math.log10(args[0])
elif len(args) == 2:
if args[0] <= 0 or args[1] <= 0:
raise ValueError('对数的真数和底数必须大于0')
if args[1] == 1:
raise ValueError('对数的底数不能为1')
return math.log(args[0], args[1])
else:
raise ValueError('log需要1或2个参数')
elif operation == 'ln':
if len(args) != 1:
raise ValueError('ln需要1个参数')
if args[0] <= 0:
raise ValueError('自然对数的真数必须大于0')
return math.log(args[0])
elif operation == 'abs':
if len(args) != 1:
raise ValueError('abs需要1个参数')
return abs(args[0])
elif operation == 'round':
if len(args) == 1:
return round(args[0])
elif len(args) == 2:
return round(args[0], int(args[1]))
else:
raise ValueError('round需要1或2个参数')
else:
raise ValueError(f'不支持的高级操作: {operation}')
except Exception as e:
logger.error(f"高级计算错误: {operation}({args}) - {e}")
raise
# 注册基本计算器函数
@FunctionRegistry.register_function('calculator', '基本数学计算器,支持加减乘除等运算')
def calculator_func(op: str, a: float, b: float) -> str:
"""计算器函数"""
try:
result = Calculator.calculate(op, a, b)
# 格式化结果,如果是整数则不显示小数点
if result == int(result):
formatted_result = str(int(result))
else:
formatted_result = f"{result:.6f}".rstrip('0').rstrip('.')
# 生成友好的回复
op_names = {
'add': '加法',
'sub': '减法',
'mul': '乘法',
'div': '除法',
'pow': '幂运算',
'mod': '取模'
}
op_name = op_names.get(op, op)
return f"{op_name}计算结果:{formatted_result}"
except ValueError as e:
return f"计算错误:{str(e)}"
except Exception as e:
return f"计算过程出错:{str(e)}"
# 注册高级计算器函数
@FunctionRegistry.register_function('advanced_calculator', '高级数学计算器,支持三角函数、对数、开方等')
def advanced_calculator_func(operation: str, args: list) -> str:
"""高级计算器函数"""
try:
result = Calculator.advanced_calculate(operation, *args)
# 格式化结果
if result == int(result):
formatted_result = str(int(result))
else:
formatted_result = f"{result:.6f}".rstrip('0').rstrip('.')
# 生成友好的回复
op_names = {
'sqrt': '平方根',
'sin': '正弦',
'cos': '余弦',
'tan': '正切',
'log': '对数',
'ln': '自然对数',
'abs': '绝对值',
'round': '四舍五入'
}
op_name = op_names.get(operation, operation)
return f"{op_name}计算结果:{formatted_result}"
except ValueError as e:
return f"计算错误:{str(e)}"
except Exception as e:
return f"计算过程出错:{str(e)}"
操作手順
回路接続が完了したら:
- ターミナルからリモートアクセスします。ターミナルで次のコマンドを入力し、Enter キーを押します。
ssh sunrise@192.168.8.111
- サービスを起動します。llm フォルダに移動し、メインプログラム python main.py を起動します。

Enter キーを押して起動を待ちます。次の画面が表示されたら、http:// 0.0.0.0:8002 を開けることを示しています。

- ブラウザを開き、URL http:// 0.0.0.0:8002 を入力してアクセスします。起動すると LLM インテリジェント対話アシスタントのメイン画面が表示されます。

- 右側の数学計算をクリックし、四則演算、三角関数、平方根などの演算を行います。

実験結果
LLM に対話を送信することで、計算機能を模擬的に実現します。
サポート窓口
資料のダウンロード・技術サポートについては、HumansX株式会社までお問い合わせください。
ドキュメント