micro--go-micro
e13ef7eed5
Replace discord.gg/jwTYuUVAGh and discord.gg/go-micro with discord.gg/WeMU5AGxD across all docs, blog posts, issue templates, security policy, and contrib READMEs. https://claude.ai/code/session_01QTp4SshuVmLAvvEGJe4TJd Co-authored-by: Claude <noreply@anthropic.com>
328 行
7.7 KiB
Markdown
328 行
7.7 KiB
Markdown
# LlamaIndex Go Micro Integration
|
|
|
|
[](https://badge.fury.io/py/go-micro-llamaindex)
|
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
|
|
Official LlamaIndex integration for Go Micro services. This package enables LlamaIndex agents to discover and call Go Micro microservices through the Model Context Protocol (MCP).
|
|
|
|
## Features
|
|
|
|
- **Automatic Service Discovery** - Discovers available services from MCP gateway
|
|
- **Dynamic Tool Generation** - Converts service endpoints into LlamaIndex tools
|
|
- **Rich Descriptions** - Uses service metadata for accurate tool descriptions
|
|
- **Authentication Support** - Bearer token auth with scope-based permissions
|
|
- **RAG Integration** - Combine service tools with LlamaIndex's RAG capabilities
|
|
- **Type-Safe** - Fully typed with Python 3.8+ type hints
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install go-micro-llamaindex
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
### 1. Start Your Go Micro Services
|
|
|
|
```bash
|
|
# Start MCP gateway
|
|
micro mcp serve --address :3000
|
|
```
|
|
|
|
### 2. Create LlamaIndex Agent
|
|
|
|
```python
|
|
from go_micro_llamaindex import GoMicroToolkit
|
|
from llama_index.core.agent import ReActAgent
|
|
from llama_index.llms.openai import OpenAI
|
|
|
|
# Initialize toolkit from MCP gateway
|
|
toolkit = GoMicroToolkit.from_gateway("http://localhost:3000")
|
|
|
|
# Create agent
|
|
llm = OpenAI(model="gpt-4")
|
|
agent = ReActAgent.from_tools(toolkit.get_tools(), llm=llm, verbose=True)
|
|
|
|
# Use the agent!
|
|
response = agent.chat("Create a user named Alice with email alice@example.com")
|
|
print(response)
|
|
```
|
|
|
|
## Usage Examples
|
|
|
|
### Basic Tool Discovery
|
|
|
|
```python
|
|
from go_micro_llamaindex import GoMicroToolkit
|
|
|
|
# Connect to MCP gateway
|
|
toolkit = GoMicroToolkit.from_gateway("http://localhost:3000")
|
|
|
|
# List available tools
|
|
for tool in toolkit.get_tools():
|
|
print(f"Tool: {tool.metadata.name}")
|
|
print(f"Description: {tool.metadata.description}")
|
|
print()
|
|
```
|
|
|
|
### Authentication
|
|
|
|
```python
|
|
from go_micro_llamaindex import GoMicroToolkit
|
|
|
|
# Create toolkit with authentication
|
|
toolkit = GoMicroToolkit.from_gateway(
|
|
gateway_url="http://localhost:3000",
|
|
auth_token="your-bearer-token"
|
|
)
|
|
|
|
# Tools will automatically use the auth token
|
|
tools = toolkit.get_tools()
|
|
```
|
|
|
|
### Filter Tools by Service
|
|
|
|
```python
|
|
from go_micro_llamaindex import GoMicroToolkit
|
|
|
|
toolkit = GoMicroToolkit.from_gateway("http://localhost:3000")
|
|
|
|
# Get only user service tools
|
|
user_tools = toolkit.get_tools(service_filter="users")
|
|
|
|
# Get tools matching a pattern
|
|
blog_tools = toolkit.get_tools(name_pattern="blog.*")
|
|
```
|
|
|
|
### Custom Tool Selection
|
|
|
|
```python
|
|
from go_micro_llamaindex import GoMicroToolkit
|
|
|
|
toolkit = GoMicroToolkit.from_gateway("http://localhost:3000")
|
|
|
|
# Select specific tools
|
|
selected_tools = toolkit.get_tools(
|
|
include=["users.Users.Get", "users.Users.Create"]
|
|
)
|
|
|
|
# Exclude certain tools
|
|
filtered_tools = toolkit.get_tools(
|
|
exclude=["users.Users.Delete"]
|
|
)
|
|
```
|
|
|
|
### RAG + Microservices
|
|
|
|
```python
|
|
from go_micro_llamaindex import GoMicroToolkit
|
|
from llama_index.core import VectorStoreIndex, Document
|
|
from llama_index.core.agent import ReActAgent
|
|
from llama_index.core.tools import QueryEngineTool, ToolMetadata
|
|
from llama_index.llms.openai import OpenAI
|
|
|
|
toolkit = GoMicroToolkit.from_gateway("http://localhost:3000")
|
|
|
|
# Combine service tools with a RAG query engine
|
|
index = VectorStoreIndex.from_documents([...])
|
|
rag_tool = QueryEngineTool(
|
|
query_engine=index.as_query_engine(),
|
|
metadata=ToolMetadata(name="docs", description="Search documentation"),
|
|
)
|
|
|
|
all_tools = [rag_tool] + toolkit.get_tools()
|
|
agent = ReActAgent.from_tools(all_tools, llm=OpenAI(model="gpt-4"))
|
|
```
|
|
|
|
### Multi-Agent Workflows
|
|
|
|
```python
|
|
from go_micro_llamaindex import GoMicroToolkit
|
|
from llama_index.core.agent import ReActAgent
|
|
from llama_index.llms.openai import OpenAI
|
|
|
|
toolkit = GoMicroToolkit.from_gateway("http://localhost:3000")
|
|
llm = OpenAI(model="gpt-4")
|
|
|
|
# Agent 1: User management
|
|
user_agent = ReActAgent.from_tools(
|
|
toolkit.get_tools(service_filter="users"), llm=llm
|
|
)
|
|
|
|
# Agent 2: Blog management
|
|
blog_agent = ReActAgent.from_tools(
|
|
toolkit.get_tools(service_filter="blog"), llm=llm
|
|
)
|
|
|
|
# Coordinate between agents
|
|
user_result = user_agent.chat("Create user Alice")
|
|
blog_result = blog_agent.chat(f"Create blog post for {user_result}")
|
|
```
|
|
|
|
### Error Handling
|
|
|
|
```python
|
|
from go_micro_llamaindex import GoMicroToolkit, GoMicroError
|
|
|
|
try:
|
|
toolkit = GoMicroToolkit.from_gateway("http://localhost:3000")
|
|
tools = toolkit.get_tools()
|
|
except GoMicroError as e:
|
|
print(f"Error: {e}")
|
|
```
|
|
|
|
### Advanced Configuration
|
|
|
|
```python
|
|
from go_micro_llamaindex import GoMicroToolkit, GoMicroConfig
|
|
|
|
config = GoMicroConfig(
|
|
gateway_url="http://localhost:3000",
|
|
auth_token="your-token",
|
|
timeout=30,
|
|
retry_count=3,
|
|
retry_delay=1.0,
|
|
verify_ssl=True,
|
|
)
|
|
|
|
toolkit = GoMicroToolkit(config)
|
|
tools = toolkit.get_tools()
|
|
```
|
|
|
|
## API Reference
|
|
|
|
### GoMicroToolkit
|
|
|
|
Main class for interacting with Go Micro services.
|
|
|
|
#### Methods
|
|
|
|
- `from_gateway(gateway_url, auth_token=None, **kwargs)` - Create toolkit from MCP gateway
|
|
- `get_tools(service_filter=None, name_pattern=None, include=None, exclude=None)` - Get LlamaIndex tools
|
|
- `refresh()` - Refresh tool list from gateway
|
|
- `call_tool(tool_name, arguments)` - Call a tool directly
|
|
- `list_tools()` - Get raw list of available tools
|
|
|
|
### GoMicroConfig
|
|
|
|
Configuration for the toolkit.
|
|
|
|
#### Parameters
|
|
|
|
- `gateway_url` (str) - MCP gateway URL
|
|
- `auth_token` (str, optional) - Bearer authentication token
|
|
- `timeout` (int) - Request timeout in seconds (default: 30)
|
|
- `retry_count` (int) - Number of retries (default: 3)
|
|
- `retry_delay` (float) - Delay between retries in seconds (default: 1.0)
|
|
- `verify_ssl` (bool) - Verify SSL certificates (default: True)
|
|
|
|
## Requirements
|
|
|
|
- Python 3.8+
|
|
- llama-index-core >= 0.10.0
|
|
- requests >= 2.31.0
|
|
- pydantic >= 2.0.0
|
|
|
|
## Development
|
|
|
|
### Setup
|
|
|
|
```bash
|
|
git clone https://github.com/micro/go-micro
|
|
cd go-micro/contrib/go-micro-llamaindex
|
|
|
|
# Create virtual environment
|
|
python -m venv venv
|
|
source venv/bin/activate # On Windows: venv\Scripts\activate
|
|
|
|
# Install in development mode
|
|
pip install -e ".[dev]"
|
|
```
|
|
|
|
### Running Tests
|
|
|
|
```bash
|
|
# Run all tests
|
|
pytest
|
|
|
|
# Run with coverage
|
|
pytest --cov=go_micro_llamaindex
|
|
|
|
# Run specific test
|
|
pytest tests/test_toolkit.py
|
|
```
|
|
|
|
### Code Formatting
|
|
|
|
```bash
|
|
# Format code
|
|
black go_micro_llamaindex tests
|
|
|
|
# Check types
|
|
mypy go_micro_llamaindex
|
|
|
|
# Lint
|
|
ruff check go_micro_llamaindex
|
|
```
|
|
|
|
## Examples
|
|
|
|
See the [examples](./examples) directory for complete examples:
|
|
|
|
- [basic_agent.py](./examples/basic_agent.py) - Simple ReAct agent
|
|
- [rag_with_services.py](./examples/rag_with_services.py) - RAG combined with microservices
|
|
|
|
## Troubleshooting
|
|
|
|
### Gateway Connection Issues
|
|
|
|
If you can't connect to the MCP gateway:
|
|
|
|
1. Verify the gateway is running:
|
|
```bash
|
|
curl http://localhost:3000/health
|
|
```
|
|
|
|
2. Check the gateway URL is correct
|
|
3. Verify firewall settings
|
|
|
|
### Authentication Errors
|
|
|
|
If you get authentication errors:
|
|
|
|
1. Verify your token is valid
|
|
2. Check the token has required scopes
|
|
3. Review gateway logs for details
|
|
|
|
### Tool Discovery Issues
|
|
|
|
If tools aren't being discovered:
|
|
|
|
1. List services from gateway:
|
|
```bash
|
|
curl http://localhost:3000/mcp/tools
|
|
```
|
|
|
|
2. Verify services are registered
|
|
3. Check service metadata is correct
|
|
|
|
## Contributing
|
|
|
|
Contributions are welcome! Please see [CONTRIBUTING.md](../../CONTRIBUTING.md) for details.
|
|
|
|
## License
|
|
|
|
Apache 2.0 - See [LICENSE](../../LICENSE) for details.
|
|
|
|
## Links
|
|
|
|
- [Go Micro](https://github.com/micro/go-micro)
|
|
- [MCP Documentation](../../gateway/mcp/DOCUMENTATION.md)
|
|
- [LlamaIndex](https://docs.llamaindex.ai/)
|
|
- [Issue Tracker](https://github.com/micro/go-micro/issues)
|
|
|
|
## Support
|
|
|
|
- GitHub Discussions: https://github.com/micro/go-micro/discussions
|
|
- Discord: https://discord.gg/WeMU5AGxD
|