Song Fuchang ad4e59edb2
Don't split and strip input in retrieval component. (#6662)
### What problem does this PR solve?

Actually fix #6241 

Hello, I ran into the same problem as #6241. When I'm testing my agent
flow in the web ui using `Run` button with a file input, the retrieval
component always gave an empty output.

In the code I found that:

`web/src/pages/flow/debug-content/index.tsx`:

```tsx
const onOk = useCallback(async () => {
    const values = await form.validateFields();
    const nextValues = Object.entries(values).map(([key, value]) => {
      const item = parameters[Number(key)];
      let nextValue = value;
      if (Array.isArray(value)) {
        nextValue = ``;

        value.forEach((x) => {
          nextValue +=
            x?.originFileObj instanceof File
              ? `${x.name}\n${x.response?.data}\n----\n`    // Here, the file content always ends in '\n'
              : `${x.url}\n${x.result}\n----\n`;
        });
      }
      return { ...item, value: nextValue };
    });

    ok(nextValues);
  }, [form, ok, parameters]);
```

while in the `agent/component/retrieval.py`:

```python
def _run(self, history, **kwargs):
        query = self.get_input()
        query = str(query["content"][0]) if "content" in query else ""
        lines = query.split('\n')                     # inputs are split to ['xxx','yyy','----','']
        query = lines[-1] if lines else ""      # Here we always get '', thus no result
        kbs = KnowledgebaseService.get_by_ids(self._param.kb_ids)
        if not kbs:
            return Retrieval.be_output("")
```

so the code will never got correct result.

I'm not sure why the input needs such a split here, so I just removed
the splitting, and it works well on my side.

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
- [ ] New Feature (non-breaking change which adds functionality)
- [ ] Documentation Update
- [ ] Refactoring
- [ ] Performance Improvement
- [ ] Other (please describe):
2025-03-31 11:26:49 +08:00
..
2025-01-13 18:19:01 +08:00
2025-01-21 20:52:28 +08:00
2025-03-18 17:58:54 +08:00
2024-12-10 10:19:50 +08:00
2024-12-10 10:19:50 +08:00
2025-01-21 20:52:28 +08:00

English | 简体中文

Graph

Introduction

Graph is a mathematical concept which is composed of nodes and edges. It is used to compose a complex work flow or agent. And this graph is beyond the DAG that we can use circles to describe our agent or work flow. Under this folder, we propose a test tool ./test/client.py which can test the DSLs such as json files in folder ./test/dsl_examples. Please use this client at the same folder you start RAGFlow. If it's run by Docker, please go into the container before running the client. Otherwise, correct configurations in service_conf.yaml is essential.

PYTHONPATH=path/to/ragflow python graph/test/client.py -h
usage: client.py [-h] -s DSL -t TENANT_ID -m

options:
  -h, --help            show this help message and exit
  -s DSL, --dsl DSL     input dsl
  -t TENANT_ID, --tenant_id TENANT_ID
                        Tenant ID
  -m, --stream          Stream output

How to gain a TENANT_ID in command line?

💡 We plan to display it here in the near future.

How to set 'kb_ids' for component 'Retrieval' in DSL?