314 lines
No EOL
11 KiB
Markdown
314 lines
No EOL
11 KiB
Markdown
---
|
||
tags:
|
||
- project/iso27DIY
|
||
- dev
|
||
- llm
|
||
- agent
|
||
---
|
||
|
||
[orq](https://orq.ai/blog/llm-tools)
|
||
|
||
[
|
||
|
||
15 Best LLM Tools for AI Product Development \[2025 Guide\]
|
||
|
||
](https://orq.ai/blog/llm-tools)[mercity.ai](https://www.mercity.ai/blog-post/guide-to-integrating-tools-and-apis-with-language-models)
|
||
|
||
[
|
||
|
||
Comprehensive Guide to Integrating Tools and APIs with Language...
|
||
|
||
](https://www.mercity.ai/blog-post/guide-to-integrating-tools-and-apis-with-language-models)[DataCamp](https://www.datacamp.com/blog/llmops-tools)
|
||
|
||
[
|
||
|
||
Top 15 LLMOps Tools for Building AI Applications in 2025 - DataCamp
|
||
|
||
](https://www.datacamp.com/blog/llmops-tools)[softwareag](https://www.softwareag.com/en_corporate/blog/llm-tool-usage.html)
|
||
|
||
[
|
||
|
||
LLM Tool Usage & API Integration - Software AG
|
||
|
||
](https://www.softwareag.com/en_corporate/blog/llm-tool-usage.html)
|
||
|
||
To instruct an LLM about available tools and how to call them, you typically follow a structured approach:
|
||
|
||
**1\. Define Available Tools**
|
||
|
||
- Provide the LLM with a list of tools, each including:
|
||
- A name (identifier)
|
||
- A description (explains when to use it)
|
||
- A schema (usually JSON) describing input parameters and their types [8](https://portkey.ai/blog/what-is-llm-tool-calling) [9](https://docs.anyscale.com/llms/serving/guides/tool_calling/).
|
||
|
||
**2\. Inform the LLM via Prompting**
|
||
|
||
- When sending a user query, include the tool definitions in the prompt or system message. This allows the LLM to understand what tools are available and how to use them [8](https://portkey.ai/blog/what-is-llm-tool-calling) [9](https://docs.anyscale.com/llms/serving/guides/tool_calling/).
|
||
|
||
**3\. Tool Calling Process**
|
||
|
||
- The LLM receives the user prompt and tool list.
|
||
- It decides if a tool is needed, selects the appropriate one, and formats a tool call (often as a structured JSON object with arguments) [8](https://portkey.ai/blog/what-is-llm-tool-calling) [9](https://docs.anyscale.com/llms/serving/guides/tool_calling/).
|
||
- Your application receives this tool call, executes the corresponding function or API, and returns the result to the LLM.
|
||
- The LLM integrates the tool’s output into its next response, continuing the conversation naturally [8](https://portkey.ai/blog/what-is-llm-tool-calling) [9](https://docs.anyscale.com/llms/serving/guides/tool_calling/).
|
||
|
||
**4\. Training or Fine-Tuning (Optional)**
|
||
|
||
- For more advanced usage, you can fine-tune the LLM with example data showing how to use each tool, or use models already trained for tool use (like some recent open-weight models) [6](https://cameronrwolfe.substack.com/p/teaching-language-models-to-use-tools) [9](https://docs.anyscale.com/llms/serving/guides/tool_calling/).
|
||
|
||
**Summary Table**
|
||
|
||
| Step | Action |
|
||
| --- | --- |
|
||
| Define tools | Name, description, input schema |
|
||
| Prompt LLM | Include tool definitions in prompt/system message |
|
||
| Tool call & execution | LLM outputs tool call; app executes it and returns result |
|
||
| Integrate response | LLM uses tool output in conversation |
|
||
| (Optional) Fine-tuning | Train LLM on tool usage examples for better performance |
|
||
|
||
This approach enables LLMs to use external tools flexibly and accurately within applications [8](https://portkey.ai/blog/what-is-llm-tool-calling) [9](https://docs.anyscale.com/llms/serving/guides/tool_calling/) [6](https://cameronrwolfe.substack.com/p/teaching-language-models-to-use-tools).
|
||
|
||
I’m using Anything LLM. How can I enable a model to run shell scripts?[GitHub](https://github.com/Mintplex-Labs/anything-llm/issues/3451)
|
||
|
||
[
|
||
|
||
\[FEAT\]: Shell/Script invocation block for flow builder #3451 - GitHub
|
||
|
||
](https://github.com/Mintplex-Labs/anything-llm/issues/3451)[reddit.com](https://www.reddit.com/r/LocalLLaMA/comments/14cuhmm/can_i_integrate_my_local_llm_to_enable_it_to_run/)
|
||
|
||
[
|
||
|
||
Can I integrate my local LLM to enable it to run system commands...
|
||
|
||
](https://www.reddit.com/r/LocalLLaMA/comments/14cuhmm/can_i_integrate_my_local_llm_to_enable_it_to_run/)[GitHub](https://github.com/regnull/how.sh)
|
||
|
||
[
|
||
|
||
how.sh - Create and execute shell commands using LLM - GitHub
|
||
|
||
](https://github.com/regnull/how.sh)[anythingllm](https://anythingllm.com/)
|
||
|
||
[
|
||
|
||
AnythingLLM | The all-in-one AI application for everyone
|
||
|
||
](https://anythingllm.com/)
|
||
|
||
To enable shell script execution in AnythingLLM, you can implement custom agent skills through these methods:
|
||
|
||
**1\. Custom Agent Skill Development**
|
||
|
||
- Create a `plugin.json` file defining your shell script entrypoint:
|
||
```
|
||
json
|
||
{
|
||
"name": "shell_runner",
|
||
"description": "Execute shell commands",
|
||
"entrypoint": "./handler.js",
|
||
"permissions": ["shell"]
|
||
}
|
||
```
|
||
- Develop a handler file (e.g., `handler.js`) using Node.js' `child_process` module [1](https://github.com/Mintplex-Labs/anything-llm/issues/3451) [7](https://docs.anythingllm.com/installation-desktop/linux):
|
||
```
|
||
javascript
|
||
const { exec } = require('child_process');
|
||
module.exports = async ({ command }) => {
|
||
return new Promise((resolve, reject) => {
|
||
exec(command, (error, stdout, stderr) => {
|
||
if (error) reject(error);
|
||
resolve(stdout || stderr);
|
||
});
|
||
});
|
||
};
|
||
```
|
||
|
||
**2\. Security Considerations**
|
||
|
||
- Restrict allowed commands through allow-listing in your handler
|
||
- Implement user permission tiers for script execution
|
||
- Use environment sandboxing for dangerous operations [6](https://news.ycombinator.com/item?id=35172486)
|
||
|
||
**3\. Integration Approaches**
|
||
|
||
- **LangChain Agent Method** (shown in tutorial 5):
|
||
```
|
||
python
|
||
from langchain.agents import initialize_agent
|
||
from langchain.tools import ShellTool
|
||
shell_tool = ShellTool()
|
||
agent = initialize_agent([shell_tool], llm, agent="zero-shot-react-description")
|
||
```
|
||
- **Ollama Local Model Integration** [3](https://github.com/regnull/how.sh):
|
||
```
|
||
bash
|
||
ollama pull deepseek-coder-v2
|
||
llm -m ollama/deepseek-coder-v2 "convert all .txt files to .md" > convert.sh
|
||
```
|
||
|
||
**4\. Execution Flow**
|
||
|
||
1. User requests shell operation through chat interface
|
||
2. LLM processes request and generates structured tool call
|
||
3. Handler executes the command via Node.js `exec()` [1](https://github.com/Mintplex-Labs/anything-llm/issues/3451) [7](https://docs.anythingllm.com/installation-desktop/linux)
|
||
4. Output is returned to LLM for response formatting
|
||
|
||
**Example Use Case** (from GitHub issue [1](https://github.com/Mintplex-Labs/anything-llm/issues/3451)):
|
||
|
||
```
|
||
bash
|
||
# plugin.json entry
|
||
"entrypoint": "python -m browser_automation.py"
|
||
```
|
||
|
||
**Limitations & Risks**
|
||
|
||
- Requires careful input sanitization to prevent injection attacks
|
||
- Windows support limited due to shell differences 5
|
||
- Execution environment must match user's system capabilities [2](https://www.reddit.com/r/LocalLLaMA/comments/14cuhmm/can_i_integrate_my_local_llm_to_enable_it_to_run/) [6](https://news.ycombinator.com/item?id=35172486)
|
||
|
||
For production use, consider implementing:
|
||
|
||
- Command validation middleware
|
||
- Output sanitization filters
|
||
- Session-based execution isolation
|
||
- Activity logging for audit trails [6](https://news.ycombinator.com/item?id=35172486) [7](https://docs.anythingllm.com/installation-desktop/linux)
|
||
|
||
What are the best methods to integrate local executables with Anything LLM for automation[semaphoreci](https://semaphoreci.com/blog/local-llm)
|
||
|
||
[
|
||
|
||
6 Ways to Run LLMs Locally (also how to use HuggingFace)
|
||
|
||
](https://semaphoreci.com/blog/local-llm)[Stream](https://getstream.io/blog/best-local-llm-tools/)
|
||
|
||
[
|
||
|
||
The 6 Best LLM Tools To Run Models Locally - GetStream.io
|
||
|
||
](https://getstream.io/blog/best-local-llm-tools/)[apidog](https://apidog.com/blog/top-llm-local-tools)
|
||
|
||
[
|
||
|
||
The 5 Best LLM Tools To Run Models Locally - Apidog
|
||
|
||
](https://apidog.com/blog/top-llm-local-tools)[anythingllm](https://anythingllm.com/)
|
||
|
||
[
|
||
|
||
AnythingLLM | The all-in-one AI application for everyone
|
||
|
||
](https://anythingllm.com/)
|
||
|
||
To integrate local executables with AnythingLLM for automation, use these methods:
|
||
|
||
## 1\. Custom Plugin Development
|
||
|
||
Create executable-wrapping plugins using AnythingLLM's extensible architecture:
|
||
|
||
```
|
||
javascript
|
||
// plugin.json
|
||
{
|
||
"name": "pdf_converter",
|
||
"description": "Converts DOCX to PDF using LibreOffice",
|
||
"entrypoint": "./convert.js",
|
||
"permissions": ["file_system"]
|
||
}
|
||
|
||
// convert.js
|
||
const { execSync } = require('child_process');
|
||
|
||
module.exports = async ({ inputPath }) => {
|
||
try {
|
||
execSync(\`soffice --convert-to pdf "${inputPath}" --headless\`);
|
||
return { success: true };
|
||
} catch (error) {
|
||
return { error: error.message };
|
||
}
|
||
};
|
||
```
|
||
|
||
**Key Features**:
|
||
|
||
- Direct CLI execution via Node.js `child_process` [5](https://deepgram.com/learn/local-llm-chatbot-that-can-run-code-searches) [8](https://www.reddit.com/r/LocalLLaMA/comments/1ckw7en/what_software_do_you_use_to_interact_with_local/)
|
||
- File system access controls through permission tiers
|
||
- Error handling integration with LLM feedback loops
|
||
|
||
---
|
||
|
||
## 2\. LangChain Agent Integration
|
||
|
||
Leverage LangChain's tool ecosystem for executable orchestration:
|
||
|
||
```
|
||
python
|
||
from langchain.agents import initialize_agent
|
||
from langchain.tools import Tool
|
||
|
||
def run_executable(command):
|
||
import subprocess
|
||
result = subprocess.run(command, shell=True, capture_output=True)
|
||
return result.stdout.decode()
|
||
|
||
agent = initialize_agent(
|
||
tools=[Tool(
|
||
name="LocalExec",
|
||
func=run_executable,
|
||
description="Runs local system commands"
|
||
)],
|
||
llm=anything_llm_instance,
|
||
agent="structured-chat-zero-shot-react-description"
|
||
)
|
||
```
|
||
|
||
**Advantages**:
|
||
|
||
- Native integration with AnythingLLM's chat interface [4](https://anythingllm.com/) [7](https://www.aifire.co/p/top-8-local-llm-tools-run-ai-models-offline-and-keep-your-data-safe)
|
||
- Automatic command validation through LangChain's schema system
|
||
- Multi-step workflow automation capabilities
|
||
|
||
---
|
||
|
||
## 3\. Llamafile Binary Bundling
|
||
|
||
Package executables with LLMs using Mozilla's Llamafile:
|
||
|
||
```
|
||
bash
|
||
# Combine executable and LLM into single binary
|
||
llamafile-convert --exec my_script.py --model mistral-7b.gguf
|
||
```
|
||
|
||
**Benefits**:
|
||
|
||
- Self-contained deployment without dependency conflicts [2](https://getstream.io/blog/best-local-llm-tools/) [6](https://blog.lamatic.ai/guides/how-to-run-llm-locally/)
|
||
- Cross-platform support (Windows/Linux/macOS)
|
||
- Direct memory sharing between executable and LLM [6](https://blog.lamatic.ai/guides/how-to-run-llm-locally/)
|
||
|
||
---
|
||
|
||
## Security Implementation
|
||
|
||
| Measure | Implementation Example |
|
||
| --- | --- |
|
||
| Input Sanitization | Regex whitelist for allowed CLI parameters |
|
||
| Permission Tiers | User roles with executable access levels |
|
||
| Sandboxing | Docker containers for risky operations |
|
||
| Audit Logging | JSON logs of all executed commands |
|
||
|
||
---
|
||
|
||
## Use Case Workflow
|
||
|
||
1. User requests "Convert quarterly\_report.docx to PDF"
|
||
2. LLM triggers `pdf_converter` plugin via structured JSON [5](https://deepgram.com/learn/local-llm-chatbot-that-can-run-code-searches)
|
||
3. Handler executes LibreOffice CLI in Docker sandbox
|
||
4. Output PDF path returned to LLM for user sharing
|
||
|
||
**Best Practices**:
|
||
|
||
- Use absolute paths for local executables
|
||
- Implement timeout guards for long-running processes
|
||
- Test with `--dry-run` flags before production deployment [5](https://deepgram.com/learn/local-llm-chatbot-that-can-run-code-searches) [8](https://www.reddit.com/r/LocalLLaMA/comments/1ckw7en/what_software_do_you_use_to_interact_with_local/)
|
||
|
||
For complex automation, combine methods 2 and 3 using Llamafile-packaged tools controlled through LangChain agents [6](https://blog.lamatic.ai/guides/how-to-run-llm-locally/) [7](https://www.aifire.co/p/top-8-local-llm-tools-run-ai-models-offline-and-keep-your-data-safe). |