Install
openclaw skills install langsearchFree web search and semantic reranking API for AGI applications. Use when you need to perform web searches, retrieve current information from the internet, or improve search accuracy with semantic reranking. Includes integration examples for building RAG (Retrieval-Augmented Generation) pipelines and LLM applications that require real-world context. Requires LANGSEARCH_API_KEY credential.
openclaw skills install langsearchRequired Credentials:
LANGSEARCH_API_KEY - Your free LangSearch API key (required)Security Best Practices:
.env files containing LANGSEARCH_API_KEY to version control.env or set via export LANGSEARCH_API_KEY="..."api.langsearch.comNetwork Access:
https://api.langsearch.com (official LangSearch API)LangSearch provides free APIs for web search and semantic reranking. It combines keyword search precision with vector-based semantic matching, making it ideal for integrating current web information into LLM applications and building RAG systems.
export LANGSEARCH_API_KEY="your-api-key"The simplest way to search the web using LangSearch:
import requests
import json
import os
api_key = os.getenv("LANGSEARCH_API_KEY")
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
query = "latest AI developments 2025"
payload = {
"query": query,
"count": 5,
"summary": True
}
response = requests.post(
"https://api.langsearch.com/v1/web-search",
headers=headers,
json=payload
)
results = response.json()
print(json.dumps(results, indent=2))
Or using cURL:
curl -X POST https://api.langsearch.com/v1/web-search \
-H "Authorization: Bearer $LANGSEARCH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "latest AI developments 2025",
"count": 5,
"summary": true
}'
The web search endpoint retrieves information from billions of web documents using hybrid search (keyword + vector matching) with optional summaries.
POST https://api.langsearch.com/v1/web-search
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | The search query |
count | integer | No | Number of results to return (default: 10, max: 100) |
summary | boolean | No | Include markdown summaries in results (default: false) |
freshness | string | No | Filter results by freshness (day, week, month, year) |
The API returns an array of search results with:
title - Result titleurl - Result URLsnippet - Text excerpt from the pagesummary - Markdown formatted summary (if summary: true in request)score - Relevance scoreCurrent Information Retrieval When your LLM needs up-to-date information:
# Search for recent developments
response = requests.post(
"https://api.langsearch.com/v1/web-search",
headers=headers,
json={
"query": "Python 3.14 release notes",
"count": 3,
"summary": True,
"freshness": "week"
}
)
Multi-Query Research Build context from multiple searches:
queries = [
"climate change mitigation strategies",
"renewable energy trends 2025",
"carbon capture technology"
]
all_results = []
for query in queries:
response = requests.post(
"https://api.langsearch.com/v1/web-search",
headers=headers,
json={"query": query, "count": 5, "summary": True}
)
all_results.extend(response.json())
Improve search accuracy by reranking results based on semantic relevance to your query.
POST https://api.langsearch.com/v1/rerank
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | The search query for context |
documents | array | Yes | Array of documents to rerank (each with title, text, etc.) |
model | string | No | Reranking model (default: langsearch-rerank-1) |
top_n | integer | No | Number of top results to return (default: 10) |
return_documents | boolean | No | Include full documents in response (default: false) |
# Get initial search results
search_response = requests.post(
"https://api.langsearch.com/v1/web-search",
headers=headers,
json={"query": "machine learning deployment best practices", "count": 10}
)
search_results = search_response.json()
# Prepare documents for reranking
documents = [
{"title": r.get("title", ""), "text": r.get("snippet", "")}
for r in search_results
]
# Rerank for better relevance
rerank_response = requests.post(
"https://api.langsearch.com/v1/rerank",
headers=headers,
json={
"query": "best practices for deploying ML models in production",
"documents": documents,
"top_n": 5
}
)
reranked = rerank_response.json()
Combine web search with LLM context for better information retrieval and generation:
def rag_query(user_question):
# Step 1: Search the web for relevant information
search_response = requests.post(
"https://api.langsearch.com/v1/web-search",
headers=headers,
json={
"query": user_question,
"count": 5,
"summary": True
}
)
search_results = search_response.json()
# Step 2: Extract summaries and URLs for context
context = "\n".join([
f"- {r['title']}: {r.get('summary', r.get('snippet', ''))}"
for r in search_results
])
# Step 3: Use with your LLM
# This is where you'd call your LLM with the context
rag_context = f"""
Based on recent web search results:
{context}
Answer the user's question: {user_question}
"""
return rag_context, search_results
Common HTTP status codes:
| Status | Meaning | Action |
|---|---|---|
| 200 | Success | Results returned normally |
| 401 | Unauthorized | Check API key is valid and set correctly |
| 429 | Rate limited | Retry with exponential backoff |
| 500 | Server error | Retry the request later |
See scripts/web_search_example.py for a complete example with error handling.
This skill includes example resource directories that demonstrate how to organize different types of bundled resources:
Executable code (Python/Bash/etc.) that can be run directly to perform specific operations.
Examples from other skills:
fill_fillable_fields.py, extract_form_field_info.py - utilities for PDF manipulationdocument.py, utilities.py - Python modules for document processingAppropriate for: Python scripts, shell scripts, or any executable code that performs automation, data processing, or specific operations.
Note: Scripts may be executed without loading into context, but can still be read by Claude for patching or environment adjustments.
Documentation and reference material intended to be loaded into context to inform Claude's process and thinking.
Examples from other skills:
communication.md, context_building.md - detailed workflow guidesAppropriate for: In-depth documentation, API references, database schemas, comprehensive guides, or any detailed information that Claude should reference while working.
Files not intended to be loaded into context, but rather used within the output Claude produces.
Examples from other skills:
Appropriate for: Templates, boilerplate code, document templates, images, icons, fonts, or any files meant to be copied or used in the final output.
Any unneeded directories can be deleted. Not every skill requires all three types of resources.