You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
# 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)
|