72c29411创建于 2025年12月30日历史提交
from langchain_core.tools import tool

from utils.common_utils import get_now_time, format_date

from web_apps.rag.extractor.http_url_extractor import HttpUrlExtractor

from web_apps.llm.llm_utils import get_llm





@tool

def get_time(format: str = '%Y-%m-%d %H:%M:%S') -> str:

    '''

    获取当前时间

    '''

    now = get_now_time()

    return format_date(now, format=format)





@tool

def summary_content(content: str, max_length: int = 4000, length: int = 500) -> str:

    '''

    使用大模型输出所给内容的总结摘要

    content: 内容

    max_length: 给大模型的最长内容,超过将会被截断

    length:输出总结内容字数

    '''

    llm = get_llm()

    prompt = f"总结一下内容,生成一篇{length}字左右内容摘要:\n{content[:max_length]}"

    result = llm.invoke(prompt).content

    return result





@tool(return_direct=True)

def get_url_content(url: str, summary_content: bool = False) -> str:

    '''

    请求网络url获取内容

    summary_content: 是否总结内容

    '''

    extractor = HttpUrlExtractor(

        url=url,

        ignore_links=True,

        ignore_images=True

    )

    documents = extractor.extract()

    text = '\n'.join([d.page_content for d in documents])

    if summary_content:

        return summary_content(text)

    else:

        return text





@tool(return_direct=True)

def network_search(keyword: str) -> str:

    '''

    搜索互联网获取相关信息

    keyword: 搜索关键词

    '''

    url = f'https://www.baidu.com/s?wd={keyword}'

    extractor = HttpUrlExtractor(

        url=url,

        ignore_links=True,

        ignore_images=True

    )

    documents = extractor.extract()

    text = '\n'.join([d.page_content for d in documents])

    if '百度为您找到以下结果' in text:

        text = text.split('百度为您找到以下结果')[1]

    if '相关搜索' in text:

        text = text.split('相关搜索')[0]

    llm = get_llm()

    prompt = f"根据用户问题:{keyword} \n 总结一下内容,生成一篇500字左右内容摘要:\n{text[:4000]}"

    result = llm.invoke(prompt).content

    return result





if __name__ == '__main__':

    print(get_time())