请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

传参config时发送set_run_config错误

Model.py QwenLLM定义
class QwenLLM(LLM):
    client: Optional[Any] = None

    def __init__(self):
        super().__init__()

        self.client = OpenAI(
            # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
            api_key=,
            base_url=
        )

    def _call(self,
              prompt: str,
              stop: Optional[List[str]] = None,
              run_manager: Optional[CallbackManagerForLLMRun] = None,
              model="qwen2.5-72b-instruct",
              **kwargs: Any):
        completion = self.client.chat.completions.create(model=model,
                                                         messages=prompt,
                                                         temperature=kwargs.get('temperature', 0.1),
                                                         top_p=kwargs.get('top_p', 0.9),
                                                         max_tokens=kwargs.get('max_tokens', 4096),
                                                         stream=kwargs.get('stream', False))

        return completion.choices[0].message.content

    @property
    def _llm_type(self) -> str:
        return "qwen2.5-72b-instruct"

评估模型
result = evaluate(
    dataset = dataset,
    llm=eval_llm,
    embeddings=eval_embedding_fn,
    metrics=[
        context_precision,
        context_recall,
        faithfulness,
        answer_relevancy,
    ],
    raise_exceptions=True,
    run_config=config
)

df = result.to_pandas()

报错

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[19], line 1
----> 1 result = evaluate(
      2     dataset = dataset,
      3     llm=eval_llm,
      4     embeddings=eval_embedding_fn,
      5     metrics=[
      6         context_precision,
      7         context_recall,
      8         faithfulness,
      9         answer_relevancy,
     10     ],
     11     raise_exceptions=True,
     12     run_config=config
     13 )
     15 df = result.to_pandas()

File D:\Anaconda\envs\ai\lib\site-packages\ragas\_analytics.py:227, in track_was_completed.<locals>.wrapper(*args, **kwargs)
    224 @wraps(func)
    225 def wrapper(*args: P.args, **kwargs: P.kwargs) -> t.Any:
    226     track(IsCompleteEvent(event_type=func.__name__, is_completed=False))
--> 227     result = func(*args, **kwargs)
    228     track(IsCompleteEvent(event_type=func.__name__, is_completed=True))
    230     return result

File D:\Anaconda\envs\ai\lib\site-packages\ragas\evaluation.py:216, in evaluate(dataset, metrics, llm, embeddings, experiment_name, callbacks, run_config, token_usage_parser, raise_exceptions, column_map, show_progress, batch_size, _run_id, _pbar)
    213             answer_correctness_is_set = i
    215     # init all the models
--> 216     metric.init(run_config)
    218 executor = Executor(
    219     desc="Evaluating",
    220     keep_progress_bar=True,
   (...)
    225     pbar=_pbar,
    226 )
    228 # Ragas Callbacks
    229 # init the callbacks we need for various tasks

File D:\Anaconda\envs\ai\lib\site-packages\ragas\metrics\base.py:227, in MetricWithLLM.init(self, run_config)
    223 if self.llm is None:
    224     raise ValueError(
    225         f"Metric '{self.name}' has no valid LLM provided (self.llm is None). Please initantiate a the metric with an LLM to run."  # noqa
    226     )
--> 227 self.llm.set_run_config(run_config)

File D:\Anaconda\envs\ai\lib\site-packages\pydantic\_internal\_model_construction.py:264, in ModelMetaclass.__getattr__(self, item)
    262 if private_attributes and item in private_attributes:
    263     return private_attributes[item]
--> 264 raise AttributeError(item)

AttributeError: set_run_config

正在回答 回答被采纳积分+3

2回答

阿基米口 2025-03-13 17:23:24

你好,请提供下ragas的版本,课程中ragas版本是0.1.15, 最好是严格按照课程安装环境进行安装 rag_requirement.txt

import ragas
print(ragas.__version__)


看你的错误代码,版本应该是0.2.x 以上的

ragas版本的更新太快了,开源软件的版本兼容新会差一些。

先确认下你的版本,我再看下这个版本下的情况

1 回复 有任何疑惑可以回复我~
  • 提问者 晓宇5288 #1
    是的,老师我的ragas版本是0.2.14
    回复 有任何疑惑可以回复我~ 2025-03-13 20:38:53
  • 阿基米口 回复 提问者 晓宇5288 #2
    我先试下你这个版本,0.2.x版本和0.1.x版本还是有差异的。还有你的langchain是什么版本?
    如果着急的话你可以退到0.1.15版本
    回复 有任何疑惑可以回复我~ 2025-03-13 20:46:21
  • 提问者 晓宇5288 回复 阿基米口 #3
    回复 阿基米口:langchain==0.3.20,我先继续往下学习
    回复 有任何疑惑可以回复我~ 2025-03-13 21:04:53
阿基米口 2025-03-14 15:20:36

可以参考下百炼API的大模型封装

class QwenLLMOnline(LLM):
    client: Optional[Any] = None
    def __init__(self):
        super().__init__()
        self.client = OpenAI(base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
                             api_key="sk-xxx")

        
    def _call(self, 
              prompt : str, 
              stop: Optional[List[str]] = None,
              run_manager: Optional[CallbackManagerForLLMRun] = None,
              **kwargs: Any):

        completion = self.client.chat.completions.create(
                                                    model="qwen-plus", # 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
                                                    messages=[
                                                    {'role': 'system', 'content': 'You are a helpful assistant.'},
                                                    {'role': 'user', 'content': prompt}],
                                                    temperature=kwargs.get('temperature', 0.5),
                                                    top_p=kwargs.get('top_p', 0.9),
                                                    max_tokens=kwargs.get('max_tokens', 4096), 
                                                    stream=kwargs.get('stream', False)
                                         
        )
        return completion.choices[0].message.content
    
    @property
    def _llm_type(self) -> str:
        return "rag_llm_aliyuncs"

看官网message chat 是一个list调用  

https://bailian.console.aliyun.com/?spm=5176.29619931.J__Z58Z6CX7MY__Ll8p1ZOR.1.74cd521cJhgYWZ#/model-market/detail/qwen-max-2025-01-25?tabKey=sdk



https://img1.sycdn.imooc.com/szimg/1262ad6709d3d8b319311134.jpg

0 回复 有任何疑惑可以回复我~
  • 提问者 晓宇5288 #1
    谢谢老师,问题解决了,分享一下经验:我在调试的时候LLM类默认不允许自己添加额外参数,可以model_config = {"extra": "allow"} ,继承LLM后仍能添加字段,提高message灵活性
    回复 有任何疑惑可以回复我~ 2025-03-15 10:54:42
  • 阿基米口 回复 提问者 晓宇5288 #2
    学习了!
    回复 有任何疑惑可以回复我~ 2025-03-17 18:26:36
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号