mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-08 20:42:30 +08:00
Feat: Support tool calling in Generate component (#7572)
### What problem does this PR solve? Hello, our use case requires LLM agent to invoke some tools, so I made a simple implementation here. This PR does two things: 1. A simple plugin mechanism based on `pluginlib`: This mechanism lives in the `plugin` directory. It will only load plugins from `plugin/embedded_plugins` for now. A sample plugin `bad_calculator.py` is placed in `plugin/embedded_plugins/llm_tools`, it accepts two numbers `a` and `b`, then give a wrong result `a + b + 100`. In the future, it can load plugins from external location with little code change. Plugins are divided into different types. The only plugin type supported in this PR is `llm_tools`, which must implement the `LLMToolPlugin` class in the `plugin/llm_tool_plugin.py`. More plugin types can be added in the future. 2. A tool selector in the `Generate` component: Added a tool selector to select one or more tools for LLM:  And with the `bad_calculator` tool, it results this with the `qwen-max` model:  ### Type of change - [ ] Bug Fix (non-breaking change which fixes an issue) - [x] New Feature (non-breaking change which adds functionality) - [ ] Documentation Update - [ ] Refactoring - [ ] Performance Improvement - [ ] Other (please describe): Co-authored-by: Yingfeng <yingfeng.zhang@gmail.com>
This commit is contained in:
14
uv.lock
generated
14
uv.lock
generated
@ -3952,6 +3952,18 @@ wheels = [
|
||||
{ url = "https://mirrors.aliyun.com/pypi/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pluginlib"
|
||||
version = "0.9.4"
|
||||
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
|
||||
dependencies = [
|
||||
{ name = "setuptools" },
|
||||
]
|
||||
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/58/38/ca974ba2d8ccc7954d8ccb0394cce184ac6269bd1fbfe06f70a0da3c8946/pluginlib-0.9.4.tar.gz", hash = "sha256:88727037138f759a3952f6391ae3751536f04ad8be6023607620ea49695a3a83" }
|
||||
wheels = [
|
||||
{ url = "https://mirrors.aliyun.com/pypi/packages/b0/b5/c869b3d2ed1613afeb02c635be11f5d35fa5b2b665f4d059cfe5b8e82941/pluginlib-0.9.4-py2.py3-none-any.whl", hash = "sha256:d4cfb7d74a6d2454e256b6512fbc4bc2dd7620cb7764feb67331ef56ce4b33f2" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "polars-lts-cpu"
|
||||
version = "1.9.0"
|
||||
@ -4872,6 +4884,7 @@ dependencies = [
|
||||
{ name = "pdfplumber" },
|
||||
{ name = "peewee" },
|
||||
{ name = "pillow" },
|
||||
{ name = "pluginlib" },
|
||||
{ name = "protobuf" },
|
||||
{ name = "psycopg2-binary" },
|
||||
{ name = "pyclipper" },
|
||||
@ -5009,6 +5022,7 @@ requires-dist = [
|
||||
{ name = "pdfplumber", specifier = "==0.10.4" },
|
||||
{ name = "peewee", specifier = "==3.17.1" },
|
||||
{ name = "pillow", specifier = "==10.4.0" },
|
||||
{ name = "pluginlib", specifier = "==0.9.4" },
|
||||
{ name = "protobuf", specifier = "==5.27.2" },
|
||||
{ name = "psycopg2-binary", specifier = "==2.9.9" },
|
||||
{ name = "pyclipper", specifier = "==1.3.0.post5" },
|
||||
|
||||
Reference in New Issue
Block a user