Web Analytics

proxyless-llm-websearch

⭐ 122 stars Korean by itshyao

🌐 언어

🧠 프록시 없는 LLM 웹 검색 엔진

프록시 없이 다중 검색 엔진을 지원하는 LLM 기반 웹 검색 도구로, URL 내용 분석과 웹 크롤링을 지원합니다. LangGraphLangGraph-MCP를 결합하여 모듈형 에이전트 체인을 구현합니다. 대형 언어 모델의 외부 지식 호출 시나리오에 특화되어 있으며, Playwright + Crawl4AI를 통한 웹 데이터 획득 및 분석, 비동기 동시 처리, 컨텐츠 슬라이싱과 재정렬 필터링을 지원합니다.

🚀 업데이트 로그

✨ 주요 기능 요약

workflow

framework

⚡ 빠른 시작

저장소 클론

git clone https://github.com/itshyao/proxyless-llm-websearch.git
cd proxyless-llm-websearch

의존성 설치

pip install -r requirements.txt
python -m playwright install

환경 변수 구성

# 百炼llm
OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
OPENAI_API_KEY=sk-xxx
MODEL_NAME=qwen-plus-latest

百炼embedding

EMBEDDING_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 EMBEDDING_API_KEY=sk-xxx EMBEDDING_MODEL_NAME=text-embedding-v4

百炼reranker

RERANK_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 RERANK_API_KEY=sk-xxx RERANK_MODEL=gte-rerank-v2

Langgraph-Agent

#### 데모

python agent/demo.py

#### API 제공

python agent/api_serve.py

import requests

url = "http://localhost:8800/search"

data = { "question": "广州今日天气", "engine": "bing", "split": { "chunk_size": 512, "chunk_overlap": 128 }, "rerank": { "top_k": 5 } }

try: response = requests.post( url, json=data )

if response.status_code == 200: print("✅ 请求成功!") print("响应内容:", response.json()) else: print(f"❌ 请求失败,状态码:{response.status_code}") print("错误信息:", response.text)

except requests.exceptions.RequestException as e: print(f"⚠️ 请求异常:{str(e)}")

#### 그라디오

python agent/gradio_demo.py

gradio

gradio

#### docker

docker-compose -f docker-compose-ag.yml up -d --build

Langgrph-MCP

#### MCP 서비스 시작

python mcp/websearch.py

#### 데모

python mcp/demo.py

#### API 제공

python mcp/api_serve.py

import requests

url = "http://localhost:8800/search"

data = { "question": "广州今日天气" }

try: response = requests.post( url, json=data )

if response.status_code == 200: print("✅ 请求成功!") print("响应内容:", response.json()) else: print(f"❌ 请求失败,状态码:{response.status_code}") print("错误信息:", response.text)

except requests.exceptions.RequestException as e: print(f"⚠️ 请求异常:{str(e)}")

#### 도커

docker-compose -f docker-compose-mcp.yml up -d --build

사용자 정의 모듈

#### 사용자 정의 블록

from typing import Optional, List

class YourSplitter: def __init__(self, text: str, chunk_size: int = 512, chunk_overlap: int = 128): self.text = text self.chunk_size = chunk_size self.chunk_overlap = chunk_overlap

def split_text(self, text: Optional[str] = None) -> List: # TODO: implement splitting logic return ["your chunk"]

#### 사용자 지정 재배열

from typing import List, Union, Tuple

class YourReranker: async def get_reranked_documents( self, query: Union[str, List[str]], documents: List[str], ) -> Union[ Tuple[List[str]], Tuple[List[int]], ]: return ["your chunk"], ["chunk index"]

🔍 온라인 네트워크 검색 테스트와의 비교

우리는 프로젝트를 일부 주요 온라인 API와 비교하여 복잡한 문제에 대한 성능을 평가했습니다.

🔥 데이터셋

🧑‍🏫 비교 결과

| 검색엔진/시스템 | ✅ 정답 | ❌ 오답 | ⚠️ 부분 정답 | | -------------- | --------- | ----------- | ------------------- | | 화산방주 | 5.00% | 72.21% | 22.79% | | 백련 | 9.85% | 62.79% | 27.35% | | Our | 19.85% | 47.94% | 32.06% |

🙏 감사의 말씀

본 프로젝트의 일부 기능은 다음 오픈소스 프로젝트의 지원과 영감에 힘입은 바가 있어, 깊이 감사드립니다:

--- Tranlated By Open Ai Tx | Last indexed: 2025-09-08 ---