# LLM function calling 示例 ## 功能介绍 本项目用于验证语音控制大屏后端模块。获取用户输入后,由LLM进行意图识别,并通过function calling调用相关函数,实现语音控制大屏。 使用的LLM是阿里开源QwQ-32B,模型特点为有一定的推理能力并且运行速度快。DeepSeek-R1由于不是天生支持function calling所以不考虑。 ## 安装 1. clone 本项目 ```shell git clone http://1.14.96.249:3000/old-tom/llmFunctionCallDemo.git ``` 2. 创建虚拟环境 + 这里使用的是pipenv,可以换成uv或者conda + python 版本为 3.10或以上稳定版即可 ```shell cd llmFunctionCallDemo (clone的代码目录) ``` ```shell pipenv install --python 3.10 ``` 3. 安装依赖 ```shell pip install -r requirements.txt ``` 4. 向量库部署和初始化 (docker) ```shell docker run --name marqo -it --privileged -p 8882:8882 --add-host host.docker.internal:host-gateway marqoai/marqo:latest ``` 初始化:执行[vector_db.py](vector_db.py) create_and_set_index()方法 测试:执行[vector_db.py](vector_db.py) query_vector_db() 方法,参数为任意字符串 5. 配置文件 [env.toml](env.toml) ```toml [base] # 多轮对话历史存储类型(memory:内存) history_chat_store = 'memory' # 相似度阈值 similarity_threshold = 0.93 # dev dev = true ####### 模型配置 ####### [siliconflow] # 硅基流动 # 密钥 api_key = '' # 模型名称 model = '' # API地址 base_url = '' # 最大token数 max_tokens = 4096 # 温度系数 temperature = 0.6 # 是否流式返回 streaming = true ``` ## TestCase 参考[main.py](main.py) 1. 多轮对话 ```python dsr = ChatAgent() dsr.multi_with_stream('你是什么模型', 1) dsr.multi_with_stream('你能做什么', 1) dsr.multi_with_stream('我的上一个问题是什么?请直接返回问题,不要有多余输出及思考过程', 1) dsr.multi_with_stream('我的第一个问题是什么?请直接返回问题,不要有多余输出及思考过程', 1) ``` 2. 多轮对话并调用工具 ```python dsr = ChatAgent() dsr.multi_with_tool_call_stream('播放南卡口相机', 1) dsr.multi_with_tool_call_stream('1', 1) ``` ## TODO 1. 模型输出不稳定,提示词还需要进一步优化 2. 日志跟踪 3. 升级历史对话存储(redis或sqllite)