File size: 4,758 Bytes
a6a67f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/env python3
"""
Hugging Face Vectara 模型访问配置
解决 Vectara 幻觉检测模型的权限问题

使用方法:
1. python configure_huggingface.py
2. 按照提示进行 Hugging Face 登录和模型访问权限申请
"""

import os
import subprocess
import sys

def check_huggingface_login():
    """检查是否已登录 Hugging Face"""
    try:
        result = subprocess.run(
            ["huggingface-cli", "whoami"],
            capture_output=True,
            text=True,
            timeout=10
        )
        return result.returncode == 0
    except (subprocess.TimeoutExpired, FileNotFoundError):
        return False

def login_huggingface():
    """登录 Hugging Face"""
    print("🔐 需要登录 Hugging Face 才能访问 Vectara 模型")
    print("\n📋 登录步骤:")
    print("1. 访问 https://huggingface.co/join 注册账户(如果还没有)")
    print("2. 访问 https://huggingface.co/settings/tokens 获取访问令牌")
    print("3. 运行以下命令登录:")
    print("   huggingface-cli login")
    
    choice = input("\n是否现在尝试登录? (y/n): ").lower().strip()
    if choice == 'y':
        try:
            subprocess.run(["huggingface-cli", "login"], check=True)
            print("✅ Hugging Face 登录成功!")
            return True
        except subprocess.CalledProcessError:
            print("❌ 登录失败,请手动执行: huggingface-cli login")
            return False
        except FileNotFoundError:
            print("❌ 未找到 huggingface-cli,请安装: pip install huggingface_hub")
            return False
    return False

def check_model_access():
    """检查是否可以访问 Vectara 模型"""
    print("\n🔍 检查 Vectara 模型访问权限...")
    
    try:
        from transformers import AutoTokenizer
        tokenizer = AutoTokenizer.from_pretrained("vectara/hallucination_evaluation_model")
        print("✅ 可以访问 Vectara 模型!")
        return True
    except Exception as e:
        print(f"❌ 无法访问 Vectara 模型: {e}")
        print("\n📋 需要完成以下步骤:")
        print("1. 访问: https://huggingface.co/vectara/hallucination_evaluation_model")
        print("2. 点击页面上的 'Agree and access repository' 按钮")
        print("3. 确保已登录 Hugging Face 账户")
        return False

def update_config_disable_vectara():
    """更新配置,禁用 Vectara 模型,使用 NLI 方法"""
    print("\n⚙️ 更新配置,禁用 Vectara 模型...")
    
    config_file = "hallucination_config.py"
    if os.path.exists(config_file):
        # 读取原始配置
        with open(config_file, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # 备份原始配置
        with open(f"{config_file}.backup", 'w', encoding='utf-8') as f:
            f.write(content)
        
        # 修改配置,只使用 NLI 方法
        updated_content = content.replace(
            'HALLUCINATION_DETECTION_METHOD = "hybrid"',
            'HALLUCINATION_DETECTION_METHOD = "nli"'
        )
        
        # 保存更新后的配置
        with open(config_file, 'w', encoding='utf-8') as f:
            f.write(updated_content)
        
        print("✅ 配置已更新,将使用 NLI 幻觉检测方法")
        return True
    else:
        print(f"❌ 未找到配置文件: {config_file}")
        return False

def main():
    """主函数"""
    print("="*60)
    print("🔧 Hugging Face Vectara 模型访问配置")
    print("="*60)
    
    # 1. 检查是否已登录
    if not check_huggingface_login():
        print("\n⚠️ 未检测到 Hugging Face 登录状态")
        if not login_huggingface():
            print("\n❌ 无法完成登录,将使用备选方案")
            update_config_disable_vectara()
            return
    
    # 2. 检查模型访问权限
    if not check_model_access():
        print("\n❌ 无法访问 Vectara 模型")
        
        choice = input("\n选择解决方案:\n1. 手动申请模型访问权限后重试\n2. 禁用 Vectara,使用 NLI 方法\n\n请输入选择 (1/2): ").strip()
        
        if choice == "1":
            print("\n📋 手动申请步骤:")
            print("1. 访问: https://huggingface.co/vectara/hallucination_evaluation_model")
            print("2. 登录您的 Hugging Face 账户")
            print("3. 点击 'Agree and access repository' 按钮")
            print("4. 重新运行此脚本验证")
        elif choice == "2":
            update_config_disable_vectara()
        else:
            print("❌ 无效选择")
    else:
        print("\n✅ 所有检查通过,可以使用 Vectara 模型!")

if __name__ == "__main__":
    main()