mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-12 22:55:45 +08:00
Ports the agent canvas subsystem from Python to Go.
## What's included
### Canvas Engine (Phase 0/1)
- State engine, scheduler, variable resolver, Redis checkpoint store,
cancel protocol
- **209 tests** across canvas / component / io packages
### 22 Components (P0–P4)
| Tier | Components |
|---|---|
| P0 T1+T2+T3 | LLM, Agent, ExitLoop, Switch, Categorize, Begin,
Message, Invoke |
| P1 T3 | VariableAggregator, VariableAssigner, StringTransform,
ListOperations, DataOperations |
| P2 T3 | Iteration, IterationItem, Loop, LoopItem |
| P3 T3 | UserFillUp, Fillup |
| P4 T5 | Browser, ExcelProcessor, DocsGenerator |
### DSL v2 Schema (Phase 2.5)
- Typed v2 in-memory model with v1-to-v2 auto-detect converter
- v1 legacy field stripping per plan §2.11.7
### HTTP Endpoints & Bug Fixes (Plans PR1–PR3)
- **DELETE SQL bug fix**: gorm v2 `Where("id = ?", id).Delete(...)`
pattern
- **CreateAgent validation**: title/DSL required, duplicate check, 103
envelope
- **13 new endpoints**: templates, prompts, tags, sessions CRUD,
chat/completions (SSE + non-stream stubs), rerun, test_db_connection,
logs, webhook/logs
- **756 Go unit tests** (745 → 756, +18)
- **17 → 0 Python integration test failures** (test_agents.py +
test_session_management/)
### Tools
21 eino tools: HTTPHelper, search tools, financial/data tools, mandatory
stubs
### Infrastructure
OTel observability, NATS message queue, DeepDoc gRPC client, SSRF
guards, IDOR mitigation
61 lines
2.3 KiB
JSON
61 lines
2.3 KiB
JSON
{
|
|
"components": {
|
|
"begin": {
|
|
"obj":{
|
|
"component_name": "Begin",
|
|
"params": {
|
|
"prologue": "Hi there!"
|
|
}
|
|
},
|
|
"downstream": ["retrieval:0"],
|
|
"upstream": []
|
|
},
|
|
"retrieval:0": {
|
|
"obj": {
|
|
"component_name": "Retrieval",
|
|
"params": {
|
|
"similarity_threshold": 0.2,
|
|
"keywords_similarity_weight": 0.3,
|
|
"top_n": 6,
|
|
"top_k": 1024,
|
|
"rerank_id": "",
|
|
"empty_response": "Nothing found in dataset",
|
|
"kb_ids": ["1a3d1d7afb0611ef9866047c16ec874f"]
|
|
}
|
|
},
|
|
"downstream": ["generate:0"],
|
|
"upstream": ["begin"]
|
|
},
|
|
"generate:0": {
|
|
"obj": {
|
|
"component_name": "LLM",
|
|
"params": {
|
|
"llm_id": "deepseek-chat",
|
|
"sys_prompt": "You are an intelligent assistant. Please summarize the content of the knowledge base to answer the question. Please list the data in the knowledge base and answer in detail. When all knowledge base content is irrelevant to the question, your answer must include the sentence \"The answer you are looking for is not found in the knowledge base!\" Answers need to consider chat history.\n Here is the knowledge base:\n {retrieval:0@formalized_content}\n Above is the knowledge base.",
|
|
"temperature": 0.2
|
|
}
|
|
},
|
|
"downstream": ["message:0"],
|
|
"upstream": ["retrieval:0"]
|
|
},
|
|
"message:0": {
|
|
"obj": {
|
|
"component_name": "Message",
|
|
"params": {
|
|
"content": ["{generate:0@content}"]
|
|
}
|
|
},
|
|
"downstream": [],
|
|
"upstream": ["generate:0"]
|
|
}
|
|
},
|
|
"history": [],
|
|
"path": [],
|
|
"retrieval": {"chunks": [], "doc_aggs": []},
|
|
"globals": {
|
|
"sys.query": "",
|
|
"sys.user_id": "",
|
|
"sys.conversation_turns": 0,
|
|
"sys.files": []
|
|
}
|
|
} |